Completed

www.scraperouter.com

https://www.scraperouter.com/

3/3

Success Rate

Overview

All 3 of 3 tested scraper methods completed successfully for this URL.

The best-performing option was curl-cffi:0.14 with datacenter proxy routing. It returned HTTP 200. Total runtime was 1.04s. Estimated request cost was $0.000009.

Protection signals were detected including WAFs cloudflare , CAPTCHA systems recaptcha v2, turnstile .

Tested Methods

Scraper Proxy Response Status Request Cost Time

curl-cffi:0.14

apiritif/curl-cffi:0.14

datacenter

200

$0.000009

$0.009/1k

1.04s

Playwright:1.58

apiritif/playwright:1.58

datacenter

200

$0.000015

$0.015/1k

3.28s

Scrapling StealthyFetcher 0.4

apiritif/scrapling-stealthyfetcher:0.4

datacenter

200

$0.000023

$0.023/1k

8.36s




<!DOCTYPE html>
<html lang="en"
      >
    <head>
        <meta charset="utf-8">
        <!--IE compatibility-->
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <!--Mobile friendly-->
        <meta name="viewport" content="width=device-width, initial-scale=1">
        
            
                
                    
                        
                        
                            <title>
                                
                                    Unified Web Scraping API | ScrapeRouter
                                
                            </title>
                            <meta name="description" content="One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.">
                            <meta name="keywords" content="scraping, intelligence">
                            <!-- Twitter Card data -->
                            <meta name="twitter:card" content="summary_large_image">
                            <meta name="twitter:title" content="Unified Web Scraping API | ScrapeRouter">
                            <meta name="twitter:description" content="One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.">
                            <meta name="twitter:image" content="https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png">
                            <!-- Open Graph data -->
                            <meta property="og:title" content="Unified Web Scraping API | ScrapeRouter" />
                            <meta property="og:type" content="website" />
                            <meta property="og:url"
                                  content="https://www.scraperouter.com/" />
                            <meta property="og:image" content="https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png" />
                            <meta property="og:description" content="One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers." />
                            <meta property="og:site_name" content="ScrapeRouter" />
                            <meta name="robots" content="index,follow">
                            <link rel="canonical"
                                  href="https://www.scraperouter.com/">
                        
                    
                
            
        
        
<link rel="icon"
      type="image/svg+xml"
      href="https://static.scraperouter.com/images/favicons/favicon.svg">

        <!-- Roboto Font -->
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap"
              rel="stylesheet">
        <style>
      /* Hide Alpine.js elements until initialized */
      [x-cloak] { display: none !important; }
        </style>
        
        <!-- Vite HMR client must load first for proper CSS injection -->
        
        <link  rel="stylesheet" href="https://static.scraperouter.com/css/site-base.css" />
<script type="module" crossorigin="" src="https://static.scraperouter.com/js/site-base-bundle.js"></script>
        <link  rel="stylesheet" href="https://static.scraperouter.com/css/site-tailwind.css" />
<script type="module" crossorigin="" src="https://static.scraperouter.com/js/site-tailwind-bundle.js"></script>
        <!-- Phosphor Icons (https://phosphoricons.com) -->
        <link rel="stylesheet"
              href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css"
              crossorigin="anonymous" />
        <link rel="stylesheet"
              href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css"
              crossorigin="anonymous" />
        
            <!-- Google tag (gtag.js) -->
<script async
        src="https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag() { dataLayer.push(arguments); }
  gtag("js", new Date());

  gtag("config", "G-CXJH3FN9J2");
</script>

        
        
            <script>
  window.posthogConfig = {
    apiKey: "phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T",
    host: "https://eu.i.posthog.com",
  };
</script>

        
        <script type="module" crossorigin="" src="https://static.scraperouter.com/js/site-bundle.js"></script>
        <script>__cssFramework = 'tailwind';</script>
        <script src="/jsi18n/" defer></script>
        
    <link rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
<style>
pre code.hljs {
    border-radius: 0.5rem;
    font-size: 0.8125rem;
    line-height: 1.625;
}
.code-tabs pre code.hljs {
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}
</style>

    
        <script src="https://challenges.cloudflare.com/turnstile/v0/api.js"
                async
                defer></script>
    

        <script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"ScrapeRouter","url":"https://www.scraperouter.com","logo":"https://static.scraperouter.com/images/logo_white_padding.png","email":"contact@scraperouter.com","sameAs":["https://x.com/ScrapeRouter","https://www.reddit.com/user/scraperouter-com/"],"contactPoint":[{"@type":"ContactPoint","email":"contact@scraperouter.com","contactType":"customer support"}]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Unified Web Scraping API | ScrapeRouter","description":"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.","url":"https://www.scraperouter.com/","image":"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png","isPartOf":{"@type":"WebSite","name":"ScrapeRouter","url":"https://www.scraperouter.com"}}</script>
    </head>
    <body hx-headers='{"X-CSRFToken": "2lrmweMI6NbmBVeIiBZ5MeAfIO2WvbIIRMHxQXO13Loz0GMM49yuwH9KwJ8HMjhp"}'>
        
    <div class="min-h-screen dark:bg-gray-900 flex flex-col">
        <header class="sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800">
            
<nav aria-label="Global"
     class="mx-auto max-w-7xl w-full flex items-center justify-between px-4 sm:px-6 lg:px-0 py-4 sm:py-6">
    <div class="flex lg:flex-1">
        <a href="/"
           class="-m-1.5 p-1.5 flex items-center gap-x-2">
            <div class="size-5 object-cover">
                <img src="https://static.scraperouter.com/images/logo.svg"
                     alt="ScrapeRouter"
                     class="h-5 dark:invert" />
            </div>
            <span class="sr-only">ScrapeRouter</span>
            <span class="text-lg font-bold text-black dark:text-white">ScrapeRouter</span>
        </a>
    </div>
    <div class="flex lg:hidden">
        <button type="button"
                class="-m-2.5 inline-flex cursor-pointer items-center justify-center rounded-md p-2.5 text-gray-800 dark:text-gray-200"
                onclick="toggleMobileMenu()">
            <span class="sr-only">Open main menu</span>
            <i class="ph ph-list text-xl" aria-hidden="true"></i>
        </button>
    </div>
    <div class="hidden lg:flex lg:gap-x-8 lg:items-center">
        <a href="/check/?src=navbar"
           class="text-sm font-semibold text-gray-900 dark:text-white hover:text-primary">Free Check</a>
        <a href="/scrapers/"
           class="text-sm font-semibold text-gray-900 dark:text-white hover:text-primary">Scrapers</a>
        <a href="/#pricing"
           class="text-sm font-semibold text-gray-900 dark:text-white hover:text-primary">Pricing</a>
        <a href="/docs/quickstart/"
           target="_blank"
           rel="noopener noreferrer"
           class="text-sm font-semibold text-gray-900 dark:text-white hover:text-primary">Docs</a>
        
            <div class="flex items-center gap-2">
                <a href="/accounts/login/"
                   class="btn btn-rounded-full btn-ghost">Sign in</a>
                <a href="/accounts/signup/"
                   class="btn btn-rounded-full btn-primary">Sign up</a>
            </div>
        
    </div>
</nav>
<!-- Mobile menu -->
<div id="mobile-menu" class="hidden lg:hidden">
    <div id="mobile-menu-backdrop"
         class="fixed inset-0 z-50"
         onclick="closeMobileMenu()">
        <div class="fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-white p-4 sm:max-w-sm sm:p-6 sm:ring-1 sm:ring-gray-900/10 dark:bg-gray-900 dark:sm:ring-gray-100/10"
             onclick="event.stopPropagation()">
            <div class="flex items-center justify-between">
                <button type="button"
                        class="-m-2.5 rounded-md p-2.5 text-gray-800 dark:text-gray-200 cursor-pointer"
                        onclick="toggleMobileMenu()">
                    <span class="sr-only">Close menu</span>
                    <i class="ph ph-x text-xl" aria-hidden="true"></i>
                </button>
            </div>
            <div class="mt-6 flow-root">
                <div class="-my-6 divide-y divide-gray-500/10 dark:divide-white/10">
                    <div class="space-y-2 py-6">
                        <a href="/check/?src=navbar_mobile"
                           onclick="toggleMobileMenu()"
                           class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5">Free Check</a>
                        <a href="/scrapers/"
                           onclick="toggleMobileMenu()"
                           class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5">Scrapers</a>
                        <a href="/#pricing"
                           onclick="toggleMobileMenu()"
                           class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5">Pricing</a>
                        <a href="/docs/quickstart/"
                           target="_blank"
                           rel="noopener noreferrer"
                           onclick="toggleMobileMenu()"
                           class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5">Docs</a>
                        
                            <a href="/accounts/login/"
                               onclick="toggleMobileMenu()"
                               class="btn btn-rounded-full btn-ghost">Sign in</a>
                            <a href="/accounts/signup/"
                               onclick="toggleMobileMenu()"
                               class="btn btn-rounded-full btn-primary">Sign up</a>
                        
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

        </header>
        <div class="relative isolate px-0 lg:px-8 flex-1">
            
    <!-- Hero Section -->
    <section class="w-full">
        <div class="mx-auto max-w-7xl px-4 pt-24 lg:pt-32 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800">
            <div class="mx-auto max-w-4xl text-center">
                <h1 class="text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white">
                    The Unified Interface
                    <br>
                    <span class="text-primary/90">For Scraping</span>
                </h1>
                <p class="mt-6 text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto">
                    <span class="text-primary/90 font-semibold">One API</span> for all your web scraping needs. Choose the optimal scraping method for a given request.
                </p>
                <div class="mt-10 flex flex-col items-center gap-4">
                    <div class="flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center">
                        <a href="/accounts/signup/"
                           class="btn btn-rounded-full btn-primary px-8">
                            Start scraping for free
                            <i class="ph ph-arrow-right ml-2" aria-hidden="true"></i>
                        </a>
                        <a href="/docs/quickstart/"
                           target="_blank"
                           class="btn btn-rounded-full btn-ghost px-8">
                            <i class="ph ph-code mr-2" aria-hidden="true"></i>
                            Read the Docs
                        </a>
                    </div>
                    <p class="text-sm text-gray-600 dark:text-gray-400">
                        Get <span class="font-semibold text-gray-900 dark:text-white">$5 free credits</span> to start in 60 seconds. No credit card required.
                    </p>
                </div>
            </div>
        </div>
    </section>
    <!-- Free URL Check -->
    <section class="w-full">
        <div class="mx-auto max-w-7xl px-4 pt-12 pb-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800">
            <div class="mx-auto max-w-2xl rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 p-6 text-left">
                <div class="flex items-center gap-2 mb-1">
                    <i class="ph ph-shield-check text-xl text-primary/90" aria-hidden="true"></i>
                    <h2 class="text-sm font-semibold uppercase tracking-wide text-gray-900 dark:text-white">Run a free URL check</h2>
                </div>
                <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
                    Analyze scraping viability with a preconfigured datacenter matrix and advanced bypass routing.
                </p>
                <form id="public-check-form"
                      method="post"
                      action="/checks/public/create/"
                      class="mt-4 space-y-3"
                      data-public-check-form="true"
                      data-track-submit-event="check_submit">
                    <input type="hidden" name="csrfmiddlewaretoken" value="2lrmweMI6NbmBVeIiBZ5MeAfIO2WvbIIRMHxQXO13Loz0GMM49yuwH9KwJ8HMjhp">
                    <input type="hidden" name="next" value="/">
                    <div class="flex flex-col sm:flex-row">
                        <div class="relative w-full">
                            <input type="url"
                                   name="url"
                                   required
                                   placeholder="https://example.com"
                                   class="input w-full pl-9 rounded-b-none! sm:rounded-b-md! sm:rounded-r-none!"
                                   id="public-check-url">
                        </div>
                        <button type="submit"
                                id="public-check-submit"
                                aria-busy="false"
                                class="btn -mt-[1px] sm:mt-0 sm:-ml-[1px] z-10 btn-rounded-md rounded-t-none! sm:rounded-t-md! sm:rounded-l-none! btn-outline whitespace-nowrap">
                            <span data-button-idle>Run free check</span>
                            <span data-button-loading class="hidden items-center gap-2">
                                <svg class="size-4 animate-spin"
     viewBox="0 0 24 24"
     fill="none"
     aria-hidden="true">
    <circle class="opacity-25"
            cx="12"
            cy="12"
            r="9"
            stroke="currentColor"
            stroke-width="3"></circle>
    <path d="M21 12a9 9 0 0 0-9-9"
          stroke="currentColor"
          stroke-width="3"
          stroke-linecap="round"></path>
</svg>

                                <span>Running...</span>
                            </span>
                        </button>
                    </div>
                    
                        <div class="w-full flex justify-center">
                            <div class="cf-turnstile" data-sitekey="0x4AAAAAAB3BcyrO00rWKcD1"></div>
                        </div>
                    
                </form>
                
            </div>
        </div>
    </section>
    <!-- Intelligent Path Selection -->
    <section id="path-selection"
             class="w-full border-b border-gray-200 dark:border-gray-800 hidden md:block scroll-mt-20">
        <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800">
            <div class="mx-auto max-w-4xl py-16">
                <p class="text-xs font-semibold tracking-[0.2em] text-gray-400 dark:text-gray-500 text-center uppercase mb-8">
                    Intelligent Routing
                </p>
                <div id="scraping-path-animation" class="w-full mx-auto"></div>
            </div>
        </div>
    </section>
    <!-- How It Works -->
    <section id="how-it-works"
             class="w-full border-b border-gray-200 dark:border-gray-800 scroll-mt-20">
        <div class="mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800">
            <div class="mx-auto max-w-5xl">
                <h2 class="text-3xl font-semibold text-center text-gray-900 dark:text-white">How It Works</h2>
                <p class="mt-4 text-center text-lg text-gray-600 dark:text-gray-400">Get started in minutes.</p>
                <div class="mt-16 flex flex-col lg:flex-row items-center justify-center gap-6 lg:gap-0">
                    <!-- Step 1: Sign Up -->
                    <a href="/accounts/signup/"
                       class="flex flex-col items-center text-center max-w-48 group p-6 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-300">
                        <span class=" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4">
                            <i class="ph ph-user-plus text-2xl " aria-hidden="true"></i>
                        </span>
                        <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2 group-hover:underline">Sign up</h3>
                        <p class="text-sm text-gray-600 dark:text-gray-400 group-hover:underline">Create an account to get started.</p>
                    </a>
                    <!-- Arrow 1→2 -->
                    <div class="hidden lg:flex items-center h-12 px-2">
                        <i class="ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <div class="flex lg:hidden items-center justify-center w-full">
                        <i class="ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <!-- Step 2: Add Credits -->
                    <div class="flex flex-col items-center text-center max-w-48">
                        <span class=" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4">
                            <i class="ph ph-coins text-2xl" aria-hidden="true"></i>
                        </span>
                        <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Get free credits</h3>
                        <p class="text-sm text-gray-600 dark:text-gray-400">Credits work with any scraper or proxy.</p>
                    </div>
                    <!-- Arrow 2→3 -->
                    <div class="hidden lg:flex items-center h-12 px-2">
                        <i class="ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <div class="flex lg:hidden items-center justify-center w-full">
                        <i class="ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <!-- Step 3: Get API Key -->
                    <div class="flex flex-col items-center text-center max-w-48">
                        <span class=" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4">
                            <i class="ph ph-key text-2xl" aria-hidden="true"></i>
                        </span>
                        <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Get your API key</h3>
                        <p class="text-sm text-gray-600 dark:text-gray-400">Create an API key and start making requests.</p>
                    </div>
                    <!-- Arrow 3→4 -->
                    <div class="hidden lg:flex items-center h-12 px-2">
                        <i class="ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <div class="flex lg:hidden items-center justify-center w-full">
                        <i class="ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <!-- Step 4: Cost-Effective & Unified Results -->
                    <div class="flex flex-col items-center text-center max-w-48">
                        <span class=" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4">
                            <i class="ph ph-currency-dollar-simple text-2xl" aria-hidden="true"></i>
                        </span>
                        <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Scrape</h3>
                        <p class="text-sm text-gray-600 dark:text-gray-400">Consistent schema and optimized cost.</p>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <!-- Developer First Features -->
    <section id="features"
             class="w-full border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800/50 scroll-mt-20">
        <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 py-18">
            <div class="mx-auto max-w-2xl text-center">
                <h2 class="text-3xl font-semibold text-gray-900 dark:text-white">Developer First Features</h2>
            </div>
            <div class="mt-16 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-4">
                <div class="bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700">
                    <div class="text-3xl mb-4 flex items-center justify-center h-10">
                        <i class="ph ph-package text-4xl text-gray-700 dark:text-gray-300"
                           aria-hidden="true"></i>
                    </div>
                    <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Unified Schema</h3>
                    <p class="text-sm text-gray-600 dark:text-gray-400">
                        Receive the same JSON response regardless of which provider fulfilled it.
                    </p>
                </div>
                <div class="bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700">
                    <div class="text-3xl mb-4 flex items-center justify-center h-10">
                        <i class="ph ph-dots-nine text-4xl text-gray-700 dark:text-gray-300"
                           aria-hidden="true"></i>
                    </div>
                    <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Many Scrapers</h3>
                    <p class="text-sm text-gray-600 dark:text-gray-400">
                        Use multiple scraping providers and libraries through a single integration.
                    </p>
                </div>
                <div class="bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700">
                    <div class="text-3xl mb-4 flex items-center justify-center h-10">
                        <i class="ph ph-brain text-4xl text-gray-700 dark:text-gray-300"
                           aria-hidden="true"></i>
                    </div>
                    <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Smart Routing</h3>
                    <p class="text-sm text-gray-600 dark:text-gray-400">
                        We route to the best provider for each domain and automatically retry with the next best option if it fails.
                    </p>
                </div>
                <div class="bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700">
                    <div class="text-3xl mb-4 flex items-center justify-center h-10">
                        <i class="ph ph-currency-dollar text-4xl text-gray-700 dark:text-gray-300"
                           aria-hidden="true"></i>
                    </div>
                    <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Cost Optimization</h3>
                    <p class="text-sm text-gray-600 dark:text-gray-400">
                        Attempt requests via the cheapest provider first, escalating to premium only if necessary.
                    </p>
                </div>
            </div>
        </div>
    </section>
    <!-- Quick Start -->
    <section class="w-full border-b border-gray-200 dark:border-gray-800">
        <div class="mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800">
            <div class="mx-auto max-w-2xl lg:max-w-6xl">
                <h2 class="text-3xl font-semibold text-center text-gray-900 dark:text-white">Quick Start</h2>
                <p class="mt-4 text-center text-lg text-gray-600 dark:text-gray-400">One request is all it takes.</p>
                <div class="mt-12 flex flex-col lg:flex-row lg:items-center lg:justify-center gap-6 lg:gap-4">
                    <div class="flex-1 min-w-0">
                        <div x-data="{ tab: 'curl' }"
                             class="code-tabs not-prose rounded-lg overflow-hidden">
                            
<div class="code-tabs-header flex items-end bg-[#0d1117] rounded-t-lg px-2 pt-2 border-b border-gray-700">
    
        <button @click="tab = 'curl'"
                :class="tab === 'curl' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'"
                class="px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px">cURL</button>
    
    <button @click="tab = 'python'"
            :class="tab === 'python' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'"
            class="px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px">Python</button>
    
        <button @click="tab = 'javascript'"
                :class="tab === 'javascript' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'"
                class="px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px">JavaScript</button>
    
</div>

                            <div class="bg-[#0d1117] [&_pre]:m-0 [&_pre]:rounded-none [&_pre]:overflow-x-auto">
                                <div x-show="tab === 'curl'">
                                    
<pre class="overflow-x-auto"><code class="language-bash">#!/usr/bin/env bash
curl -X POST https://www.scraperouter.com/api/v1/scrape/ \
  -H &quot;Authorization: Api-Key {your_api_key}&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#x27;{
  &quot;url&quot;: &quot;https://example.com&quot;,
  &quot;scraper&quot;: &quot;auto&quot;
}&#x27;</code></pre>

                                </div>
                                <div x-show="tab === 'python'" x-cloak>
                                    
