Use this file to discover all available pages before exploring further.
ScrapeLLM enforces per-account rate limits on synchronous requests and manages queue depth for async jobs. This guide covers how to scale efficiently without hitting limits.
All accounts are subject to per-second and per-minute request rate limits. Limits are stored per-user and enforced by the API gateway.When you exceed a limit, you receive HTTP 429:
{ "detail": "Rate limit exceeded. Retry after a moment."}
Implement exponential backoff on 429 responses. See Error handling for a code example.
Pattern 1: Async jobs (recommended for batch workloads)
For large batches, submit async jobs and poll for results. This avoids holding open HTTP connections and lets the ScrapeLLM job queue handle concurrency automatically.
import time, requestsAPI_KEY = "YOUR_API_KEY"def submit_job(prompt, country="US"): resp = requests.post( "https://api.scrapellm.com/scrapers/chatgpt/jobs", headers={"X-API-Key": API_KEY}, params={"prompt": prompt, "country": country}, ) return resp.json()["job_id"]def poll_job(job_id, interval=3): while True: job = requests.get( f"https://api.scrapellm.com/jobs/{job_id}" ).json() if job["status"] in ("done", "failed"): return job time.sleep(interval)prompts = [ "Best CRM for small business?", "Top email marketing tools?", "Leading project management software?",]job_ids = [submit_job(p) for p in prompts]results = [poll_job(jid) for jid in job_ids]for result in results: if result["status"] == "done": print(result["result"]["result"][:200])
What’s the best approach for processing 100+ prompts?
Use async jobs. Submit all jobs first, then poll for results. This decouples submission from processing and lets the queue handle concurrency automatically.