CrawlCheck Locate API
The Locate API from CrawlCheck — 1 operation(s) for locate.
The Locate API from CrawlCheck — 1 operation(s) for locate.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/crawlcheck-io:crawlcheck-io-locate-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Crawlcheck Io Locate API
version: '1'
contact:
name: CrawlCheck
url: https://crawlcheck.io/policy
email: hello@crawlcheck.io
license:
name: Terms
url: https://crawlcheck.io/policy
x-core-contract:
promise: 'These operations are the core contract. They stay at /api/v1 and keep answering for at least 180 days after any /api/v2 is announced; their stable fields change only in a new major version, and their provisional fields only after 30 days'' notice, per /docs/api/compatibility. Verifying what they return needs none of these calls: crawlcheck-verify.mjs checks a document on your machine against the published keys (/.well-known/http-message-signatures-directory) and the rotation record, read once with --online or saved for --keys. Everything else documented here is useful but secondary, and may change with the notice its fields'' tags promise.'
operations:
- method: GET
path: /api/v1/resolve
operationId: resolveDomainV1
- method: POST
path: /api/v1/resolve
operationId: resolveBatchV1
- method: POST
path: /api/v1/preflight
operationId: preflightV1
- method: GET
path: /api/v1/decisions/{sha256}
operationId: decisionCheckV1
- method: GET
path: /api/v1/revocations
operationId: revocations
- method: GET
path: /api/v1/visitor
operationId: visitorResolveV1
- method: POST
path: /api/v1/visitor
operationId: visitorResolveBatchV1
- method: GET
path: /api/v1/mcp/scan
operationId: mcpScanUrl
- method: POST
path: /api/v1/mcp/lock/check
operationId: mcpLockCheck
list: https://crawlcheck.io/api/v1/core
description: 'Operations tagged Locate across 2 of this provider''s published API definitions: crawlcheck-io-openapi.json, crawlcheck-io-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://crawlcheck.io
tags:
- name: Locate
paths:
/api/locate:
get:
operationId: locateFacts
summary: 'Check every source locator in a record against the stored page: each extracted…'
parameters:
- name: id
in: query
schema:
type: string
- name: domain
in: query
schema:
type: string
- name: field
in: query
schema:
type: string
description: one fact, e.g. title or telephone
- name: finding
in: query
schema:
type: string
description: a finding code; without a licence only the top finding
- name: claim
in: query
schema:
type: string
description: 'name, phone, locality, experience or all: both sides of a claim (what the structured data asserts, where the visible page says it) cut from the stored page, plus the rule that judged it, the inputs it read, the row it decided, and that rule rerun over the stored page (replay.reproduces); points per row with a licence or the owner''s session'
responses:
'200':
description: locators read back
content:
application/json:
examples:
worked:
summary: Each title statement cut from the sealed page bytes and compared with the recorded value. No key. Produced by the production code from a crawlcheck.io scan of 2026-09-30 (MDT), checked against that scan's stored page.
value:
ok: true
kind: crawlcheck-locators
report_id: 43td4am66w
domain: crawlcheck.io
page:
experience_id: ex1:d30a6257d923837567c30cb050bbe508
sha256: 992349c096dad9bb6d207bdc644abe2eb84312a5620d37ee5e26e991ce8878ca
bytes: 38601
artifact: https://crawlcheck.io/api/artifact/992349c096dad9bb6d207bdc644abe2eb84312a5620d37ee5e26e991ce8878ca?verify=1
statements: 4
located: 4
read_back: 4
rows:
- field: title
value: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
source:
kind: html
via: <title>
located: true
bytes:
- 139
- 199
line: 6
col: 8
scope: title
match: value
cut: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
reads_back: true
- field: title
value: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
source:
kind: meta
name: og:title
located: true
bytes:
- 567
- 627
line: 8
col: 182
scope: meta[og:title]
match: value
cut: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
reads_back: true
- field: title
value: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
source:
kind: meta
name: twitter:title
located: true
bytes:
- 1291
- 1351
line: 8
col: 900
scope: meta[twitter:title]
match: value
cut: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
reads_back: true
- field: title
value: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
source:
kind: jsonld
node: WebPage
id: https://crawlcheck.io/#webpage
located: true
bytes:
- 14033
- 14093
line: 8
col: 13619
scope: script[ld+json]#0
match: value
cut: 'CrawlCheck — AI visibility audit: what AI crawlers receive'
reads_back: true
method: each locator's byte range cut from the stored page (re-hashed first) and compared with the recorded value after HTML/JSON unescaping
schema:
type:
- object
- 'null'
properties:
ok:
type:
- boolean
- 'null'
kind:
type:
- string
- 'null'
report_id:
type:
- string
- 'null'
domain:
type:
- string
- 'null'
page:
type:
- object
- 'null'
properties:
experience_id:
type:
- string
- 'null'
sha256:
type:
- string
- 'null'
bytes:
type:
- number
- 'null'
artifact:
type:
- string
- 'null'
additionalProperties: true
statements:
type:
- number
- 'null'
located:
type:
- number
- 'null'
read_back:
type:
- number
- 'null'
rows:
type:
- array
- 'null'
items:
type:
- object
- 'null'
properties:
field:
type:
- string
- 'null'
value:
type:
- string
- 'null'
source:
type:
- object
- 'null'
properties:
kind:
type:
- string
- 'null'
via:
type:
- string
- 'null'
name:
type:
- string
- 'null'
node:
type:
- string
- 'null'
id:
type:
- string
- 'null'
additionalProperties: true
located:
type:
- boolean
- 'null'
bytes:
type:
- array
- 'null'
items:
type:
- number
- 'null'
line:
type:
- number
- 'null'
col:
type:
- number
- 'null'
scope:
type:
- string
- 'null'
match:
type:
- string
- 'null'
cut:
type:
- string
- 'null'
reads_back:
type:
- boolean
- 'null'
additionalProperties: true
method:
type:
- string
- 'null'
additionalProperties: true
x-schema-source: worked-example
'422':
description: no locators or no stored page on this record
x-codeSamples:
- lang: Shell
label: curl
source: "curl -s \\\n 'https://crawlcheck.io/api/locate?domain=crawlcheck.io&field=title'"
security: []
x-auth: public; no credential read
tags:
- Locate
servers:
- url: https://crawlcheck.io
components:
securitySchemes:
licenceKey:
type: apiKey
in: header
name: x-crawlcheck-key
description: 'Your licence key: cc_ followed by 32 hex characters. Sent on every keyed call.'
bearer:
type: http
scheme: bearer
description: The same licence key as a Bearer token. Accepted on /api/v1/* and /api/usage.
externalDocs:
url: https://crawlcheck.io/docs/api
description: Human-readable reference
x-refined-from:
- crawlcheck-io-openapi.json
- crawlcheck-io-openapi.yml