<pre class="overflow-x-auto"><code class="language-python">import requests

response = requests.post(
    &quot;https://www.scraperouter.com/api/v1/scrape/&quot;,
    headers={&quot;Authorization&quot;: &quot;Api-Key {your_api_key}&quot;},
    json={
        &quot;url&quot;: &quot;https://example.com&quot;,
        &quot;scraper&quot;: &quot;auto&quot;,
    },
)
print(response.json())</code></pre>

                                </div>
                                <div x-show="tab === 'javascript'" x-cloak>
                                    
<pre class="overflow-x-auto"><code class="language-javascript">const response = await fetch(&quot;https://www.scraperouter.com/api/v1/scrape/&quot;, {
  method: &quot;POST&quot;,
  headers: {
    &quot;Authorization&quot;: &quot;Api-Key {your_api_key}&quot;,
    &quot;Content-Type&quot;: &quot;application/json&quot;,
  },
  body: JSON.stringify({
    url: &quot;https://example.com&quot;,
    scraper: &quot;auto&quot;,
  }),
});

const data = await response.json();
console.log(data);</code></pre>

                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="flex flex-shrink-0 items-center justify-center px-2 w-full lg:w-auto">
                        <i class="hidden lg:flex ph ph-arrow-right text-3xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                        <i class="lg:hidden ph ph-arrow-down text-3xl text-gray-300 dark:text-gray-600"
                           aria-hidden="true"></i>
                    </div>
                    <div class="flex-1 min-w-0">
                        <div class="rounded-lg overflow-hidden border bg-[#0d1117] [&_pre]:m-0 [&_pre]:rounded-none [&_pre]:overflow-x-auto">
                            
<pre class="overflow-x-auto"><code class="language-json">{
  &quot;id&quot;: &quot;550e8400-e29b-41d4-a716-446655440000&quot;,
  &quot;status_code&quot;: 200,
  &quot;url&quot;: &quot;https://example.com&quot;,
  &quot;content&quot;: &quot;&lt;!doctype html&gt;...&quot;,
  &quot;headers&quot;: {
    &quot;content-type&quot;: &quot;text/html; charset=UTF-8&quot;
  },
  &quot;scraper&quot;: &quot;apiritif/requests:2.32&quot;
}</code></pre>

                        </div>
                    </div>
                </div>
                <p class="mt-20 text-center text-sm text-gray-600 dark:text-gray-400">
                    Want to learn more?
                    <a href="/docs/quickstart/"
                       class="text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium">Read the documentation</a>
                </p>
            </div>
        </div>
    </section>
    <!-- Simple Pricing -->
    <section class="w-full dark:bg-gray-800/50 scroll-mt-20">
        <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 pt-18 pb-40">
            <div id="pricing"
                 class="mx-auto bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 p-6 sm:p-8 rounded-3xl max-w-xl text-center">
                <h2 class="text-3xl font-semibold text-gray-900 dark:text-white">Simple Pricing</h2>
                <div class="mt-8">
                    <div class="text-5xl font-semibold text-gray-900 dark:text-white">$0</div>
                    <div class="text-lg text-gray-600 dark:text-gray-400 mt-2">/ month</div>
                </div>
                <p class="mt-4 text-base text-gray-600 dark:text-gray-400">
                    Pay-as-you-go. See
                    <a href="/scrapers/"
                       class="text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium">detailed per-request pricing</a>
                    for each scraper.
                </p>
                <ul class="mt-8 space-y-3 text-left max-w-md mx-auto">
                    <li class="flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400">
                        <i class="ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0"
                           aria-hidden="true"></i>
                        <span>No minimums</span>
                    </li>
                    <li class="flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400">
                        <i class="ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0"
                           aria-hidden="true"></i>
                        <span>No subscriptions</span>
                    </li>
                    <li class="flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400">
                        <i class="ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0"
                           aria-hidden="true"></i>
                        <span>One consolidated bill</span>
                    </li>
                    <li class="flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400">
                        <i class="ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0"
                           aria-hidden="true"></i>
                        <span>Real-time cost tracking</span>
                    </li>
                </ul>
                <a href="/accounts/signup/"
                   class="btn btn-rounded-full btn-primary mt-8">Sign up</a>
            </div>
        </div>
    </section>
    <script>
    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
      anchor.addEventListener('click', function (e) {
        const href = this.getAttribute('href');
        if (href !== '#' && href.startsWith('#')) {
          e.preventDefault();
          const target = document.querySelector(href);
          if (target) {
            target.scrollIntoView({ behavior: 'smooth', block: 'start' });
          }
        }
      });
    });
    if (typeof hljs !== 'undefined') {
      hljs.highlightAll();
    }
    </script>

        </div>
        <div class="bg-gray-50 dark:bg-gray-900">
            <div class="border-x border-gray-200 dark:border-gray-800 max-w-7xl mx-auto">
                <footer class="mx-auto w-full px-4 sm:px-6 py-6 lg:px-8">
    <div class="flex flex-col sm:flex-row items-center justify-between gap-4">
        <p class="text-sm text-gray-600 dark:text-gray-400">
            © 2026
            <a href="/"
               class="hover:text-gray-900 dark:hover:text-white transition-colors">ScrapeRouter</a>. All rights reserved.
        </p>
        <div class="flex items-center gap-6">
            <nav class="flex items-center gap-4 text-sm">
                <a href="/terms/"
                   class="text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors">Terms</a>
                <a href="/privacy/"
                   class="text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors">Privacy Policy</a>
            </nav>
            <button type="button"
                    id="theme-toggle"
                    class="btn btn-rounded-full btn-ghost gap-2 w-22"
                    aria-label="Toggle theme">
                <span id="theme-icon" class="text-base size-6"></span>
                <span id="theme-label">Auto</span>
            </button>
        </div>
    </div>
</footer>

            </div>
        </div>
    </div>

        <script>
    document.addEventListener('DOMContentLoaded', () => {
      (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {
        let $notification = $delete.parentNode;
        $delete.addEventListener('click', () => {
          $notification.parentNode.removeChild($notification);
        });
      });
    });
</script>

        <script>
    function syncDarkMode() {
      const darkTheme = 'dark' || 'dark';
      const lightTheme = 'light' || 'light';
      const autoTheme = 'auto';

      const theme = localStorage.getItem('theme') || autoTheme;
      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;

      if (theme === darkTheme || (theme === autoTheme && prefersDark)) {
        document.documentElement.classList.add('dark');
        document.documentElement.setAttribute('data-theme', darkTheme);
        document.cookie = `theme=${darkTheme};path=/;max-age=31536000`;
      } else {
        document.documentElement.classList.remove('dark');
        document.documentElement.setAttribute('data-theme', lightTheme);
        document.cookie = `theme=${lightTheme};path=/;max-age=31536000`;
      }
    }

    function getCurrentTheme() {
      return localStorage.getItem('theme') || 'auto';
    }

    function setTheme(theme) {
      localStorage.setItem('theme', theme);
      syncDarkMode();
      updateThemeButton();
      window.dispatchEvent(new Event('storage'));
    }

    function cycleTheme() {
      const current = getCurrentTheme();
      const themes = ['light', 'dark', 'auto'];
      const currentIndex = themes.indexOf(current);
      const nextIndex = (currentIndex + 1) % themes.length;
      setTheme(themes[nextIndex]);
    }

    function updateThemeButton() {
      const theme = getCurrentTheme();
      const icon = document.getElementById('theme-icon');
      const label = document.getElementById('theme-label');

      if (!icon || !label) return;

      if (theme === 'light') {
        icon.textContent = '☀️';
        label.textContent = 'Light';
      } else if (theme === 'dark') {
        icon.textContent = '🌙';
        label.textContent = 'Dark';
      } else {
        icon.textContent = '💻';
        label.textContent = 'Auto';
      }
    }

    syncDarkMode();

    document.addEventListener('DOMContentLoaded', () => {
      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
      mediaQuery.addEventListener('change', () => {
        syncDarkMode();
        updateThemeButton();
      });

      window.addEventListener('storage', (event) => {
        if (event.key === 'theme') {
          syncDarkMode();
          updateThemeButton();
        }
      });

      updateThemeButton();

      const themeToggle = document.getElementById('theme-toggle');
      if (themeToggle) {
        themeToggle.addEventListener('click', cycleTheme);
      }

      const mobileMenu = document.getElementById("mobile-menu");
      if (mobileMenu) {
        document.addEventListener("click", function(event) {
          const menuButton = event.target.closest("button[onclick='toggleMobileMenu()']");
          if (!mobileMenu.classList.contains("hidden") && !mobileMenu.contains(event.target) && !menuButton) {
            mobileMenu.classList.add("hidden");
          }
        });
      }
    });

    function toggleMobileMenu() {
      const menu = document.getElementById("mobile-menu");
      if (menu) menu.classList.toggle("hidden");
    }

    function closeMobileMenu() {
      const menu = document.getElementById("mobile-menu");
      if (menu) menu.classList.add("hidden");
    }
        </script>
        
        
    </body>
</html>

Page Title

Unified Web Scraping API | ScrapeRouter

Response Headers

{
  "alt-svc": "h3=\":443\"; ma=2592000",
  "content-language": "en",
  "content-length": "39758",
  "content-type": "text/html; charset=utf-8",
  "cross-origin-opener-policy": "same-origin",
  "date": "Tue, 17 Mar 2026 12:44:16 GMT",
  "referrer-policy": "same-origin",
  "server": "gunicorn",
  "set-cookie": "scraperouter_language=en; Path=/, csrftoken=ZBqluTct78nnzVIeWIJzUDJFY5gVriJR; expires=Tue, 16 Mar 2027 12:44:16 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure",
  "strict-transport-security": "max-age=60; includeSubDomains; preload",
  "vary": "Cookie, Accept-Language, origin",
  "via": "1.1 Caddy",
  "x-content-type-options": "nosniff",
  "x-frame-options": "DENY"
}

Request Options

{
  "proxy": {
    "type": "datacenter"
  },
  "scraper_options": {
    "impersonate": "chrome"
  },
  "url": "https://www.scraperouter.com/"
}

No network requests captured.

Network capture is only available for browser-based scrapers (Playwright, Scrapling).

Detections

WAF
cloudflare
CAPTCHA
recaptcha v2 turnstile
CDN
None
Antibot
None

Structured Metadata

Open Graph
[
  {
    "namespace": {
      "og": "http://ogp.me/ns#"
    },
    "properties": [
      [
        "og:title",
        "Unified Web Scraping API | ScrapeRouter"
      ],
      [
        "og:type",
        "website"
      ],
      [
        "og:url",
        "https://www.scraperouter.com/"
      ],
      [
        "og:image",
        "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png"
      ],
      [
        "og:description",
        "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers."
      ],
      [
        "og:site_name",
        "ScrapeRouter"
      ]
    ]
  }
]
JSON-LD
[
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "contactPoint": [
      {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "contact@scraperouter.com"
      }
    ],
    "email": "contact@scraperouter.com",
    "logo": "https://static.scraperouter.com/images/logo_white_padding.png",
    "name": "ScrapeRouter",
    "sameAs": [
      "https://x.com/ScrapeRouter",
      "https://www.reddit.com/user/scraperouter-com/"
    ],
    "url": "https://www.scraperouter.com"
  },
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "description": "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.",
    "image": "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png",
    "isPartOf": {
      "@type": "WebSite",
      "name": "ScrapeRouter",
      "url": "https://www.scraperouter.com"
    },
    "name": "Unified Web Scraping API | ScrapeRouter",
    "url": "https://www.scraperouter.com/"
  }
]

Scraper Response Data

