> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zenrows.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction to the Node.js SDK

> Official ZenRows Node.js SDK for the Universal Scraper API. Handles authentication, retries, and concurrency so you can scrape with less boilerplate.

The <a href="https://www.npmjs.com/package/zenrows" target="_blank" rel="noopener noreferrer nofollow">ZenRows Node.js SDK</a> (npm package `zenrows`) is a lightweight client for the [Universal Scraper API](/universal-scraper-api/universal-scraper-api-setup). It wraps the native <a href="https://nodejs.org/api/globals.html#fetch" target="_blank" rel="noopener noreferrer nofollow">`fetch`</a> API, adding automatic retries and a built-in concurrency queue on top.

<Info>
  Every call returns a standard `Response` object, the same one the native `fetch` API returns. Since every method is already a `Promise`, there's no separate set of "async" methods to learn, unlike some other language SDKs.
</Info>

## What the SDK handles for you

* **Authentication** - your API key is set once in the client constructor, not repeated on every call.
* **Retries** - optionally retry failed requests (network errors, `422`, `503`, `504`) with exponential backoff, without writing retry logic yourself.
* **Concurrency** - every request from a client instance is automatically queued and limited to match your ZenRows plan's concurrency limit.
* **Native fetch** - no extra HTTP client dependency; the SDK builds directly on Node's built-in `fetch`.

## What you'll need

<CardGroup cols={2}>
  <Card title="Node.js 20+" icon="node-js">
    Required by the SDK's `engines` field in `package.json`.
  </Card>

  <Card title="API key" icon="key" href="https://app.zenrows.com/register?p=free">
    Create a free account to get yours, no credit card required.
  </Card>
</CardGroup>

<Note>
  The SDK only covers the Universal Scraper API's GET and POST modes; it doesn't expose a `put()` method. For the full list of request parameters (`premium_proxy`, `css_extractor`, `autoparse`, and so on), see the [Universal Scraper API setup guide](/universal-scraper-api/universal-scraper-api-setup). Most parameters work the same way through the SDK's `config` argument, with one exception: `js_render` only works on GET requests, not POST. See [POST Requests](/universal-scraper-api/sdk/nodejs/post-put-requests).
</Note>

<Tip>
  Looking for a different language? ZenRows also maintains a <a href="https://pypi.org/project/zenrows/" target="_blank" rel="noopener noreferrer nofollow">Python SDK</a>.
</Tip>

## Explore the Node.js SDK

<CardGroup cols={2}>
  <Card title="Installation" icon="download" href="/universal-scraper-api/sdk/nodejs/installation">
    Install the package and get your API key.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/universal-scraper-api/sdk/nodejs/quickstart">
    Make your first request in a few lines of code.
  </Card>

  <Card title="POST Requests" icon="send" href="/universal-scraper-api/sdk/nodejs/post-put-requests">
    Submit forms or data payloads.
  </Card>

  <Card title="Concurrency" icon="bolt" href="/universal-scraper-api/sdk/nodejs/async-concurrency">
    Scrape many URLs in parallel.
  </Card>

  <Card title="Error Handling and Retries" icon="shield" href="/universal-scraper-api/sdk/nodejs/error-handling-and-retries">
    Configure automatic retries and handle failures.
  </Card>

  <Card title="The Response Object" icon="file-text" href="/universal-scraper-api/sdk/nodejs/response-object">
    What you get back from every request.
  </Card>

  <Card title="Custom Headers" icon="tags" href="/universal-scraper-api/sdk/nodejs/custom-headers">
    Forward specific headers to the target site.
  </Card>

  <Card title="FAQ" icon="help-circle" href="/universal-scraper-api/sdk/nodejs/faq">
    Answers to common questions.
  </Card>
</CardGroup>
