> ## 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.

# Frequently Asked Questions

> Answers to common questions about the ZenRows Python SDK.

### Setup and compatibility

<AccordionGroup>
  <Accordion title="What Python versions does the SDK support?">
    Python 3.6 and later. The SDK has no other runtime dependencies beyond `requests` and `urllib3`, which are installed automatically with `pip install zenrows`.
  </Accordion>

  <Accordion title="Do I need to install requests separately?">
    No. `requests` (and `urllib3`) are installed automatically as dependencies when you run `pip install zenrows`.
  </Accordion>

  <Accordion title="Does the SDK support Proxy Mode?">
    No. The SDK talks to the Universal Scraper API's endpoint directly (API Mode). If you want to use ZenRows as a proxy in your own HTTP client instead, see the [Proxy Mode documentation](/universal-scraper-api/universal-scraper-api-setup#connection-modes) rather than the SDK.
  </Accordion>
</AccordionGroup>

### Requests, errors, and concurrency

<AccordionGroup>
  <Accordion title="How do I set a request timeout?">
    Pass `timeout` as an extra keyword argument to `get`, `post`, or `put`. It's forwarded to the underlying `requests` call: `client.get(url, timeout=30)`. We recommend not setting a timeout below 3 minutes, since canceling a request client-side doesn't immediately free up the concurrency slot on ZenRows' side.
  </Accordion>

  <Accordion title="Why isn't my request raising an exception on failure?">
    By design, the SDK returns the `requests.Response` object even for non-2xx status codes. It doesn't raise automatically. Check `response.ok` or `response.status_code`, or call `response.raise_for_status()` yourself if you want an exception. See [Error Handling and Retries](/universal-scraper-api/sdk/python/error-handling-and-retries).
  </Accordion>

  <Accordion title="Can two scripts share the same concurrency limit?">
    No. Each `ZenRowsClient` instance enforces its own `concurrency` setting independently. Running two scripts (or two client instances) at the same time can exceed your plan's actual limit and trigger `429 Too Many Requests` errors. Coordinate concurrency across processes yourself if you run multiple scripts against the same ZenRows plan.
  </Accordion>
</AccordionGroup>

### Project and support

<AccordionGroup>
  <Accordion title="Is there a Node.js version of the SDK?">
    Yes. See the <a href="https://www.npmjs.com/package/zenrows" target="_blank" rel="noopener noreferrer nofollow">ZenRows Node.js SDK</a> on npm.
  </Accordion>

  <Accordion title="Where can I see the SDK's source code or report a bug?">
    The SDK is open source on <a href="https://github.com/ZenRows/zenrows-python-sdk" target="_blank" rel="noopener noreferrer nofollow">GitHub</a>. Open an issue there for bugs, or a pull request if you'd like to contribute.
  </Accordion>

  <Accordion title="What license is the SDK released under?">
    MIT. You can use, modify, and distribute it freely; see the <a href="https://github.com/ZenRows/zenrows-python-sdk/blob/main/LICENSE" target="_blank" rel="noopener noreferrer nofollow">LICENSE</a> file in the repository.
  </Accordion>
</AccordionGroup>

<Card title="Still stuck?" href="mailto:success@zenrows.com">
  Check the [API Error Codes](/api-error-codes) reference, or contact support directly.
</Card>