Response payload
{
  "content": "\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\"\n      >\n    <head>\n        <meta charset=\"utf-8\">\n        <!--IE compatibility-->\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <!--Mobile friendly-->\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        \n            \n                \n                    \n                        \n                        \n                            <title>\n                                \n                                    Unified Web Scraping API | ScrapeRouter\n                                \n                            </title>\n                            <meta name=\"description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"keywords\" content=\"scraping, intelligence\">\n                            <!-- Twitter Card data -->\n                            <meta name=\"twitter:card\" content=\"summary_large_image\">\n                            <meta name=\"twitter:title\" content=\"Unified Web Scraping API | ScrapeRouter\">\n                            <meta name=\"twitter:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"twitter:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\">\n                            <!-- Open Graph data -->\n                            <meta property=\"og:title\" content=\"Unified Web Scraping API | ScrapeRouter\" />\n                            <meta property=\"og:type\" content=\"website\" />\n                            <meta property=\"og:url\"\n                                  content=\"https://www.scraperouter.com/\" />\n                            <meta property=\"og:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\" />\n                            <meta property=\"og:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\" />\n                            <meta property=\"og:site_name\" content=\"ScrapeRouter\" />\n                            <meta name=\"robots\" content=\"index,follow\">\n                            <link rel=\"canonical\"\n                                  href=\"https://www.scraperouter.com/\">\n                        \n                    \n                \n            \n        \n        \n<link rel=\"icon\"\n      type=\"image/svg+xml\"\n      href=\"https://static.scraperouter.com/images/favicons/favicon.svg\">\n\n        <!-- Roboto Font -->\n        <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n        <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n        <link href=\"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap\"\n              rel=\"stylesheet\">\n        <style>\n      /* Hide Alpine.js elements until initialized */\n      [x-cloak] { display: none !important; }\n        </style>\n        \n        <!-- Vite HMR client must load first for proper CSS injection -->\n        \n        <link  rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-base.css\" />\n<script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-base-bundle.js\"></script>\n        <link  rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-tailwind.css\" />\n<script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-tailwind-bundle.js\"></script>\n        <!-- Phosphor Icons (https://phosphoricons.com) -->\n        <link rel=\"stylesheet\"\n              href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css\"\n              crossorigin=\"anonymous\" />\n        <link rel=\"stylesheet\"\n              href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css\"\n              crossorigin=\"anonymous\" />\n        \n            <!-- Google tag (gtag.js) -->\n<script async\n        src=\"https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2\"></script>\n<script>\n  window.dataLayer = window.dataLayer || [];\n  function gtag() { dataLayer.push(arguments); }\n  gtag(\"js\", new Date());\n\n  gtag(\"config\", \"G-CXJH3FN9J2\");\n</script>\n\n        \n        \n            <script>\n  window.posthogConfig = {\n    apiKey: \"phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T\",\n    host: \"https://eu.i.posthog.com\",\n  };\n</script>\n\n        \n        <script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-bundle.js\"></script>\n        <script>__cssFramework = 'tailwind';</script>\n        <script src=\"/jsi18n/\" defer></script>\n        \n    <link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css\">\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js\"></script>\n<style>\npre code.hljs {\n    border-radius: 0.5rem;\n    font-size: 0.8125rem;\n    line-height: 1.625;\n}\n.code-tabs pre code.hljs {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n</style>\n\n    \n        <script src=\"https://challenges.cloudflare.com/turnstile/v0/api.js\"\n                async\n                defer></script>\n    \n\n        <script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\",\"logo\":\"https://static.scraperouter.com/images/logo_white_padding.png\",\"email\":\"contact@scraperouter.com\",\"sameAs\":[\"https://x.com/ScrapeRouter\",\"https://www.reddit.com/user/scraperouter-com/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"email\":\"contact@scraperouter.com\",\"contactType\":\"customer support\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Unified Web Scraping API | ScrapeRouter\",\"description\":\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\",\"url\":\"https://www.scraperouter.com/\",\"image\":\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\"}}</script>\n    </head>\n    <body hx-headers='{\"X-CSRFToken\": \"2lrmweMI6NbmBVeIiBZ5MeAfIO2WvbIIRMHxQXO13Loz0GMM49yuwH9KwJ8HMjhp\"}'>\n        \n    <div class=\"min-h-screen dark:bg-gray-900 flex flex-col\">\n        <header class=\"sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800\">\n            \n<nav aria-label=\"Global\"\n     class=\"mx-auto max-w-7xl w-full flex items-center justify-between px-4 sm:px-6 lg:px-0 py-4 sm:py-6\">\n    <div class=\"flex lg:flex-1\">\n        <a href=\"/\"\n           class=\"-m-1.5 p-1.5 flex items-center gap-x-2\">\n            <div class=\"size-5 object-cover\">\n                <img src=\"https://static.scraperouter.com/images/logo.svg\"\n                     alt=\"ScrapeRouter\"\n                     class=\"h-5 dark:invert\" />\n            </div>\n            <span class=\"sr-only\">ScrapeRouter</span>\n            <span class=\"text-lg font-bold text-black dark:text-white\">ScrapeRouter</span>\n        </a>\n    </div>\n    <div class=\"flex lg:hidden\">\n        <button type=\"button\"\n                class=\"-m-2.5 inline-flex cursor-pointer items-center justify-center rounded-md p-2.5 text-gray-800 dark:text-gray-200\"\n                onclick=\"toggleMobileMenu()\">\n            <span class=\"sr-only\">Open main menu</span>\n            <i class=\"ph ph-list text-xl\" aria-hidden=\"true\"></i>\n        </button>\n    </div>\n    <div class=\"hidden lg:flex lg:gap-x-8 lg:items-center\">\n        <a href=\"/check/?src=navbar\"\n           class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Free Check</a>\n        <a href=\"/scrapers/\"\n           class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Scrapers</a>\n        <a href=\"/#pricing\"\n           class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Pricing</a>\n        <a href=\"/docs/quickstart/\"\n           target=\"_blank\"\n           rel=\"noopener noreferrer\"\n           class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Docs</a>\n        \n            <div class=\"flex items-center gap-2\">\n                <a href=\"/accounts/login/\"\n                   class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                <a href=\"/accounts/signup/\"\n                   class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n            </div>\n        \n    </div>\n</nav>\n<!-- Mobile menu -->\n<div id=\"mobile-menu\" class=\"hidden lg:hidden\">\n    <div id=\"mobile-menu-backdrop\"\n         class=\"fixed inset-0 z-50\"\n         onclick=\"closeMobileMenu()\">\n        <div class=\"fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-white p-4 sm:max-w-sm sm:p-6 sm:ring-1 sm:ring-gray-900/10 dark:bg-gray-900 dark:sm:ring-gray-100/10\"\n             onclick=\"event.stopPropagation()\">\n            <div class=\"flex items-center justify-between\">\n                <button type=\"button\"\n                        class=\"-m-2.5 rounded-md p-2.5 text-gray-800 dark:text-gray-200 cursor-pointer\"\n                        onclick=\"toggleMobileMenu()\">\n                    <span class=\"sr-only\">Close menu</span>\n                    <i class=\"ph ph-x text-xl\" aria-hidden=\"true\"></i>\n                </button>\n            </div>\n            <div class=\"mt-6 flow-root\">\n                <div class=\"-my-6 divide-y divide-gray-500/10 dark:divide-white/10\">\n                    <div class=\"space-y-2 py-6\">\n                        <a href=\"/check/?src=navbar_mobile\"\n                           onclick=\"toggleMobileMenu()\"\n                           class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Free Check</a>\n                        <a href=\"/scrapers/\"\n                           onclick=\"toggleMobileMenu()\"\n                           class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Scrapers</a>\n                        <a href=\"/#pricing\"\n                           onclick=\"toggleMobileMenu()\"\n                           class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Pricing</a>\n                        <a href=\"/docs/quickstart/\"\n                           target=\"_blank\"\n                           rel=\"noopener noreferrer\"\n                           onclick=\"toggleMobileMenu()\"\n                           class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Docs</a>\n                        \n                            <a href=\"/accounts/login/\"\n                               onclick=\"toggleMobileMenu()\"\n                               class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                            <a href=\"/accounts/signup/\"\n                               onclick=\"toggleMobileMenu()\"\n                               class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n                        \n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n        </header>\n        <div class=\"relative isolate px-0 lg:px-8 flex-1\">\n            \n    <!-- Hero Section -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-24 lg:pt-32 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl text-center\">\n                <h1 class=\"text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white\">\n                    The Unified Interface\n                    <br>\n                    <span class=\"text-primary/90\">For Scraping</span>\n                </h1>\n                <p class=\"mt-6 text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto\">\n                    <span class=\"text-primary/90 font-semibold\">One API</span> for all your web scraping needs. Choose the optimal scraping method for a given request.\n                </p>\n                <div class=\"mt-10 flex flex-col items-center gap-4\">\n                    <div class=\"flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center\">\n                        <a href=\"/accounts/signup/\"\n                           class=\"btn btn-rounded-full btn-primary px-8\">\n                            Start scraping for free\n                            <i class=\"ph ph-arrow-right ml-2\" aria-hidden=\"true\"></i>\n                        </a>\n                        <a href=\"/docs/quickstart/\"\n                           target=\"_blank\"\n                           class=\"btn btn-rounded-full btn-ghost px-8\">\n                            <i class=\"ph ph-code mr-2\" aria-hidden=\"true\"></i>\n                            Read the Docs\n                        </a>\n                    </div>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Get <span class=\"font-semibold text-gray-900 dark:text-white\">$5 free credits</span> to start in 60 seconds. No credit card required.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Free URL Check -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-12 pb-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 p-6 text-left\">\n                <div class=\"flex items-center gap-2 mb-1\">\n                    <i class=\"ph ph-shield-check text-xl text-primary/90\" aria-hidden=\"true\"></i>\n                    <h2 class=\"text-sm font-semibold uppercase tracking-wide text-gray-900 dark:text-white\">Run a free URL check</h2>\n                </div>\n                <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n                    Analyze scraping viability with a preconfigured datacenter matrix and advanced bypass routing.\n                </p>\n                <form id=\"public-check-form\"\n                      method=\"post\"\n                      action=\"/checks/public/create/\"\n                      class=\"mt-4 space-y-3\"\n                      data-public-check-form=\"true\"\n                      data-track-submit-event=\"check_submit\">\n                    <input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"2lrmweMI6NbmBVeIiBZ5MeAfIO2WvbIIRMHxQXO13Loz0GMM49yuwH9KwJ8HMjhp\">\n                    <input type=\"hidden\" name=\"next\" value=\"/\">\n                    <div class=\"flex flex-col sm:flex-row\">\n                        <div class=\"relative w-full\">\n                            <input type=\"url\"\n                                   name=\"url\"\n                                   required\n                                   placeholder=\"https://example.com\"\n                                   class=\"input w-full pl-9 rounded-b-none! sm:rounded-b-md! sm:rounded-r-none!\"\n                                   id=\"public-check-url\">\n                        </div>\n                        <button type=\"submit\"\n                                id=\"public-check-submit\"\n                                aria-busy=\"false\"\n                                class=\"btn -mt-[1px] sm:mt-0 sm:-ml-[1px] z-10 btn-rounded-md rounded-t-none! sm:rounded-t-md! sm:rounded-l-none! btn-outline whitespace-nowrap\">\n                            <span data-button-idle>Run free check</span>\n                            <span data-button-loading class=\"hidden items-center gap-2\">\n                                <svg class=\"size-4 animate-spin\"\n     viewBox=\"0 0 24 24\"\n     fill=\"none\"\n     aria-hidden=\"true\">\n    <circle class=\"opacity-25\"\n            cx=\"12\"\n            cy=\"12\"\n            r=\"9\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"></circle>\n    <path d=\"M21 12a9 9 0 0 0-9-9\"\n          stroke=\"currentColor\"\n          stroke-width=\"3\"\n          stroke-linecap=\"round\"></path>\n</svg>\n\n                                <span>Running...</span>\n                            </span>\n                        </button>\n                    </div>\n                    \n                        <div class=\"w-full flex justify-center\">\n                            <div class=\"cf-turnstile\" data-sitekey=\"0x4AAAAAAB3BcyrO00rWKcD1\"></div>\n                        </div>\n                    \n                </form>\n                \n            </div>\n        </div>\n    </section>\n    <!-- Intelligent Path Selection -->\n    <section id=\"path-selection\"\n             class=\"w-full border-b border-gray-200 dark:border-gray-800 hidden md:block scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl py-16\">\n                <p class=\"text-xs font-semibold tracking-[0.2em] text-gray-400 dark:text-gray-500 text-center uppercase mb-8\">\n                    Intelligent Routing\n                </p>\n                <div id=\"scraping-path-animation\" class=\"w-full mx-auto\"></div>\n            </div>\n        </div>\n    </section>\n    <!-- How It Works -->\n    <section id=\"how-it-works\"\n             class=\"w-full border-b border-gray-200 dark:border-gray-800 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-5xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">How It Works</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">Get started in minutes.</p>\n                <div class=\"mt-16 flex flex-col lg:flex-row items-center justify-center gap-6 lg:gap-0\">\n                    <!-- Step 1: Sign Up -->\n                    <a href=\"/accounts/signup/\"\n                       class=\"flex flex-col items-center text-center max-w-48 group p-6 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-300\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-user-plus text-2xl \" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2 group-hover:underline\">Sign up</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400 group-hover:underline\">Create an account to get started.</p>\n                    </a>\n                    <!-- Arrow 1\u21922 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 2: Add Credits -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-coins text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get free credits</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Credits work with any scraper or proxy.</p>\n                    </div>\n                    <!-- Arrow 2\u21923 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 3: Get API Key -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-key text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get your API key</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Create an API key and start making requests.</p>\n                    </div>\n                    <!-- Arrow 3\u21924 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 4: Cost-Effective & Unified Results -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-currency-dollar-simple text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Scrape</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Consistent schema and optimized cost.</p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Developer First Features -->\n    <section id=\"features\"\n             class=\"w-full border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 py-18\">\n            <div class=\"mx-auto max-w-2xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Developer First Features</h2>\n            </div>\n            <div class=\"mt-16 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-package text-4xl text-gray-700 dark:text-gray-300\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Unified Schema</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Receive the same JSON response regardless of which provider fulfilled it.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-dots-nine text-4xl text-gray-700 dark:text-gray-300\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Many Scrapers</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Use multiple scraping providers and libraries through a single integration.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-brain text-4xl text-gray-700 dark:text-gray-300\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Smart Routing</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        We route to the best provider for each domain and automatically retry with the next best option if it fails.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-currency-dollar text-4xl text-gray-700 dark:text-gray-300\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Cost Optimization</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Attempt requests via the cheapest provider first, escalating to premium only if necessary.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Quick Start -->\n    <section class=\"w-full border-b border-gray-200 dark:border-gray-800\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl lg:max-w-6xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">Quick Start</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">One request is all it takes.</p>\n                <div class=\"mt-12 flex flex-col lg:flex-row lg:items-center lg:justify-center gap-6 lg:gap-4\">\n                    <div class=\"flex-1 min-w-0\">\n                        <div x-data=\"{ tab: 'curl' }\"\n                             class=\"code-tabs not-prose rounded-lg overflow-hidden\">\n                            \n<div class=\"code-tabs-header flex items-end bg-[#0d1117] rounded-t-lg px-2 pt-2 border-b border-gray-700\">\n    \n        <button @click=\"tab = 'curl'\"\n                :class=\"tab === 'curl' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\"\n                class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px\">cURL</button>\n    \n    <button @click=\"tab = 'python'\"\n            :class=\"tab === 'python' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\"\n            class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px\">Python</button>\n    \n        <button @click=\"tab = 'javascript'\"\n                :class=\"tab === 'javascript' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\"\n                class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px\">JavaScript</button>\n    \n</div>\n\n                            <div class=\"bg-[#0d1117] [&_pre]:m-0 [&_pre]:rounded-none [&_pre]:overflow-x-auto\">\n                                <div x-show=\"tab === 'curl'\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-bash\">#!/usr/bin/env bash\ncurl -X POST https://www.scraperouter.com/api/v1/scrape/ \\\n  -H &quot;Authorization: Api-Key {your_api_key}&quot; \\\n  -H &quot;Content-Type: application/json&quot; \\\n  -d &#x27;{\n  &quot;url&quot;: &quot;https://example.com&quot;,\n  &quot;scraper&quot;: &quot;auto&quot;\n}&#x27;</code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'python'\" x-cloak>\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-python\">import requests\n\nresponse = requests.post(\n    &quot;https://www.scraperouter.com/api/v1/scrape/&quot;,\n    headers={&quot;Authorization&quot;: &quot;Api-Key {your_api_key}&quot;},\n    json={\n        &quot;url&quot;: &quot;https://example.com&quot;,\n        &quot;scraper&quot;: &quot;auto&quot;,\n    },\n)\nprint(response.json())</code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'javascript'\" x-cloak>\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-javascript\">const response = await fetch(&quot;https://www.scraperouter.com/api/v1/scrape/&quot;, {\n  method: &quot;POST&quot;,\n  headers: {\n    &quot;Authorization&quot;: &quot;Api-Key {your_api_key}&quot;,\n    &quot;Content-Type&quot;: &quot;application/json&quot;,\n  },\n  body: JSON.stringify({\n    url: &quot;https://example.com&quot;,\n    scraper: &quot;auto&quot;,\n  }),\n});\n\nconst data = await response.json();\nconsole.log(data);</code></pre>\n\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"flex flex-shrink-0 items-center justify-center px-2 w-full lg:w-auto\">\n                        <i class=\"hidden lg:flex ph ph-arrow-right text-3xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                        <i class=\"lg:hidden ph ph-arrow-down text-3xl text-gray-300 dark:text-gray-600\"\n                           aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex-1 min-w-0\">\n                        <div class=\"rounded-lg overflow-hidden border bg-[#0d1117] [&_pre]:m-0 [&_pre]:rounded-none [&_pre]:overflow-x-auto\">\n                            \n<pre class=\"overflow-x-auto\"><code class=\"language-json\">{\n  &quot;id&quot;: &quot;550e8400-e29b-41d4-a716-446655440000&quot;,\n  &quot;status_code&quot;: 200,\n  &quot;url&quot;: &quot;https://example.com&quot;,\n  &quot;content&quot;: &quot;&lt;!doctype html&gt;...&quot;,\n  &quot;headers&quot;: {\n    &quot;content-type&quot;: &quot;text/html; charset=UTF-8&quot;\n  },\n  &quot;scraper&quot;: &quot;apiritif/requests:2.32&quot;\n}</code></pre>\n\n                        </div>\n                    </div>\n                </div>\n                <p class=\"mt-20 text-center text-sm text-gray-600 dark:text-gray-400\">\n                    Want to learn more?\n                    <a href=\"/docs/quickstart/\"\n                       class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">Read the documentation</a>\n                </p>\n            </div>\n        </div>\n    </section>\n    <!-- Simple Pricing -->\n    <section class=\"w-full dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 pt-18 pb-40\">\n            <div id=\"pricing\"\n                 class=\"mx-auto bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 p-6 sm:p-8 rounded-3xl max-w-xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Simple Pricing</h2>\n                <div class=\"mt-8\">\n                    <div class=\"text-5xl font-semibold text-gray-900 dark:text-white\">$0</div>\n                    <div class=\"text-lg text-gray-600 dark:text-gray-400 mt-2\">/ month</div>\n                </div>\n                <p class=\"mt-4 text-base text-gray-600 dark:text-gray-400\">\n                    Pay-as-you-go. See\n                    <a href=\"/scrapers/\"\n                       class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">detailed per-request pricing</a>\n                    for each scraper.\n                </p>\n                <ul class=\"mt-8 space-y-3 text-left max-w-md mx-auto\">\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\"\n                           aria-hidden=\"true\"></i>\n                        <span>No minimums</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\"\n                           aria-hidden=\"true\"></i>\n                        <span>No subscriptions</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\"\n                           aria-hidden=\"true\"></i>\n                        <span>One consolidated bill</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\"\n                           aria-hidden=\"true\"></i>\n                        <span>Real-time cost tracking</span>\n                    </li>\n                </ul>\n                <a href=\"/accounts/signup/\"\n                   class=\"btn btn-rounded-full btn-primary mt-8\">Sign up</a>\n            </div>\n        </div>\n    </section>\n    <script>\n    document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n      anchor.addEventListener('click', function (e) {\n        const href = this.getAttribute('href');\n        if (href !== '#' && href.startsWith('#')) {\n          e.preventDefault();\n          const target = document.querySelector(href);\n          if (target) {\n            target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          }\n        }\n      });\n    });\n    if (typeof hljs !== 'undefined') {\n      hljs.highlightAll();\n    }\n    </script>\n\n        </div>\n        <div class=\"bg-gray-50 dark:bg-gray-900\">\n            <div class=\"border-x border-gray-200 dark:border-gray-800 max-w-7xl mx-auto\">\n                <footer class=\"mx-auto w-full px-4 sm:px-6 py-6 lg:px-8\">\n    <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\n        <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n            \u00a9 2026\n            <a href=\"/\"\n               class=\"hover:text-gray-900 dark:hover:text-white transition-colors\">ScrapeRouter</a>. All rights reserved.\n        </p>\n        <div class=\"flex items-center gap-6\">\n            <nav class=\"flex items-center gap-4 text-sm\">\n                <a href=\"/terms/\"\n                   class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Terms</a>\n                <a href=\"/privacy/\"\n                   class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Privacy Policy</a>\n            </nav>\n            <button type=\"button\"\n                    id=\"theme-toggle\"\n                    class=\"btn btn-rounded-full btn-ghost gap-2 w-22\"\n                    aria-label=\"Toggle theme\">\n                <span id=\"theme-icon\" class=\"text-base size-6\"></span>\n                <span id=\"theme-label\">Auto</span>\n            </button>\n        </div>\n    </div>\n</footer>\n\n            </div>\n        </div>\n    </div>\n\n        <script>\n    document.addEventListener('DOMContentLoaded', () => {\n      (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n        let $notification = $delete.parentNode;\n        $delete.addEventListener('click', () => {\n          $notification.parentNode.removeChild($notification);\n        });\n      });\n    });\n</script>\n\n        <script>\n    function syncDarkMode() {\n      const darkTheme = 'dark' || 'dark';\n      const lightTheme = 'light' || 'light';\n      const autoTheme = 'auto';\n\n      const theme = localStorage.getItem('theme') || autoTheme;\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n      if (theme === darkTheme || (theme === autoTheme && prefersDark)) {\n        document.documentElement.classList.add('dark');\n        document.documentElement.setAttribute('data-theme', darkTheme);\n        document.cookie = `theme=${darkTheme};path=/;max-age=31536000`;\n      } else {\n        document.documentElement.classList.remove('dark');\n        document.documentElement.setAttribute('data-theme', lightTheme);\n        document.cookie = `theme=${lightTheme};path=/;max-age=31536000`;\n      }\n    }\n\n    function getCurrentTheme() {\n      return localStorage.getItem('theme') || 'auto';\n    }\n\n    function setTheme(theme) {\n      localStorage.setItem('theme', theme);\n      syncDarkMode();\n      updateThemeButton();\n      window.dispatchEvent(new Event('storage'));\n    }\n\n    function cycleTheme() {\n      const current = getCurrentTheme();\n      const themes = ['light', 'dark', 'auto'];\n      const currentIndex = themes.indexOf(current);\n      const nextIndex = (currentIndex + 1) % themes.length;\n      setTheme(themes[nextIndex]);\n    }\n\n    function updateThemeButton() {\n      const theme = getCurrentTheme();\n      const icon = document.getElementById('theme-icon');\n      const label = document.getElementById('theme-label');\n\n      if (!icon || !label) return;\n\n      if (theme === 'light') {\n        icon.textContent = '\u2600\ufe0f';\n        label.textContent = 'Light';\n      } else if (theme === 'dark') {\n        icon.textContent = '\ud83c\udf19';\n        label.textContent = 'Dark';\n      } else {\n        icon.textContent = '\ud83d\udcbb';\n        label.textContent = 'Auto';\n      }\n    }\n\n    syncDarkMode();\n\n    document.addEventListener('DOMContentLoaded', () => {\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      mediaQuery.addEventListener('change', () => {\n        syncDarkMode();\n        updateThemeButton();\n      });\n\n      window.addEventListener('storage', (event) => {\n        if (event.key === 'theme') {\n          syncDarkMode();\n          updateThemeButton();\n        }\n      });\n\n      updateThemeButton();\n\n      const themeToggle = document.getElementById('theme-toggle');\n      if (themeToggle) {\n        themeToggle.addEventListener('click', cycleTheme);\n      }\n\n      const mobileMenu = document.getElementById(\"mobile-menu\");\n      if (mobileMenu) {\n        document.addEventListener(\"click\", function(event) {\n          const menuButton = event.target.closest(\"button[onclick='toggleMobileMenu()']\");\n          if (!mobileMenu.classList.contains(\"hidden\") && !mobileMenu.contains(event.target) && !menuButton) {\n            mobileMenu.classList.add(\"hidden\");\n          }\n        });\n      }\n    });\n\n    function toggleMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.toggle(\"hidden\");\n    }\n\n    function closeMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.add(\"hidden\");\n    }\n        </script>\n        \n        \n    </body>\n</html>\n",
  "cookies": null,
  "errors": null,
  "final_url": "https://www.scraperouter.com/",
  "headers": {
    "alt-svc": "h3=\":443\"; ma=2592000",
    "content-language": "en",
    "content-length": "39758",
    "content-type": "text/html; charset=utf-8",
    "cross-origin-opener-policy": "same-origin",
    "date": "Tue, 17 Mar 2026 12:44:16 GMT",
    "referrer-policy": "same-origin",
    "server": "gunicorn",
    "set-cookie": "scraperouter_language=en; Path=/, csrftoken=ZBqluTct78nnzVIeWIJzUDJFY5gVriJR; expires=Tue, 16 Mar 2027 12:44:16 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure",
    "strict-transport-security": "max-age=60; includeSubDomains; preload",
    "vary": "Cookie, Accept-Language, origin",
    "via": "1.1 Caddy",
    "x-content-type-options": "nosniff",
    "x-frame-options": "DENY"
  },
  "id": null,
  "scraper_data": null,
  "scraperouter": null,
  "screenshot_url": null,
  "status_code": 200
}

