https://api.zenrows.com/v1 endpoint, adding authentication, retries, and concurrency control so you write less boilerplate and spend more time on what you’re actually building.
All three SDKs are open source and MIT licensed. You can inspect the source, report bugs, or contribute on GitHub.
Pick your language
Python
Built on
requests. Returns requests.Response. Supports async/await via asyncio. GET, POST, and PUT.Node.js
Built on native
fetch. Returns a standard Response. Every method is already a Promise. GET and POST.Go
Built on
net/http via go-resty. Typed RequestParameters struct. Takes context.Context. GET, POST, and PUT.What every SDK gives you
All three SDKs share the same core behavior. You set your API key once in the client constructor, and every call handles the rest.Authentication
Authentication
Your API key is passed once to the client constructor. Every subsequent request is authenticated automatically; you never repeat it per call.
- Python
- Node.js
- Go
Automatic retries
Automatic retries
Retries are off by default (Retries on:
0). Set a retry count in the constructor and the SDK retries failed requests with exponential backoff automatically. Only successful responses are billed; failed retries are free.- Python
- Node.js
- Go
422, 429, 500, 502, 503, 504Concurrency control
Concurrency control
All three SDKs cap parallel requests via an internal queue or semaphore. The default concurrency limit is
5. Set it to match your ZenRows plan.- Python
- Node.js
- Go
Each client instance enforces its own concurrency limit. Two scripts using the same API key don’t share limits, so running both at once can trigger
429 Too Many Requests errors. See the Concurrency guide for plan-level limits.Request parameters
Request parameters
Every Universal Scraper API parameter (For the full parameter list, see the Universal Scraper API setup guide.
js_render, premium_proxy, css_extractor, and so on) is available through each SDK. Only the syntax differs.- Python
- Node.js
- Go
Response headers
Response headers
Every response includes ZenRows monitoring headers. The two most useful for tracking usage are:
Headers from the target website are prefixed with
| Header | Contains |
|---|---|
X-Request-Cost | Dollar cost of the request (e.g. 0.001) |
X-Request-Credits | Number of credits consumed |
X-Request-Id | Unique request ID. Include this when contacting support |
Concurrency-Remaining | Concurrency slots remaining on your plan |
Zr-Final-Url | Final URL after any redirects |
Zr- to avoid collisions with ZenRows’ own headers.SDK comparison
All SDKs target the same Universal Scraper API endpoint. The differences below are language-level constraints, not API-level ones.
| Feature | Python | Node.js | Go |
|---|---|---|---|
| Install | pip install zenrows | npm install zenrows | go get github.com/zenrows/zenrows-go-sdk/service/api |
| Min version | Python 3.6+ | Node.js 20+ | Go 1.23+ |
| Response type | requests.Response | Fetch Response | *scraperapi.Response |
| GET | Yes | Yes | Yes |
| POST | Yes | Yes | Yes |
| PUT | Yes | No (use raw fetch) | Yes |
| Async / parallel | get_async + asyncio | Every method is a Promise | Goroutines + semaphore |
| Default concurrency | 5 | 5 | 5 |
| Retried status codes | 422, 429, 500, 502, 503, 504 | 422, 503, 504 | 422, 429, 500 |
| Typed parameters | No (dict / object) | No (dict / object) | Yes (RequestParameters struct) |
| GitHub | zenrows-python-sdk | zenrows-node-sdk | zenrows-go-sdk |
Pricing
Cost is determined by the parameters you send per request, not by which SDK you use. Retried attempts that fail are not billed.| Configuration | Cost multiplier vs. basic |
|---|---|
| Basic request | 1x |
js_render=True / js_render: true / JSRender: true | 5x |
premium_proxy=True / premium_proxy: true / UsePremiumProxies: true | 10x |
| JS render + Premium Proxy | 25x |
Get started
Pick your SDK
Choose the SDK that matches your language. All three share the same API key and request parameters.
Scale up
Once the basics work, add retries and concurrency to match your production requirements. Each SDK’s Error Handling and Concurrency pages walk through the options.
Need help?
Check the API Error Codes reference for error details, or contact support with your
X-Request-Id header value for faster triage.