Captcha After Successful Fetches
Workers
Sessions
Agent brief
Authentication
All Scrappa-facing API routes except health and the dashboard shell require the orchestrator token.
Authorization: Bearer ORCHESTRATOR_TOKEN
Session lifecycle
- Acquire a ready session from the shared browser pool.
- If acquire returns 202 starting, wait and retry acquire before fetching.
- Fetch through that session.
- Use response hints to decide whether the result is parseable.
- Release the session when done.
POST /sessions/acquire
{
"site": "booking",
"proxy_url": "socks5://user:[email protected]:1080",
"proxy_source": "mobile-proxies"
}
POST /sessions/{id}/release
{}Fetch endpoint
Use navigate for document pages. Use in_page after a bootstrap visit for middleware, JSON, and protected Next.js data URLs.
POST /sessions/{id}/fetch
{
"url": "https://example.com/protected/page",
"timeout_ms": 30000,
"headers": {
"accept": "text/html,application/xhtml+xml"
},
"referrer": "https://example.com/",
"bootstrap_url": "https://example.com/",
"bootstrap_wait_ms": 500,
"fetch_mode": "navigate"
}Result signals
The worker returns content plus observed page-state markers. The scraper decides parseability.
if (!result.ok) {
return {
transportOk: false,
failure: result.failure ?? null
};
}
return {
status: result.status,
finalUrl: result.finalUrl,
html: result.html,
bodyText: result.bodyText,
reasons: result.hints.reasons,
signals: result.hints.signals,
compatibilitySummary: {
usable: result.hints.usable,
classification: result.hints.classification
}
};Pool guidance
The site key is request metadata only. It does not select a dedicated browser pool.
Shared browser pool: - every ready browser can serve every supported traffic type - proxy_source can still constrain leasing to the requested proxy pool Google Search and generic HTML: - fetch_mode: "navigate" - parseability is scraper-specific; classification is only a compatibility summary JSON or middleware endpoint: - fetch_mode: "in_page" - bootstrap_url: a same-origin page that establishes cookies/storage - custom headers apply only to the target browser-side fetch AWS WAF / challenge-heavy sites: - returned HTML can contain both real content and active challenge markers - use hints.signals.has_mixed_content, reasons, status, html, and bodyText as evidence - Scrappa decides whether partial/mixed content is useful for a specific parser
Examples
Google search:
{
"site": "google_search",
"fetch": {
"url": "https://www.google.com/search?q=site%3Aexample.com",
"timeout_ms": 30000,
"fetch_mode": "navigate"
}
}
Generic document page:
{
"site": "example",
"fetch": {
"url": "https://example.com/articles/page",
"timeout_ms": 30000,
"fetch_mode": "navigate"
}
}
Same-origin JSON endpoint:
{
"site": "example",
"fetch": {
"url": "https://example.com/api/listings",
"timeout_ms": 30000,
"headers": {
"accept": "application/json"
},
"bootstrap_url": "https://example.com/",
"fetch_mode": "in_page"
}
}
Trustpilot review page:
{
"site": "trustpilot",
"fetch": {
"url": "https://www.trustpilot.com/review/amazon.com",
"timeout_ms": 30000,
"fetch_mode": "navigate"
}
}
Trustpilot Next.js data request:
{
"site": "trustpilot",
"fetch": {
"url": "https://www.trustpilot.com/_next/data/.../review/amazon.com.json",
"timeout_ms": 30000,
"headers": {
"x-nextjs-data": "1"
},
"referrer": "https://www.trustpilot.com/review/amazon.com",
"bootstrap_url": "https://www.trustpilot.com/review/amazon.com",
"fetch_mode": "in_page"
}
}
Booking search results:
{
"site": "booking",
"fetch": {
"url": "https://www.booking.com/searchresults.html?ss=Paris",
"timeout_ms": 45000,
"bootstrap_url": "https://www.booking.com/",
"fetch_mode": "navigate"
}
}