Skip to content
~/robynrocha.io
cd /systems

crawl-engine/2026

Two-Pass Crawl Engine

# Browser cost paid only when HTTP genuinely fails

context
Solo build
role
GTM Engineer
stack
Python · Playwright · Spider.cloud

Cheap HTTP first, headless browser only on escalation, behind a content gate that decides on the response body rather than the status code. Fingerprinting and a session pool sit behind the browser lane, and pages are selected from the site's own sitemap rather than crawled blindly. A keep-biased domain screen runs first so nothing dies on looking unusual.

$render crawl-engine.mmd

No diagram code provided

rendering diagram…

S1the workflow

Account Intelligence Crawl

Before anything gets crawled, each domain gets a fast screen — a DNS check, a parked-nameserver check, and one classified request — deliberately biased toward keeping: it drops what is provably dead, not what merely looks unusual. Survivors go through a two-pass fetch. Plain HTTP handles the large majority, and only when a content gate says the response is not real content does the request escalate to a full browser. Pages are chosen from the site's own sitemap rather than crawled blindly.

Deciding on content rather than status code is the important part. A site can return a perfectly healthy 200 alongside a challenge page or a stub, and a status check will happily record that as success — which quietly poisons everything downstream.

The crawled pages become a written business summary — model, reach, history, context — which becomes the evidence every later step reads. Classification works from that summary against the graded store and returns scope, match, confidence, and reach; routing off that decision is fully deterministic. No later step re-reads raw pages and quietly forms its own contradictory opinion.

the full write-up