Skip to main content

Credit system

Every API call consumes credits. Credits are deducted when a request completes successfully. Failed requests (4xx errors caused by bad input) are not charged. Your balance resets monthly, at the start of your billing cycle. Credits do not roll over — unused credits expire at the end of the cycle, on every plan including paid ones.

Per-surface credit costs

GET /v1/walmart/product was re-enabled on 2026-08-03, now backed primarily by our dedicated walmart_product target (with the generic browser-render path retained as a fallback) — this replaced the generic-only path that had been hitting frequent PerimeterX-related blocks on individual product pages.

Proxy-tier surcharge on Fetch, Crawl, and Map

Fetch, Crawl, and Map all escalate through an access-tier ladder automatically — direct HTTP, stealth browser, then a residential proxy if needed — to get past anti-bot defenses. Each surface’s base credit price only covers the direct/stealth tiers. If a specific request (or, for Crawl/Map, a specific page/URL) needs the residential proxy to succeed, a surcharge is added on top, billed off whichever tier actually served that request, not a flat rate applied to every call:
  • +65 credits if the request needed the residential proxy (typically hardened, anti-bot-defended targets like sites behind PerimeterX-class defenses).
Most requests never touch the proxy tier and are billed at the base price only. For Crawl/Map, the surcharge applies per page/URL — a 10-page crawl where 2 pages needed the residential proxy bills 8 × 2 + 2 × (2 + 65) = 150 credits, not a flat 10 × 2 = 20. Interact is billed at its flat per-session price regardless of access tier and is not affected by this surcharge.

use_proxy: skip straight to the strongest tier

Fetch, Crawl, Map, and Interact all accept an optional use_proxy: true field. By default these surfaces escalate through the access-tier ladder automatically, cheapest tier first, only advancing when a cheaper tier gets blocked. If you already know a target needs the strongest tier — e.g. you’re hitting a hardened site and expect to be blocked on anything cheaper — setting use_proxy: true skips the wasted cheap-tier attempts and goes straight there, which also reduces the chance of hitting timeout_ms mid-escalation on a tight budget. use_proxy requires a paid plan (Starter or higher) and returns 402 plan_upgrade_required immediately if set on the Free plan, since Free never reaches that tier regardless. Billing is unaffected by the flag itself — you’re still billed by whichever tier the request actually lands on (see the surcharge table above), not a separate rate for using use_proxy.

Crawl and Map auto-promote to an async job on large requests

Crawl and Map normally run synchronously, fetching every page within the same HTTP request/response. If your request is large enough that it would plausibly exceed the tenant’s inline execution budget — max_pages/max_urls above the surface’s own default (25 for Crawl, 100 for Map), or an explicit timeout_ms above your plan’s inline timeout — the API automatically queues it as an async job instead of holding the connection open, and responds the same way POST /v1/jobs does:
Poll GET /v1/jobs/{job_id} for the result, same as any other async job. Small/default requests are unaffected and stay synchronous — you can also opt into async explicitly at any size via POST /v1/jobs with { "kind": "crawl" | "map", "input": {...} }. If a request times out before the ladder would have reached its strongest tier, the 504 timeout error includes a hint suggesting use_proxy or a higher timeout_ms, unless the request already had use_proxy set or is on the Free plan (where the hint wouldn’t apply).

Plan limits

Credits do not roll over on any plan — unused credits expire at the end of the billing cycle.

Free plan does not include proxy access

The Free plan never routes requests through a datacenter or residential proxy — only direct HTTP and stealth-browser access. Most targets work fine without either, but sites with stronger anti-bot defenses may block Free-plan requests that would succeed on a paid plan. When this happens, the API returns free_plan_proxy_required (see Error Reference) instead of a generic block, so you know upgrading is the fix rather than retrying.

Dedicated APIs and Fast Search require a paid plan

Amazon, Walmart, Booking.com, Agoda, YouTube (search, video, subtitles, and search crawl), Airbnb, Target, Reddit, TikTok, Apple App Store, Bing, ChatGPT, Perplexity, Gemini, and Fast Search all require a Starter plan or higher. Google SERP search requires a Pro plan or higher. Requesting any of these on an ineligible plan returns 402 plan_upgrade_required.

Quota errors

When your credit balance runs out, the API returns:
Credits are a hard cap, not billed overage — requests are blocked once your plan’s included credits run out. Buy a top-up or upgrade to a higher plan to keep going.

Checking your usage

Use the usage field in every successful inline response to see how many credits that call consumed:
Aggregate usage dashboards are available at scrapio.dev.