nectr

API Documentation

Scan is open now. Integrate, Publish and Monitor will be documented here when they open.

Scan a page

One public page per request, no key needed. nectr reads the site's robots.txt, then fetches the page twice: as plain HTML, and in a headless browser that runs its JavaScript. It also checks up to 3 PDFs the page links to on the same site. nectr keeps neither the page nor the result: it goes back to you only.

curl -X POST https://nectr.ch/api/v1/scans \
  -H "Content-Type: application/json" \
  -d '{"url": "https://yoursite.ch/pricing"}'

The body has one field, url: any public http(s) page, up to 2048 characters. A scan takes a few seconds.

Response

FieldTypeMeaning
urlstringThe page that was scanned.
titlestring | nullThe page's title.
rendered_wordsintegerWords in the page as markdown, with JavaScript.
plain_wordsintegerWords in the page as markdown, without JavaScript.
rendered_markdownstringThe page with JavaScript, as markdown.
plain_markdownstringThe page without JavaScript (its HTML), as markdown.
only_with_javascriptstring[]Blocks of the rendered page whose words are nowhere in the plain HTML. At most 50, each cut at 300 characters.
missing_word_sharenumberWords in those blocks over words in the rendered page, from 0 to 1.
robots_foundbooleanfalse when the site has no robots.txt. Every crawler is then allowed.
robotsobject[]{agent, allowed} for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended and CCBot: whether the site's robots.txt lets each one fetch this page.
pdfsobject[]Up to 3 PDFs the page links to on its own site, in page order. Each one is described in the next table.
pdfs_not_checkedintegerLinked PDFs left out: past the first 3, or on another site.
scanned_atstringWhen the scan ran, in ISO 8601.

Each entry in pdfs:

FieldTypeMeaning
urlstringThe PDF's address.
pagesinteger | nullIts page count.
wordsinteger | nullWords in its first 5 pages at most.
has_textboolean | nullfalse when it has no text layer (fewer than 5 words a page): probably a scanned image. null when it wasn't checked.
notestring | nullWhy it wasn't checked, when it wasn't.

Example

example.com, shortened. Its HTML holds one English paragraph, and a script adds five translations, so 85% of the text only appears with JavaScript.

{
  "url": "https://example.com/",
  "title": "Example Domain",
  "rendered_words": 133,
  "plain_words": 25,
  "rendered_markdown": "This domain is for use in documentation examples …",
  "plain_markdown": "This domain is for use in documentation examples …",
  "only_with_javascript": [
    "L’usage de ce domaine est réservé à des exemples de documentation …",
    "…"
  ],
  "missing_word_share": 0.85,
  "robots_found": false,
  "robots": [
    { "agent": "GPTBot", "allowed": true },
    { "agent": "ClaudeBot", "allowed": true },
    "…"
  ],
  "pdfs": [],
  "pdfs_not_checked": 0,
  "scanned_at": "2026-10-09T20:31:12Z"
}

Errors

Errors are JSON with a detail message you can show as it is. Two exceptions: a malformed body gets a 422 whose detail is a list of problems, and a 429 has an error message instead.

StatusWhen
403The site's robots.txt asks Nectrbot not to fetch this page.
422The URL isn't a public http(s) address, it's a document such as a PDF, the page answered with an HTTP error or couldn't be loaded, or the site's robots.txt couldn't be read.
429More than 10 scans in a minute from one address.
503nectr is busy. Try again in a minute.

robots.txt

  • nectr's crawler is Nectrbot. A page your robots.txt disallows for it isn't fetched, and neither are PDFs it disallows.
  • A missing robots.txt (a 4xx answer) allows everything.
  • A robots.txt that can't be read (a 5xx answer, or none) stops the scan, as RFC 9309 asks.

Accounts and API keys

  • Scans need no account or key.
  • New accounts are paused, so new API keys can't be created.
  • Existing API keys keep working for now. The latest update gives the dates.

The MCP server

nectr-mcp keeps working with existing API keys. When the new tools open, it will move to them: checking how AI reads your own site, and serving it.

Questions? Get in touch.