Everything a page
contains, normalized.
Paste a URL. Watch it come back as structured data, markdown, metadata, links, images, tables, and the timings for every stage that produced them.
The pipeline
One path. Every page takes all four phases.
- 01
fetch
Browser-realistic headers, robots.txt, per-domain politeness, retries with backoff, and a revalidating HTTP cache.
- 02
render
Only when the page turns out to be a JavaScript shell. Always headless, no browser window ever opens.
- 03
extract
Every harvester runs on every page: precision and density content passes, JSON-LD, OpenGraph, meta, links, images, tables, repeated structures.
- 04
combine
One deterministic merge with fixed precedence. The result is a Document, markdown first, metadata complete.
There are no engines to pick, no modes to learn, and no scores to interpret. The trace on every document breaks these phases into the individual stages that ran, fetch, parse, content, metadata, links, media, records, combine. Each with the milliseconds it took.
Writing
What models actually need from a page.
Notes on the part most pipelines skip: how much of a page is content, why structure survives better than styling, and what it costs when it does not.
- We measured 16 sites. 77% of the HTML was not the page.Median page: eight characters of markup for every one of content. Here is the full table, including the site that blocked us.31 July 2026
- Why your chatbot quotes the cookie bannerIf the answer contains a menu item, the model is not confused. It was fed a menu.31 July 2026
- Why LLMs read markdown better than HTMLMost of a web page is not content. Sending the rest costs you context, money and accuracy.24 July 2026
- Why models prefer structured contentStructure is information. Flatten a table into prose and you have destroyed the relationships in it.27 July 2026
- RAG quality starts at extraction, not retrievalYou cannot embed your way out of bad input. The fix is three steps earlier than most people look.29 July 2026
- Why your scraper returns an empty pageA 200 with no content usually means you fetched the shell, not the page.30 July 2026
- All writingEverything on extraction, RAG input quality and fetching.
Or stay in the terminal
It is a CLI first.
The HTTP API wraps the same Python client the command line uses, so whichever surface you reach for, the document is identical. Script it from a shell, or call it from your application.
snakereach scrape example.com # one URL to one document
snakereach crawl docs.example.com -d 2 # whole site to a local store
snakereach export -o corpus.jsonl # RAG-ready output