New · Self-serve audits are live — real Claude Code & Cursor runs against your MCP server, SDK, or CLI →
B70/100

Static pre-check · Fri, 07 Aug 2026 06:52:10 GMT

expensify.com

AI agents struggle to discover integration points and access documentation; the site lacks llms.txt and homepage-linked docs needed for autonomous interaction.

15 pass · 9 warn · 2 fail · 16 n/a
Discovery
15.7/20
Accessibility
24.7/30
Usability
20/40
Payments
10/10

Discovery 15.7/20

  • Documentation linked from the homepagedetailsFAIL

    no link to documentation found in the homepage HTML

    Fix: Link your docs from the homepage with visible anchor text ("Docs", "Documentation", "Developers"). An agent that cannot find your docs from your homepage will guess your API.

  • API reference linked from the homepagedetailsWARN

    no link to an API reference in the homepage HTML

    Fix: If you have an API, link its reference from the homepage. If you don't, this check is safe to ignore.

  • Open Graph tags presentdetailsWARN

    no Open Graph tags

    Fix: Add og:title and og:description meta tags.

  • Canonical URL declareddetailsPASS

    https://www.expensify.com/

  • Homepage has a meta descriptiondetailsPASS

    159 characters

  • Homepage has a descriptive titledetailsPASS

    'Spend Management Software for Receipts & Expenses | Expensify' (61 chars)

  • robots.txt allows agent crawlersdetailsPASS

    all 6 agent crawlers may fetch /

  • robots.txt existsdetailsPASS

    HTTP 200, 480 bytes

  • robots.txt points at the sitemapdetailsPASS

    robots.txt has a Sitemap: line

  • sitemap.xml exists and parsesdetailsPASS

    1 URL(s) listed

  • Brand findable in agent searchdetailsN/A

    search-based checks are deferred — excluded from the score

  • Listed in an MCP registrydetailsN/A

    registry lookup not implemented in v1 — excluded from the score rather than guessed

Accessibility 24.7/30

  • llms.txt is publisheddetailsFAIL

    /llms.txt not served (HTTP 404)

    Fix: Publish /llms.txt: a plain-markdown index that tells an agent what this product is and where the authoritative docs live. It is the cheapest high-leverage file you can add.

  • llms-full.txt is publisheddetailsWARN

    /llms-full.txt not served

    Fix: Optional but cheap: publish /llms-full.txt with your docs inlined as one markdown file, so an agent can read everything in a single fetch.

  • Serves markdown when asked for itdetailsWARN

    Accept: text/markdown → text/html; charset=UTF-8

    Fix: Optional but increasingly expected: honour `Accept: text/markdown` by serving a markdown rendering of the page, so agents skip HTML parsing entirely.

  • Homepage responds to an agent requestdetailsPASS

    HTTP 200 for / (agent UA)

  • Served over HTTPSdetailsPASS

    https://www.expensify.com/

  • Structured data (JSON-LD) on the homepagedetailsPASS

    1 valid block(s)

  • Same response for agents and browsersdetailsPASS

    both User-Agents got HTTP 200

  • Homepage has readable text without JavaScriptdetailsPASS

    12321 characters of text in the served HTML

  • Content-to-markup ratio is reasonabledetailsPASS

    ratio 0.1026 (12321 chars of 120105)

  • No long redirect chain on the homepagedetailsPASS

    1 redirect(s)

  • Docs are readable without JavaScriptdetailsN/A

    /docs not served (HTTP 404) — docs may live on another path or host

  • Links in llms.txt resolvedetailsN/A

    no llms.txt

  • llms.txt is structured markdowndetailsN/A

    no llms.txt to parse

Usability 20/40

  • agents.md is publisheddetailsWARN

    /agents.md not served (HTTP 404)

    Fix: Publish /agents.md: what an agent may do here, which endpoints matter, auth requirements, and rate limits. It is the agent-facing counterpart to a README.

  • A documentation endpoint respondsdetailsWARN

    /docs → HTTP 404

    Fix: Serve docs at the conventional /docs path, or redirect it to wherever they live. Agents try conventional paths first.

  • Errors are machine-readabledetailsWARN

    404 returns HTML, not a machine-readable body

    Fix: Content-negotiate your errors: return a JSON body with a stable `code` (and a `next_action` where recovery exists) to clients that ask for JSON.

  • OpenAPI document publisheddetailsWARN

    /openapi.json not served (HTTP 404)

    Fix: If you have an HTTP API, publish its OpenAPI document at a predictable path (/openapi.json). It is the difference between an agent reading your contract and an agent guessing it. If you have no HTTP API, ignore this.

  • .well-known/mcp.json advertises an MCP serverdetailsWARN

    /.well-known/mcp.json not served (HTTP 404)

    Fix: If you run an MCP server, advertise it at /.well-known/mcp.json so agents discover it without being told its URL.

  • The /api root behaves predictablydetailsN/A

    /api → HTTP 403 (no API at the conventional root)

  • MCP server completes the initialize handshakedetailsN/A

    no MCP endpoint found to probe (none in the input URL and none advertised at /.well-known/mcp.json)

  • MCP tool parameters are typed and describeddetailsN/A

    no listed MCP tools to inspect

  • Every MCP tool has a descriptiondetailsN/A

    no listed MCP tools to inspect

  • MCP server lists toolsdetailsN/A

    no MCP endpoint to probe

  • OpenAPI declares its auth schemedetailsN/A

    no parseable OpenAPI document

  • OpenAPI operations are describeddetailsN/A

    no parseable OpenAPI document

  • OpenAPI documents error responsesdetailsN/A

    no parseable OpenAPI document

  • OpenAPI document is structurally validdetailsN/A

    no parseable OpenAPI document

Payments 10/10

  • Declares AP2 / ACP supportdetailsPASS

    marker(s) found: ap2

  • Serves a 402 payment challengedetailsN/A

    no agent-payment rail published — not applicable. This layer is excluded from the score rather than counted against the site.

  • Publishes x402 payment metadatadetailsN/A

    no agent-payment rail published — not applicable. This layer is excluded from the score rather than counted against the site.

Badge

Shows the current scan score and grade for this domain, straight from the latest static pre-check.

agent readiness badge for expensify.com
[![agent ready](/api/badge/expensify.com)](/score/expensify.com)
<a href="/score/expensify.com"><img src="/api/badge/expensify.com" alt="agent readiness score" /></a>