Bot View API

For one URL, how every known crawler is treated by the site's robots.txt: search engines, AI training and AI search crawlers, assistants, AI agents, SEO tools, link previews and archives (274 today). Each verdict gives the rule and line that decided it. Around it: llms.txt, robots meta tags and X-Robots-Tag, TDMRep, firewall and what the raw HTML gives a crawler that runs no JavaScript.

Need the page's content? Use Scrape.

GEThttps://rankfield.dev/v1/bot-view?url={url}

Send Authorization: Bearer YOUR_API_KEY. Get a free key; no account needed.

Parameters#

NameTypeDescription
urlquery, requiredstringThe page, a full http(s) URL.
agentsquery, optionalstringdefault allComma-separated: all, ai, a purpose (aiTraining, aiSearch, userFetch, aiAgent, search, seo, linkPreview, archive …), a company (google, openai …) or crawler names (GPTBot, bingbot …). Up to 50 unknown names, checked as given.
renderedquery, optionalbooleandefault falsetrue also renders the page and compares it with the raw HTML: what changes when a crawler runs its JavaScript. It's slower.
maxAgequery, optionalintegerdefault 600Seconds a stored answer may be old (default 10 minutes), up to 2,592,000. 0 reads the site fresh.
timeoutquery, optionalintegerdefault 20Seconds the call may take, 1 to 60.

Response#

FieldTypeDescription
url agents finalUrl status redirectsmixedWhat you asked, and the page that answered (null when we did not fetch it).
summaryobjectAgents checked, allowed, blocked on this page, blockedSite on /, the same per purpose, whether robots.txt was found, missing or unreachable, and pageChecked.
companiesarray[{company, agents}]. Each agent: token, matchedAs, purpose, controlToken, respectsRobots, known, allowed, the page, site and finalUrl verdicts {allowed, group, groupKind, rule, line, note}, crawlDelay, directives, docs, note.
robotsTxtobjectThe file: status, groups, rules, sitemaps, contentSignals (e.g. ai-train: no) and problems by line.
llmsTxt llmsFullTxtobjectpresent, valid (llmstxt.org), sections, links and problems.
pageDirectives tdmobjectRobots meta and X-Robots-Tag per crawler and for all (noindex, noai …); TDMRep reservation and its source.
firewall rawHtmlobjectHow the site answered us (e.g. Cloudflare challenge); visible words without JavaScript, jsShell, frameworks.
registry seenAsobjectThe crawler list's version and size; our own verdict as Rankfield-User.
renderedobjectWith rendered=true: headline (what changes, in one sentence), diff (words, links, title, canonical, description, meta robots, hreflang, structured data, H1) and robotsBlockedResources.
cached ageSecondsboolean, integerWhether the answer came from our store, and its age.

Errors#

Errors come as {"error":{"code":"…","message":"…","details":{…}}} with the HTTP status.

StatusCodeWhen
400invalid_inputA parameter is missing, unknown or malformed.
401unauthorizedThe key is missing, unknown or revoked.
403blockedThe website's bot protection refused us. Reported at once and never worked around; details says which protection. Not counted as usage.
403site_excludedThe site is on the exclusion list: Reddit, LinkedIn, Facebook, Instagram, X/Twitter and TikTok (subdomains included), Google search result pages, and sites whose owners asked us.
422address_not_publicThe host resolves to a private or internal address.
429busyOur fetch capacity is busy: the call was refused at once, waited 4 seconds without a turn, or its time limit ran out while it waited (then details.reason is capacity). A new job also gets it when the shared job queue is full (Retry-After 60). Not counted as usage. Retry after Retry-After seconds.
500internalOur bug. Retry.
502fetch_failedThe website could not be reached (DNS, connection, TLS, more than 5 redirects or a bad one, a malformed answer); details.reason says which.
503unavailableThe service is restarting or briefly unavailable. Retry after Retry-After. (A full fetch capacity answers 429 busy.)
504timeoutThe website did not answer within timeout. With details.reason: "sitePace", the call waited its turn for this website instead, which we fetch gently, shared by all customers. Retry after Retry-After, or allow a longer timeout.

Price and limits#

  • Free; no per-call charge.
  • No per-key limits. When the server is busy you get 429 busy with Retry-After.
  • Only answered calls count as usage (plus the website errors listed below); our own errors (500, 503), 429 busy and a 504 with details.reason sitePace don't.

Up to 10,000 URLs in one job#

POST /v1/bot-view/jobs with an Idempotency-Key header and {"items":[{"url":"https://example.com/"}, …]}. Each item takes the same parameters as one call, except timeout: items use the default, 20 seconds. Every item is checked first: if any is invalid, the whole request is a 400 that lists the first 20. A new job answers 202; the same Idempotency-Key with a byte-identical body returns the same job (200, Idempotency-Replayed: true), and with any other body is a 409.

Read GET /v1/bot-view/jobs/{id}/results?cursor=0&limit=100: finished items as they complete, each {index, ok, result} or {index, ok: false, error}. Pass cursor back until hasMore is false. POST /v1/bot-view/jobs/{id}/cancel stops a job. A job runs 16 items at a time; an item that meets busy waits and retries by itself. Results are kept 24 hours.

Send as many jobs as you like. Jobs from all keys share one queue: when 200,000 items are already waiting, a new job answers 429 busy with Retry-After (60 seconds).

Reference: https://rankfield.dev/docs/get-started/batch-jobs

Notes#

  • The verdicts are what the site's robots.txt tells each crawler. We fetch only as ourselves, so a firewall that blocks one bot but not another is not visible here; firewall shows how the site answered us. A robots.txt that disallows us is part of the answer, not an error.
  • The crawler list comes from ai.robots.txt and the vendors' own crawler pages; registry.version dates it.
  • We fetch as Rankfield-User, obey robots.txt on every request and redirect, run no JavaScript unless the call asks for it, use no cookies or proxies, and never work around a firewall. We fetch each site gently, shared by all customers. More: rankfield.dev/bot.

See also#