{"slug":"functionhealth-ndmhqy","companyName":"Function Health","domain":"functionhealth.com","url":"https://functionhealth.com","headline":"AI agents cannot discover or access the API, and the network edge blocks crawlers that robots.txt welcomes.","compositeScore":51,"humanScore":58,"agentScore":43,"doorGap":15,"humanMeasured":4,"agentMeasured":6,"percentile":16,"humanPercentile":16,"agentPercentile":34,"isPartial":false,"depth":"free","siteClass":"b2b_saas","scannerVersion":12,"scannedAt":"2026-09-08T14:38:58.862Z","unlocked":false,"mission":{"steps":[{"url":"https://www.functionhealth.com","outcome":"ok","purpose":"reach the site at all"},{"url":"https://www.functionhealth.com/robots.txt","outcome":"ok","purpose":"find out whether machines are welcome"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"ask whether the door opens for requests carrying the AI crawlers' names"},{"url":"https://www.functionhealth.com/llms.txt","outcome":"missing","purpose":"read the site's own guide for language models"},{"url":"https://www.functionhealth.com/sitemap.xml","outcome":"ok","purpose":"find out what pages exist"},{"url":"https://www.functionhealth.com/.well-known/security.txt","outcome":"missing","purpose":"find a contact route for machines"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"find a published agent interface"},{"url":"https://www.functionhealth.com/.well-known/ai-plugin.json","outcome":"missing","purpose":"find an agent plugin manifest"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"find out whether verified agents are recognised"},{"url":"https://www.functionhealth.com","outcome":"ok","purpose":"read the homepage as data rather than as a page"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"find a machine readable API spec"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"read the developer documentation"},{"url":"https://www.functionhealth.com/pricing","outcome":"ok","purpose":"read the prices without running JavaScript"},{"url":"https://www.functionhealth.com","outcome":"missing","purpose":"find a comparison page worth citing"},{"url":"https://my.functionhealth.com/signup?_saasquatch=_____","outcome":"ok","purpose":"walk the way a visitor would, to a signup form or a product"}],"verdict":"The agent got through 6 of 15 requests, but could not ask whether the door opens for requests carrying the AI crawlers' names. It came up empty on 8 other checks too. That is enough missing for a machine to give up before it reaches a purchase."},"observations":null,"dimensions":[{"key":"machine_discoverability","audience":"agent","score":57,"summary":"Robots.txt blocks 7 training crawlers (gptbot, claudebot, google-extended, ccbot, applebot-extended, meta-externalagent, bytespider) while welcoming search and agent crawlers.","evidence":{"locked":true,"count":4}},{"key":"programmatic_onboarding","audience":"agent","score":10,"summary":"No API documentation is linked from the homepage. No OpenAPI spec exists at any of the 6 standard paths checked. No MCP manifest, OAuth metadata, or pricing.md is published.","evidence":{"locked":true,"count":3}},{"key":"pricing_legibility","audience":"agent","score":85,"summary":"10 prices are readable in raw HTML without JavaScript, ranging from $1 to $15,000. No tier is gated behind a sales contact or demo request. Prices are published on the pricing page with clear per-month or per-seat terms.","evidence":{"locked":true,"count":1}},{"key":"agent_aware_instrumentation","audience":"agent","score":0,"summary":"No MCP manifest is published at any of the 3 standard paths. Robots.txt blocks 7 AI crawlers by name, including gptbot and claudebot. No ai-plugin.json or llms.txt is present.","evidence":{"locked":true,"count":4}},{"key":"machine_fetchable_trust","audience":"agent","score":40,"summary":"No security.txt is published at /.well-known/security.txt. The homepage answers automated requests and publishes an Organization schema with a ContactPoint.","evidence":{"locked":true,"count":2}},{"key":"commercial_rails","audience":"agent","score":65,"summary":"Prices are published in raw HTML on the pricing page. A self-serve signup form is reachable from the homepage in 2 steps and asks for 11 fields, 5 required, with no payment card requested. The form does not gate access to a trial.","evidence":{"locked":true,"count":2}},{"key":"steps_to_first_value","audience":"human","score":80,"summary":"The primary call to action, 'Start testing', is 2 steps from the homepage and leads to a signup form. The form does not require payment or email verification before submission.","evidence":{"locked":true,"count":1}},{"key":"required_fields","audience":"human","score":45,"summary":"The signup form has 11 fields total. 5 are required: Email, First name, Last name, Phone number, and Date of birth. The remaining 6 are optional. A visitor must provide personal information to proceed, but the form does not demand company.","evidence":{"locked":true,"count":1}},{"key":"verification_walls","audience":"human","score":65,"summary":"No verification requirement is visible on the signup page itself. The form does not display copy about email confirmation, phone verification, or identity checks before submission.","evidence":{"locked":true,"count":1}},{"key":"error_recovery","audience":"human","score":43,"summary":"2 of 12 form inputs carry validation rules. The form includes 2 live regions for error messaging. No inline error containers are present on the page.","evidence":{"locked":true,"count":1}}],"issues":[{"rank":1,"title":"The network edge refuses 2 declared AI crawlers that robots.txt welcomes, so the published policy and the actual behaviour disagree.","dimensionKey":"machine_discoverability","evidence":{"locked":true,"count":3},"fix":null},{"rank":2,"title":"No developer documentation is linked from the homepage, in raw HTML or the rendered page, so integration starts with a search engine.","dimensionKey":"programmatic_onboarding","evidence":{"locked":true,"count":1},"fix":null},{"rank":3,"title":"robots.txt blocks 7 AI crawlers, so those assistants cannot read this site at all.","dimensionKey":"machine_discoverability","evidence":{"locked":true,"count":1},"fix":null}],"fixArtifacts":{"locked":true,"count":7,"summaries":[{"id":"software_offer_jsonld:pricing-page","kind":"software_offer_jsonld","title":"Pricing as Offer structured data","path":"pricing page","effort":{"minutes":20,"role":"developer"},"outcome":{"dimension":"pricing_legibility","external":["Assistants comparing vendors read the plans and prices as Offer structured data."]}},{"id":"bot_wall_guidance:notes","kind":"bot_wall_guidance","title":"Let verified assistants through","path":"notes","effort":{"minutes":60,"role":"developer"},"outcome":{"dimension":"machine_discoverability","external":["Assistant shopping and search crawlers reach the product, pricing and policy pages a buyer asks about."]}},{"id":"comparison_page_brief:compare-function-health-vs-competitor","kind":"comparison_page_brief","title":"A comparison page brief","path":"/compare/function-health-vs-competitor","effort":{"minutes":180,"role":"owner"},"outcome":{"dimension":"machine_discoverability","external":["A server-rendered comparison page exists for an assistant to cite."]}},{"id":"interfaces_note:notes","kind":"interfaces_note","title":"Machine interfaces: where you stand","path":"notes","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"agent_aware_instrumentation","external":["The developer surface is built in an order where every published pointer answers."]}},{"id":"pricing_md:pricing-md","kind":"pricing_md","title":"pricing.md","path":"/pricing.md","effort":{"minutes":20,"role":"owner"},"outcome":{"dimension":"agent_aware_instrumentation","external":["Agents read the price list directly instead of rendering the pricing page."]}},{"id":"security_txt:well-known-security-txt","kind":"security_txt","title":"security.txt","path":"/.well-known/security.txt","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"machine_fetchable_trust","external":["Researchers and automated scanners find a disclosure address instead of guessing one."]}},{"id":"llms_txt:llms-txt","kind":"llms_txt","title":"llms.txt","path":"/llms.txt","effort":{"minutes":15,"role":"owner"},"outcome":{"dimension":"machine_discoverability","external":["Assistants that read llms.txt get a curated map of the site instead of guessing from the homepage."]}}]},"feedback":{"endpoint":"/api/feedback","mcpTool":"rate_fix","targets":[{"type":"report","key":"report"},{"type":"dimension","dimensionKey":"machine_discoverability","key":"dimension:machine_discoverability"},{"type":"dimension","dimensionKey":"programmatic_onboarding","key":"dimension:programmatic_onboarding"},{"type":"dimension","dimensionKey":"pricing_legibility","key":"dimension:pricing_legibility"},{"type":"dimension","dimensionKey":"agent_aware_instrumentation","key":"dimension:agent_aware_instrumentation"},{"type":"dimension","dimensionKey":"machine_fetchable_trust","key":"dimension:machine_fetchable_trust"},{"type":"dimension","dimensionKey":"commercial_rails","key":"dimension:commercial_rails"},{"type":"dimension","dimensionKey":"steps_to_first_value","key":"dimension:steps_to_first_value"},{"type":"dimension","dimensionKey":"required_fields","key":"dimension:required_fields"},{"type":"dimension","dimensionKey":"verification_walls","key":"dimension:verification_walls"},{"type":"dimension","dimensionKey":"error_recovery","key":"dimension:error_recovery"},{"type":"issue","dimensionKey":"machine_discoverability","checkId":"agent_ua_access","key":"issue:machine_discoverability:agent_ua_access"},{"type":"issue","dimensionKey":"programmatic_onboarding","checkId":"api_surface","key":"issue:programmatic_onboarding:api_surface"},{"type":"issue","dimensionKey":"machine_discoverability","checkId":"robots","key":"issue:machine_discoverability:robots"}]}}