What gets cached
- Sync scrapes only. Single-URL scrape requests that complete successfully.
- Not batch or crawl results. Each URL in a batch is fetched fresh; crawl discovery doesn’t cache.
- Not errors. A failed scrape is not cached, so the next attempt gets a fresh try.
Cache key
The key is a hash of:- The URL
onlyMainContentincludeTagsandexcludeTagswaitForSelector
formats: both markdown and html are stored togetherproxyMode: once a page is cached, it’s free to serve regardless of the mode you requesttimeoutMs
TTL
The default cache lifetime is 24 hours. After that, the next request for the same key triggers a fresh fetch.Opt out
Passcache: false to bypass the cache. Reader will fetch fresh and not look at what’s stored:
cache: false) can hit it.
Detecting cache hits
Every response metadata block includes acached boolean:
cached: true, scrapedAt is when the content was originally captured, not the moment you made the current request. Useful for “this content is N hours old” logic in your UI.
When to disable cache
Cases where you should passcache: false:
- Live data. Stock tickers, sports scores, breaking-news feeds.
- Testing and debugging. You’re iterating on extraction options and want to see the effect of each change.
- Workflow correctness. A downstream process depends on whether content has changed since the last run.
- LLM pipelines. Re-answering the same question doesn’t need a fresh scrape if it was done yesterday.
- RAG indexing. Re-indexing the same page within 24h is wasted credits.
- Idempotent batch jobs. If the job retries, you want the retry to see the same content.
Cost savings
A page that costs 1 credit instandard or 3 credits in stealth costs 0 credits on a cache hit. If you’re doing development work against the same set of URLs all day, your first loop is the expensive one; everything after that is free until the TTL expires.

