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.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Fetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.”
- [claimed-docs] https://jmap.io“Standard 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-tokens“API tokens”
- [claimed-docs] https://www.fastmail.com/dev/“API Documentation”
- [community] https://hn.algolia.com/api/v1/items/33001391“I 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.io“Fetch `/.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-tokens“API tokens”
- [probe] https://www.fastmail.help/llms.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Fetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.”
- [claimed-docs] https://jmap.io“Standard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement. Works with what you already have.”
- [claimed-docs] https://jmap.io“Get instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.”
- [claimed-docs] https://jmap.io“Sync 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-tokens“API tokens”
- [claimed-docs] https://jmap.io“POST 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.io“Standard 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-tokens“API tokens”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokens“API tokens – Fastmail”
- [claimed-docs] https://jmap.io“Standard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement. Works with what you already have.”
- [claimed-docs] https://jmap.io“Standard OAuth 2.0 or Bearer tokens. No custom auth protocol to implement.”
- [community] https://hn.algolia.com/api/v1/items/33001391“I 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-tokens“API tokens”
- [probe] https://www.fastmail.help/llms.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Get instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.”
- [claimed-docs] https://jmap.io“Get instant push via EventSource — one connection, all mailboxes.”
- [claimed-docs] https://jmap.io“POST 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.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Fetch `/.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.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Fetch `/.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.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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.io“Fetch `/.well-known/jmap` for the session object - capabilities, accounts, and all API URLs.”
- [claimed-docs] https://jmap.io“Sync changes more easily, more efficiently, and much, much faster. A single HTTP roundtrip is often all that's required.”
- [claimed-docs] https://jmap.io“POST 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-Email“Masked Email”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-Rules“Filters & 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.io“JMAP 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.io“Fetch `/.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-mail“Import 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.io“JMAP 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-Rules“Filters & Rules”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-Rules“Filters & Rules – Fastmail”
- [claimed-docs] https://jmap.io“Get instant push via EventSource — one connection, all mailboxes. Or use WebPush for mobile-compatible push, no permanent connection required.”
- [claimed-docs] https://jmap.io“Get instant push via EventSource — one connection, all mailboxes.”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokens“API tokens”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokens“API tokens – Fastmail”
- [claimed-docs] https://jmap.io“POST 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.txt“PROBE llms.txt: HTTP 404 at https://www.fastmail.help/llms.txt”
- [probe] https://www.fastmail.help/openapi.json“PROBE 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-shortcuts“Keyboard 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.io“POST a `methodCalls` array. Query, fetch, and send, all in one HTTP request.”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-Rules“Filters & Rules”
- [claimed-docs] https://jmap.io“Sync 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-Rules“Filters & Rules”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-Rules“Filters & Rules – Fastmail”
- [claimed-docs] https://jmap.io“Get 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/49334409“Fastmail 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-Rules“Filters & Rules”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/4686576659727-Scheduled-Send“Scheduled 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-Rules“Filters & Rules”
- [claimed-docs] https://www.fastmail.help/hc/en-us/articles/1500000278122-Filters-Rules“Filters & Rules – Fastmail”
Automation = 15.0 ÷ 80 × 100 = 18.8