Field extraction is not interpretation
The main claim of this article is that a scrape should return the same fields on every run, while interpretation belongs on a separate analyse call. Mixing the two surfaces is how examples rot and agents invent engines that do not exist.
What a scrape is for
A scrape is a pinned plan. You name an engine, you name selectors, and you get a JSON object whose keys you chose. Html fetches the document once. Browser runs Chromium when the fields are not in the first response. Neither step should guess which headline matters.
Stable hooks make the plan cheap to replay. On these fixture pages the hooks are classes and ids prefixed with sf-. Docs and release smoke can hit the same URLs without borrowing a live third-party site that will change overnight.
What analyse is for
Analyse fetches the page as html, compresses it toward article markdown, and answers a question about meaning: outline, roles, whether a policy mentions a topic. The answer is structured to the query, not to a CSS tree. There is no action plan to pin.
- Use scrape when the field must match yesterday.
- Use analyse when the answer is a reading of the document.
- Do not send a query on the scrape endpoint.
Why the split is documented twice
Humans pick an engine from a matrix. Agents copy a prompt. Both groups fail the same way if the worked example still points at a news site or an engine named ai. This page exists so the analyse example has a long, boring, deterministic document with a claim a model can restate and sections it can list.
A note on emptiness
Some pages have no cards until JavaScript runs. Some forms hide results until a field is filled and a button is clicked. Those cases are not analyse problems. They are browser problems. Send the same actions tree, change the engine, and wait for the nodes you named.