Skip to main content

Job statuses

POST /api/v1/jobs

Create a new scraping job.

Request body

There is no unlimited sentinel for cap fields. If you want the maximum allowed value, send the maximum explicitly.

Website filter

website_filter restricts a scrape by each business’s web presence — letting you target the “no real website” segment, the high-value lead list for web and marketing agencies. How it behaves:
  • Filtered at scrape time. Non-matching businesses are dropped before they are stored, so they never appear in your results and you are never billed for them.
  • max_results counts only matches. A job for 100 no_website leads keeps scraping until it finds 100 matches or the search area is exhausted — sparse areas may return fewer than the cap.
  • Pricing. When website_filter is no_website or has_website, a filters_applied fee of 0.001 credits is charged per matching place, on top of the normal per-place cost. all is free. See Credits and billing.
  • Re-segment for free at read time. The same vocabulary is available on the results endpoint via the web_presence query parameter, which additionally exposes six fine-grained tiers.
website_filter is a coarse, one-shot scrape-time choice. To slice already-scraped results by finer categories (social-only vs. directory-only, etc.), use the web_presence filter on the results endpoint — no re-scrape and no extra cost.

Supported language values

ar, bg, cs, da, de, el, en, es, et, fi, fr, he, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, th, tr, uk, vi, zh

Example request

Success response

Common failure modes

  • 400 Bad Request for validation failures
  • 402 Payment Required if your credit balance is too low
  • 409 Conflict if you reuse an idempotency key incorrectly
  • 422 Unprocessable Entity for invalid JSON
  • 429 Too Many Requests if you hit the concurrent job limit, with Retry-After: 60

POST /api/v1/jobs/estimates

Check how much a scraping job will cost before you create it. Use this endpoint to show users a price preview in your UI, or to decide programmatically whether to proceed with a job based on cost and available credits.

Why use this endpoint

  • You get a cost breakdown before spending any credits.
  • The response includes your current credit balance so you know if you can afford the job.
  • The estimate shows a range (min to max) because Google Maps results vary by location and search term.

Request body

Language is not needed here because it does not affect cost.

Example request

Example response

Response fields

estimate object containing the cost calculation: balance object containing your account state:

Notes

  • All costs are in credits. One credit equals one US dollar.
  • The estimate uses your account’s active pricing rules at request time.
  • If you set max_results, it acts as a hard cap. The estimate will not exceed this number of places even if depth would produce more.
  • A no_website/has_website website_filter adds breakdown.filter_cost = matching places × 0.001 credits. Because billing runs on the places that actually match, the filter both narrows your results and is priced per match.
  • The Cache-Control: no-store header is set on responses because estimates are ephemeral and should not be cached.

GET /api/v1/jobs

List your jobs with pagination and sorting.

Query parameters

Example response

Response fields

GET /api/v1/jobs/{id}

Fetch one job by UUID.
  • 200 OK returns the same job object shape shown above
  • 404 Not Found if the job does not belong to you or does not exist
  • 422 Unprocessable Entity if id is not a valid UUID

POST /api/v1/jobs/{id}/cancel

Cancel a pending or active job. Returns 204 No Content on success.

DELETE /api/v1/jobs/{id}

Delete a job you own. Returns 204 No Content on success. Invalid UUID values return 422 Unprocessable Entity.