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

# Quick Setup and First Request

> Step-by-step quickstart guide to create your ZenRows account, get your API key, and send your first web scraping API request today.

Start scraping any website in under 5 minutes. ZenRows handles anti-bot measures, JavaScript rendering, and proxy management automatically, so you can focus on collecting data instead of managing infrastructure.

## Quick Setup

<Steps>
  <Step title="Create Your Account">
    Visit the [Registration Page](https://app.zenrows.com/register) and sign up using Google, GitHub, or your email address. Account creation is free and provides immediate access to your dashboard.

    <img src="https://static.zenrows.com/content/zenrows_signup_page_3940d66395.png" alt="zenrows-signup-page" />
  </Step>

  <Step title="Complete Onboarding">
    Select options that match your use case during the setup process. This helps ZenRows recommend the most suitable features for your scraping needs
  </Step>

  <Step title="Get Your API Key">
    Get your API key from the dashboard and start your first request immediately. This key authenticates all your requests and tracks usage against your plan limits. Keep this key secure and never share it publicly.
  </Step>
</Steps>

## Your First Request

Test your ZenRows setup with this simple request:

<CodeGroup>
  ```python Python theme={null}
  ## pip install requests
  import requests

  url = 'https://httpbin.io/anything'
  apikey = 'YOUR_ZENROWS_API_KEY'
  params = {
      'url': url,
      'apikey': apikey,
      'mode': 'auto',
  }
  response = requests.get('https://api.zenrows.com/v1/', params=params)
  print(response.text)
  ```

  ```javascript Node.js theme={null}
  // npm install axios
  const axios = require('axios');

  const url = 'https://httpbin.io/anything';
  const apikey = 'YOUR_ZENROWS_API_KEY';
  axios({
  	url: 'https://api.zenrows.com/v1/',
  	method: 'GET',
  	params: {
  		'url': url,
  		'apikey': apikey,
  		'mode': 'auto',
  	},
  })
      .then(response => console.log(response.data))
      .catch(error => console.log(error));
  ```

  ```java Java theme={null}
  import org.apache.hc.client5.http.fluent.Request;

  public class APIRequest {
      public static void main(final String... args) throws Exception {
          String apiUrl = "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fhttpbin.io%2Fanything&mode=auto";
          String response = Request.get(apiUrl)
                  .execute().returnContent().asString();

          System.out.println(response);
      }
  }
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fhttpbin.io%2Fanything&mode=auto');
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $response = curl_exec($ch);
  echo $response . PHP_EOL;
  curl_close($ch);
  ?>
  ```

  ```go Go theme={null}
  package main

  import (
      "io"
      "log"
      "net/http"
  )

  func main() {
      client := &http.Client{}
      req, err := http.NewRequest("GET", "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fhttpbin.io%2Fanything&mode=auto", nil)
      if err != nil {
          log.Fatalln(err)
      }
      resp, err := client.Do(req)
      if err != nil {
          log.Fatalln(err)
      }
      defer resp.Body.Close()

      body, err := io.ReadAll(resp.Body)
      if err != nil {
          log.Fatalln(err)
      }

      log.Println(string(body))
  }
  ```

  ```ruby Ruby theme={null}
  # gem install faraday
  require 'faraday'

  url = URI.parse('https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fhttpbin.io%2Fanything&mode=auto')
  conn = Faraday.new()
  conn.options.timeout = 180
  res = conn.get(url, nil, nil)
  print(res.body)
  ```

  ```bash cURL theme={null}
  curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fhttpbin.io%2Fanything&mode=auto"
  ```
</CodeGroup>

Replace `YOUR_ZENROWS_API_KEY` with your actual API key from the dashboard. A successful response confirms your setup is working correctly.

## Next Steps

### Choose your ZenRows solution

Select the approach that best fits your scraping requirements and technical expertise:

<CardGroup cols={2}>
  <Card title="Universal Scraper API" icon={<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#064E3B" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="icon icon-tabler icons-tabler-outline icon-tabler-chisel"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 14l1.5 1.5" /><path d="M18.347 15.575l2.08 2.079a1.96 1.96 0 0 1 -2.773 2.772l-2.08 -2.079a1.96 1.96 0 0 1 2.773 -2.772z" /><path d="M3 6l3 -3l7.414 7.414a2 2 0 0 1 .586 1.414v2.172h-2.172a2 2 0 0 1 -1.414 -.586l-7.414 -7.414z" /></svg>} href="https://docs.zenrows.com/universal-scraper-api/api-reference">
    **Best for**: General web scraping with automatic optimization
  </Card>

  <Card title="Scraping Browser" icon={<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#064E3B" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="icon icon-tabler icons-tabler-outline icon-tabler-click"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 12l3 0" /><path d="M12 3l0 3" /><path d="M7.8 7.8l-2.2 -2.2" /><path d="M16.2 7.8l2.2 -2.2" /><path d="M7.8 16.2l-2.2 2.2" /><path d="M12 12l9 3l-4 2l-2 4l-3 -9" /></svg>} href="/scraping-browser/introduction">
    **Best for**: Complex automation requiring complete browser control
  </Card>

  <Card title="Residential Proxies" icon={<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#064E3B" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="icon icon-tabler icons-tabler-outline icon-tabler-home-bolt"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19 10l-7 -7l-9 9h2v7a2 2 0 0 0 2 2h7.5" /><path d="M9 21v-6a2 2 0 0 1 2 -2h2c.661 0 1.248 .32 1.612 .815" /><path d="M19 14l-2 4h4l-2 4" /></svg>} href="/residential-proxies/introduction">
    **Best for**: High-quality proxies with existing infrastructure
  </Card>

  <Card title="Platform Integrations" icon={<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#064E3B" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="icon icon-tabler icons-tabler-outline icon-tabler-plug"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9.785 6l8.215 8.215l-2.054 2.054a5.81 5.81 0 1 1 -8.215 -8.215l2.054 -2.054z" /><path d="M4 20l3.5 -3.5" /><path d="M15 4l-3.5 3.5" /><path d="M20 9l-3.5 3.5" /></svg>} href="/integrations/overview">
    **Best for**: No-code solutions and workflow automation
  </Card>
</CardGroup>

<Card title="MCP Integration" icon="box" href="/integrations/mcp/mcp-overview">
  **Best for**: AI-powered assistance in your code editor
</Card>

<Tip>Check our [Product Documentation](/first-steps/our-products#best-product-for-your-use-case) to compare features and find the best fit for your use case, or review our [Pricing Guide](/first-steps/pricing) to select the right plan.</Tip>

### Learn web scraping fundamentals

Build your knowledge with comprehensive guides and best practices:

* [Web Scraping Best Practices](https://www.zenrows.com/blog/web-scraping-best-practices) - Essential techniques for reliable data collection, rate limiting strategies, and ethical scraping guidelines.
* [Complete Python Web Scraping Tutorial](https://www.zenrows.com/blog/web-scraping-python) - Step-by-step implementation guide covering BeautifulSoup, requests, and data processing.
* [Web Scraping Use Cases Guide](https://www.zenrows.com/blog/7-use-cases-for-website-scraping) - Real-world applications including price monitoring, lead generation, market research, and competitive analysis.
* [Handling JavaScript-Heavy Websites](https://www.zenrows.com/blog/scraping-javascript-rendered-web-pages) - Advanced techniques for single-page applications and dynamic content.
* [E-commerce Data Collection](https://www.zenrows.com/blog/job-board-scraping) - Strategies for product information, pricing, and inventory tracking.

### Scale your operations

As your scraping needs grow, explore advanced features and optimization strategies:

* **Concurrent requests**: Optimize performance by running multiple requests simultaneously
* **Data storage**: Choose appropriate databases and storage solutions for your collected data
* **Automation**: Set up scheduled scraping jobs for regular data collection
* **Data processing**: Implement pipelines for cleaning, validating, and analyzing scraped data
* **Monitoring**: Track success rates, identify patterns, and optimize your scraping strategy

### Get help when you need it

Access support resources and community knowledge:

* **FAQs** - Find answers to common questions about API limits, billing, and technical issues
* **Troubleshooting Guides** - Resolve specific problems with blocked requests, parsing errors, and configuration issues
* **Support** - Contact our team for personalized assistance with complex scraping challenges
* **Community** - Join our Discord server to connect with other developers and share scraping strategies
* **Documentation** - Explore detailed guides for advanced features and specific use cases

## Why Choose ZenRows?

ZenRows solves the most challenging aspects of web scraping through automated solutions:

**Anti-bot bypass & proxy rotation**: Detects and bypasses Cloudflare, reCAPTCHA, Akamai, Datadome, and other blocking mechanisms. Automatically switches between residential IPs across 190+ countries while rotating browser fingerprints to maintain access.

**JavaScript rendering**: Uses real browser engines to handle dynamic content, infinite scroll, and lazy-loaded elements that traditional HTTP requests cannot capture.

**Adaptive infrastructure**: Includes automatic retry mechanisms when requests fail, real-time analytics for monitoring performance, and maintains 99.9% uptime.

**Auto-parsing features**: Adapts automatically to structural changes on supported websites, reducing maintenance overhead.

You can start scraping immediately without technical expertise in proxy management or anti-detection techniques.

## Common Scraping Challenges

If you're new to web scraping, understanding these common challenges helps explain why ZenRows provides value and how it solves problems you might encounter with traditional scraping approaches:

<img src="https://static.zenrows.com/content/scraping_issues_infographic_a5b98b1b08.png" alt="scraping-issues-infographic" />

### Anti-Bot Measures

Websites deploy various blocking mechanisms to prevent scraping, such as:

* Web application firewalls (e.g., **Cloudflare**, **Datadome**, **Akamai**).
* CAPTCHA services that require solving puzzles to verify human activity.
* Rate limiting restricts the number of requests from a single IP address within a given time.

<img src="https://static.zenrows.com/content/cloudflare_blocked_page_sample_7fe1716f3d.png" alt="cloudflare_blocked_page_sample" />

Overcoming these measures often requires advanced techniques like CAPTCHA-solving services, IP rotation, and adapting to specific firewall rules.

### JavaScript Rendering

Many modern websites dynamically render content using JavaScript, which prevents data from loading immediately when the page is opened. For example:

* Dynamic content that appears only after JavaScript execution completes.
* Infinite scrolling websites only display initial content, loading more as users scroll.
* "Load more" buttons that reveal additional content through user interaction.

Traditional HTTP requests cannot capture this dynamically generated content.

<img src="https://static.zenrows.com/content/scrapingcourse_infinite_scrolling_page_bc91ff316e.jpg" alt="scrapingcourse_infinite_scrolling_page" />

### HTML Structural Changes

Websites frequently update page designs, layouts, and HTML structures to introduce new features or improve user experience. These changes often include:

* Modifications to **CSS selectors** or **HTML attribute names**.
* Adjustments to the overall structure of the page.

Such updates can render previously working scrapers ineffective, requiring constant monitoring and updates to your scraping logic.

### Legal Considerations

Scraping activities must comply with legal and ethical guidelines:

* Website **terms of service** that prohibit scraping certain types of data, especially sensitive or restricted information.
* **Data behind login walls** or private details is often protected by law and requires explicit authorization to access.
* Adhering to rules specified in a site's `robots.txt` file, which defines areas where bots are not allowed.

## Frequently Asked Questions (FAQ)

<Accordion title="Do I need technical experience to use ZenRows?">
  No technical expertise in proxy management or anti-detection techniques is required. ZenRows handles all the complex infrastructure automatically. If you can make HTTP requests, you can use ZenRows.
</Accordion>

<Accordion title="Can I test ZenRows before committing to a paid plan?">
  Yes, every new account includes a free trial period to test our services. You can make requests immediately after signing up to evaluate ZenRows with your target websites.
</Accordion>

<Accordion title="How do I know if I need JavaScript rendering enabled?">
  Enable JavaScript rendering (`js_render=true`) when scraping websites that load content dynamically, have infinite scroll, use "Load More" buttons, or are single-page applications (SPAs) built with React, Vue, or Angular.
</Accordion>

<Accordion title="Is my API key secure and how should I handle it?">
  Your API key is unique to your account and should be kept secure. Never share it publicly or commit it to version control. Use environment variables in your code and regenerate your key if you suspect it's been compromised.
</Accordion>

<Accordion title="How do I switch between different ZenRows products?">
  Each ZenRows product has its own endpoint and documentation. You can use multiple products with the same API key. Simply change the endpoint URL and parameters based on which product you want to use for each request.
</Accordion>

<Accordion title="What programming languages can I use with ZenRows?">
  ZenRows works with any programming language that can make HTTP requests. We provide code examples for Python, JavaScript/Node.js, Java, PHP, Go, Ruby, and cURL. The API is language-agnostic and follows standard REST principles.
</Accordion>

<Accordion title="How do I monitor my usage and remaining usage?">
  Log into your ZenRows dashboard to view real-time usage statistics, remaining usage, success rates, and request history. You can also set up usage alerts to notify you when approaching your plan limits.
</Accordion>