Page Title

Unified Web Scraping API | ScrapeRouter

[ ScrapeRouter ScrapeRouter ](/)

Open main menu __

[Free Check](/check/?src=navbar) [Scrapers](/scrapers/) [Pricing](/#pricing)
[Docs](/docs/quickstart/)

[Sign in](/accounts/login/) [Sign up](/accounts/signup/)

Close menu __

[Free Check](/check/?src=navbar_mobile) [Scrapers](/scrapers/)
[Pricing](/#pricing) [Docs](/docs/quickstart/) [Sign in](/accounts/login/)
[Sign up](/accounts/signup/)

#  The Unified Interface  
For Scraping

One API for all your web scraping needs. Choose the optimal scraping method
for a given request.

[ Start scraping for free __](/accounts/signup/) [ __Read the
Docs](/docs/quickstart/)

Get $5 free credits to start in 60 seconds. No credit card required.

__

## Run a free URL check

Analyze scraping viability with a preconfigured datacenter matrix and advanced
bypass routing.

Run free check Running...

Intelligent Routing

## How It Works

Get started in minutes.

[ __ Sign up Create an account to get started. ](/accounts/signup/)

__

__

__

### Get free credits

Credits work with any scraper or proxy.

__

__

__

### Get your API key

Create an API key and start making requests.

__

__

__

### Scrape

Consistent schema and optimized cost.

## Developer First Features

__

### Unified Schema

Receive the same JSON response regardless of which provider fulfilled it.

__

### Many Scrapers

Use multiple scraping providers and libraries through a single integration.

__

### Smart Routing

We route to the best provider for each domain and automatically retry with the
next best option if it fails.

__

### Cost Optimization

Attempt requests via the cheapest provider first, escalating to premium only
if necessary.

## Quick Start

One request is all it takes.

cURL Python JavaScript

    
    
    #!/usr/bin/env bash
    curl -X POST https://www.scraperouter.com/api/v1/scrape/ \
      -H "Authorization: Api-Key {your_api_key}" \
      -H "Content-Type: application/json" \
      -d '{
      "url": "https://example.com",
      "scraper": "auto"
    }'
    
    
    import requests
    
    response = requests.post(
        "https://www.scraperouter.com/api/v1/scrape/",
        headers={"Authorization": "Api-Key {your_api_key}"},
        json={
            "url": "https://example.com",
            "scraper": "auto",
        },
    )
    print(response.json())
    
    
    const response = await fetch("https://www.scraperouter.com/api/v1/scrape/", {
      method: "POST",
      headers: {
        "Authorization": "Api-Key {you

Page Title

Unified Web Scraping API | ScrapeRouter

Response Headers

{
  "alt-svc": "h3=\":443\"; ma=2592000",
  "content-language": "en",
  "content-length": "39758",
  "content-type": "text/html; charset=utf-8",
  "cross-origin-opener-policy": "same-origin",
  "date": "Tue, 17 Mar 2026 12:44:17 GMT",
  "referrer-policy": "same-origin",
  "server": "gunicorn",
  "set-cookie": "scraperouter_language=en; Path=/\ncsrftoken=1YTEo8TTR32lUeEQWCzhpyHiQZ402c6J; expires=Tue, 16 Mar 2027 12:44:17 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure",
  "strict-transport-security": "max-age=60; includeSubDomains; preload",
  "vary": "Cookie, Accept-Language, origin",
  "via": "1.1 Caddy",
  "x-content-type-options": "nosniff",
  "x-frame-options": "DENY"
}

Request Options

{
  "proxy": {
    "type": "datacenter"
  },
  "scraper_options": {
    "network_requests": true
  },
  "screenshot": true,
  "url": "https://www.scraperouter.com/"
}

27 requests captured

Method URL Status Type Time
GET
https://www.scraperouter.com/
200 document 1.35s
GET
https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap 3rd-party
200 css 0.60s
GET
https://static.scraperouter.com/css/site-base.css 3rd-party
200 css 0.64s
GET
https://static.scraperouter.com/js/site-base-bundle.js 3rd-party
200 script 0.65s
GET
https://static.scraperouter.com/css/site-tailwind.css 3rd-party
200 css 0.29s
GET
https://static.scraperouter.com/js/site-tailwind-bundle.js 3rd-party
200 script 0.18s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css 3rd-party
200 css 0.68s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css 3rd-party
200 css 0.24s
GET
https://static.scraperouter.com/js/site-bundle.js 3rd-party
200 script 0.41s
GET
https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css 3rd-party
200 css 0.69s
GET
https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js 3rd-party
200 script 0.23s
GET
https://static.scraperouter.com/images/logo.svg 3rd-party
200 image 0.18s
GET
https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2 3rd-party
200 script 1.58s
GET
https://www.scraperouter.com/jsi18n/
200 script 0.86s
GET
https://challenges.cloudflare.com/turnstile/v0/g/ea2d291c0fdc/api.js 3rd-party
302 script 1.22s
GET
https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2 3rd-party
font 0.84s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/Phosphor.woff2 3rd-party
font 0.38s
GET
https://eu-assets.i.posthog.com/array/phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T/config.js 3rd-party
200 script 0.76s
GET
https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2 3rd-party
font 0.23s
GET
https://challenges.cloudflare.com/turnstile/v0/g/ea2d291c0fdc/api.js 3rd-party
200 script 0.23s
GET
https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/turnstile/f/ov2/av0/rch/4m35b/0x4AAAAAAB3BcyrO00rWKcD1/auto/fbE/new/normal?lang=auto 3rd-party
200 document 0.24s
GET
https://eu-assets.i.posthog.com/static/posthog-recorder.js?v=1.360.2 3rd-party
other 0.00s
GET
https://eu-assets.i.posthog.com/static/surveys.js?v=1.360.2 3rd-party
other 0.00s
GET
https://eu-assets.i.posthog.com/static/dead-clicks-autocapture.js?v=1.360.2 3rd-party
other 0.00s
GET
https://eu-assets.i.posthog.com/static/web-vitals.js?v=1.360.2 3rd-party
other 0.00s
GET
https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/cmg/1 3rd-party
other 0.00s
POST
https://www.google-analytics.com/g/collect?v=2&tid=G-CXJH3FN9J2&gtm=45je63d1v9246474823za200zd9246474823&_p=1773751458130&gcd=13l3l3l3l1l1&npa=0&dma=0&cid=987841389.1773751459&ul=en-us&sr=1280x720&uaa=x86&uab=64&uafvl=Not%253AA-Brand%3B99.0.0.0%7CHeadlessChrome%3B145.0.7632.6%7CChromium%3B145.0.7632.6&uamb=0&uam=&uap=Linux&uapv=&uaw=0&are=1&frm=0&pscdl=noapi&_s=1&tag_exp=103116026~103200004~115938465~115938468~116024733~117484252&sid=1773751458&sct=1&seg=0&dl=https%3A%2F%2Fwww.scraperouter.com%2F&dt=Unified%20Web%20Scraping%20API%20%7C%20ScrapeRouter&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=2502 3rd-party
other 0.00s

Detections

WAF
cloudflare
CAPTCHA
recaptcha v2 turnstile
CDN
None
Antibot
None

Structured Metadata

Open Graph
[
  {
    "namespace": {
      "og": "http://ogp.me/ns#"
    },
    "properties": [
      [
        "og:title",
        "Unified Web Scraping API | ScrapeRouter"
      ],
      [
        "og:type",
        "website"
      ],
      [
        "og:url",
        "https://www.scraperouter.com/"
      ],
      [
        "og:image",
        "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png"
      ],
      [
        "og:description",
        "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers."
      ],
      [
        "og:site_name",
        "ScrapeRouter"
      ]
    ]
  }
]
JSON-LD
[
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "contactPoint": [
      {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "contact@scraperouter.com"
      }
    ],
    "email": "contact@scraperouter.com",
    "logo": "https://static.scraperouter.com/images/logo_white_padding.png",
    "name": "ScrapeRouter",
    "sameAs": [
      "https://x.com/ScrapeRouter",
      "https://www.reddit.com/user/scraperouter-com/"
    ],
    "url": "https://www.scraperouter.com"
  },
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "description": "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.",
    "image": "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png",
    "isPartOf": {
      "@type": "WebSite",
      "name": "ScrapeRouter",
      "url": "https://www.scraperouter.com"
    },
    "name": "Unified Web Scraping API | ScrapeRouter",
    "url": "https://www.scraperouter.com/"
  }
]
Microformat
[
  {
    "lang": "en",
    "properties": {
      "name": [
        "SCRAPERS PROXIES Request Playwright cURL & more Datacenter Residential & more Scrape API provider Success"
      ]
    },
    "type": [
      "h-auto"
    ]
  }
]

Scraper Response Data

Response payload
{
  "content": "<!DOCTYPE html><html lang=\"en\" data-theme=\"light\"><head>\n        <meta charset=\"utf-8\">\n        <!--IE compatibility-->\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <!--Mobile friendly-->\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        \n            \n                \n                    \n                        \n                        \n                            <title>\n                                \n                                    Unified Web Scraping API | ScrapeRouter\n                                \n                            </title>\n                            <meta name=\"description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"keywords\" content=\"scraping, intelligence\">\n                            <!-- Twitter Card data -->\n                            <meta name=\"twitter:card\" content=\"summary_large_image\">\n                            <meta name=\"twitter:title\" content=\"Unified Web Scraping API | ScrapeRouter\">\n                            <meta name=\"twitter:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"twitter:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\">\n                            <!-- Open Graph data -->\n                            <meta property=\"og:title\" content=\"Unified Web Scraping API | ScrapeRouter\">\n                            <meta property=\"og:type\" content=\"website\">\n                            <meta property=\"og:url\" content=\"https://www.scraperouter.com/\">\n                            <meta property=\"og:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\">\n                            <meta property=\"og:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta property=\"og:site_name\" content=\"ScrapeRouter\">\n                            <meta name=\"robots\" content=\"index,follow\">\n                            <link rel=\"canonical\" href=\"https://www.scraperouter.com/\">\n                        \n                    \n                \n            \n        \n        \n<link rel=\"icon\" type=\"image/svg+xml\" href=\"https://static.scraperouter.com/images/favicons/favicon.svg\">\n\n        <!-- Roboto Font -->\n        <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n        <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"\">\n        <link href=\"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&amp;display=swap\" rel=\"stylesheet\">\n        <style>\n      /* Hide Alpine.js elements until initialized */\n      [x-cloak] { display: none !important; }\n        </style>\n        \n        <!-- Vite HMR client must load first for proper CSS injection -->\n        \n        <link rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-base.css\">\n<script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-base-bundle.js\"></script>\n        <link rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-tailwind.css\">\n<script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-tailwind-bundle.js\"></script>\n        <!-- Phosphor Icons (https://phosphoricons.com) -->\n        <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css\" crossorigin=\"anonymous\">\n        <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css\" crossorigin=\"anonymous\">\n        \n            <!-- Google tag (gtag.js) -->\n<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2\"></script>\n<script>\n  window.dataLayer = window.dataLayer || [];\n  function gtag() { dataLayer.push(arguments); }\n  gtag(\"js\", new Date());\n\n  gtag(\"config\", \"G-CXJH3FN9J2\");\n</script>\n\n        \n        \n            <script>\n  window.posthogConfig = {\n    apiKey: \"phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T\",\n    host: \"https://eu.i.posthog.com\",\n  };\n</script>\n\n        \n        <script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-bundle.js\"></script>\n        <script>__cssFramework = 'tailwind';</script>\n        <script src=\"/jsi18n/\" defer=\"\"></script>\n        \n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css\">\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js\"></script>\n<style>\npre code.hljs {\n    border-radius: 0.5rem;\n    font-size: 0.8125rem;\n    line-height: 1.625;\n}\n.code-tabs pre code.hljs {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n</style>\n\n    \n        <script src=\"https://challenges.cloudflare.com/turnstile/v0/api.js\" async=\"\" defer=\"\"></script>\n    \n\n        <script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\",\"logo\":\"https://static.scraperouter.com/images/logo_white_padding.png\",\"email\":\"contact@scraperouter.com\",\"sameAs\":[\"https://x.com/ScrapeRouter\",\"https://www.reddit.com/user/scraperouter-com/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"email\":\"contact@scraperouter.com\",\"contactType\":\"customer support\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Unified Web Scraping API | ScrapeRouter\",\"description\":\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\",\"url\":\"https://www.scraperouter.com/\",\"image\":\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\"}}</script>\n    </head>\n    <body hx-headers=\"{&quot;X-CSRFToken&quot;: &quot;aJsXjwuNYxMJtyqV23UN6e4A1HU9o1sv1xbrxudwFqEUdCUBOvjUlCBIHwOZg3o4&quot;}\" class=\"vite-loaded\">\n        \n    <div class=\"min-h-screen dark:bg-gray-900 flex flex-col\">\n        <header class=\"sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800\">\n            \n<nav aria-label=\"Global\" class=\"mx-auto max-w-7xl w-full flex items-center justify-between px-4 sm:px-6 lg:px-0 py-4 sm:py-6\">\n    <div class=\"flex lg:flex-1\">\n        <a href=\"/\" class=\"-m-1.5 p-1.5 flex items-center gap-x-2\">\n            <div class=\"size-5 object-cover\">\n                <img src=\"https://static.scraperouter.com/images/logo.svg\" alt=\"ScrapeRouter\" class=\"h-5 dark:invert\">\n            </div>\n            <span class=\"sr-only\">ScrapeRouter</span>\n            <span class=\"text-lg font-bold text-black dark:text-white\">ScrapeRouter</span>\n        </a>\n    </div>\n    <div class=\"flex lg:hidden\">\n        <button type=\"button\" class=\"-m-2.5 inline-flex cursor-pointer items-center justify-center rounded-md p-2.5 text-gray-800 dark:text-gray-200\" onclick=\"toggleMobileMenu()\">\n            <span class=\"sr-only\">Open main menu</span>\n            <i class=\"ph ph-list text-xl\" aria-hidden=\"true\"></i>\n        </button>\n    </div>\n    <div class=\"hidden lg:flex lg:gap-x-8 lg:items-center\">\n        <a href=\"/check/?src=navbar\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Free Check</a>\n        <a href=\"/scrapers/\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Scrapers</a>\n        <a href=\"/#pricing\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Pricing</a>\n        <a href=\"/docs/quickstart/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Docs</a>\n        \n            <div class=\"flex items-center gap-2\">\n                <a href=\"/accounts/login/\" class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n            </div>\n        \n    </div>\n</nav>\n<!-- Mobile menu -->\n<div id=\"mobile-menu\" class=\"hidden lg:hidden\">\n    <div id=\"mobile-menu-backdrop\" class=\"fixed inset-0 z-50\" onclick=\"closeMobileMenu()\">\n        <div class=\"fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-white p-4 sm:max-w-sm sm:p-6 sm:ring-1 sm:ring-gray-900/10 dark:bg-gray-900 dark:sm:ring-gray-100/10\" onclick=\"event.stopPropagation()\">\n            <div class=\"flex items-center justify-between\">\n                <button type=\"button\" class=\"-m-2.5 rounded-md p-2.5 text-gray-800 dark:text-gray-200 cursor-pointer\" onclick=\"toggleMobileMenu()\">\n                    <span class=\"sr-only\">Close menu</span>\n                    <i class=\"ph ph-x text-xl\" aria-hidden=\"true\"></i>\n                </button>\n            </div>\n            <div class=\"mt-6 flow-root\">\n                <div class=\"-my-6 divide-y divide-gray-500/10 dark:divide-white/10\">\n                    <div class=\"space-y-2 py-6\">\n                        <a href=\"/check/?src=navbar_mobile\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Free Check</a>\n                        <a href=\"/scrapers/\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Scrapers</a>\n                        <a href=\"/#pricing\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Pricing</a>\n                        <a href=\"/docs/quickstart/\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Docs</a>\n                        \n                            <a href=\"/accounts/login/\" onclick=\"toggleMobileMenu()\" class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                            <a href=\"/accounts/signup/\" onclick=\"toggleMobileMenu()\" class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n                        \n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n        </header>\n        <div class=\"relative isolate px-0 lg:px-8 flex-1\">\n            \n    <!-- Hero Section -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-24 lg:pt-32 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl text-center\">\n                <h1 class=\"text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white\">\n                    The Unified Interface\n                    <br>\n                    <span class=\"text-primary/90\">For Scraping</span>\n                </h1>\n                <p class=\"mt-6 text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto\">\n                    <span class=\"text-primary/90 font-semibold\">One API</span> for all your web scraping needs. Choose the optimal scraping method for a given request.\n                </p>\n                <div class=\"mt-10 flex flex-col items-center gap-4\">\n                    <div class=\"flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center\">\n                        <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary px-8\">\n                            Start scraping for free\n                            <i class=\"ph ph-arrow-right ml-2\" aria-hidden=\"true\"></i>\n                        </a>\n                        <a href=\"/docs/quickstart/\" target=\"_blank\" class=\"btn btn-rounded-full btn-ghost px-8\">\n                            <i class=\"ph ph-code mr-2\" aria-hidden=\"true\"></i>\n                            Read the Docs\n                        </a>\n                    </div>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Get <span class=\"font-semibold text-gray-900 dark:text-white\">$5 free credits</span> to start in 60 seconds. No credit card required.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Free URL Check -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-12 pb-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 p-6 text-left\">\n                <div class=\"flex items-center gap-2 mb-1\">\n                    <i class=\"ph ph-shield-check text-xl text-primary/90\" aria-hidden=\"true\"></i>\n                    <h2 class=\"text-sm font-semibold uppercase tracking-wide text-gray-900 dark:text-white\">Run a free URL check</h2>\n                </div>\n                <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n                    Analyze scraping viability with a preconfigured datacenter matrix and advanced bypass routing.\n                </p>\n                <form id=\"public-check-form\" method=\"post\" action=\"/checks/public/create/\" class=\"mt-4 space-y-3\" data-public-check-form=\"true\" data-track-submit-event=\"check_submit\" data-public-check-bound=\"true\" data-public-check-submitting=\"false\">\n                    <input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"aJsXjwuNYxMJtyqV23UN6e4A1HU9o1sv1xbrxudwFqEUdCUBOvjUlCBIHwOZg3o4\" style=\"\">\n                    <input type=\"hidden\" name=\"next\" value=\"/\" style=\"\">\n                    <div class=\"flex flex-col sm:flex-row\">\n                        <div class=\"relative w-full\">\n                            <input type=\"url\" name=\"url\" required=\"\" placeholder=\"https://example.com\" class=\"input w-full pl-9 rounded-b-none! sm:rounded-b-md! sm:rounded-r-none!\" id=\"public-check-url\" style=\"\">\n                        </div>\n                        <button type=\"submit\" id=\"public-check-submit\" aria-busy=\"false\" class=\"btn -mt-[1px] sm:mt-0 sm:-ml-[1px] z-10 btn-rounded-md rounded-t-none! sm:rounded-t-md! sm:rounded-l-none! btn-outline whitespace-nowrap\">\n                            <span data-button-idle=\"\">Run free check</span>\n                            <span data-button-loading=\"\" class=\"hidden items-center gap-2\">\n                                <svg class=\"size-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n    <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\"></circle>\n    <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"></path>\n</svg>\n\n                                <span>Running...</span>\n                            </span>\n                        </button>\n                    </div>\n                    \n                        <div class=\"w-full flex justify-center\">\n                            <div class=\"cf-turnstile\" data-sitekey=\"0x4AAAAAAB3BcyrO00rWKcD1\"><div><input type=\"hidden\" name=\"cf-turnstile-response\" id=\"cf-chl-widget-4m35b_response\"></div></div>\n                        </div>\n                    \n                </form>\n                \n            </div>\n        </div>\n    </section>\n    <!-- Intelligent Path Selection -->\n    <section id=\"path-selection\" class=\"w-full border-b border-gray-200 dark:border-gray-800 hidden md:block scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl py-16\">\n                <p class=\"text-xs font-semibold tracking-[0.2em] text-gray-400 dark:text-gray-500 text-center uppercase mb-8\">\n                    Intelligent Routing\n                </p>\n                <div id=\"scraping-path-animation\" class=\"w-full mx-auto\"><svg viewBox=\"12 23 1006 439\" class=\"w-full h-auto\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-label=\"Intelligent routing visualization showing request flowing through scraper and proxy selection to success\">\n      <defs>\n        <filter id=\"sr-glow\">\n          <feGaussianBlur stdDeviation=\"3\" result=\"b\"></feGaussianBlur>\n          <feMerge><feMergeNode in=\"b\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge>\n        </filter>\n      </defs>\n\n      <g class=\"sr-scene\">\n        <!-- Column labels -->\n        <text x=\"370\" y=\"62\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-600\" style=\"font-size:10px;font-weight:600;letter-spacing:0.15em\">SCRAPERS</text>\n        <text x=\"660\" y=\"62\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-600\" style=\"font-size:10px;font-weight:600;letter-spacing:0.15em\">PROXIES</text>\n\n        <!-- Inactive paths (dashed) -->\n        <g class=\"sr-inactive\" opacity=\"0\">\n          <path d=\"M 108,200 C 230,200 270,200 348,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 108,200 C 230,200 270,300 348,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 392,100 C 500,100 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,100 C 500,100 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,100 C 500,100 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 682,100 C 780,100 880,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 682,300 C 780,300 880,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 108,200 C 260,220 380,390 493,390\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 537,390 C 700,390 870,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n        </g>\n\n        <!-- Optimal paths (solid, animated) -->\n        <path class=\"sr-opt\" d=\"M 108,200 C 230,200 270,100 348,100\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"0\"></path>\n        <path class=\"sr-opt\" d=\"M 392,100 C 500,100 560,200 638,200\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"0\"></path>\n        <path class=\"sr-opt\" d=\"M 682,200 C 780,200 880,200 922,200\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"0\"></path>\n\n        <!-- Request node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"80\" cy=\"200\" r=\"28\" class=\"fill-white dark:fill-gray-900\" stroke=\"var(--color-primary)\" stroke-width=\"2\" stroke-opacity=\"0.7\"></circle>\n          <g transform=\"translate(80,200)\" stroke=\"var(--color-primary)\" stroke-width=\"1.5\" stroke-opacity=\"0.7\" fill=\"none\">\n            <circle r=\"10\"></circle>\n            <line x1=\"-10\" y1=\"0\" x2=\"10\" y2=\"0\"></line>\n            <path d=\"M 0,-10 Q 5,0 0,10\"></path>\n            <path d=\"M 0,-10 Q -5,0 0,10\"></path>\n          </g>\n          <text x=\"80\" y=\"244\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:13px;font-weight:500\">Request</text>\n        </g>\n\n        <!-- Playwright node (optimal) -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"100\" r=\"22\" fill=\"var(--color-primary)\" fill-opacity=\"0.7\"></circle>\n          <g transform=\"translate(370,100)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <rect x=\"-8\" y=\"-6\" width=\"16\" height=\"12\" rx=\"2\"></rect>\n            <line x1=\"-8\" y1=\"-2\" x2=\"8\" y2=\"-2\"></line>\n            <circle cx=\"-5.5\" cy=\"-4\" r=\"0.7\" fill=\"#fff\" stroke=\"none\"></circle>\n            <circle cx=\"-3.2\" cy=\"-4\" r=\"0.7\" fill=\"#fff\" stroke=\"none\"></circle>\n            <line x1=\"-4\" y1=\"2\" x2=\"4\" y2=\"2\"></line>\n          </g>\n          <text x=\"370\" y=\"138\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px;font-weight:600\">Playwright</text>\n        </g>\n\n        <!-- cURL node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"200\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(370,200)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -5,-6 L -8,0 L -5,6\"></path>\n            <path d=\"M 5,-6 L 8,0 L 5,6\"></path>\n          </g>\n          <text x=\"370\" y=\"238\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">cURL</text>\n        </g>\n\n        <!-- More scrapers placeholder -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"300\" r=\"22\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\"></circle>\n          <g transform=\"translate(370,300)\" class=\"stroke-gray-400 dark:stroke-gray-500\" stroke-width=\"2\" stroke-linecap=\"round\">\n            <line x1=\"0\" y1=\"-6\" x2=\"0\" y2=\"6\"></line>\n            <line x1=\"-6\" y1=\"0\" x2=\"6\" y2=\"0\"></line>\n          </g>\n          <text x=\"370\" y=\"338\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-500\" style=\"font-size:11px\">&amp; more</text>\n        </g>\n\n        <!-- Datacenter proxy node -->\n        <g class=\"sr-node\" opacity=\"0\">\n          <circle cx=\"660\" cy=\"100\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(660,100)\" fill=\"none\">\n            <rect x=\"-7\" y=\"-7\" width=\"14\" height=\"5\" rx=\"1.5\" stroke=\"#fff\" stroke-width=\"1.5\"></rect>\n            <rect x=\"-7\" y=\"1\" width=\"14\" height=\"5\" rx=\"1.5\" stroke=\"#fff\" stroke-width=\"1.5\"></rect>\n            <circle cx=\"4\" cy=\"-4.5\" r=\"1\" fill=\"#fff\"></circle>\n            <circle cx=\"4\" cy=\"3.5\" r=\"1\" fill=\"#fff\"></circle>\n          </g>\n          <text x=\"660\" y=\"138\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">Datacenter</text>\n        </g>\n\n        <!-- Residential proxy node (optimal) -->\n        <g class=\"sr-node\" opacity=\"0\">\n          <circle cx=\"660\" cy=\"200\" r=\"22\" fill=\"var(--color-primary)\" fill-opacity=\"0.7\"></circle>\n          <g transform=\"translate(660,200)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M 0,-7 L 7,1 L -7,1 Z\"></path>\n            <rect x=\"-5\" y=\"1\" width=\"10\" height=\"6\"></rect>\n          </g>\n          <text x=\"660\" y=\"238\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px;font-weight:600\">Residential</text>\n        </g>\n\n        <!-- More proxies placeholder -->\n        <g class=\"sr-node\" opacity=\"0\">\n          <circle cx=\"660\" cy=\"300\" r=\"22\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\"></circle>\n          <g transform=\"translate(660,300)\" class=\"stroke-gray-400 dark:stroke-gray-500\" stroke-width=\"2\" stroke-linecap=\"round\">\n            <line x1=\"0\" y1=\"-6\" x2=\"0\" y2=\"6\"></line>\n            <line x1=\"-6\" y1=\"0\" x2=\"6\" y2=\"0\"></line>\n          </g>\n          <text x=\"660\" y=\"338\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-500\" style=\"font-size:11px\">&amp; more</text>\n        </g>\n\n        <!-- 3rd Party provider node -->\n        <g class=\"sr-node\" opacity=\"0\">\n          <circle cx=\"515\" cy=\"390\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(515,390)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -1,-1 L -6,-1 L -6,6 L 1,6 L 1,1\"></path>\n            <line x1=\"1\" y1=\"-1\" x2=\"6\" y2=\"-6\"></line>\n            <polyline points=\"2,-6 6,-6 6,-2\"></polyline>\n          </g>\n          <text x=\"515\" y=\"428\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">Scrape API provider</text>\n        </g>\n\n        <!-- Success node -->\n        <g class=\"sr-node\" opacity=\"0\">\n          <circle cx=\"950\" cy=\"200\" r=\"28\" class=\"fill-white dark:fill-gray-900\" stroke=\"var(--color-green-700)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\"></circle>\n          <g transform=\"translate(950,200)\" stroke=\"var(--color-green-700)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -7,0 L -2,5 L 8,-5\"></path>\n          </g>\n          <text x=\"950\" y=\"244\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:13px;font-weight:500\">Success</text>\n        </g>\n\n      </g>\n\n      <!-- Traveling dot along optimal path -->\n      <circle class=\"sr-dot\" r=\"4\" fill=\"var(--color-primary-400)\" fill-opacity=\"0.7\" opacity=\"0\">\n        <animateMotion dur=\"4s\" repeatCount=\"indefinite\" begin=\"indefinite\" path=\"M 80,200 C 230,200 270,100 370,100 C 500,100 560,200 660,200 C 800,200 900,200 950,200\"></animateMotion>\n        <animate attributeName=\"r\" values=\"3;5;3\" dur=\"1.5s\" repeatCount=\"indefinite\"></animate>\n      </circle>\n    </svg></div>\n            </div>\n        </div>\n    </section>\n    <!-- How It Works -->\n    <section id=\"how-it-works\" class=\"w-full border-b border-gray-200 dark:border-gray-800 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-5xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">How It Works</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">Get started in minutes.</p>\n                <div class=\"mt-16 flex flex-col lg:flex-row items-center justify-center gap-6 lg:gap-0\">\n                    <!-- Step 1: Sign Up -->\n                    <a href=\"/accounts/signup/\" class=\"flex flex-col items-center text-center max-w-48 group p-6 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-300\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-user-plus text-2xl \" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2 group-hover:underline\">Sign up</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400 group-hover:underline\">Create an account to get started.</p>\n                    </a>\n                    <!-- Arrow 1\u21922 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 2: Add Credits -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-coins text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get free credits</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Credits work with any scraper or proxy.</p>\n                    </div>\n                    <!-- Arrow 2\u21923 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 3: Get API Key -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-key text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get your API key</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Create an API key and start making requests.</p>\n                    </div>\n                    <!-- Arrow 3\u21924 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 4: Cost-Effective & Unified Results -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-currency-dollar-simple text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Scrape</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Consistent schema and optimized cost.</p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Developer First Features -->\n    <section id=\"features\" class=\"w-full border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 py-18\">\n            <div class=\"mx-auto max-w-2xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Developer First Features</h2>\n            </div>\n            <div class=\"mt-16 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-package text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Unified Schema</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Receive the same JSON response regardless of which provider fulfilled it.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-dots-nine text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Many Scrapers</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Use multiple scraping providers and libraries through a single integration.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-brain text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Smart Routing</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        We route to the best provider for each domain and automatically retry with the next best option if it fails.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-currency-dollar text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Cost Optimization</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Attempt requests via the cheapest provider first, escalating to premium only if necessary.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Quick Start -->\n    <section class=\"w-full border-b border-gray-200 dark:border-gray-800\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl lg:max-w-6xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">Quick Start</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">One request is all it takes.</p>\n                <div class=\"mt-12 flex flex-col lg:flex-row lg:items-center lg:justify-center gap-6 lg:gap-4\">\n                    <div class=\"flex-1 min-w-0\">\n                        <div x-data=\"{ tab: 'curl' }\" class=\"code-tabs not-prose rounded-lg overflow-hidden\" data-copy-button-added=\"true\">\n                            \n<div class=\"code-tabs-header flex items-end bg-[#0d1117] rounded-t-lg px-2 pt-2 border-b border-gray-700\">\n    \n        <button @click=\"tab = 'curl'\" :class=\"tab === 'curl' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-blue-400 text-gray-100\">cURL</button>\n    \n    <button @click=\"tab = 'python'\" :class=\"tab === 'python' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-transparent text-gray-500 hover:text-gray-300\">Python</button>\n    \n        <button @click=\"tab = 'javascript'\" :class=\"tab === 'javascript' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-transparent text-gray-500 hover:text-gray-300\">JavaScript</button>\n    \n<button type=\"button\" class=\"code-snippet-copy-button code-snippet-copy-button-inline\" title=\"Copy code\" aria-label=\"Copy code\"><i class=\"ph ph-copy\" aria-hidden=\"true\"></i></button></div>\n\n                            <div class=\"bg-[#0d1117] [&amp;_pre]:m-0 [&amp;_pre]:rounded-none [&amp;_pre]:overflow-x-auto\">\n                                <div x-show=\"tab === 'curl'\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-bash hljs\" data-highlighted=\"yes\"><span class=\"hljs-meta\">#!/usr/bin/env bash</span>\ncurl -X POST https://www.scraperouter.com/api/v1/scrape/ \\\n  -H <span class=\"hljs-string\">\"Authorization: Api-Key {your_api_key}\"</span> \\\n  -H <span class=\"hljs-string\">\"Content-Type: application/json\"</span> \\\n  -d <span class=\"hljs-string\">'{\n  \"url\": \"https://example.com\",\n  \"scraper\": \"auto\"\n}'</span></code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'python'\" style=\"display: none;\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-python hljs\" data-highlighted=\"yes\"><span class=\"hljs-keyword\">import</span> requests\n\nresponse = requests.post(\n    <span class=\"hljs-string\">\"https://www.scraperouter.com/api/v1/scrape/\"</span>,\n    headers={<span class=\"hljs-string\">\"Authorization\"</span>: <span class=\"hljs-string\">\"Api-Key {your_api_key}\"</span>},\n    json={\n        <span class=\"hljs-string\">\"url\"</span>: <span class=\"hljs-string\">\"https://example.com\"</span>,\n        <span class=\"hljs-string\">\"scraper\"</span>: <span class=\"hljs-string\">\"auto\"</span>,\n    },\n)\n<span class=\"hljs-built_in\">print</span>(response.json())</code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'javascript'\" style=\"display: none;\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-javascript hljs\" data-highlighted=\"yes\"><span class=\"hljs-keyword\">const</span> response = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">\"https://www.scraperouter.com/api/v1/scrape/\"</span>, {\n  <span class=\"hljs-attr\">method</span>: <span class=\"hljs-string\">\"POST\"</span>,\n  <span class=\"hljs-attr\">headers</span>: {\n    <span class=\"hljs-string\">\"Authorization\"</span>: <span class=\"hljs-string\">\"Api-Key {your_api_key}\"</span>,\n    <span class=\"hljs-string\">\"Content-Type\"</span>: <span class=\"hljs-string\">\"application/json\"</span>,\n  },\n  <span class=\"hljs-attr\">body</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>({\n    <span class=\"hljs-attr\">url</span>: <span class=\"hljs-string\">\"https://example.com\"</span>,\n    <span class=\"hljs-attr\">scraper</span>: <span class=\"hljs-string\">\"auto\"</span>,\n  }),\n});\n\n<span class=\"hljs-keyword\">const</span> data = <span class=\"hljs-keyword\">await</span> response.<span class=\"hljs-title function_\">json</span>();\n<span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(data);</code></pre>\n\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"flex flex-shrink-0 items-center justify-center px-2 w-full lg:w-auto\">\n                        <i class=\"hidden lg:flex ph ph-arrow-right text-3xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                        <i class=\"lg:hidden ph ph-arrow-down text-3xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex-1 min-w-0\">\n                        <div class=\"rounded-lg overflow-hidden border bg-[#0d1117] [&amp;_pre]:m-0 [&amp;_pre]:rounded-none [&amp;_pre]:overflow-x-auto\">\n                            \n<pre class=\"overflow-x-auto code-snippet-copy-ready\" data-copy-button-added=\"true\"><code class=\"language-json hljs\" data-highlighted=\"yes\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">\"id\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"550e8400-e29b-41d4-a716-446655440000\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"status_code\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">200</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"url\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"https://example.com\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"content\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"&lt;!doctype html&gt;...\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"headers\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">\"content-type\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"text/html; charset=UTF-8\"</span>\n  <span class=\"hljs-punctuation\">}</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"scraper\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"apiritif/requests:2.32\"</span>\n<span class=\"hljs-punctuation\">}</span></code><button type=\"button\" class=\"code-snippet-copy-button\" title=\"Copy code\" aria-label=\"Copy code\"><i class=\"ph ph-copy\" aria-hidden=\"true\"></i></button></pre>\n\n                        </div>\n                    </div>\n                </div>\n                <p class=\"mt-20 text-center text-sm text-gray-600 dark:text-gray-400\">\n                    Want to learn more?\n                    <a href=\"/docs/quickstart/\" class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">Read the documentation</a>\n                </p>\n            </div>\n        </div>\n    </section>\n    <!-- Simple Pricing -->\n    <section class=\"w-full dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 pt-18 pb-40\">\n            <div id=\"pricing\" class=\"mx-auto bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 p-6 sm:p-8 rounded-3xl max-w-xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Simple Pricing</h2>\n                <div class=\"mt-8\">\n                    <div class=\"text-5xl font-semibold text-gray-900 dark:text-white\">$0</div>\n                    <div class=\"text-lg text-gray-600 dark:text-gray-400 mt-2\">/ month</div>\n                </div>\n                <p class=\"mt-4 text-base text-gray-600 dark:text-gray-400\">\n                    Pay-as-you-go. See\n                    <a href=\"/scrapers/\" class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">detailed per-request pricing</a>\n                    for each scraper.\n                </p>\n                <ul class=\"mt-8 space-y-3 text-left max-w-md mx-auto\">\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>No minimums</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>No subscriptions</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>One consolidated bill</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>Real-time cost tracking</span>\n                    </li>\n                </ul>\n                <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary mt-8\">Sign up</a>\n            </div>\n        </div>\n    </section>\n    <script>\n    document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n      anchor.addEventListener('click', function (e) {\n        const href = this.getAttribute('href');\n        if (href !== '#' && href.startsWith('#')) {\n          e.preventDefault();\n          const target = document.querySelector(href);\n          if (target) {\n            target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          }\n        }\n      });\n    });\n    if (typeof hljs !== 'undefined') {\n      hljs.highlightAll();\n    }\n    </script>\n\n        </div>\n        <div class=\"bg-gray-50 dark:bg-gray-900\">\n            <div class=\"border-x border-gray-200 dark:border-gray-800 max-w-7xl mx-auto\">\n                <footer class=\"mx-auto w-full px-4 sm:px-6 py-6 lg:px-8\">\n    <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\n        <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n            \u00a9 2026\n            <a href=\"/\" class=\"hover:text-gray-900 dark:hover:text-white transition-colors\">ScrapeRouter</a>. All rights reserved.\n        </p>\n        <div class=\"flex items-center gap-6\">\n            <nav class=\"flex items-center gap-4 text-sm\">\n                <a href=\"/terms/\" class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Terms</a>\n                <a href=\"/privacy/\" class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Privacy Policy</a>\n            </nav>\n            <button type=\"button\" id=\"theme-toggle\" class=\"btn btn-rounded-full btn-ghost gap-2 w-22\" aria-label=\"Toggle theme\">\n                <span id=\"theme-icon\" class=\"text-base size-6\">\ud83d\udcbb</span>\n                <span id=\"theme-label\">Auto</span>\n            </button>\n        </div>\n    </div>\n</footer>\n\n            </div>\n        </div>\n    </div>\n\n        <script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/web-vitals.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/dead-clicks-autocapture.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/surveys.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/posthog-recorder.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/array/phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T/config.js\"></script><script>\n    document.addEventListener('DOMContentLoaded', () => {\n      (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n        let $notification = $delete.parentNode;\n        $delete.addEventListener('click', () => {\n          $notification.parentNode.removeChild($notification);\n        });\n      });\n    });\n</script>\n\n        <script>\n    function syncDarkMode() {\n      const darkTheme = 'dark' || 'dark';\n      const lightTheme = 'light' || 'light';\n      const autoTheme = 'auto';\n\n      const theme = localStorage.getItem('theme') || autoTheme;\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n      if (theme === darkTheme || (theme === autoTheme && prefersDark)) {\n        document.documentElement.classList.add('dark');\n        document.documentElement.setAttribute('data-theme', darkTheme);\n        document.cookie = `theme=${darkTheme};path=/;max-age=31536000`;\n      } else {\n        document.documentElement.classList.remove('dark');\n        document.documentElement.setAttribute('data-theme', lightTheme);\n        document.cookie = `theme=${lightTheme};path=/;max-age=31536000`;\n      }\n    }\n\n    function getCurrentTheme() {\n      return localStorage.getItem('theme') || 'auto';\n    }\n\n    function setTheme(theme) {\n      localStorage.setItem('theme', theme);\n      syncDarkMode();\n      updateThemeButton();\n      window.dispatchEvent(new Event('storage'));\n    }\n\n    function cycleTheme() {\n      const current = getCurrentTheme();\n      const themes = ['light', 'dark', 'auto'];\n      const currentIndex = themes.indexOf(current);\n      const nextIndex = (currentIndex + 1) % themes.length;\n      setTheme(themes[nextIndex]);\n    }\n\n    function updateThemeButton() {\n      const theme = getCurrentTheme();\n      const icon = document.getElementById('theme-icon');\n      const label = document.getElementById('theme-label');\n\n      if (!icon || !label) return;\n\n      if (theme === 'light') {\n        icon.textContent = '\u2600\ufe0f';\n        label.textContent = 'Light';\n      } else if (theme === 'dark') {\n        icon.textContent = '\ud83c\udf19';\n        label.textContent = 'Dark';\n      } else {\n        icon.textContent = '\ud83d\udcbb';\n        label.textContent = 'Auto';\n      }\n    }\n\n    syncDarkMode();\n\n    document.addEventListener('DOMContentLoaded', () => {\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      mediaQuery.addEventListener('change', () => {\n        syncDarkMode();\n        updateThemeButton();\n      });\n\n      window.addEventListener('storage', (event) => {\n        if (event.key === 'theme') {\n          syncDarkMode();\n          updateThemeButton();\n        }\n      });\n\n      updateThemeButton();\n\n      const themeToggle = document.getElementById('theme-toggle');\n      if (themeToggle) {\n        themeToggle.addEventListener('click', cycleTheme);\n      }\n\n      const mobileMenu = document.getElementById(\"mobile-menu\");\n      if (mobileMenu) {\n        document.addEventListener(\"click\", function(event) {\n          const menuButton = event.target.closest(\"button[onclick='toggleMobileMenu()']\");\n          if (!mobileMenu.classList.contains(\"hidden\") && !mobileMenu.contains(event.target) && !menuButton) {\n            mobileMenu.classList.add(\"hidden\");\n          }\n        });\n      }\n    });\n\n    function toggleMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.toggle(\"hidden\");\n    }\n\n    function closeMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.add(\"hidden\");\n    }\n        </script>\n        \n        \n    \n\n</body></html>",
  "cookies": null,
  "errors": null,
  "final_url": "https://www.scraperouter.com/",
  "headers": {
    "alt-svc": "h3=\":443\"; ma=2592000",
    "content-language": "en",
    "content-length": "39758",
    "content-type": "text/html; charset=utf-8",
    "cross-origin-opener-policy": "same-origin",
    "date": "Tue, 17 Mar 2026 12:44:17 GMT",
    "referrer-policy": "same-origin",
    "server": "gunicorn",
    "set-cookie": "scraperouter_language=en; Path=/\ncsrftoken=1YTEo8TTR32lUeEQWCzhpyHiQZ402c6J; expires=Tue, 16 Mar 2027 12:44:17 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure",
    "strict-transport-security": "max-age=60; includeSubDomains; preload",
    "vary": "Cookie, Accept-Language, origin",
    "via": "1.1 Caddy",
    "x-content-type-options": "nosniff",
    "x-frame-options": "DENY"
  },
  "id": null,
  "scraper_data": null,
  "scraperouter": null,
  "screenshot_url": null,
  "status_code": 200
}

Page Title

Unified Web Scraping API | ScrapeRouter

[ ScrapeRouter ScrapeRouter ](/)

Open main menu __

[Free Check](/check/?src=navbar) [Scrapers](/scrapers/) [Pricing](/#pricing)
[Docs](/docs/quickstart/)

[Sign in](/accounts/login/) [Sign up](/accounts/signup/)

Close menu __

[Free Check](/check/?src=navbar_mobile) [Scrapers](/scrapers/)
[Pricing](/#pricing) [Docs](/docs/quickstart/) [Sign in](/accounts/login/)
[Sign up](/accounts/signup/)

#  The Unified Interface  
For Scraping

One API for all your web scraping needs. Choose the optimal scraping method
for a given request.

[ Start scraping for free __](/accounts/signup/) [ __Read the
Docs](/docs/quickstart/)

Get $5 free credits to start in 60 seconds. No credit card required.

__

## Run a free URL check

Analyze scraping viability with a preconfigured datacenter matrix and advanced
bypass routing.

Run free check Running...

Intelligent Routing

SCRAPERS PROXIES Request Playwright cURL & more Datacenter Residential & more
Scrape API provider Success

## How It Works

Get started in minutes.

[ __ Sign up Create an account to get started. ](/accounts/signup/)

__

__

__

### Get free credits

Credits work with any scraper or proxy.

__

__

__

### Get your API key

Create an API key and start making requests.

__

__

__

### Scrape

Consistent schema and optimized cost.

## Developer First Features

__

### Unified Schema

Receive the same JSON response regardless of which provider fulfilled it.

__

### Many Scrapers

Use multiple scraping providers and libraries through a single integration.

__

### Smart Routing

We route to the best provider for each domain and automatically retry with the
next best option if it fails.

__

### Cost Optimization

Attempt requests via the cheapest provider first, escalating to premium only
if necessary.

## Quick Start

One request is all it takes.

cURL Python JavaScript __

    
    
    #!/usr/bin/env bash
    curl -X POST https://www.scraperouter.com/api/v1/scrape/ \
      -H "Authorization: Api-Key {your_api_key}" \
      -H "Content-Type: application/json" \
      -d '{
      "url": "https://example.com",
      "scraper": "auto"
    }'
    
    
    import requests
    
    response = requests.post(
        "https://www.scraperouter.com/api/v1/scrape/",
        headers={"Authorization": "Api-Key {your_api_key}"},
        json={
            "url": "https://example.com",
            "scraper": "auto",
        },
    )
    print(response.json())
    
    
    const response = await fetch("https://www.scr

Page Title

Unified Web Scraping API | ScrapeRouter

Response Headers

{
  "alt-svc": "h3=\":443\"; ma=2592000",
  "content-language": "en",
  "content-length": "39758",
  "content-type": "text/html; charset=utf-8",
  "cross-origin-opener-policy": "same-origin",
  "date": "Tue, 17 Mar 2026 12:44:17 GMT",
  "referrer-policy": "same-origin",
  "server": "gunicorn",
  "strict-transport-security": "max-age=60; includeSubDomains; preload",
  "vary": "Cookie, Accept-Language, origin",
  "via": "1.1 Caddy",
  "x-content-type-options": "nosniff",
  "x-frame-options": "DENY"
}

Request Options

{
  "proxy": {
    "type": "datacenter"
  },
  "scraper_options": {
    "network_requests": true
  },
  "screenshot": true,
  "url": "https://www.scraperouter.com/"
}

26 requests captured

Method URL Status Type Time
GET
https://static.scraperouter.com/images/favicons/favicon.svg 3rd-party
200 image 0.30s
GET
https://www.scraperouter.com/
200 document 0.35s
GET
https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap 3rd-party
200 css 0.47s
GET
https://static.scraperouter.com/css/site-base.css 3rd-party
200 css 0.57s
GET
https://static.scraperouter.com/js/site-base-bundle.js 3rd-party
200 script 0.47s
GET
https://static.scraperouter.com/css/site-tailwind.css 3rd-party
200 css 0.46s
GET
https://static.scraperouter.com/js/site-tailwind-bundle.js 3rd-party
200 script 0.47s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css 3rd-party
200 css 0.46s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css 3rd-party
200 css 0.56s
GET
https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2 3rd-party
200 script 0.49s
GET
https://static.scraperouter.com/js/site-bundle.js 3rd-party
200 script 0.47s
GET
https://www.scraperouter.com/jsi18n/
200 script 0.22s
GET
https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css 3rd-party
200 css 0.46s
GET
https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js 3rd-party
200 script 0.49s
GET
https://challenges.cloudflare.com/turnstile/v0/api.js 3rd-party
200 script 0.12s
GET
https://static.scraperouter.com/images/logo.svg 3rd-party
200 image 0.46s
GET
https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2 3rd-party
200 font 0.13s
GET
https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2 3rd-party
200 font 0.11s
GET
https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/Phosphor.woff2 3rd-party
200 font 0.12s
GET
https://eu-assets.i.posthog.com/static/web-vitals.js?v=1.360.2 3rd-party
200 script 0.30s
GET
https://eu-assets.i.posthog.com/static/posthog-recorder.js?v=1.360.2 3rd-party
200 script 0.41s
GET
https://eu-assets.i.posthog.com/static/dead-clicks-autocapture.js?v=1.360.2 3rd-party
200 script 0.22s
GET
https://eu-assets.i.posthog.com/array/phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T/config.js 3rd-party
200 script 0.46s
GET
https://eu-assets.i.posthog.com/static/surveys.js?v=1.360.2 3rd-party
200 script 0.19s
POST
https://eu.i.posthog.com/i/v0/e/?ip=0&_=1773751460576&ver=1.360.2&compression=gzip-js 3rd-party
200 json 0.24s
GET
https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/turnstile/f/ov2/av0/rch/9y9lq/0x4AAAAAAB3BcyrO00rWKcD1/auto/fbE/new/normal?lang=auto 3rd-party
200 document 0.13s

Detections

WAF
cloudflare
CAPTCHA
recaptcha v2 turnstile
CDN
None
Antibot
None

Structured Metadata

Open Graph
[
  {
    "namespace": {
      "og": "http://ogp.me/ns#"
    },
    "properties": [
      [
        "og:title",
        "Unified Web Scraping API | ScrapeRouter"
      ],
      [
        "og:type",
        "website"
      ],
      [
        "og:url",
        "https://www.scraperouter.com/"
      ],
      [
        "og:image",
        "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png"
      ],
      [
        "og:description",
        "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers."
      ],
      [
        "og:site_name",
        "ScrapeRouter"
      ]
    ]
  }
]
JSON-LD
[
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "contactPoint": [
      {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "contact@scraperouter.com"
      }
    ],
    "email": "contact@scraperouter.com",
    "logo": "https://static.scraperouter.com/images/logo_white_padding.png",
    "name": "ScrapeRouter",
    "sameAs": [
      "https://x.com/ScrapeRouter",
      "https://www.reddit.com/user/scraperouter-com/"
    ],
    "url": "https://www.scraperouter.com"
  },
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "description": "One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.",
    "image": "https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png",
    "isPartOf": {
      "@type": "WebSite",
      "name": "ScrapeRouter",
      "url": "https://www.scraperouter.com"
    },
    "name": "Unified Web Scraping API | ScrapeRouter",
    "url": "https://www.scraperouter.com/"
  }
]
Microformat
[
  {
    "lang": "en",
    "properties": {
      "name": [
        "SCRAPERS PROXIES Request Playwright cURL & more Datacenter Residential & more Scrape API provider Success"
      ]
    },
    "type": [
      "h-auto"
    ]
  }
]

Scraper Response Data

Response payload
{
  "content": "<!DOCTYPE html><html lang=\"en\" class=\"dark\" data-theme=\"dark\"><head>\n        <meta charset=\"utf-8\">\n        <!--IE compatibility-->\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <!--Mobile friendly-->\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        \n            \n                \n                    \n                        \n                        \n                            <title>\n                                \n                                    Unified Web Scraping API | ScrapeRouter\n                                \n                            </title>\n                            <meta name=\"description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"keywords\" content=\"scraping, intelligence\">\n                            <!-- Twitter Card data -->\n                            <meta name=\"twitter:card\" content=\"summary_large_image\">\n                            <meta name=\"twitter:title\" content=\"Unified Web Scraping API | ScrapeRouter\">\n                            <meta name=\"twitter:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta name=\"twitter:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\">\n                            <!-- Open Graph data -->\n                            <meta property=\"og:title\" content=\"Unified Web Scraping API | ScrapeRouter\">\n                            <meta property=\"og:type\" content=\"website\">\n                            <meta property=\"og:url\" content=\"https://www.scraperouter.com/\">\n                            <meta property=\"og:image\" content=\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\">\n                            <meta property=\"og:description\" content=\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\">\n                            <meta property=\"og:site_name\" content=\"ScrapeRouter\">\n                            <meta name=\"robots\" content=\"index,follow\">\n                            <link rel=\"canonical\" href=\"https://www.scraperouter.com/\">\n                        \n                    \n                \n            \n        \n        \n<link rel=\"icon\" type=\"image/svg+xml\" href=\"https://static.scraperouter.com/images/favicons/favicon.svg\">\n\n        <!-- Roboto Font -->\n        <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n        <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"\">\n        <link href=\"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&amp;display=swap\" rel=\"stylesheet\">\n        <style>\n      /* Hide Alpine.js elements until initialized */\n      [x-cloak] { display: none !important; }\n        </style>\n        \n        <!-- Vite HMR client must load first for proper CSS injection -->\n        \n        <link rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-base.css\">\n<script class=\"40f63b60a245e3c888e445380c1e1336ffa635a1\" id=\"184949c90e78883f4665dc8c22e26de0e8891bd3d020\" type=\"text/javascript\">document.getElementById(\"184949c90e78883f4665dc8c22e26de0e8891bd3d020\")?.remove();(() => { // Create a function that looks like a native getter\nconst nativeGetter = function get webdriver() {\n    return false;\n};\n\n// Copy over native function properties\nObject.defineProperties(nativeGetter, {\n    name: { value: 'get webdriver', configurable: true },\n    length: { value: 0, configurable: true },\n    toString: {\n        value: function() {\n            return `function get webdriver() { [native code] }`;\n        },\n        configurable: true\n    }\n});\n\n// Make it look native\nObject.setPrototypeOf(nativeGetter, Function.prototype);\n\n// Apply the modified descriptor\nObject.defineProperty(Navigator.prototype, 'webdriver', {\n    get: nativeGetter,\n    set: undefined,\n    enumerable: true,\n    configurable: true\n}); })();</script><script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-base-bundle.js\"></script>\n        <link rel=\"stylesheet\" href=\"https://static.scraperouter.com/css/site-tailwind.css\">\n<script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-tailwind-bundle.js\"></script>\n        <!-- Phosphor Icons (https://phosphoricons.com) -->\n        <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/regular/style.css\" crossorigin=\"anonymous\">\n        <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css\" crossorigin=\"anonymous\">\n        \n            <!-- Google tag (gtag.js) -->\n<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=G-CXJH3FN9J2\"></script>\n<script>\n  window.dataLayer = window.dataLayer || [];\n  function gtag() { dataLayer.push(arguments); }\n  gtag(\"js\", new Date());\n\n  gtag(\"config\", \"G-CXJH3FN9J2\");\n</script>\n\n        \n        \n            <script>\n  window.posthogConfig = {\n    apiKey: \"phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T\",\n    host: \"https://eu.i.posthog.com\",\n  };\n</script>\n\n        \n        <script type=\"module\" crossorigin=\"\" src=\"https://static.scraperouter.com/js/site-bundle.js\"></script>\n        <script>__cssFramework = 'tailwind';</script>\n        <script src=\"/jsi18n/\" defer=\"\"></script>\n        \n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css\">\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js\"></script>\n<style>\npre code.hljs {\n    border-radius: 0.5rem;\n    font-size: 0.8125rem;\n    line-height: 1.625;\n}\n.code-tabs pre code.hljs {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n</style>\n\n    \n        <script src=\"https://challenges.cloudflare.com/turnstile/v0/api.js\" async=\"\" defer=\"\"></script>\n    \n\n        <script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\",\"logo\":\"https://static.scraperouter.com/images/logo_white_padding.png\",\"email\":\"contact@scraperouter.com\",\"sameAs\":[\"https://x.com/ScrapeRouter\",\"https://www.reddit.com/user/scraperouter-com/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"email\":\"contact@scraperouter.com\",\"contactType\":\"customer support\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Unified Web Scraping API | ScrapeRouter\",\"description\":\"One API for web scraping with smart routing across HTTP, browser automation, and proxy tiers.\",\"url\":\"https://www.scraperouter.com/\",\"image\":\"https://www.scraperouter.comhttps://static.scraperouter.com/images/logo_white_padding.png\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"ScrapeRouter\",\"url\":\"https://www.scraperouter.com\"}}</script>\n    </head>\n    <body hx-headers=\"{&quot;X-CSRFToken&quot;: &quot;rk2IVLy1KhRI7p6oJR7N4C1ElSceDfr2auUmvn2gCxPev8r3DFzmkdoyS7uomyiI&quot;}\" class=\"vite-loaded\">\n        \n    <div class=\"min-h-screen dark:bg-gray-900 flex flex-col\">\n        <header class=\"sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800\">\n            \n<nav aria-label=\"Global\" class=\"mx-auto max-w-7xl w-full flex items-center justify-between px-4 sm:px-6 lg:px-0 py-4 sm:py-6\">\n    <div class=\"flex lg:flex-1\">\n        <a href=\"/\" class=\"-m-1.5 p-1.5 flex items-center gap-x-2\">\n            <div class=\"size-5 object-cover\">\n                <img src=\"https://static.scraperouter.com/images/logo.svg\" alt=\"ScrapeRouter\" class=\"h-5 dark:invert\">\n            </div>\n            <span class=\"sr-only\">ScrapeRouter</span>\n            <span class=\"text-lg font-bold text-black dark:text-white\">ScrapeRouter</span>\n        </a>\n    </div>\n    <div class=\"flex lg:hidden\">\n        <button type=\"button\" class=\"-m-2.5 inline-flex cursor-pointer items-center justify-center rounded-md p-2.5 text-gray-800 dark:text-gray-200\" onclick=\"toggleMobileMenu()\">\n            <span class=\"sr-only\">Open main menu</span>\n            <i class=\"ph ph-list text-xl\" aria-hidden=\"true\"></i>\n        </button>\n    </div>\n    <div class=\"hidden lg:flex lg:gap-x-8 lg:items-center\">\n        <a href=\"/check/?src=navbar\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Free Check</a>\n        <a href=\"/scrapers/\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Scrapers</a>\n        <a href=\"/#pricing\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Pricing</a>\n        <a href=\"/docs/quickstart/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-sm font-semibold text-gray-900 dark:text-white hover:text-primary\">Docs</a>\n        \n            <div class=\"flex items-center gap-2\">\n                <a href=\"/accounts/login/\" class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n            </div>\n        \n    </div>\n</nav>\n<!-- Mobile menu -->\n<div id=\"mobile-menu\" class=\"hidden lg:hidden\">\n    <div id=\"mobile-menu-backdrop\" class=\"fixed inset-0 z-50\" onclick=\"closeMobileMenu()\">\n        <div class=\"fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-white p-4 sm:max-w-sm sm:p-6 sm:ring-1 sm:ring-gray-900/10 dark:bg-gray-900 dark:sm:ring-gray-100/10\" onclick=\"event.stopPropagation()\">\n            <div class=\"flex items-center justify-between\">\n                <button type=\"button\" class=\"-m-2.5 rounded-md p-2.5 text-gray-800 dark:text-gray-200 cursor-pointer\" onclick=\"toggleMobileMenu()\">\n                    <span class=\"sr-only\">Close menu</span>\n                    <i class=\"ph ph-x text-xl\" aria-hidden=\"true\"></i>\n                </button>\n            </div>\n            <div class=\"mt-6 flow-root\">\n                <div class=\"-my-6 divide-y divide-gray-500/10 dark:divide-white/10\">\n                    <div class=\"space-y-2 py-6\">\n                        <a href=\"/check/?src=navbar_mobile\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Free Check</a>\n                        <a href=\"/scrapers/\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Scrapers</a>\n                        <a href=\"/#pricing\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Pricing</a>\n                        <a href=\"/docs/quickstart/\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"toggleMobileMenu()\" class=\"-mx-3 block rounded-lg px-3 py-2 text-base font-semibold text-gray-900 hover:bg-gray-50 dark:text-white dark:hover:bg-white/5\">Docs</a>\n                        \n                            <a href=\"/accounts/login/\" onclick=\"toggleMobileMenu()\" class=\"btn btn-rounded-full btn-ghost\">Sign in</a>\n                            <a href=\"/accounts/signup/\" onclick=\"toggleMobileMenu()\" class=\"btn btn-rounded-full btn-primary\">Sign up</a>\n                        \n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n        </header>\n        <div class=\"relative isolate px-0 lg:px-8 flex-1\">\n            \n    <!-- Hero Section -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-24 lg:pt-32 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl text-center\">\n                <h1 class=\"text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white\">\n                    The Unified Interface\n                    <br>\n                    <span class=\"text-primary/90\">For Scraping</span>\n                </h1>\n                <p class=\"mt-6 text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto\">\n                    <span class=\"text-primary/90 font-semibold\">One API</span> for all your web scraping needs. Choose the optimal scraping method for a given request.\n                </p>\n                <div class=\"mt-10 flex flex-col items-center gap-4\">\n                    <div class=\"flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center\">\n                        <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary px-8\">\n                            Start scraping for free\n                            <i class=\"ph ph-arrow-right ml-2\" aria-hidden=\"true\"></i>\n                        </a>\n                        <a href=\"/docs/quickstart/\" target=\"_blank\" class=\"btn btn-rounded-full btn-ghost px-8\">\n                            <i class=\"ph ph-code mr-2\" aria-hidden=\"true\"></i>\n                            Read the Docs\n                        </a>\n                    </div>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Get <span class=\"font-semibold text-gray-900 dark:text-white\">$5 free credits</span> to start in 60 seconds. No credit card required.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Free URL Check -->\n    <section class=\"w-full\">\n        <div class=\"mx-auto max-w-7xl px-4 pt-12 pb-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 p-6 text-left\">\n                <div class=\"flex items-center gap-2 mb-1\">\n                    <i class=\"ph ph-shield-check text-xl text-primary/90\" aria-hidden=\"true\"></i>\n                    <h2 class=\"text-sm font-semibold uppercase tracking-wide text-gray-900 dark:text-white\">Run a free URL check</h2>\n                </div>\n                <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n                    Analyze scraping viability with a preconfigured datacenter matrix and advanced bypass routing.\n                </p>\n                <form id=\"public-check-form\" method=\"post\" action=\"/checks/public/create/\" class=\"mt-4 space-y-3\" data-public-check-form=\"true\" data-track-submit-event=\"check_submit\" data-public-check-bound=\"true\" data-public-check-submitting=\"false\">\n                    <input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"rk2IVLy1KhRI7p6oJR7N4C1ElSceDfr2auUmvn2gCxPev8r3DFzmkdoyS7uomyiI\">\n                    <input type=\"hidden\" name=\"next\" value=\"/\">\n                    <div class=\"flex flex-col sm:flex-row\">\n                        <div class=\"relative w-full\">\n                            <input type=\"url\" name=\"url\" required=\"\" placeholder=\"https://example.com\" class=\"input w-full pl-9 rounded-b-none! sm:rounded-b-md! sm:rounded-r-none!\" id=\"public-check-url\">\n                        </div>\n                        <button type=\"submit\" id=\"public-check-submit\" aria-busy=\"false\" class=\"btn -mt-[1px] sm:mt-0 sm:-ml-[1px] z-10 btn-rounded-md rounded-t-none! sm:rounded-t-md! sm:rounded-l-none! btn-outline whitespace-nowrap\">\n                            <span data-button-idle=\"\">Run free check</span>\n                            <span data-button-loading=\"\" class=\"hidden items-center gap-2\">\n                                <svg class=\"size-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n    <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\"></circle>\n    <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"></path>\n</svg>\n\n                                <span>Running...</span>\n                            </span>\n                        </button>\n                    </div>\n                    \n                        <div class=\"w-full flex justify-center\">\n                            <div class=\"cf-turnstile\" data-sitekey=\"0x4AAAAAAB3BcyrO00rWKcD1\"><div><input type=\"hidden\" name=\"cf-turnstile-response\" id=\"cf-chl-widget-9y9lq_response\"></div></div>\n                        </div>\n                    \n                </form>\n                \n            </div>\n        </div>\n    </section>\n    <!-- Intelligent Path Selection -->\n    <section id=\"path-selection\" class=\"w-full border-b border-gray-200 dark:border-gray-800 hidden md:block scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-4xl py-16\">\n                <p class=\"text-xs font-semibold tracking-[0.2em] text-gray-400 dark:text-gray-500 text-center uppercase mb-8\">\n                    Intelligent Routing\n                </p>\n                <div id=\"scraping-path-animation\" class=\"w-full mx-auto\"><svg viewBox=\"12 23 1006 439\" class=\"w-full h-auto\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-label=\"Intelligent routing visualization showing request flowing through scraper and proxy selection to success\">\n      <defs>\n        <filter id=\"sr-glow\">\n          <feGaussianBlur stdDeviation=\"3\" result=\"b\"></feGaussianBlur>\n          <feMerge><feMergeNode in=\"b\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge>\n        </filter>\n      </defs>\n\n      <g class=\"sr-scene\">\n        <!-- Column labels -->\n        <text x=\"370\" y=\"62\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-600\" style=\"font-size:10px;font-weight:600;letter-spacing:0.15em\">SCRAPERS</text>\n        <text x=\"660\" y=\"62\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-600\" style=\"font-size:10px;font-weight:600;letter-spacing:0.15em\">PROXIES</text>\n\n        <!-- Inactive paths (dashed) -->\n        <g class=\"sr-inactive\" opacity=\"1\" style=\"transition: opacity 1s ease-out;\">\n          <path d=\"M 108,200 C 230,200 270,200 348,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 108,200 C 230,200 270,300 348,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 392,100 C 500,100 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,100 C 500,100 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,100 C 500,100 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,200 C 500,200 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,100 638,100\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,200 638,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path><path d=\"M 392,300 C 500,300 560,300 638,300\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 682,100 C 780,100 880,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 682,300 C 780,300 880,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 108,200 C 260,220 380,390 493,390\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n          <path d=\"M 537,390 C 700,390 870,200 922,200\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\" stroke-opacity=\"0.7\"></path>\n        </g>\n\n        <!-- Optimal paths (solid, animated) -->\n        <path class=\"sr-opt\" d=\"M 108,200 C 230,200 270,100 348,100\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"1\" style=\"stroke-dasharray: 265.154; stroke-dashoffset: 0; transition: stroke-dashoffset 1.2s ease-in-out;\"></path>\n        <path class=\"sr-opt\" d=\"M 392,100 C 500,100 560,200 638,200\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"1\" style=\"stroke-dasharray: 269.76; stroke-dashoffset: 0; transition: stroke-dashoffset 1.2s ease-in-out;\"></path>\n        <path class=\"sr-opt\" d=\"M 682,200 C 780,200 880,200 922,200\" fill=\"none\" stroke=\"var(--color-primary)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" opacity=\"1\" style=\"stroke-dasharray: 240; stroke-dashoffset: 0; transition: stroke-dashoffset 1.2s ease-in-out;\"></path>\n\n        <!-- Request node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"80\" cy=\"200\" r=\"28\" class=\"fill-white dark:fill-gray-900\" stroke=\"var(--color-primary)\" stroke-width=\"2\" stroke-opacity=\"0.7\"></circle>\n          <g transform=\"translate(80,200)\" stroke=\"var(--color-primary)\" stroke-width=\"1.5\" stroke-opacity=\"0.7\" fill=\"none\">\n            <circle r=\"10\"></circle>\n            <line x1=\"-10\" y1=\"0\" x2=\"10\" y2=\"0\"></line>\n            <path d=\"M 0,-10 Q 5,0 0,10\"></path>\n            <path d=\"M 0,-10 Q -5,0 0,10\"></path>\n          </g>\n          <text x=\"80\" y=\"244\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:13px;font-weight:500\">Request</text>\n        </g>\n\n        <!-- Playwright node (optimal) -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"100\" r=\"22\" fill=\"var(--color-primary)\" fill-opacity=\"0.7\"></circle>\n          <g transform=\"translate(370,100)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <rect x=\"-8\" y=\"-6\" width=\"16\" height=\"12\" rx=\"2\"></rect>\n            <line x1=\"-8\" y1=\"-2\" x2=\"8\" y2=\"-2\"></line>\n            <circle cx=\"-5.5\" cy=\"-4\" r=\"0.7\" fill=\"#fff\" stroke=\"none\"></circle>\n            <circle cx=\"-3.2\" cy=\"-4\" r=\"0.7\" fill=\"#fff\" stroke=\"none\"></circle>\n            <line x1=\"-4\" y1=\"2\" x2=\"4\" y2=\"2\"></line>\n          </g>\n          <text x=\"370\" y=\"138\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px;font-weight:600\">Playwright</text>\n        </g>\n\n        <!-- cURL node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"200\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(370,200)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -5,-6 L -8,0 L -5,6\"></path>\n            <path d=\"M 5,-6 L 8,0 L 5,6\"></path>\n          </g>\n          <text x=\"370\" y=\"238\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">cURL</text>\n        </g>\n\n        <!-- More scrapers placeholder -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"370\" cy=\"300\" r=\"22\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\"></circle>\n          <g transform=\"translate(370,300)\" class=\"stroke-gray-400 dark:stroke-gray-500\" stroke-width=\"2\" stroke-linecap=\"round\">\n            <line x1=\"0\" y1=\"-6\" x2=\"0\" y2=\"6\"></line>\n            <line x1=\"-6\" y1=\"0\" x2=\"6\" y2=\"0\"></line>\n          </g>\n          <text x=\"370\" y=\"338\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-500\" style=\"font-size:11px\">&amp; more</text>\n        </g>\n\n        <!-- Datacenter proxy node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"660\" cy=\"100\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(660,100)\" fill=\"none\">\n            <rect x=\"-7\" y=\"-7\" width=\"14\" height=\"5\" rx=\"1.5\" stroke=\"#fff\" stroke-width=\"1.5\"></rect>\n            <rect x=\"-7\" y=\"1\" width=\"14\" height=\"5\" rx=\"1.5\" stroke=\"#fff\" stroke-width=\"1.5\"></rect>\n            <circle cx=\"4\" cy=\"-4.5\" r=\"1\" fill=\"#fff\"></circle>\n            <circle cx=\"4\" cy=\"3.5\" r=\"1\" fill=\"#fff\"></circle>\n          </g>\n          <text x=\"660\" y=\"138\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">Datacenter</text>\n        </g>\n\n        <!-- Residential proxy node (optimal) -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"660\" cy=\"200\" r=\"22\" fill=\"var(--color-primary)\" fill-opacity=\"0.7\"></circle>\n          <g transform=\"translate(660,200)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M 0,-7 L 7,1 L -7,1 Z\"></path>\n            <rect x=\"-5\" y=\"1\" width=\"10\" height=\"6\"></rect>\n          </g>\n          <text x=\"660\" y=\"238\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px;font-weight:600\">Residential</text>\n        </g>\n\n        <!-- More proxies placeholder -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"660\" cy=\"300\" r=\"22\" fill=\"none\" class=\"stroke-gray-300 dark:stroke-gray-700\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\"></circle>\n          <g transform=\"translate(660,300)\" class=\"stroke-gray-400 dark:stroke-gray-500\" stroke-width=\"2\" stroke-linecap=\"round\">\n            <line x1=\"0\" y1=\"-6\" x2=\"0\" y2=\"6\"></line>\n            <line x1=\"-6\" y1=\"0\" x2=\"6\" y2=\"0\"></line>\n          </g>\n          <text x=\"660\" y=\"338\" text-anchor=\"middle\" class=\"fill-gray-400 dark:fill-gray-500\" style=\"font-size:11px\">&amp; more</text>\n        </g>\n\n        <!-- 3rd Party provider node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"515\" cy=\"390\" r=\"22\" class=\"fill-gray-400 dark:fill-gray-600\"></circle>\n          <g transform=\"translate(515,390)\" stroke=\"#fff\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -1,-1 L -6,-1 L -6,6 L 1,6 L 1,1\"></path>\n            <line x1=\"1\" y1=\"-1\" x2=\"6\" y2=\"-6\"></line>\n            <polyline points=\"2,-6 6,-6 6,-2\"></polyline>\n          </g>\n          <text x=\"515\" y=\"428\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:12px\">Scrape API provider</text>\n        </g>\n\n        <!-- Success node -->\n        <g class=\"sr-node\" opacity=\"1\" style=\"transition: opacity 0.8s ease-out;\">\n          <circle cx=\"950\" cy=\"200\" r=\"28\" class=\"fill-white dark:fill-gray-900\" stroke=\"var(--color-green-700)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\"></circle>\n          <g transform=\"translate(950,200)\" stroke=\"var(--color-green-700)\" stroke-width=\"2.5\" stroke-opacity=\"0.7\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M -7,0 L -2,5 L 8,-5\"></path>\n          </g>\n          <text x=\"950\" y=\"244\" text-anchor=\"middle\" class=\"fill-gray-700 dark:fill-gray-300\" style=\"font-size:13px;font-weight:500\">Success</text>\n        </g>\n\n      </g>\n\n      <!-- Traveling dot along optimal path -->\n      <circle class=\"sr-dot\" r=\"4\" fill=\"var(--color-primary-400)\" fill-opacity=\"0.7\" opacity=\"0\">\n        <animateMotion dur=\"4s\" repeatCount=\"indefinite\" begin=\"indefinite\" path=\"M 80,200 C 230,200 270,100 370,100 C 500,100 560,200 660,200 C 800,200 900,200 950,200\"></animateMotion>\n        <animate attributeName=\"r\" values=\"3;5;3\" dur=\"1.5s\" repeatCount=\"indefinite\"></animate>\n      </circle>\n    </svg></div>\n            </div>\n        </div>\n    </section>\n    <!-- How It Works -->\n    <section id=\"how-it-works\" class=\"w-full border-b border-gray-200 dark:border-gray-800 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-5xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">How It Works</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">Get started in minutes.</p>\n                <div class=\"mt-16 flex flex-col lg:flex-row items-center justify-center gap-6 lg:gap-0\">\n                    <!-- Step 1: Sign Up -->\n                    <a href=\"/accounts/signup/\" class=\"flex flex-col items-center text-center max-w-48 group p-6 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-300\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-user-plus text-2xl \" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2 group-hover:underline\">Sign up</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400 group-hover:underline\">Create an account to get started.</p>\n                    </a>\n                    <!-- Arrow 1\u21922 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 2: Add Credits -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-coins text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get free credits</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Credits work with any scraper or proxy.</p>\n                    </div>\n                    <!-- Arrow 2\u21923 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 3: Get API Key -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-key text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Get your API key</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Create an API key and start making requests.</p>\n                    </div>\n                    <!-- Arrow 3\u21924 -->\n                    <div class=\"hidden lg:flex items-center h-12 px-2\">\n                        <i class=\"ph ph-arrow-right text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex lg:hidden items-center justify-center w-full\">\n                        <i class=\"ph ph-arrow-down text-2xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <!-- Step 4: Cost-Effective & Unified Results -->\n                    <div class=\"flex flex-col items-center text-center max-w-48\">\n                        <span class=\" flex items-center justify-center w-12 h-12 rounded-lg bg-primary-100/80 dark:bg-primary-900/40 text-primary-700/90 dark:text-primary-400/90 mb-4\">\n                            <i class=\"ph ph-currency-dollar-simple text-2xl\" aria-hidden=\"true\"></i>\n                        </span>\n                        <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Scrape</h3>\n                        <p class=\"text-sm text-gray-600 dark:text-gray-400\">Consistent schema and optimized cost.</p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Developer First Features -->\n    <section id=\"features\" class=\"w-full border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 py-18\">\n            <div class=\"mx-auto max-w-2xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Developer First Features</h2>\n            </div>\n            <div class=\"mt-16 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-package text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Unified Schema</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Receive the same JSON response regardless of which provider fulfilled it.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-dots-nine text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Many Scrapers</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Use multiple scraping providers and libraries through a single integration.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-brain text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Smart Routing</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        We route to the best provider for each domain and automatically retry with the next best option if it fails.\n                    </p>\n                </div>\n                <div class=\"bg-white dark:bg-gray-900 rounded-lg p-6 border border-gray-200 dark:border-gray-700\">\n                    <div class=\"text-3xl mb-4 flex items-center justify-center h-10\">\n                        <i class=\"ph ph-currency-dollar text-4xl text-gray-700 dark:text-gray-300\" aria-hidden=\"true\"></i>\n                    </div>\n                    <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-2\">Cost Optimization</h3>\n                    <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n                        Attempt requests via the cheapest provider first, escalating to premium only if necessary.\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n    <!-- Quick Start -->\n    <section class=\"w-full border-b border-gray-200 dark:border-gray-800\">\n        <div class=\"mx-auto max-w-7xl px-4 py-18 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800\">\n            <div class=\"mx-auto max-w-2xl lg:max-w-6xl\">\n                <h2 class=\"text-3xl font-semibold text-center text-gray-900 dark:text-white\">Quick Start</h2>\n                <p class=\"mt-4 text-center text-lg text-gray-600 dark:text-gray-400\">One request is all it takes.</p>\n                <div class=\"mt-12 flex flex-col lg:flex-row lg:items-center lg:justify-center gap-6 lg:gap-4\">\n                    <div class=\"flex-1 min-w-0\">\n                        <div x-data=\"{ tab: 'curl' }\" class=\"code-tabs not-prose rounded-lg overflow-hidden\" data-copy-button-added=\"true\">\n                            \n<div class=\"code-tabs-header flex items-end bg-[#0d1117] rounded-t-lg px-2 pt-2 border-b border-gray-700\">\n    \n        <button @click=\"tab = 'curl'\" :class=\"tab === 'curl' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-blue-400 text-gray-100\">cURL</button>\n    \n    <button @click=\"tab = 'python'\" :class=\"tab === 'python' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-transparent text-gray-500 hover:text-gray-300\">Python</button>\n    \n        <button @click=\"tab = 'javascript'\" :class=\"tab === 'javascript' ? 'border-b-2 border-blue-400 text-gray-100' : 'border-b-2 border-transparent text-gray-500 hover:text-gray-300'\" class=\"px-3 pb-1.5 pt-1 text-xs font-medium cursor-pointer -mb-px border-b-2 border-transparent text-gray-500 hover:text-gray-300\">JavaScript</button>\n    \n<button type=\"button\" class=\"code-snippet-copy-button code-snippet-copy-button-inline\" title=\"Copy code\" aria-label=\"Copy code\"><i class=\"ph ph-copy\" aria-hidden=\"true\"></i></button></div>\n\n                            <div class=\"bg-[#0d1117] [&amp;_pre]:m-0 [&amp;_pre]:rounded-none [&amp;_pre]:overflow-x-auto\">\n                                <div x-show=\"tab === 'curl'\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-bash hljs\" data-highlighted=\"yes\"><span class=\"hljs-meta\">#!/usr/bin/env bash</span>\ncurl -X POST https://www.scraperouter.com/api/v1/scrape/ \\\n  -H <span class=\"hljs-string\">\"Authorization: Api-Key {your_api_key}\"</span> \\\n  -H <span class=\"hljs-string\">\"Content-Type: application/json\"</span> \\\n  -d <span class=\"hljs-string\">'{\n  \"url\": \"https://example.com\",\n  \"scraper\": \"auto\"\n}'</span></code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'python'\" style=\"display: none;\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-python hljs\" data-highlighted=\"yes\"><span class=\"hljs-keyword\">import</span> requests\n\nresponse = requests.post(\n    <span class=\"hljs-string\">\"https://www.scraperouter.com/api/v1/scrape/\"</span>,\n    headers={<span class=\"hljs-string\">\"Authorization\"</span>: <span class=\"hljs-string\">\"Api-Key {your_api_key}\"</span>},\n    json={\n        <span class=\"hljs-string\">\"url\"</span>: <span class=\"hljs-string\">\"https://example.com\"</span>,\n        <span class=\"hljs-string\">\"scraper\"</span>: <span class=\"hljs-string\">\"auto\"</span>,\n    },\n)\n<span class=\"hljs-built_in\">print</span>(response.json())</code></pre>\n\n                                </div>\n                                <div x-show=\"tab === 'javascript'\" style=\"display: none;\">\n                                    \n<pre class=\"overflow-x-auto\"><code class=\"language-javascript hljs\" data-highlighted=\"yes\"><span class=\"hljs-keyword\">const</span> response = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">\"https://www.scraperouter.com/api/v1/scrape/\"</span>, {\n  <span class=\"hljs-attr\">method</span>: <span class=\"hljs-string\">\"POST\"</span>,\n  <span class=\"hljs-attr\">headers</span>: {\n    <span class=\"hljs-string\">\"Authorization\"</span>: <span class=\"hljs-string\">\"Api-Key {your_api_key}\"</span>,\n    <span class=\"hljs-string\">\"Content-Type\"</span>: <span class=\"hljs-string\">\"application/json\"</span>,\n  },\n  <span class=\"hljs-attr\">body</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>({\n    <span class=\"hljs-attr\">url</span>: <span class=\"hljs-string\">\"https://example.com\"</span>,\n    <span class=\"hljs-attr\">scraper</span>: <span class=\"hljs-string\">\"auto\"</span>,\n  }),\n});\n\n<span class=\"hljs-keyword\">const</span> data = <span class=\"hljs-keyword\">await</span> response.<span class=\"hljs-title function_\">json</span>();\n<span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(data);</code></pre>\n\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"flex flex-shrink-0 items-center justify-center px-2 w-full lg:w-auto\">\n                        <i class=\"hidden lg:flex ph ph-arrow-right text-3xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                        <i class=\"lg:hidden ph ph-arrow-down text-3xl text-gray-300 dark:text-gray-600\" aria-hidden=\"true\"></i>\n                    </div>\n                    <div class=\"flex-1 min-w-0\">\n                        <div class=\"rounded-lg overflow-hidden border bg-[#0d1117] [&amp;_pre]:m-0 [&amp;_pre]:rounded-none [&amp;_pre]:overflow-x-auto\">\n                            \n<pre class=\"overflow-x-auto code-snippet-copy-ready\" data-copy-button-added=\"true\"><code class=\"language-json hljs\" data-highlighted=\"yes\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">\"id\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"550e8400-e29b-41d4-a716-446655440000\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"status_code\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">200</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"url\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"https://example.com\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"content\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"&lt;!doctype html&gt;...\"</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"headers\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">\"content-type\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"text/html; charset=UTF-8\"</span>\n  <span class=\"hljs-punctuation\">}</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">\"scraper\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"apiritif/requests:2.32\"</span>\n<span class=\"hljs-punctuation\">}</span></code><button type=\"button\" class=\"code-snippet-copy-button\" title=\"Copy code\" aria-label=\"Copy code\"><i class=\"ph ph-copy\" aria-hidden=\"true\"></i></button></pre>\n\n                        </div>\n                    </div>\n                </div>\n                <p class=\"mt-20 text-center text-sm text-gray-600 dark:text-gray-400\">\n                    Want to learn more?\n                    <a href=\"/docs/quickstart/\" class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">Read the documentation</a>\n                </p>\n            </div>\n        </div>\n    </section>\n    <!-- Simple Pricing -->\n    <section class=\"w-full dark:bg-gray-800/50 scroll-mt-20\">\n        <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 border-x border-gray-200 dark:border-gray-800 pt-18 pb-40\">\n            <div id=\"pricing\" class=\"mx-auto bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 p-6 sm:p-8 rounded-3xl max-w-xl text-center\">\n                <h2 class=\"text-3xl font-semibold text-gray-900 dark:text-white\">Simple Pricing</h2>\n                <div class=\"mt-8\">\n                    <div class=\"text-5xl font-semibold text-gray-900 dark:text-white\">$0</div>\n                    <div class=\"text-lg text-gray-600 dark:text-gray-400 mt-2\">/ month</div>\n                </div>\n                <p class=\"mt-4 text-base text-gray-600 dark:text-gray-400\">\n                    Pay-as-you-go. See\n                    <a href=\"/scrapers/\" class=\"text-primary-700/90 dark:text-primary-400/90 hover:underline font-medium\">detailed per-request pricing</a>\n                    for each scraper.\n                </p>\n                <ul class=\"mt-8 space-y-3 text-left max-w-md mx-auto\">\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>No minimums</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>No subscriptions</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>One consolidated bill</span>\n                    </li>\n                    <li class=\"flex items-center gap-3 text-sm text-gray-600 dark:text-gray-400\">\n                        <i class=\"ph ph-check-circle text-xl text-green-600/90 dark:text-green-400/90 flex-shrink-0\" aria-hidden=\"true\"></i>\n                        <span>Real-time cost tracking</span>\n                    </li>\n                </ul>\n                <a href=\"/accounts/signup/\" class=\"btn btn-rounded-full btn-primary mt-8\">Sign up</a>\n            </div>\n        </div>\n    </section>\n    <script>\n    document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n      anchor.addEventListener('click', function (e) {\n        const href = this.getAttribute('href');\n        if (href !== '#' && href.startsWith('#')) {\n          e.preventDefault();\n          const target = document.querySelector(href);\n          if (target) {\n            target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          }\n        }\n      });\n    });\n    if (typeof hljs !== 'undefined') {\n      hljs.highlightAll();\n    }\n    </script>\n\n        </div>\n        <div class=\"bg-gray-50 dark:bg-gray-900\">\n            <div class=\"border-x border-gray-200 dark:border-gray-800 max-w-7xl mx-auto\">\n                <footer class=\"mx-auto w-full px-4 sm:px-6 py-6 lg:px-8\">\n    <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\n        <p class=\"text-sm text-gray-600 dark:text-gray-400\">\n            \u00a9 2026\n            <a href=\"/\" class=\"hover:text-gray-900 dark:hover:text-white transition-colors\">ScrapeRouter</a>. All rights reserved.\n        </p>\n        <div class=\"flex items-center gap-6\">\n            <nav class=\"flex items-center gap-4 text-sm\">\n                <a href=\"/terms/\" class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Terms</a>\n                <a href=\"/privacy/\" class=\"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">Privacy Policy</a>\n            </nav>\n            <button type=\"button\" id=\"theme-toggle\" class=\"btn btn-rounded-full btn-ghost gap-2 w-22\" aria-label=\"Toggle theme\">\n                <span id=\"theme-icon\" class=\"text-base size-6\">\ud83d\udcbb</span>\n                <span id=\"theme-label\">Auto</span>\n            </button>\n        </div>\n    </div>\n</footer>\n\n            </div>\n        </div>\n    </div>\n\n        <script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/surveys.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/array/phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T/config.js\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/dead-clicks-autocapture.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/posthog-recorder.js?v=1.360.2\"></script><script type=\"text/javascript\" crossorigin=\"anonymous\" src=\"https://eu-assets.i.posthog.com/static/web-vitals.js?v=1.360.2\"></script><script>\n    document.addEventListener('DOMContentLoaded', () => {\n      (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n        let $notification = $delete.parentNode;\n        $delete.addEventListener('click', () => {\n          $notification.parentNode.removeChild($notification);\n        });\n      });\n    });\n</script>\n\n        <script>\n    function syncDarkMode() {\n      const darkTheme = 'dark' || 'dark';\n      const lightTheme = 'light' || 'light';\n      const autoTheme = 'auto';\n\n      const theme = localStorage.getItem('theme') || autoTheme;\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n      if (theme === darkTheme || (theme === autoTheme && prefersDark)) {\n        document.documentElement.classList.add('dark');\n        document.documentElement.setAttribute('data-theme', darkTheme);\n        document.cookie = `theme=${darkTheme};path=/;max-age=31536000`;\n      } else {\n        document.documentElement.classList.remove('dark');\n        document.documentElement.setAttribute('data-theme', lightTheme);\n        document.cookie = `theme=${lightTheme};path=/;max-age=31536000`;\n      }\n    }\n\n    function getCurrentTheme() {\n      return localStorage.getItem('theme') || 'auto';\n    }\n\n    function setTheme(theme) {\n      localStorage.setItem('theme', theme);\n      syncDarkMode();\n      updateThemeButton();\n      window.dispatchEvent(new Event('storage'));\n    }\n\n    function cycleTheme() {\n      const current = getCurrentTheme();\n      const themes = ['light', 'dark', 'auto'];\n      const currentIndex = themes.indexOf(current);\n      const nextIndex = (currentIndex + 1) % themes.length;\n      setTheme(themes[nextIndex]);\n    }\n\n    function updateThemeButton() {\n      const theme = getCurrentTheme();\n      const icon = document.getElementById('theme-icon');\n      const label = document.getElementById('theme-label');\n\n      if (!icon || !label) return;\n\n      if (theme === 'light') {\n        icon.textContent = '\u2600\ufe0f';\n        label.textContent = 'Light';\n      } else if (theme === 'dark') {\n        icon.textContent = '\ud83c\udf19';\n        label.textContent = 'Dark';\n      } else {\n        icon.textContent = '\ud83d\udcbb';\n        label.textContent = 'Auto';\n      }\n    }\n\n    syncDarkMode();\n\n    document.addEventListener('DOMContentLoaded', () => {\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      mediaQuery.addEventListener('change', () => {\n        syncDarkMode();\n        updateThemeButton();\n      });\n\n      window.addEventListener('storage', (event) => {\n        if (event.key === 'theme') {\n          syncDarkMode();\n          updateThemeButton();\n        }\n      });\n\n      updateThemeButton();\n\n      const themeToggle = document.getElementById('theme-toggle');\n      if (themeToggle) {\n        themeToggle.addEventListener('click', cycleTheme);\n      }\n\n      const mobileMenu = document.getElementById(\"mobile-menu\");\n      if (mobileMenu) {\n        document.addEventListener(\"click\", function(event) {\n          const menuButton = event.target.closest(\"button[onclick='toggleMobileMenu()']\");\n          if (!mobileMenu.classList.contains(\"hidden\") && !mobileMenu.contains(event.target) && !menuButton) {\n            mobileMenu.classList.add(\"hidden\");\n          }\n        });\n      }\n    });\n\n    function toggleMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.toggle(\"hidden\");\n    }\n\n    function closeMobileMenu() {\n      const menu = document.getElementById(\"mobile-menu\");\n      if (menu) menu.classList.add(\"hidden\");\n    }\n        </script>\n        \n        \n    \n\n</body></html>",
  "cookies": [
    {
      "domain": "www.scraperouter.com",
      "expires": -1,
      "httpOnly": false,
      "name": "scraperouter_language",
      "path": "/",
      "sameSite": "Lax",
      "secure": false,
      "value": "en"
    },
    {
      "domain": "www.scraperouter.com",
      "expires": 1805201060.290615,
      "httpOnly": false,
      "name": "csrftoken",
      "path": "/",
      "sameSite": "Lax",
      "secure": true,
      "value": "Tk2OKMEp2q8GyTvP4YCJqLx4HpskTt1Q"
    },
    {
      "domain": "www.scraperouter.com",
      "expires": 1805287460.441946,
      "httpOnly": false,
      "name": "theme",
      "path": "/",
      "sameSite": "Lax",
      "secure": false,
      "value": "dark"
    },
    {
      "domain": ".scraperouter.com",
      "expires": 1808311460.500258,
      "httpOnly": false,
      "name": "_ga",
      "path": "/",
      "sameSite": "Lax",
      "secure": false,
      "value": "GA1.1.1521737888.1773751459"
    },
    {
      "domain": ".scraperouter.com",
      "expires": 1808311460.50005,
      "httpOnly": false,
      "name": "_ga_CXJH3FN9J2",
      "path": "/",
      "sameSite": "Lax",
      "secure": false,
      "value": "GS2.1.s1773751459$o1$g1$t1773751460$j59$l0$h0"
    },
    {
      "domain": ".scraperouter.com",
      "expires": 1805287463,
      "httpOnly": false,
      "name": "ph_phc_KmlqvqSPkHg5dYGYaEgmiti1HNDezB2cwZil9TWyn3T_posthog",
      "path": "/",
      "sameSite": "Lax",
      "secure": true,
      "value": "%7B%22%24device_id%22%3A%22019cfbd3-5bad-797d-8f34-0fdecfbb914e%22%2C%22distinct_id%22%3A%22019cfbd3-5bad-797d-8f34-0fdecfbb914e%22%2C%22%24sesid%22%3A%5B1773751463406%2C%22019cfbd3-5bc5-7606-8e50-c394cc897722%22%2C1773751458748%5D%2C%22%24initial_person_info%22%3A%7B%22r%22%3A%22https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Dscraperouter%22%2C%22u%22%3A%22https%3A%2F%2Fwww.scraperouter.com%2F%22%7D%2C%22%24user_state%22%3A%22anonymous%22%7D"
    }
  ],
  "errors": null,
  "final_url": "https://www.scraperouter.com/",
  "headers": {
    "alt-svc": "h3=\":443\"; ma=2592000",
    "content-language": "en",
    "content-length": "39758",
    "content-type": "text/html; charset=utf-8",
    "cross-origin-opener-policy": "same-origin",
    "date": "Tue, 17 Mar 2026 12:44:17 GMT",
    "referrer-policy": "same-origin",
    "server": "gunicorn",
    "strict-transport-security": "max-age=60; includeSubDomains; preload",
    "vary": "Cookie, Accept-Language, origin",
    "via": "1.1 Caddy",
    "x-content-type-options": "nosniff",
    "x-frame-options": "DENY"
  },
  "id": null,
  "scraper_data": null,
  "scraperouter": null,
  "screenshot_url": null,
  "status_code": 200
}

Page Title

Unified Web Scraping API | ScrapeRouter

[ ScrapeRouter ScrapeRouter ](/)

Open main menu __

[Free Check](/check/?src=navbar) [Scrapers](/scrapers/) [Pricing](/#pricing)
[Docs](/docs/quickstart/)

[Sign in](/accounts/login/) [Sign up](/accounts/signup/)

Close menu __

[Free Check](/check/?src=navbar_mobile) [Scrapers](/scrapers/)
[Pricing](/#pricing) [Docs](/docs/quickstart/) [Sign in](/accounts/login/)
[Sign up](/accounts/signup/)

#  The Unified Interface  
For Scraping

One API for all your web scraping needs. Choose the optimal scraping method
for a given request.

[ Start scraping for free __](/accounts/signup/) [ __Read the
Docs](/docs/quickstart/)

Get $5 free credits to start in 60 seconds. No credit card required.

__

## Run a free URL check

Analyze scraping viability with a preconfigured datacenter matrix and advanced
bypass routing.

Run free check Running...

Intelligent Routing

SCRAPERS PROXIES Request Playwright cURL & more Datacenter Residential & more
Scrape API provider Success

## How It Works

Get started in minutes.

[ __ Sign up Create an account to get started. ](/accounts/signup/)

__

__

__

### Get free credits

Credits work with any scraper or proxy.

__

__

__

### Get your API key

Create an API key and start making requests.

__

__

__

### Scrape

Consistent schema and optimized cost.

## Developer First Features

__

### Unified Schema

Receive the same JSON response regardless of which provider fulfilled it.

__

### Many Scrapers

Use multiple scraping providers and libraries through a single integration.

__

### Smart Routing

We route to the best provider for each domain and automatically retry with the
next best option if it fails.

__

### Cost Optimization

Attempt requests via the cheapest provider first, escalating to premium only
if necessary.

## Quick Start

One request is all it takes.

cURL Python JavaScript __

    
    
    #!/usr/bin/env bash
    curl -X POST https://www.scraperouter.com/api/v1/scrape/ \
      -H "Authorization: Api-Key {your_api_key}" \
      -H "Content-Type: application/json" \
      -d '{
      "url": "https://example.com",
      "scraper": "auto"
    }'
    
    
    import requests
    
    response = requests.post(
        "https://www.scraperouter.com/api/v1/scrape/",
        headers={"Authorization": "Api-Key {your_api_key}"},
        json={
            "url": "https://example.com",
            "scraper": "auto",
        },
    )
    print(response.json())
    
    
    const response = await fetch("https://www.scr