Get AI visibility
Read the stored AI visibility and site health checks for one website, with a score per area.
https://api.rankparse.com/v1/site-scanFreeAPI keyReturns the latest stored AI visibility scan of one website: every check with its status, severity and evidence, and a score per area. It reads stored results only and never fetches the website. To scan again after a fix, use Re-check AI visibility.
Query parameters
site_idstringrequiredA website id from Websites. A missing, unknown, archived or other workspace's id returns 404 site_scan_site_not_found.
Response
site_idstringThe website asked for.
hoststringThe website's canonical host.
eligiblebooleanfalse when the website is not scanned. scanned_at, error_code and score are then null and checks is empty.
reasonstring | nullnull when eligible. not_verified when no verified Google or Bing property is attached, plan_required when the workspace is on the Free plan. See Eligibility.
scanned_atinteger | nullWhen the last scan finished, in Unix milliseconds. null before the first scan.
error_codestring | nullSet when the last scan could not reach the home page (for example home_http_503, home_timeout). The checks then still show the previous results.
scoreobject | nullScores (see Scoring). Each score object is { passing, failing, score }, where score is 0 to 100 or null when no check counted.
Show propertiesHide properties
overallobjectThe AI visibility score. Site health checks are not included.
areasobjectOne score object per area: discoverability, content, bot_access, capabilities, site_health.
checksarrayStored checks in a fixed order. A check that has never run is absent. See Checks for every id.
Show propertiesHide properties
check_idstringFor example ai_answer_bots_blocked.
areastringdiscoverability, content, bot_access, capabilities or site_health.
categorystringsite_health for the site_health area, else ai_visibility.
titlestringWhat a passing check means, for example llms.txt is published.
statusstringpass, fail or unknown (could not tell: timeout, server error). unknown is not a failure.
severitystringbad, warn or info: how much a failure matters.
optionalbooleantrue for info checks: optional features or choices, left out of the score and never an issue on their own.
evidenceobject | nullSmall details behind the result, varying by check: for example url and http_status, reason (html_instead_of_file, not_text, not_json, missing_fields, empty, page_truncated), blocked (a list of { agent, via } where via is agent or wildcard), final_url, noindex_by (meta or header), canonical, block_count, valid_block_count and types. Evidence over 2 KB is replaced by { "truncated": true }.
checked_atintegerWhen this result was recorded, in Unix milliseconds. An unknown result keeps the previous conclusion and its time.
first_failed_atinteger | nullWhen the check started failing (Unix milliseconds). Cleared when it passes.
last_passed_atinteger | nullWhen the check last passed (Unix milliseconds).
Behavior and limits
- Cost: 0 credits.
- Stored data: websites are scanned about once a day. The response never triggers a fetch.
- Not eligible is not an error: an unverified website or a Free workspace gets
200witheligible: false. - Permissions: needs the
site.readcapability. - Rate limit: 60 requests per minute per key. See Rate limiting.
Errors
| HTTP | Code | When |
|---|---|---|
| 401 | invalid_api_key | Missing, invalid or revoked API key. |
| 403 | capability_missing | Your workspace role cannot read websites. |
| 404 | site_scan_site_not_found | site_id is missing or not a website in your workspace. |
| 429 | rate_limited | More than 60 requests in a minute. |
See Errors for the error body format.
Related
MCP tool: get_ai_visibility (accepts site_id).