Pricing and Requests

Scraper API supports both request-based pricing and Unlimited plans.

Request-based plans charge per successful page extraction, while Unlimited plans use concurrency (threads) instead of request balances to determine throughput.

Request Counting

The request model is intentionally simple for page extraction work:

  • One page extraction equals one request.
  • A batch job counts each successfully extracted URL as one request.
  • A crawl job counts each successfully extracted page as one request.
  • JavaScript rendering does not cost extra requests.
  • Requesting Markdown, HTML, or both does not cost extra requests.
  • Geo-targeting does not cost extra requests.
  • Failed extraction requests are not charged.
  • Authentication errors, validation errors, and requests rejected before extraction are not charged.

Some dashboard, API, or billing surfaces may still use older token or credit naming, such as tokens_charged, estimated_tokens, tokens_charged_total, or tokens_reserved. For Scraper API billing, read those values as charged, estimated, or reserved requests.


Endpoint Usage

Not every API endpoint extracts a page. Use this table to understand how each endpoint category relates to request balance.

Endpoint categoryRequest balance behavior
Single-page extractionA successful POST /v1/extract extraction uses one request.
Async extractionThe completed extraction uses one request when the page is successfully extracted.
Batch extractionEach successfully extracted URL in the batch uses one request.
Crawl jobsEach successfully extracted crawled page uses one request.
MapDiscovers URLs only. It does not extract page content.
Statistics, webhooks, job lookup, and health checksThese endpoints do not extract page content. They are used to manage, inspect, or monitor Scraper API work.

Free Tier

The free tier includes 1,500 requests every month. You do not need a credit card to start using the free tier.

Free tier requests:

  • Renew every billing month.
  • Expire at the end of the billing month.
  • Do not roll over to the next month.
  • Stop working when the monthly free allowance runs out unless you upgrade or add paid requests.

Subscription Plans

Subscription plans include a monthly request allowance. Unused subscription requests roll over to the next month with no rollover cap while your subscription remains active.

If your workload requires unlimited requests, Geonode also offers Unlimited plans, which use concurrency-based pricing instead of request balances.

Use the Geonode dashboard to see the currently available subscription tiers, included monthly requests, and current prices. The dashboard is the source of truth for plan availability and billing details.

Subscription requests:

  • Renew every billing month.
  • Roll over when unused.
  • Stay available while the subscription remains active.
  • Can be combined with Pay as you Go requests if your account has both balances.

Unlimited Plans

Unlimited plans charge a flat monthly price with no request counting. Instead of a request balance, each plan sets the number of concurrent threads—how many extractions can run in parallel at any moment.

  • No request allowance and no top-ups — total monthly volume is not capped.
  • No multipliers — JavaScript rendering, geo-targeting, and output format never change the price.
  • Throughput scales with your plan's thread count — more threads means more pages processed in parallel.

Use the Geonode dashboard to view the available Unlimited plans and current pricing.


Concurrency and Job Limits

Concurrency (threads) determines how many extractions your plan can run in parallel. When all threads are busy, additional work waits in a queue until a thread becomes available. Requests are not rejected because all threads are in use.

Job-size limits define the maximum number of URLs or pages that can be processed in a single Batch or Crawl job. These limits apply per job, not per month, so you can run as many jobs as needed.

PlanConcurrencyMax URLs per batch jobMax pages per crawl job
Starter (2 threads)25050
Growth (10 threads)10500500
Scale (25 threads)251,0001,000
Pro (50 threads)502,0002,000
Business (100 threads)1004,0004,000

To process more URLs than a single job allows, split the work into multiple jobs.


Pay as You Go

Pay as You Go lets you buy request top-ups without committing to a subscription. Pay as You Go requests are prepaid and do not expire.

Use the Geonode dashboard to see the available top-up sizes and current prices for your account.

Pay as You Go requests:

  • Are prepaid.
  • Do not expire.
  • Can be used for bursty workloads.
  • Remain available even if you do not use the API every month.

What Happens When You Run Out

For request-based plans, if you run out of available requests, the API returns 402. Add more requests from the dashboard, buy a Pay as You Go top-up, or upgrade to a subscription plan.

{
  "code": "PAYMENT_REQUIRED",
  "message": "Insufficient request balance.",
  "correlation_id": "req_...",
  "retryable": false
}

The exact message may vary, but the response tells you that the request could not be processed because the account does not have enough available requests.


Checking Usage

You can monitor your usage in the Geonode dashboard.

Depending on your plan, the dashboard shows:

  • Remaining free requests for the current billing month.
  • Current subscription allowance and rollover balance.
  • Pay as You Go request balance.
  • Thread usage and concurrency information for Unlimited plans.

Billing Examples

If you extract one static page as Markdown, it uses one request.

{
  "url": "https://example.com",
  "formats": ["markdown"],
  "render_js": false
}

If you extract the same page as Markdown and HTML, it still uses one request.

{
  "url": "https://example.com",
  "formats": ["markdown", "html"],
  "render_js": false
}

If you render a JavaScript-heavy page before extracting it, it still uses one request.

{
  "url": "https://quotes.toscrape.com/js/",
  "formats": ["markdown"],
  "render_js": true
}

If the extraction fails, the failed extraction is not charged.

For Batch and Crawl jobs, check token_summary.tokens_charged_total on the job status response to see how many requests have been charged so far. token_summary.tokens_reserved shows the amount still reserved for queued or processing items.

On this page