Skip to content

How Fastmail’s scores are calculated

The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.

verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10

PA Score14/100

Agent-ready 20.6 × 0.30 = 6.18

API quality 6.9 × 0.20 = 1.38

Openness 13.2 × 0.20 = 2.64

Built-in AI 6.7 × 0.15 = 1.00

Automation 18.8 × 0.15 = 2.82

(6.18 + 1.38 + 2.64 + 1.00 + 2.82) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 14.03 ÷ 1.00 = 14.0

Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.

Agent-ready20.6/100×0.30 of the PA blend

Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.

Point an agent at llms.txt or agent-oriented docsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

Run the product headlessly / in CI for automationweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://jmap.ioStandard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement. Works with what you already have.
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [community] https://hn.algolia.com/api/v1/items/33001391I just use SMTP for this (with FastMail). FastMail is not really intended for [transactional emails at scale] as the limits and the like don't really scale to large services, but overall it works well enough (you can create an 'app password' which can only access SMTP).

Plug MCP servers into this product so it can use their toolsweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Connect an agent via an official MCP serverweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

Use an official CLIweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Drive the product through a documented public APIweight 3

3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://jmap.ioStandard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement. Works with what you already have.
  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.
  • [claimed-docs] https://jmap.ioSync changes more easily, more efficiently, and much, much faster. A single HTTP roundtrip is often all that's required.
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [claimed-docs] https://jmap.ioPOST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [claimed-docs] https://jmap.ioStandard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement.

Issue scoped/least-privilege API credentials for an agentweight 2

2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max

  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens – Fastmail
  • [claimed-docs] https://jmap.ioStandard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement. Works with what you already have.
  • [claimed-docs] https://jmap.ioStandard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement.
  • [community] https://hn.algolia.com/api/v1/items/33001391I just use SMTP for this (with FastMail). FastMail is not really intended for [transactional emails at scale] as the limits and the like don't really scale to large services, but overall it works well enough (you can create an 'app password' which can only access SMTP).

Build against official SDKsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

Subscribe to events via webhooksweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.
  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes.
  • [claimed-docs] https://jmap.ioPOST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation

Agent-ready = 43.2 ÷ 210 × 100 = 20.6

API quality6.9/100×0.20 of the PA blend

The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.

Explore an interactive API reference with runnable examplesweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

Download a machine-readable API spec (OpenAPI or equivalent)weight 2

2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

Test against a sandbox environment without touching production dataweight 1

1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Rely on versioned APIs with a documented deprecation policyweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)

API quality = 4.8 ÷ 70 × 100 = 6.9

Openness13.2/100×0.20 of the PA blend

Can you leave, inspect, or self-host — data export, open source, portability.

Do everything through the API that I can do in the UIweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://jmap.ioSync changes more easily, more efficiently, and much, much faster. A single HTTP roundtrip is often all that's required.
  • [claimed-docs] https://jmap.ioPOST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/4406536368911-Masked-EmailMasked Email
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://www.fastmail.com/features/Snooze messages to just when you need them. Whether it’s tickets to that stadium gig in September, or a bill due next Thursday, sometimes you receive an email now that you need to see then.

Export all of my data in open formats and leaveweight 3

3 (weight) × 4 (quality) × 0.6 (partial) = 7.2 of 30 max

  • [claimed-docs] https://jmap.ioJMAP is an open standard any organisation can implement, not more proprietary lock-in from big tech companies.
  • [claimed-docs] https://www.fastmail.com/company/open-source/Open source and standards | Fastmail
  • [claimed-docs] https://jmap.ioFetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.
  • [claimed-docs] https://www.fastmail.com/dev/API Documentation
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/360058753594-Import-your-mailImport your mail

Read the product's source under an open licenseweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.fastmail.com/company/open-source/Open source and standards | Fastmail
  • [claimed-docs] https://jmap.ioJMAP is an open standard any organisation can implement, not more proprietary lock-in from big tech companies.

Self-host the core productweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Openness = 13.2 ÷ 100 × 100 = 13.2

Built-in AI6.7/100×0.15 of the PA blend

Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.

Get AI-generated insights and suggestions from my data inside the productweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Set up automations that run autonomously in the backgroundweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules – Fastmail
  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.
  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes.
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokensAPI tokens – Fastmail
  • [claimed-docs] https://jmap.ioPOST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.

Delegate tasks to a built-in AI assistant inside the productweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

no evidence cited — the verdict rests on absence of evidence, re-checked on refresh

Operate the product with natural-language commandsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://www.fastmail.help/llms.txtPROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt
  • [probe] https://www.fastmail.help/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.fastmail.help/openapi.json, https://www.fastmail.help/swagger.json, https://www.fastmail.help/api/openapi.json, https://www.fastmail.help/.well-known/openapi.json)
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/360058753534-Keyboard-shortcutsKeyboard shortcuts

Built-in AI = 6.0 ÷ 90 × 100 = 6.7

Automation18.8/100×0.15 of the PA blend

Depth of automation primitives — rules, scheduling, bulk operations, webhooks.

Perform bulk operations across many items at onceweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://jmap.ioPOST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://jmap.ioSync changes more easily, more efficiently, and much, much faster. A single HTTP roundtrip is often all that's required.

Define rules that trigger actions automatically on eventsweight 3

3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max

  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules – Fastmail
  • [claimed-docs] https://jmap.ioGet instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.
  • [community] https://hn.algolia.com/api/v1/items/49334409Fastmail has an easy migration tool as well if you don't want to go the IMAP route. Now, migrating filters and rules over on the other hand...

Schedule recurring jobs or workflowsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/4686576659727-Scheduled-SendScheduled Send
  • [claimed-docs] https://www.fastmail.com/features/Snooze messages to just when you need them. Whether it’s tickets to that stadium gig in September, or a bill due next Thursday, sometimes you receive an email now that you need to see then.

Version, review, and roll back my automationsweight 1

1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max

  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules
  • [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-RulesFilters & Rules – Fastmail

Automation = 15.0 ÷ 80 × 100 = 18.8