Get started with the ZenRows Batch Scraper API: confirm beta access, find your API key, authenticate, submit your first batch job, and retrieve the results.
This guide walks you through setting up the ZenRows® Batch Scraper API. You’ll confirm your access, locate your API key, authenticate, submit your first batch job, and download the results end to end.
The Batch Scraper API is currently in private beta. Access is granted per account, so you need an invitation before you can submit jobs. Your existing Universal Scraper API key works without any extra setup.
Visit the Registration Page to create an account, or log in if you already have one. The Batch Scraper API uses the same API key as the Universal Scraper API, which you’ll find in your dashboard.
2
Confirm private-beta access
The Batch Scraper API is invite-only during the beta. If requests return 401 unauthenticated with a valid key, your account isn’t enabled yet. If this is the case, reach out to the ZenRows team to request access.
3
Note the base URL
All REST requests go to https://async.api.zenrows.com/v1.
This minimal example submits a closed job (one where you know all URLs up front) with JavaScript rendering enabled. Replace YOUR_ZENROWS_API_KEY with your key.
The response includes a job_id and the initial run status. Poll GET /jobs/{id} until the run reaches a terminal state (finished and no longer changing), then collect the results.
Once the run is complete, list the successful tasks and download each one’s scraped content. Every result row carries a result_url, a presigned link to the scraped page that is valid for 2 hours. Replace JOB_ID with the job_id from the submit response.
## pip install requestsimport requestsheaders = {'X-API-Key': 'YOUR_ZENROWS_API_KEY'}page = requests.get('https://async.api.zenrows.com/v1/jobs/JOB_ID/results', headers=headers, params={'status': 'successful'}).json()for row in page['results']: html = requests.get(row['result_url']).text # the scraped page print(row.get('external_id') or row['task_id'], len(html), 'chars')
# gem install faradayrequire 'faraday'require 'json'page = JSON.parse(Faraday.get('https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful') { |req| req.headers['X-API-Key'] = 'YOUR_ZENROWS_API_KEY'}.body)page['results'].each do |row| html = Faraday.get(row['result_url']).body # the scraped page puts "#{row['external_id'] || row['task_id']} #{html.length} chars"end
# 1) List the successful results; each row has a presigned result_url valid 2h.curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \ -H "X-API-Key: YOUR_ZENROWS_API_KEY"# 2) Download one result's scraped HTML using its result_url from the response above.curl "RESULT_URL"
Want to see the cost before you run anything? You can estimate usage client-side with no API call. See Estimate cost.