> ## 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 Python SDK

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

The <a href="https://pypi.org/project/zenrows/" target="_blank" rel="noopener noreferrer nofollow">ZenRows Python SDK</a> is a lightweight client for the [Universal Scraper API](/universal-scraper-api/universal-scraper-api-setup). It wraps the same HTTP endpoint you'd call directly with `requests`, but adds a few conveniences developers ask for on every scraping project: automatic retries, built-in concurrency control, and `async`/`await` support.

<Info>
  If you're already comfortable making requests with Python's `requests` library, the SDK will feel familiar. Every call still returns a standard `requests.Response` object, so nothing about how you read the response changes.
</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 (`429`, `500`, `502`, `503`, `504`, and `422`) with exponential backoff, without writing retry logic yourself.
* **Concurrency** – cap how many requests run in parallel to match your ZenRows plan's concurrency limit.
* **Async support** – `get_async`, `post_async`, and `put_async` methods for running many requests concurrently with `asyncio`.

## What you'll need

<CardGroup cols={2}>
  <Card title="Python 3.6+" icon="python">
    Any Python version from 3.6 onward works.
  </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, POST, and PUT modes. For the full list of request parameters (`js_render`, `premium_proxy`, `css_extractor`, and so on), see the [Universal Scraper API setup guide](/universal-scraper-api/universal-scraper-api-setup). Every parameter documented there works the same way through the SDK's `params` argument.
</Note>

<Tip>
  Looking for a different language? ZenRows also maintains a <a href="https://www.npmjs.com/package/zenrows" target="_blank" rel="noopener noreferrer nofollow">Node.js SDK</a>.
</Tip>

## Explore the Python SDK

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

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

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

  <Card title="Async Requests and Concurrency" icon="bolt" href="/universal-scraper-api/sdk/python/async-concurrency">
    Scrape many URLs in parallel with `asyncio`.
  </Card>

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

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

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

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