> ## Documentation index
> Fetch the complete documentation index at: https://rankfield.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Changes to the Rankfield API and MCP server that can affect your code, newest first.

Changes that can affect your code or your agents, newest first.

## PDFs in Scrape

7 November 2026

Scrape now reads PDF pages: their text comes back as the content, with the title, author and date from the document. Long documents are read up to their first 300 pages, and the answer says when and why the text stops early. Scanned PDFs (pages of images without text) and password-protected PDFs are still refused, now with the reason; answers for every other page are unchanged. See [Scrape a page](/docs/scrape/scrape-a-page#pdf-documents).

## Scrape renders JavaScript-only pages by default

7 November 2026

Scrape now renders JavaScript-only pages by default: when a page's HTML is an empty app shell, Scrape answers from the page as a browser shows it. Every other page is answered exactly as before. `render=never` keeps the raw HTML only. See [Scrape a page](/docs/scrape/scrape-a-page#rendered-pages).

## Rendered pages

7 November 2026

Scrape can now run a page's JavaScript before reading it: `render=auto` renders only empty app shells, and `render=always` renders every page. Bot View's `rendered=true` shows what changes when a crawler runs JavaScript, in one sentence and in detail, and Scrape and Brand can return a WebP screenshot. Rendering uses Chrome, follows robots.txt for every file a page loads, sends no cookies and never works around bot challenges; calls without the new options are unchanged. See [Scrape a page](/docs/scrape/scrape-a-page#rendered-pages).

## Scrape picks a page's main content better

7 November 2026

With `scope=main`, when the article Scrape finds is very short next to the rest of the page (a newsletter box picked on a product page, for example), the answer now holds the page's content instead, and `content.extraction` is `document`. This changes the `main` answer for about 1 page in 5. A product page whose text doesn't name the product also starts with the product's name, description and price from the page's structured data. See [Scrape a page](/docs/scrape/scrape-a-page).

## Text Extraction and Language Detection are now part of Scrape

6 November 2026

The old endpoints answer `410` with the Scrape call to use. For a page's text, call `GET /v1/scrape?url=…&include=content`: `scope` works the same (`page`, `main`, `all`) and the text is in `content.markdown`. For its language, call `GET /v1/scrape?url=…&include=language`: the `language` field is the same. On the MCP server, use `scrape_page` with `include`. See [Scrape a page](/docs/scrape/scrape-a-page).

## Link answers name the Rankfield web graph and write releases as 2026-may-jun-jul

4 November 2026

The full referring and outbound domain lists now answer `"source": "Rankfield web graph"`. The graph release is written `2026-may-jun-jul` wherever it appears: `crawlRelease` in those lists, Referrer Profile and exports, `release` in export jobs and Dataset Status, and export file names. Field names don't change, and cursors issued before this change keep working; if your code compares these values, update it. See [Get Dataset Status](/docs/data/get-dataset-status).

## Domains not in the graph answer 200 instead of 404

1 November 2026

A well-formed domain that isn't in our link graph yet now answers `200` on Site Strength, Referring Domains, the full lists, Referrer Profile and exports, with `"inGraph": false` right after `domain` and zeros or empty lists. The field is absent for every other domain, so those answers don't change; a malformed domain still gets `400`. See [Get Site Strength](/docs/site-strength/get-site-strength).
