# Scrapfly Documentation

## Table of Contents

### Dashboard

- [Intro](https://scrapfly.io/docs)
- [Project](https://scrapfly.io/docs/project)
- [Account](https://scrapfly.io/docs/account)
- [Workspace & Team](https://scrapfly.io/docs/workspace-and-team)
- [Billing](https://scrapfly.io/docs/billing)

### Products

#### MCP Server

- [Getting Started](https://scrapfly.io/docs/mcp/getting-started)
- [Tools & API Spec](https://scrapfly.io/docs/mcp/tools)
- [Authentication](https://scrapfly.io/docs/mcp/authentication)
- [Examples & Use Cases](https://scrapfly.io/docs/mcp/examples)
- [FAQ](https://scrapfly.io/docs/mcp/faq)
##### Integrations

- [Overview](https://scrapfly.io/docs/mcp/integrations)
- [Claude Desktop](https://scrapfly.io/docs/mcp/integrations/claude-desktop)
- [Claude Code](https://scrapfly.io/docs/mcp/integrations/claude-code)
- [ChatGPT](https://scrapfly.io/docs/mcp/integrations/chatgpt)
- [Cursor](https://scrapfly.io/docs/mcp/integrations/cursor)
- [Cline](https://scrapfly.io/docs/mcp/integrations/cline)
- [Windsurf](https://scrapfly.io/docs/mcp/integrations/windsurf)
- [Zed](https://scrapfly.io/docs/mcp/integrations/zed)
- [Roo Code](https://scrapfly.io/docs/mcp/integrations/roo-code)
- [VS Code](https://scrapfly.io/docs/mcp/integrations/vscode)
- [LangChain](https://scrapfly.io/docs/mcp/integrations/langchain)
- [LlamaIndex](https://scrapfly.io/docs/mcp/integrations/llamaindex)
- [CrewAI](https://scrapfly.io/docs/mcp/integrations/crewai)
- [OpenAI](https://scrapfly.io/docs/mcp/integrations/openai)
- [n8n](https://scrapfly.io/docs/mcp/integrations/n8n)
- [Make](https://scrapfly.io/docs/mcp/integrations/make)
- [Zapier](https://scrapfly.io/docs/mcp/integrations/zapier)
- [Vapi AI](https://scrapfly.io/docs/mcp/integrations/vapi)
- [Agent Builder](https://scrapfly.io/docs/mcp/integrations/agent-builder)
- [Custom Client](https://scrapfly.io/docs/mcp/integrations/custom-client)


#### Web Scraping API

- [Getting Started](https://scrapfly.io/docs/scrape-api/getting-started)
- [API Specification]()
- [Monitoring](https://scrapfly.io/docs/monitoring)
- [Customize Request](https://scrapfly.io/docs/scrape-api/custom)
- [Debug](https://scrapfly.io/docs/scrape-api/debug)
- [Anti Scraping Protection](https://scrapfly.io/docs/scrape-api/anti-scraping-protection)
- [Proxy](https://scrapfly.io/docs/scrape-api/proxy)
- [Proxy Mode](https://scrapfly.io/docs/scrape-api/proxy-mode)
- [Proxy Mode - Screaming Frog](https://scrapfly.io/docs/scrape-api/proxy-mode/screaming-frog)
- [Proxy Mode - Apify](https://scrapfly.io/docs/scrape-api/proxy-mode/apify)
- [(Auto) Data Extraction](https://scrapfly.io/docs/scrape-api/extraction)
- [Javascript Rendering](https://scrapfly.io/docs/scrape-api/javascript-rendering)
- [Javascript Scenario](https://scrapfly.io/docs/scrape-api/javascript-scenario)
- [SSL](https://scrapfly.io/docs/scrape-api/ssl)
- [DNS](https://scrapfly.io/docs/scrape-api/dns)
- [Cache](https://scrapfly.io/docs/scrape-api/cache)
- [Batch (Multi-URL Scraping)](https://scrapfly.io/docs/scrape-api/batch)
- [Session](https://scrapfly.io/docs/scrape-api/session)
- [Webhook](https://scrapfly.io/docs/scrape-api/webhook)
- [Schedule](https://scrapfly.io/docs/scrape-api/schedule)
- [Screenshot](https://scrapfly.io/docs/scrape-api/screenshot)
- [Errors](https://scrapfly.io/docs/scrape-api/errors)
- [Timeout](https://scrapfly.io/docs/scrape-api/understand-timeout)
- [Throttling](https://scrapfly.io/docs/throttling)
- [Troubleshoot](https://scrapfly.io/docs/scrape-api/troubleshoot)
- [Billing](https://scrapfly.io/docs/scrape-api/billing)
- [FAQ](https://scrapfly.io/docs/scrape-api/faq)

#### Crawler API

- [Getting Started](https://scrapfly.io/docs/crawler-api/getting-started)
- [API Specification]()
- [Retrieving Results](https://scrapfly.io/docs/crawler-api/results)
- [WARC Format](https://scrapfly.io/docs/crawler-api/warc-format)
- [Data Extraction](https://scrapfly.io/docs/crawler-api/extraction-rules)
- [Webhook](https://scrapfly.io/docs/crawler-api/webhook)
- [Schedule](https://scrapfly.io/docs/crawler-api/schedule)
- [Billing](https://scrapfly.io/docs/crawler-api/billing)
- [Errors](https://scrapfly.io/docs/crawler-api/errors)
- [Troubleshoot](https://scrapfly.io/docs/crawler-api/troubleshoot)
- [FAQ](https://scrapfly.io/docs/crawler-api/faq)

#### Screenshot API

- [Getting Started](https://scrapfly.io/docs/screenshot-api/getting-started)
- [API Specification]()
- [Accessibility Testing](https://scrapfly.io/docs/screenshot-api/accessibility)
- [Webhook](https://scrapfly.io/docs/screenshot-api/webhook)
- [Schedule](https://scrapfly.io/docs/screenshot-api/schedule)
- [Billing](https://scrapfly.io/docs/screenshot-api/billing)
- [Errors](https://scrapfly.io/docs/screenshot-api/errors)

#### Extraction API

- [Getting Started](https://scrapfly.io/docs/extraction-api/getting-started)
- [API Specification]()
- [Rules Template](https://scrapfly.io/docs/extraction-api/rules-and-template)
- [LLM Extraction](https://scrapfly.io/docs/extraction-api/llm-prompt)
- [AI Auto Extraction](https://scrapfly.io/docs/extraction-api/automatic-ai)
- [Webhook](https://scrapfly.io/docs/extraction-api/webhook)
- [Billing](https://scrapfly.io/docs/extraction-api/billing)
- [Errors](https://scrapfly.io/docs/extraction-api/errors)
- [FAQ](https://scrapfly.io/docs/extraction-api/faq)

#### Proxy Saver

- [Getting Started](https://scrapfly.io/docs/proxy-saver/getting-started)
- [Fingerprints](https://scrapfly.io/docs/proxy-saver/fingerprints)
- [Optimizations](https://scrapfly.io/docs/proxy-saver/optimizations)
- [SSL Certificates](https://scrapfly.io/docs/proxy-saver/certificates)
- [Protocols](https://scrapfly.io/docs/proxy-saver/protocols)
- [Pacfile](https://scrapfly.io/docs/proxy-saver/pacfile)
- [Secure Credentials](https://scrapfly.io/docs/proxy-saver/security)
- [Billing](https://scrapfly.io/docs/proxy-saver/billing)

#### Cloud Browser API

- [Getting Started](https://scrapfly.io/docs/cloud-browser-api/getting-started)
- [Proxy & Geo-Targeting](https://scrapfly.io/docs/cloud-browser-api/proxy)
- [Unblock API](https://scrapfly.io/docs/cloud-browser-api/unblock)
- [Captcha Solver](https://scrapfly.io/docs/cloud-browser-api/captcha-solver)
- [File Downloads](https://scrapfly.io/docs/cloud-browser-api/file-downloads)
- [Session Resume](https://scrapfly.io/docs/cloud-browser-api/session-resume)
- [Human-in-the-Loop](https://scrapfly.io/docs/cloud-browser-api/human-in-the-loop)
- [Debug Mode](https://scrapfly.io/docs/cloud-browser-api/debug-mode)
- [Bring Your Own Proxy](https://scrapfly.io/docs/cloud-browser-api/bring-your-own-proxy)
- [Browser Extensions](https://scrapfly.io/docs/cloud-browser-api/extensions)
- [Native Browser MCP](https://scrapfly.io/docs/cloud-browser-api/mcp)
- [DevTools Protocol](https://scrapfly.io/docs/cloud-browser-api/cdp-reference)
##### Integrations

- [Puppeteer](https://scrapfly.io/docs/cloud-browser-api/puppeteer)
- [Playwright](https://scrapfly.io/docs/cloud-browser-api/playwright)
- [Selenium](https://scrapfly.io/docs/cloud-browser-api/selenium)
- [Vercel Agent Browser](https://scrapfly.io/docs/cloud-browser-api/agent-browser)
- [Browser Use](https://scrapfly.io/docs/cloud-browser-api/browser-use)
- [Stagehand](https://scrapfly.io/docs/cloud-browser-api/stagehand)

- [Billing](https://scrapfly.io/docs/cloud-browser-api/billing)
- [Errors](https://scrapfly.io/docs/cloud-browser-api/errors)


### Tools

- [Antibot Detector](https://scrapfly.io/docs/tools/antibot-detector)

### SDK

- [Golang](https://scrapfly.io/docs/sdk/golang)
- [Python](https://scrapfly.io/docs/sdk/python)
- [Rust](https://scrapfly.io/docs/sdk/rust)
- [TypeScript](https://scrapfly.io/docs/sdk/typescript)
- [Scrapy](https://scrapfly.io/docs/sdk/scrapy)

### Integrations

- [Getting Started](https://scrapfly.io/docs/integration/getting-started)
- [LangChain](https://scrapfly.io/docs/integration/langchain)
- [LlamaIndex](https://scrapfly.io/docs/integration/llamaindex)
- [CrewAI](https://scrapfly.io/docs/integration/crewai)
- [Zapier](https://scrapfly.io/docs/integration/zapier)
- [Make](https://scrapfly.io/docs/integration/make)
- [n8n](https://scrapfly.io/docs/integration/n8n)

### Academy

- [Overview](https://scrapfly.io/academy)
- [Web Scraping Overview](https://scrapfly.io/academy/scraping-overview)
- [Tools](https://scrapfly.io/academy/tools-overview)
- [Reverse Engineering](https://scrapfly.io/academy/reverse-engineering)
- [Static Scraping](https://scrapfly.io/academy/static-scraping)
- [HTML Parsing](https://scrapfly.io/academy/html-parsing)
- [Dynamic Scraping](https://scrapfly.io/academy/dynamic-scraping)
- [Hidden API Scraping](https://scrapfly.io/academy/hidden-api-scraping)
- [Headless Browsers](https://scrapfly.io/academy/headless-browsers)
- [Hidden Web Data](https://scrapfly.io/academy/hidden-web-data)
- [JSON Parsing](https://scrapfly.io/academy/json-parsing)
- [Data Processing](https://scrapfly.io/academy/data-processing)
- [Scaling](https://scrapfly.io/academy/scaling)
- [Walkthrough Summary](https://scrapfly.io/academy/walkthrough-summary)
- [Scraper Blocking](https://scrapfly.io/academy/scraper-blocking)
- [Proxies](https://scrapfly.io/academy/proxies)

---

  if(matchMedia('(prefers-color-scheme:dark)').matches){document.documentElement.dataset.theme='dark'} Scrapfly Web Scraping API | Swagger - OpenAPI 
    [{
        "@context": "https://schema.org",
        "@type": "WebSite",
        "@id": "https://scrapfly.io/#website",
        "headline": "Scrapfly",
        "name": "Scrapfly",
        "description": "Discover the Swagger / OpenAPI playground to discover Scrapfly",
        "url": "https://scrapfly.io",
        "publisher": { "@id": "https://scrapfly.io/#organization" }
    },
    {
        "@context": "https://schema.org",
        "@type": ["Organization", "Corporation"],
        "@id": "https://scrapfly.io/#organization",
        "name": "Scrapfly",
        "alternateName": "Scrapfly.io",
        "url": "https://scrapfly.io",
        "description": "Scrapfly is a managed web scraping and browser automation platform: anti-bot bypass, residential and datacenter proxies, headless Cloud Browser (Playwright/Puppeteer/Selenium/CDP), screenshot, LLM-powered structured extraction, and a configurable site crawler. All on one API key.",
        "foundingDate": "2020",
        "sameAs": [
            "https://github.com/scrapfly",
            "https://www.linkedin.com/company/scrapfly",
            "https://www.youtube.com/@scrapfly",
            "https://www.capterra.com/p/212653/Scrapfly/",
            "https://mcp.scrapfly.io",
            "https://status.scrapfly.io",
            "https://trust.scrapfly.io"
        ],
        "address": {
            "@type": "PostalAddress",
            "streetAddress": "651 N Broad St, Suite 201",
            "addressLocality": "Middletown",
            "addressRegion": "DE",
            "postalCode": "19709",
            "addressCountry": "US"
        },
        "legalName": "Joam Intelligence LLC",
        "logo": {
            "@type": "ImageObject",
            "url": "https://cdn.scrapfly.io/0.1.241/www/public/img/logo.png?version=0.1.241",
            "width": "188",
            "height": "49"
        },
        "contactPoint": [
            {
                "@type": "ContactPoint",
                "contactType": "customer support",
                "email": "support@scrapfly.io",
                "url": "https://scrapfly.io",
                "availableLanguage": ["en"]
            },
            {
                "@type": "ContactPoint",
                "contactType": "sales",
                "email": "contact@scrapfly.io",
                "url": "https://scrapfly.io",
                "availableLanguage": ["en"]
            },
            {
                "@type": "ContactPoint",
                "contactType": "security",
                "url": "https://scrapfly.io",
                "availableLanguage": ["en"]
            }
        ]
    }]
                        
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  size-adjust: 104%;
  ascent-override: 95%;
  descent-override: 27%;
  line-gap-override: 0%;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/IBMPlexSans-Regular.woff2?version=0.1.241') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/IBMPlexSans-Bold.woff2?version=0.1.241') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/IBMPlexMono-Regular.woff2?version=0.1.241') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/IBMPlexMono-Bold.woff2?version=0.1.241') format('woff2');
}
 *,*::before,*::after{box-sizing:border-box}html{font-size:16px;-webkit-text-size-adjust:100%}body{margin:0;font-family:"IBM Plex Sans","Inter",system-ui,sans-serif;font-size:1rem;line-height:1.5;color:#6d6e71;background:#fff}h1,h2,h3,h4,h5,h6{margin:0 0 .5rem;font-weight:700;line-height:1.2}p{margin:0 0 1rem}a{color:#1a73c7;text-decoration:none}.container{width:100%;max-width:1140px;margin:0 auto;padding:0 15px}.container-fluid{width:100%;padding:0 15px}.row{display:flex;flex-wrap:wrap;margin:0 -15px}[class*=col-]{padding:0 15px;width:100%;flex:0 0 auto}.d-block{display:block}.d-flex{display:flex}.d-none{display:none}.text-center{text-align:center}.text-uppercase{text-transform:uppercase}.text-primary{color:#1a73c7}.text-muted{color:#6c757d}.bg-light{background-color:#f8f9fa}.lead{font-size:1.125rem;font-weight:400}small,.small{font-size:.875rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:1rem}.mb-5{margin-bottom:3rem}.mt-4{margin-top:1.5rem}.pt-3{padding-top:1rem}.pb-2{padding-bottom:.5rem}.py-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-5{padding-top:3rem;padding-bottom:3rem}.btn{display:inline-block;padding:.5rem 1rem;border:1px solid rgba(0,0,0,0);font-weight:500;line-height:1.5;border-radius:.25rem;cursor:pointer;text-decoration:none}.header{position:sticky;top:0;z-index:1020;background:#fff}.header_content{width:100%}nav.navbar{display:flex;align-items:center;padding:.5rem 1rem;min-height:72px}.navbar-brand{display:inline-flex;align-items:center;padding:.3125rem 0;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand .logo{width:172px;height:40px;display:block}.theme--blueprint h1{font-family:"IBM Plex Sans","Inter",system-ui,sans-serif;font-weight:700;letter-spacing:-0.015em}.theme--blueprint h1::before{content:"//";color:#4ea8f1;font-family:"IBM Plex Mono","SF Mono","Consolas","Liberation Mono","Ubuntu Mono",monospace;font-weight:700;font-size:.85em;letter-spacing:-0.05em;margin-right:.25em}.theme--blueprint small.text-uppercase{font-family:"IBM Plex Mono","SF Mono","Consolas","Liberation Mono","Ubuntu Mono",monospace;letter-spacing:.08em;font-weight:700}.pricing-h1{font-size:clamp(1.75rem,3.6vw,2.5rem);line-height:1.2;font-weight:700;letter-spacing:-0.015em;margin:0}    
        :root {
            --dark-mode-toggle-dark-icon: url("data:image/png;base64,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");
            --dark-mode-toggle-light-icon: url("data:image/png;base64,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");
            --dark-mode-toggle-icon-size: 25px;
        }

        .grecaptcha-badge {
            visibility: hidden !important;
        }

        .hljs{display:block;overflow-x:auto;padding:0;background:rgba(0,0,0,0);color:#d8dee9}.hljs-subst{color:#d8dee9}.hljs-selector-tag{color:#81a1c1}.hljs-selector-id{color:#8fbcbb;font-weight:bold}.hljs-selector-class,.hljs-selector-attr{color:#8fbcbb}.hljs-selector-pseudo{color:#88c0d0}.hljs-addition{background-color:rgba(163,190,140,.5)}.hljs-deletion{background-color:rgba(191,97,106,.5)}.hljs-built_in,.hljs-type,.hljs-class{color:#8fbcbb}.hljs-function{color:#88c0d0}.hljs-function>.hljs-title{color:#88c0d0}.hljs-keyword,.hljs-literal,.hljs-symbol{color:#81a1c1}.hljs-number{color:#b48ead}.hljs-regexp{color:#ebcb8b}.hljs-string{color:#a3be8c}.hljs-title{color:#8fbcbb}.hljs-params{color:#d8dee9}.hljs-bullet{color:#81a1c1}.hljs-code{color:#8fbcbb}.hljs-emphasis{font-style:italic}.hljs-formula{color:#8fbcbb}.hljs-strong{font-weight:bold}.hljs-link:hover{text-decoration:underline}.hljs-quote,.hljs-comment{color:#4c566a}.hljs-doctag{color:#8fbcbb}.hljs-meta,.hljs-meta-keyword{color:#5e81ac}.hljs-meta-string{color:#a3be8c}.hljs-attr{color:#8fbcbb}.hljs-attribute{color:#d8dee9}.hljs-builtin-name,.hljs-name{color:#81a1c1}.hljs-section{color:#88c0d0}.hljs-tag{color:#81a1c1}.hljs-variable,.hljs-template-variable{color:#d8dee9}.hljs-template-tag{color:#5e81ac}.abnf .hljs-attribute{color:#88c0d0}.abnf .hljs-symbol{color:#ebcb8b}.apache .hljs-attribute{color:#88c0d0}.apache .hljs-section{color:#81a1c1}.arduino .hljs-built_in{color:#88c0d0}.aspectj .hljs-meta{color:#d08770}.aspectj>.hljs-title{color:#88c0d0}.bnf .hljs-attribute{color:#8fbcbb}.clojure .hljs-name{color:#88c0d0}.clojure .hljs-symbol{color:#ebcb8b}.coq .hljs-built_in{color:#88c0d0}.cpp .hljs-meta-string{color:#8fbcbb}.css .hljs-built_in{color:#88c0d0}.css .hljs-keyword{color:#d08770}.diff .hljs-meta,.ebnf .hljs-attribute{color:#8fbcbb}.glsl .hljs-built_in{color:#88c0d0}.groovy .hljs-meta:not(:first-child),.haxe .hljs-meta,.java .hljs-meta{color:#d08770}.ldif .hljs-attribute{color:#8fbcbb}.lisp .hljs-name,.lua .hljs-built_in,.moonscript .hljs-built_in{color:#88c0d0}.nginx .hljs-attribute{color:#88c0d0}.nginx .hljs-section{color:#5e81ac}.pf .hljs-built_in,.processing .hljs-built_in{color:#88c0d0}.scss .hljs-keyword,.stylus .hljs-keyword{color:#81a1c1}.swift .hljs-meta{color:#d08770}.vim .hljs-built_in{color:#88c0d0;font-style:italic}.yaml .hljs-meta{color:#d08770}
      :root{color-scheme:light}
(function(){
  var COOKIE = 'css-mode';
  var html = document.documentElement;
  var serverTheme = 'light';
  var hasCookie = false;
  var cookieVal = (function(){
    var m = document.cookie.match(/(?:^|;\s*)css-mode=([^;]+)/);
    return m ? decodeURIComponent(m[1]) : '';
  })();
  var explicitMode = cookieVal === 'light' || cookieVal === 'dark';
  var systemMode = !explicitMode; // unset, "system", or anything else

  function osTheme(){
    return matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
  }

  // 1. Pre-paint guard: align data-theme with the actual desired mode
  //    when the user is in system mode and the OS disagrees with what
  //    the server picked.
  if (systemMode){
    var want = osTheme();
    if (want !== serverTheme){
      html.dataset.theme = want;
      var meta = document.querySelector('meta[name="color-scheme"]');
      if (meta) meta.setAttribute('content', want);
      // For docs pages that switch <link rel="stylesheet" href="doc-X.css">
      // at server time, swap the href on the fly so first paint matches.
      // We tag those with [data-theme-stylesheet] in the <head>.
      var sheet = document.querySelector('link[data-theme-stylesheet]');
      if (sheet){
        sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + want + '.css');
      }
      // Cookie hint for next request — "system" so future requests still
      // honor the OS preference (and Sec-CH-Prefers-Color-Scheme will be
      // sent on subsequent navigations once the browser learns we care).
      try { document.cookie = COOKIE + '=system; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    } else if (!hasCookie){
      try { document.cookie = COOKIE + '=system; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    }
  }

  // 2. React to OS theme changes — only for users on system mode.
  if (window.matchMedia){
    try {
      matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e){
        // re-read cookie in case user set explicit mode in another tab
        var fresh = (document.cookie.match(/(?:^|;\s*)css-mode=([^;]+)/) || [])[1] || '';
        if (fresh !== 'light' && fresh !== 'dark'){
          var t = e.matches ? 'dark' : 'light';
          html.dataset.theme = t;
          var meta = document.querySelector('meta[name="color-scheme"]');
          if (meta) meta.setAttribute('content', t);
          var sheet = document.querySelector('link[data-theme-stylesheet]');
          if (sheet){
            sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + t + '.css');
          }
        }
      });
    } catch(_){}
  }

  // 3. Public helper for the toggle UI. theme = "system" | "light" | "dark"
  window.__setSiteTheme = function(theme){
    var t = (theme === 'light' || theme === 'dark') ? theme : 'system';
    try { document.cookie = COOKIE + '=' + t + '; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    var resolved = (t === 'system') ? osTheme() : t;
    html.dataset.theme = resolved;
    var meta = document.querySelector('meta[name="color-scheme"]');
    if (meta) meta.setAttribute('content', resolved);
    var sheet = document.querySelector('link[data-theme-stylesheet]');
    if (sheet){
      sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + resolved + '.css');
      // Stylesheet swap is async — give it a beat then notify so listeners
      // (e.g. dashboard charts) can re-render.
      setTimeout(function(){
        document.dispatchEvent(new CustomEvent('themechange', {detail:{theme: resolved, mode: t}}));
      }, 50);
    } else {
      document.dispatchEvent(new CustomEvent('themechange', {detail:{theme: resolved, mode: t}}));
    }
  };
})();
 :root{color-scheme:light}
(function(){
  var COOKIE = 'css-mode';
  var html = document.documentElement;
  var serverTheme = 'light';
  var hasCookie = false;
  var cookieVal = (function(){
    var m = document.cookie.match(/(?:^|;\s*)css-mode=([^;]+)/);
    return m ? decodeURIComponent(m[1]) : '';
  })();
  var explicitMode = cookieVal === 'light' || cookieVal === 'dark';
  var systemMode = !explicitMode; // unset, "system", or anything else

  function osTheme(){
    return matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
  }

  // 1. Pre-paint guard: align data-theme with the actual desired mode
  //    when the user is in system mode and the OS disagrees with what
  //    the server picked.
  if (systemMode){
    var want = osTheme();
    if (want !== serverTheme){
      html.dataset.theme = want;
      var meta = document.querySelector('meta[name="color-scheme"]');
      if (meta) meta.setAttribute('content', want);
      // For docs pages that switch <link rel="stylesheet" href="doc-X.css">
      // at server time, swap the href on the fly so first paint matches.
      // We tag those with [data-theme-stylesheet] in the <head>.
      var sheet = document.querySelector('link[data-theme-stylesheet]');
      if (sheet){
        sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + want + '.css');
      }
      // Cookie hint for next request — "system" so future requests still
      // honor the OS preference (and Sec-CH-Prefers-Color-Scheme will be
      // sent on subsequent navigations once the browser learns we care).
      try { document.cookie = COOKIE + '=system; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    } else if (!hasCookie){
      try { document.cookie = COOKIE + '=system; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    }
  }

  // 2. React to OS theme changes — only for users on system mode.
  if (window.matchMedia){
    try {
      matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e){
        // re-read cookie in case user set explicit mode in another tab
        var fresh = (document.cookie.match(/(?:^|;\s*)css-mode=([^;]+)/) || [])[1] || '';
        if (fresh !== 'light' && fresh !== 'dark'){
          var t = e.matches ? 'dark' : 'light';
          html.dataset.theme = t;
          var meta = document.querySelector('meta[name="color-scheme"]');
          if (meta) meta.setAttribute('content', t);
          var sheet = document.querySelector('link[data-theme-stylesheet]');
          if (sheet){
            sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + t + '.css');
          }
        }
      });
    } catch(_){}
  }

  // 3. Public helper for the toggle UI. theme = "system" | "light" | "dark"
  window.__setSiteTheme = function(theme){
    var t = (theme === 'light' || theme === 'dark') ? theme : 'system';
    try { document.cookie = COOKIE + '=' + t + '; path=/; max-age=31536000; SameSite=Lax'; } catch(e){}
    var resolved = (t === 'system') ? osTheme() : t;
    html.dataset.theme = resolved;
    var meta = document.querySelector('meta[name="color-scheme"]');
    if (meta) meta.setAttribute('content', resolved);
    var sheet = document.querySelector('link[data-theme-stylesheet]');
    if (sheet){
      sheet.href = sheet.href.replace(/doc-(light|dark)\.css/, 'doc-' + resolved + '.css');
      // Stylesheet swap is async — give it a beat then notify so listeners
      // (e.g. dashboard charts) can re-render.
      setTimeout(function(){
        document.dispatchEvent(new CustomEvent('themechange', {detail:{theme: resolved, mode: t}}));
      }, 50);
    } else {
      document.dispatchEvent(new CustomEvent('themechange', {detail:{theme: resolved, mode: t}}));
    }
  };
})();
 
            (function () {
                function loadFa () {
                    var style = document.createElement('style');
                    style.textContent =
                        "@font-face{font-family:'Font Awesome 6 Free';font-style:normal;font-weight:900;font-display:swap;src:url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/fa-solid-900.woff2?version=0.1.241') format('woff2')}" +
                        "@font-face{font-family:'Font Awesome 6 Brands';font-style:normal;font-weight:400;font-display:swap;src:url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/fa-brands-400.woff2?version=0.1.241') format('woff2')}";
                    document.head.appendChild(style);
                    var link = document.createElement('link');
                    link.rel = 'stylesheet';
                    link.href = "https://cdn.scrapfly.io/0.1.241/www/public/css/fontawesome.css?version=0.1.241";
                    document.head.appendChild(link);
                }
                if ('requestIdleCallback' in window) {
                    requestIdleCallback(loadFa, { timeout: 2000 });
                } else if (document.readyState === 'complete') {
                    setTimeout(loadFa, 0);
                } else {
                    window.addEventListener('load', function () { setTimeout(loadFa, 0); });
                }
            })();
              
@font-face {
  font-family: 'Font Awesome 6 Free';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/fa-solid-900.woff2?version=0.1.241') format('woff2');
}
@font-face {
  font-family: 'Font Awesome 6 Brands';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('https://cdn.scrapfly.io/0.1.241/www/public/fonts/fa-brands-400.woff2?version=0.1.241') format('woff2');
}
   
            (function (w, d, s, l, i) {
                w[l] = w[l] || [];
                w[l].push({
                'gtm.start': new Date().getTime(),
                event: 'gtm.js'
                });
                var f = d.getElementsByTagName(s)[0],
                    j = d.createElement(s),
                    dl = l != 'dataLayer' ? '&l=' + l : '';
                j.async = true;
                j.defer = true;
                j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
                f.parentNode.insertBefore(j, f);
            })(window, document, 'script', 'dataLayer', 'GTM-TWP8NJG7');
          
            window.dataLayer = window.dataLayer || [];
            function gtag() {
                dataLayer.push(arguments);
            }

            gtag('js', new Date());

                     
        let highlight_worker_url = "data:text/javascript;base64,b25tZXNzYWdlPXQ9PntpbXBvcnRTY3JpcHRzKCJodHRwczovL2Nkbi5zY3JhcGZseS5pby8wLjEuMjQxL3d3dy9wdWJsaWMvanMvaGlnaGxpZ2h0LmpzP3ZlcnNpb249MC4xLjI0MSIpO2xldCBhPXNlbGYuaGxqcy5oaWdobGlnaHRBdXRvKHQuZGF0YS5jb250ZW50KS52YWx1ZTtpZih0LmRhdGEuaGlnaGxpZ2h0JiZ0LmRhdGEuaGlnaGxpZ2h0Lmxlbmd0aD4wKWZvcihjb25zdCBlIG9mIHQuZGF0YS5oaWdobGlnaHQpe2NvbnN0IHQ9ZS50ZXh0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIiksaD1uZXcgUmVnRXhwKGAoJHt0fSlgLCJnIik7YT1lLmhyZWY/YS5yZXBsYWNlKGgsYDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSIke2UuaHJlZn0iIGNsYXNzPSJobC1jdXN0b20iPiQxPC9hPmApOmEucmVwbGFjZShoLCc8c3BhbiBjbGFzcz0iaGwtY3VzdG9tIj4kMTwvc3Bhbj4nKX1wb3N0TWVzc2FnZSh7dGFza0lkOnQuZGF0YS50YXNrSWQscmVuZGVyZWQ6YX0pfTs=";
        
        document.addEventListener('DOMContentLoaded', () => {

            const searchInputElement = document.querySelector('#search-query')

            if (searchInputElement) {
                let searchWidget = new DocumentationSearchWidget(
                    searchInputElement,
                    "data:text/javascript;base64,Y2xhc3MgRG9jdW1lbnRhdGlvblNlYXJjaFdvcmtlcntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNSZWFkeT0hMSx0aGlzLmNvbmZpZz1udWxsLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRvY3VtZW50cz17fX1hc3luYyBzZXR1cChlKXtpbXBvcnRTY3JpcHRzKCJodHRwczovL2Nkbi5zY3JhcGZseS5pby8wLjEuMjQxL3d3dy9wdWJsaWMvanMvbHVuci5qcz92ZXJzaW9uPTAuMS4yNDEiKSxhd2FpdCB0aGlzLmJ1aWxkU2VhcmNoSW5kZXgoZSksdGhpcy5pc1JlYWR5PSEwLHBvc3RNZXNzYWdlKHtjb25maWc6dGhpcy5jb25maWcsaXNSZWFkeTp0aGlzLmlzUmVhZHl9KX1hc3luYyBidWlsZFNlYXJjaEluZGV4KGUpe2UuY29uZmlnJiZlLmNvbmZpZy5zZXBhcmF0b3ImJmUuY29uZmlnLnNlcGFyYXRvci5sZW5ndGgmJihsdW5yLnRva2VuaXplci5zZXBhcmF0b3I9bmV3IFJlZ0V4cChlLmNvbmZpZy5zZXBhcmF0b3IsImciKSksdGhpcy5jb25maWc9ZS5jb25maWc7Y29uc3QgdD1EYXRlLm5vdygpO2lmKGUuaW5kZXgpZS5kb2NzLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5kb2N1bWVudHNbZS5sb2NhdGlvbl0mJmNvbnNvbGUuZXJyb3IoYER1cGxpY2F0ZSBkb2N1bWVudCBsb2NhdGlvbjogJHtlLmxvY2F0aW9ufWApLHRoaXMuZG9jdW1lbnRzW2UubG9jYXRpb25dPWV9LmJpbmQodGhpcykpLHRoaXMuaW5kZXg9bHVuci5JbmRleC5sb2FkKGRhdGEuaW5kZXgpLGNvbnNvbGUubG9nKGBMdW5yIHByZS1idWlsdCBpbmRleCBsb2FkZWQsIHNlYXJjaCByZWFkeSBpbiAke0RhdGUubm93KCktdH1tc2ApO2Vsc2V7Y29uc3Qgcz10aGlzO3RoaXMuaW5kZXg9bHVucihmdW5jdGlvbigpe3RoaXMuZmllbGQoInRpdGxlIix7Ym9vc3Q6NX0pLHRoaXMuZmllbGQoInRleHQiKSx0aGlzLmZpZWxkKCJ0ZXh0X2hpZGRlbiIpLHRoaXMucmVmKCJsb2NhdGlvbiIpLGUuZG9jcy5mb3JFYWNoKGU9Pnt0aGlzLmFkZChlKSxzLmRvY3VtZW50c1tlLmxvY2F0aW9uXT1lfSl9KSxjb25zb2xlLmxvZyhgTHVuciBpbmRleCBidWlsdCwgc2VhcmNoIHJlYWR5IGluICR7RGF0ZS5ub3coKS10fW1zYCl9fXNlYXJjaChlLHQpe2lmKCF0aGlzLmlzUmVhZHkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkFzc2V0cyBmb3Igc2VhcmNoIHN0aWxsIGxvYWRpbmciKSxbXTtjb25zdCBzPWUucmVwbGFjZShsdW5yLnRva2VuaXplci5zZXBhcmF0b3IsIiAiKS5yZXBsYWNlKC86L2csIlxcOiIpO2xldCBvPXRoaXMuaW5kZXguc2VhcmNoKHMpO2lmKCFvLmxlbmd0aCl7bz10aGlzLmluZGV4LnNlYXJjaChzKyIqIik7Zm9yKGxldCBlIG9mIG8pZS5tYXRjaERhdGEubWV0YWRhdGE9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUubWF0Y2hEYXRhLm1ldGFkYXRhKS5tYXAoKFtlLHRdKT0+W2Uuc3BsaXQoLzx8PnwiLylbMF0sdF0pKX1mb3IobGV0IGUgb2Ygbyl7Y29uc3QgdD10aGlzLmRvY3VtZW50c1tlLnJlZl0uYm9vc3Q7dCYmKGUuc2NvcmUqPXQpfW8uc29ydCgoZSx0KT0+dC5zY29yZS1lLnNjb3JlKTtyZXR1cm57cmVzdWx0czpvLnNsaWNlKDAsdCkubWFwKGZ1bmN0aW9uKHQpe2NvbnN0IHM9dGhpcy5kb2N1bWVudHNbdC5yZWZdO3JldHVybiBzLmhpZ2hsaWdodHM9T2JqZWN0LmtleXModC5tYXRjaERhdGEubWV0YWRhdGEpLHMuaGlnaGxpZ2h0cy51bnNoaWZ0KGUpLHN9LmJpbmQodGhpcykpLHRvdGFsOm8ubGVuZ3RoLGxpbWl0OnQscXVlcnk6ZX19fWNvbnN0IHNlYXJjaFdvcmtlcj1uZXcgRG9jdW1lbnRhdGlvblNlYXJjaFdvcmtlcjtvbm1lc3NhZ2U9YXN5bmMgZT0+e2UuZGF0YS5zZWFyY2hJbmRleD9hd2FpdCBzZWFyY2hXb3JrZXIuc2V0dXAoZS5kYXRhLnNlYXJjaEluZGV4KTplLmRhdGEucXVlcnk/cG9zdE1lc3NhZ2Uoc2VhcmNoV29ya2VyLnNlYXJjaChlLmRhdGEucXVlcnksZS5kYXRhLmxpbWl0KSk6Y29uc29sZS5lcnJvcihgV29ya2VyIC0gVW5yZWNvZ25pemVkIG1lc3NhZ2U6ICR7ZX1gKX07",
                    "https://cdn.scrapfly.io/0.1.241/www/public/search-index.json?version=0.1.241"
                );

                document.dispatchEvent(new CustomEvent('ScrapflySearchWidgetLoaded', {
                    detail: {widget: searchWidget},
                }));
            }

            const copyForLLM = document.getElementById('copy-llm');

            if(copyForLLM) {
                const button = copyForLLM;
                const originalContent = button.innerHTML;
                let clipboard = null;

                // Function to handle the copy process
                async function handleCopy() {
                    try {
                        button.innerHTML = '<i class="fa-solid fa-spinner fa-spin"> Copying...';
                        button.disabled = true;

                        let url = new URL(window.location.href);
                        url.searchParams.set('view', 'markdown');

                        const response = await fetch(url.toString());
                        const data = await response.text();

                        let tempElement = document.createElement('div');
                        tempElement.innerHTML = data;
                        const textContent = tempElement.textContent || tempElement.innerText;

                        await navigator.clipboard.writeText(textContent);

                        button.innerHTML = '<i class="fa-solid fa-check"> Copied!';
                    } catch (error) {
                        console.error('Error copying content:', error);
                        button.innerHTML = '<i class="fa-solid fa-xmark"> Failed to copy';
                    } finally {
                        setTimeout(() => {
                            button.innerHTML = originalContent;
                            button.disabled = false;
                        }, 5000);
                    }
                }

                // Add click event listener
                button.addEventListener('click', (e) => {
                    e.preventDefault();
                    handleCopy();
                });
            }
        });
       
        document.addEventListener("ScrapflySearchWidgetLoaded", function (event) {
            function quickSearch(query) {
                setTimeout(() => { event.detail.widget.toggleSearch(); }, 10);
                setTimeout(() => { event.detail.widget.performSearch(query); }, 50);
                setTimeout(() => { event.detail.widget.searchInputElement.value = query; }, 100);
            }

            document.querySelectorAll('button[data-opensearch]').forEach(function(el){
                el.addEventListener('click', function(e){
                    e.preventDefault();
                    quickSearch(this.dataset.opensearch);
                });
            });
        });
     
    (function () {
        var loaded = false;
        function loadCopilot () {
            if (loaded) return;
            loaded = true;
            var s = document.createElement('script');
            s.src = 'https://cloud.google.com/ai/gen-app-builder/client?hl=en';
            s.async = true;
            document.head.appendChild(s);
        }
        function attach () {
            // Both trigger ids in use across docs templates: #triggerCopilot
            // (sticky header on most pages) and #searchWidgetTrigger (on the
            // standalone /docs/copilot page).
            ['triggerCopilot', 'searchWidgetTrigger'].forEach(function (id) {
                var el = document.getElementById(id);
                if (!el) return;
                ['mouseenter', 'focus', 'click', 'touchstart'].forEach(function (ev) {
                    el.addEventListener(ev, loadCopilot, { once: true, passive: true });
                });
            });
        }
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', attach);
        } else {
            attach();
        }
        // Fallback: if no interaction in 5s, load anyway so URL-hash deep
        // links (#search) and programmatic .click() still work.
        setTimeout(loadCopilot, 5000);
    })();
     
            let app_config = {
                domain: "scrapfly.io"
            }

            let user_config = null;
            let app_version = "0.1.241";
            window._scp_debug = false;
                       
            window.ScrapflyConfig = {
                apiKey: '\u007B\u007B\u0020YOUR_API_KEY\u0020\u007D\u007D'
            };
              [  Docs ](https://scrapfly.io/docs) 

   Search documentation...  ⌘K   

 

   Ask AI    Python sdk   Typescript sdk   Go sdk   Rust sdk   Python   Curl   Node js   Go   Php   Java   Ruby   Http   C sharp   Rust   

    
    (function(){
        var btn = document.getElementById('theme-toggle-compact');
        if (!btn) return;
        var icons = {system: 'fa-desktop', light: 'fa-sun', dark: 'fa-moon'};
        var order = ['system', 'light', 'dark'];
        function paint(mode){
            var icon = btn.querySelector('.theme-toggle-compact__icon');
            icon.className = 'fas theme-toggle-compact__icon ' + icons[mode];
            btn.dataset.mode = mode;
            btn.title = 'Theme: ' + mode + ' (click to cycle)';
        }
        paint(btn.dataset.mode);
        btn.addEventListener('click', function(){
            var i = order.indexOf(btn.dataset.mode);
            var next = order[(i + 1) % order.length];
            paint(next);
            if (window.__setSiteTheme) window.__setSiteTheme(next);
        });
    })();
        [Sign in](https://scrapfly.io/login) [Get Started](https://scrapfly.io/register) 

 

 

 

   Products  [  MCP Server ](https://scrapfly.io/docs/mcp/getting-started)

 [  Web Scraping API ](https://scrapfly.io/docs/scrape-api/getting-started) [  Screenshot API ](https://scrapfly.io/docs/screenshot-api/getting-started) [  Extraction API ](https://scrapfly.io/docs/extraction-api/getting-started) [  Proxy Saver ](https://scrapfly.io/docs/proxy-saver/getting-started) [  Cloud Browser ](https://scrapfly.io/docs/cloud-browser-api/getting-started) [  Crawler API ](https://scrapfly.io/docs/crawler-api/getting-started) 

 

  SDKs  [  Python SDK ](https://scrapfly.io/docs/sdk/python) [  TypeScript SDK ](https://scrapfly.io/docs/sdk/typescript) [  Golang SDK ](https://scrapfly.io/docs/sdk/golang) [  Rust SDK NEW ](https://scrapfly.io/docs/sdk/rust) [  Scrapy SDK ](https://scrapfly.io/docs/sdk/scrapy) 

 

   Visual API  [  Web Scraping API ](https://scrapfly.io/dashboard/playground/web-scraper) [  Extraction API ](https://scrapfly.io/dashboard/playground/extraction) [  Crawler API ](https://scrapfly.io/dashboard/playground/crawler) [  Screenshot API ](https://scrapfly.io/dashboard/playground/screenshot) [  MCP Playground ](https://scrapfly.io/dashboard/playground/mcp) 

 

  Tools  [ScrapeGround](https://scrapfly.io/scrapeground)

 [web-scraping.dev](https://web-scraping.dev/) [httpbin.dev](https://httpbin.dev/)

 [JA3 Fingerprinter](https://scrapfly.io/web-scraping-tools/ja3-fingerprint) [HTTP2 Fingerprinter](https://scrapfly.io/web-scraping-tools/http2-fingerprint) 

 

 [  Academy ](https://scrapfly.io/academy) [  Changelog ](https://scrapfly.io/docs/release-notes)     Python sdk   Typescript sdk   Go sdk   Rust sdk   Python   Curl   Node js   Go   Php   Java   Ruby   Http   C sharp   Rust   

 Dashboard  

- [Intro](https://scrapfly.io/docs)
- [Project](https://scrapfly.io/docs/project)
- [Account](https://scrapfly.io/docs/account)
- [Workspace &amp; Team](https://scrapfly.io/docs/workspace-and-team)
- [Billing](https://scrapfly.io/docs/billing)
 
 

 Products 

  MCP Server  

- [Getting Started](https://scrapfly.io/docs/mcp/getting-started)
- [Tools &amp; API Spec](https://scrapfly.io/docs/mcp/tools)
- [Authentication](https://scrapfly.io/docs/mcp/authentication)
- [Examples &amp; Use Cases](https://scrapfly.io/docs/mcp/examples)
- [FAQ](https://scrapfly.io/docs/mcp/faq)
- [ Integrations  ](#mcp-integrations-collapse)
    - [Overview](https://scrapfly.io/docs/mcp/integrations)
    - AI Assistants &amp; Code Editors
    - [Claude Desktop](https://scrapfly.io/docs/mcp/integrations/claude-desktop)
    - [Claude Code](https://scrapfly.io/docs/mcp/integrations/claude-code)
    - [ChatGPT](https://scrapfly.io/docs/mcp/integrations/chatgpt)
    - [Cursor](https://scrapfly.io/docs/mcp/integrations/cursor)
    - [Cline](https://scrapfly.io/docs/mcp/integrations/cline)
    - [Windsurf](https://scrapfly.io/docs/mcp/integrations/windsurf)
    - [Zed](https://scrapfly.io/docs/mcp/integrations/zed)
    - [Roo Code](https://scrapfly.io/docs/mcp/integrations/roo-code)
    - [VS Code](https://scrapfly.io/docs/mcp/integrations/vscode)
    - AI Frameworks &amp; SDKs
    - [LangChain](https://scrapfly.io/docs/mcp/integrations/langchain)
    - [LlamaIndex](https://scrapfly.io/docs/mcp/integrations/llamaindex)
    - [CrewAI](https://scrapfly.io/docs/mcp/integrations/crewai)
    - [OpenAI](https://scrapfly.io/docs/mcp/integrations/openai)
    - No-Code &amp; Automation
    - [n8n](https://scrapfly.io/docs/mcp/integrations/n8n)
    - [Make](https://scrapfly.io/docs/mcp/integrations/make)
    - [Zapier](https://scrapfly.io/docs/mcp/integrations/zapier)
    - [Vapi AI](https://scrapfly.io/docs/mcp/integrations/vapi)
    - [Agent Builder](https://scrapfly.io/docs/mcp/integrations/agent-builder)
    - [Custom Client](https://scrapfly.io/docs/mcp/integrations/custom-client)
 
 

  Web Scraping API  

- [Getting started](https://scrapfly.io/docs/scrape-api/getting-started)
- [Monitoring](https://scrapfly.io/docs/monitoring)
- [Customize Request](https://scrapfly.io/docs/scrape-api/custom)
- [Debug](https://scrapfly.io/docs/scrape-api/debug)
- [Anti Scraping Protection](https://scrapfly.io/docs/scrape-api/anti-scraping-protection)
- [Proxy](https://scrapfly.io/docs/scrape-api/proxy)
- [Proxy Mode](https://scrapfly.io/docs/scrape-api/proxy-mode)
- [Screaming Frog](https://scrapfly.io/docs/scrape-api/proxy-mode/screaming-frog)
- [Apify](https://scrapfly.io/docs/scrape-api/proxy-mode/apify)
- [(Auto) Data Extraction](https://scrapfly.io/docs/scrape-api/extraction)
- [Javascript Rendering](https://scrapfly.io/docs/scrape-api/javascript-rendering)
- [ Javascript Scenario ](https://scrapfly.io/docs/scrape-api/javascript-scenario)
- [SSL](https://scrapfly.io/docs/scrape-api/ssl)
- [DNS](https://scrapfly.io/docs/scrape-api/dns)
- [Cache](https://scrapfly.io/docs/scrape-api/cache)
- [Batch (Multi-URL Scraping)](https://scrapfly.io/docs/scrape-api/batch)
- [Classify (Block Detection)](https://scrapfly.io/docs/scrape-api/classify)
- [Session](https://scrapfly.io/docs/scrape-api/session)
- [Webhook](https://scrapfly.io/docs/scrape-api/webhook)
- [Schedule](https://scrapfly.io/docs/scrape-api/schedule)
- [Screenshot](https://scrapfly.io/docs/scrape-api/screenshot)
- [Errors](https://scrapfly.io/docs/scrape-api/errors)
- [Timeout](https://scrapfly.io/docs/scrape-api/understand-timeout)
- [Throttling](https://scrapfly.io/docs/throttling)
- [Troubleshoot](https://scrapfly.io/docs/scrape-api/troubleshoot)
- [Billing](https://scrapfly.io/docs/scrape-api/billing)
- [FAQ](https://scrapfly.io/docs/scrape-api/faq)
 
 

  Crawler API BETA  

- [Getting started](https://scrapfly.io/docs/crawler-api/getting-started)
- [Retrieving Results](https://scrapfly.io/docs/crawler-api/results)
- [WARC Format](https://scrapfly.io/docs/crawler-api/warc-format)
- [Data Extraction](https://scrapfly.io/docs/crawler-api/extraction-rules)
- [Webhook](https://scrapfly.io/docs/crawler-api/webhook)
- [Schedule](https://scrapfly.io/docs/crawler-api/schedule)
- [Billing](https://scrapfly.io/docs/crawler-api/billing)
- [Errors](https://scrapfly.io/docs/crawler-api/errors)
- [Monitoring](https://scrapfly.io/docs/crawler-api/monitoring)
- [Troubleshoot](https://scrapfly.io/docs/crawler-api/troubleshoot)
- [FAQ](https://scrapfly.io/docs/crawler-api/faq)
 
 

  Screenshot API  

- [Getting started](https://scrapfly.io/docs/screenshot-api/getting-started)
- [Accessibility Testing](https://scrapfly.io/docs/screenshot-api/accessibility)
- [Webhook](https://scrapfly.io/docs/screenshot-api/webhook)
- [Schedule](https://scrapfly.io/docs/screenshot-api/schedule)
- [Billing](https://scrapfly.io/docs/screenshot-api/billing)
- [Errors](https://scrapfly.io/docs/screenshot-api/errors)
- [Monitoring](https://scrapfly.io/docs/screenshot-api/monitoring)
 
 

  Extraction API  

- [Getting started](https://scrapfly.io/docs/extraction-api/getting-started)
- [Rules Template](https://scrapfly.io/docs/extraction-api/rules-and-template)
- [LLM Extraction](https://scrapfly.io/docs/extraction-api/llm-prompt)
- [AI Auto Extraction](https://scrapfly.io/docs/extraction-api/automatic-ai)
- [Webhook](https://scrapfly.io/docs/extraction-api/webhook)
- [Billing](https://scrapfly.io/docs/extraction-api/billing)
- [Errors](https://scrapfly.io/docs/extraction-api/errors)
- [Monitoring](https://scrapfly.io/docs/extraction-api/monitoring)
- [FAQ](https://scrapfly.io/docs/extraction-api/faq)
 
 

  Proxy Saver  

- [Getting started](https://scrapfly.io/docs/proxy-saver/getting-started)
- [Fingerprints](https://scrapfly.io/docs/proxy-saver/fingerprints)
- [Optimizations](https://scrapfly.io/docs/proxy-saver/optimizations)
- [SSL Certificates](https://scrapfly.io/docs/proxy-saver/certificates)
- [Protocols](https://scrapfly.io/docs/proxy-saver/protocols)
- [Pacfile](https://scrapfly.io/docs/proxy-saver/pacfile)
- [Secure Credentials](https://scrapfly.io/docs/proxy-saver/security)
- [Billing](https://scrapfly.io/docs/proxy-saver/billing)
 
 

  Cloud Browser BETA  

- [Getting started](https://scrapfly.io/docs/cloud-browser-api/getting-started)
- [Proxy &amp; Geo-Targeting](https://scrapfly.io/docs/cloud-browser-api/proxy)
- [Unblock API](https://scrapfly.io/docs/cloud-browser-api/unblock)
- [Captcha Solver](https://scrapfly.io/docs/cloud-browser-api/captcha-solver)
- [File Downloads](https://scrapfly.io/docs/cloud-browser-api/file-downloads)
- [Session Resume](https://scrapfly.io/docs/cloud-browser-api/session-resume)
- [Human-in-the-Loop](https://scrapfly.io/docs/cloud-browser-api/human-in-the-loop)
- [Debug Mode](https://scrapfly.io/docs/cloud-browser-api/debug-mode)
- [Bring Your Own Proxy](https://scrapfly.io/docs/cloud-browser-api/bring-your-own-proxy)
- [Browser Extensions](https://scrapfly.io/docs/cloud-browser-api/extensions)
- [Native Browser MCP](https://scrapfly.io/docs/cloud-browser-api/mcp)
- [DevTools Protocol](https://scrapfly.io/docs/cloud-browser-api/cdp-reference)
- [ Integrations  ](#cloud-browser-integrations-collapse)
    - Browser Automation
    - [Puppeteer](https://scrapfly.io/docs/cloud-browser-api/puppeteer)
    - [Playwright](https://scrapfly.io/docs/cloud-browser-api/playwright)
    - [Selenium](https://scrapfly.io/docs/cloud-browser-api/selenium)
    - [Vercel Agent Browser](https://scrapfly.io/docs/cloud-browser-api/agent-browser)
    - AI Agents
    - [Browser Use](https://scrapfly.io/docs/cloud-browser-api/browser-use)
    - [Stagehand](https://scrapfly.io/docs/cloud-browser-api/stagehand)
- [Billing](https://scrapfly.io/docs/cloud-browser-api/billing)
- [Monitoring](https://scrapfly.io/docs/cloud-browser-api/monitoring)
- [Errors](https://scrapfly.io/docs/cloud-browser-api/errors)
 
 

 

 Tools FREE  

- [Antibot Detector](https://scrapfly.io/docs/tools/antibot-detector)
 
 

 SDK  

- [Golang](https://scrapfly.io/docs/sdk/golang)
- [Python](https://scrapfly.io/docs/sdk/python)
- [ Rust NEW ](https://scrapfly.io/docs/sdk/rust)
- [Typescript](https://scrapfly.io/docs/sdk/typescript)
- [Scrapy](https://scrapfly.io/docs/sdk/scrapy)
 
 

 Scrapfly CLI  

- [Overview](https://scrapfly.io/docs/cli)
- [Installation](https://scrapfly.io/docs/cli/install)
- [Authentication](https://scrapfly.io/docs/cli/authentication)
- [Commands](https://scrapfly.io/docs/cli/commands)
- [Agent Mode](https://scrapfly.io/docs/cli/agent-mode)
- [GitHub Actions](https://scrapfly.io/docs/cli/github-actions)
- [MCP](https://scrapfly.io/docs/cli/mcp)
- [FAQ](https://scrapfly.io/docs/cli/faq)
 
 

 Integrations NEW  

- [Getting Started](https://scrapfly.io/docs/integration/getting-started)
- [Langchain](https://scrapfly.io/docs/integration/langchain)
- [LlamaIndex](https://scrapfly.io/docs/integration/llamaindex)
- [CrewAI](https://scrapfly.io/docs/integration/crewai)
- [Zapier](https://scrapfly.io/docs/integration/zapier)
- [Make](https://scrapfly.io/docs/integration/make)
- [n8n](https://scrapfly.io/docs/integration/n8n)
- [Agent Skills](https://scrapfly.io/docs/integration/agent-skills)
 
 

 

 

 

 

 

     Python sdk   Typescript sdk   Go sdk   Rust sdk   Python   Curl   Node js   Go   Php   Java   Ruby   Http   C sharp   Rust   

 Dashboard  

- [Intro](https://scrapfly.io/docs)
- [Project](https://scrapfly.io/docs/project)
- [Account](https://scrapfly.io/docs/account)
- [Workspace &amp; Team](https://scrapfly.io/docs/workspace-and-team)
- [Billing](https://scrapfly.io/docs/billing)
 
 

 Products 

  MCP Server  

- [Getting Started](https://scrapfly.io/docs/mcp/getting-started)
- [Tools &amp; API Spec](https://scrapfly.io/docs/mcp/tools)
- [Authentication](https://scrapfly.io/docs/mcp/authentication)
- [Examples &amp; Use Cases](https://scrapfly.io/docs/mcp/examples)
- [FAQ](https://scrapfly.io/docs/mcp/faq)
- [ Integrations  ](#mcp-integrations-collapse)
    - [Overview](https://scrapfly.io/docs/mcp/integrations)
    - AI Assistants &amp; Code Editors
    - [Claude Desktop](https://scrapfly.io/docs/mcp/integrations/claude-desktop)
    - [Claude Code](https://scrapfly.io/docs/mcp/integrations/claude-code)
    - [ChatGPT](https://scrapfly.io/docs/mcp/integrations/chatgpt)
    - [Cursor](https://scrapfly.io/docs/mcp/integrations/cursor)
    - [Cline](https://scrapfly.io/docs/mcp/integrations/cline)
    - [Windsurf](https://scrapfly.io/docs/mcp/integrations/windsurf)
    - [Zed](https://scrapfly.io/docs/mcp/integrations/zed)
    - [Roo Code](https://scrapfly.io/docs/mcp/integrations/roo-code)
    - [VS Code](https://scrapfly.io/docs/mcp/integrations/vscode)
    - AI Frameworks &amp; SDKs
    - [LangChain](https://scrapfly.io/docs/mcp/integrations/langchain)
    - [LlamaIndex](https://scrapfly.io/docs/mcp/integrations/llamaindex)
    - [CrewAI](https://scrapfly.io/docs/mcp/integrations/crewai)
    - [OpenAI](https://scrapfly.io/docs/mcp/integrations/openai)
    - No-Code &amp; Automation
    - [n8n](https://scrapfly.io/docs/mcp/integrations/n8n)
    - [Make](https://scrapfly.io/docs/mcp/integrations/make)
    - [Zapier](https://scrapfly.io/docs/mcp/integrations/zapier)
    - [Vapi AI](https://scrapfly.io/docs/mcp/integrations/vapi)
    - [Agent Builder](https://scrapfly.io/docs/mcp/integrations/agent-builder)
    - [Custom Client](https://scrapfly.io/docs/mcp/integrations/custom-client)
 
 

  Web Scraping API  

- [Getting started](https://scrapfly.io/docs/scrape-api/getting-started)
- [Monitoring](https://scrapfly.io/docs/monitoring)
- [Customize Request](https://scrapfly.io/docs/scrape-api/custom)
- [Debug](https://scrapfly.io/docs/scrape-api/debug)
- [Anti Scraping Protection](https://scrapfly.io/docs/scrape-api/anti-scraping-protection)
- [Proxy](https://scrapfly.io/docs/scrape-api/proxy)
- [Proxy Mode](https://scrapfly.io/docs/scrape-api/proxy-mode)
- [Screaming Frog](https://scrapfly.io/docs/scrape-api/proxy-mode/screaming-frog)
- [Apify](https://scrapfly.io/docs/scrape-api/proxy-mode/apify)
- [(Auto) Data Extraction](https://scrapfly.io/docs/scrape-api/extraction)
- [Javascript Rendering](https://scrapfly.io/docs/scrape-api/javascript-rendering)
- [ Javascript Scenario ](https://scrapfly.io/docs/scrape-api/javascript-scenario)
- [SSL](https://scrapfly.io/docs/scrape-api/ssl)
- [DNS](https://scrapfly.io/docs/scrape-api/dns)
- [Cache](https://scrapfly.io/docs/scrape-api/cache)
- [Batch (Multi-URL Scraping)](https://scrapfly.io/docs/scrape-api/batch)
- [Classify (Block Detection)](https://scrapfly.io/docs/scrape-api/classify)
- [Session](https://scrapfly.io/docs/scrape-api/session)
- [Webhook](https://scrapfly.io/docs/scrape-api/webhook)
- [Schedule](https://scrapfly.io/docs/scrape-api/schedule)
- [Screenshot](https://scrapfly.io/docs/scrape-api/screenshot)
- [Errors](https://scrapfly.io/docs/scrape-api/errors)
- [Timeout](https://scrapfly.io/docs/scrape-api/understand-timeout)
- [Throttling](https://scrapfly.io/docs/throttling)
- [Troubleshoot](https://scrapfly.io/docs/scrape-api/troubleshoot)
- [Billing](https://scrapfly.io/docs/scrape-api/billing)
- [FAQ](https://scrapfly.io/docs/scrape-api/faq)
 
 

  Crawler API BETA  

- [Getting started](https://scrapfly.io/docs/crawler-api/getting-started)
- [Retrieving Results](https://scrapfly.io/docs/crawler-api/results)
- [WARC Format](https://scrapfly.io/docs/crawler-api/warc-format)
- [Data Extraction](https://scrapfly.io/docs/crawler-api/extraction-rules)
- [Webhook](https://scrapfly.io/docs/crawler-api/webhook)
- [Schedule](https://scrapfly.io/docs/crawler-api/schedule)
- [Billing](https://scrapfly.io/docs/crawler-api/billing)
- [Errors](https://scrapfly.io/docs/crawler-api/errors)
- [Monitoring](https://scrapfly.io/docs/crawler-api/monitoring)
- [Troubleshoot](https://scrapfly.io/docs/crawler-api/troubleshoot)
- [FAQ](https://scrapfly.io/docs/crawler-api/faq)
 
 

  Screenshot API  

- [Getting started](https://scrapfly.io/docs/screenshot-api/getting-started)
- [Accessibility Testing](https://scrapfly.io/docs/screenshot-api/accessibility)
- [Webhook](https://scrapfly.io/docs/screenshot-api/webhook)
- [Schedule](https://scrapfly.io/docs/screenshot-api/schedule)
- [Billing](https://scrapfly.io/docs/screenshot-api/billing)
- [Errors](https://scrapfly.io/docs/screenshot-api/errors)
- [Monitoring](https://scrapfly.io/docs/screenshot-api/monitoring)
 
 

  Extraction API  

- [Getting started](https://scrapfly.io/docs/extraction-api/getting-started)
- [Rules Template](https://scrapfly.io/docs/extraction-api/rules-and-template)
- [LLM Extraction](https://scrapfly.io/docs/extraction-api/llm-prompt)
- [AI Auto Extraction](https://scrapfly.io/docs/extraction-api/automatic-ai)
- [Webhook](https://scrapfly.io/docs/extraction-api/webhook)
- [Billing](https://scrapfly.io/docs/extraction-api/billing)
- [Errors](https://scrapfly.io/docs/extraction-api/errors)
- [Monitoring](https://scrapfly.io/docs/extraction-api/monitoring)
- [FAQ](https://scrapfly.io/docs/extraction-api/faq)
 
 

  Proxy Saver  

- [Getting started](https://scrapfly.io/docs/proxy-saver/getting-started)
- [Fingerprints](https://scrapfly.io/docs/proxy-saver/fingerprints)
- [Optimizations](https://scrapfly.io/docs/proxy-saver/optimizations)
- [SSL Certificates](https://scrapfly.io/docs/proxy-saver/certificates)
- [Protocols](https://scrapfly.io/docs/proxy-saver/protocols)
- [Pacfile](https://scrapfly.io/docs/proxy-saver/pacfile)
- [Secure Credentials](https://scrapfly.io/docs/proxy-saver/security)
- [Billing](https://scrapfly.io/docs/proxy-saver/billing)
 
 

  Cloud Browser BETA  

- [Getting started](https://scrapfly.io/docs/cloud-browser-api/getting-started)
- [Proxy &amp; Geo-Targeting](https://scrapfly.io/docs/cloud-browser-api/proxy)
- [Unblock API](https://scrapfly.io/docs/cloud-browser-api/unblock)
- [Captcha Solver](https://scrapfly.io/docs/cloud-browser-api/captcha-solver)
- [File Downloads](https://scrapfly.io/docs/cloud-browser-api/file-downloads)
- [Session Resume](https://scrapfly.io/docs/cloud-browser-api/session-resume)
- [Human-in-the-Loop](https://scrapfly.io/docs/cloud-browser-api/human-in-the-loop)
- [Debug Mode](https://scrapfly.io/docs/cloud-browser-api/debug-mode)
- [Bring Your Own Proxy](https://scrapfly.io/docs/cloud-browser-api/bring-your-own-proxy)
- [Browser Extensions](https://scrapfly.io/docs/cloud-browser-api/extensions)
- [Native Browser MCP](https://scrapfly.io/docs/cloud-browser-api/mcp)
- [DevTools Protocol](https://scrapfly.io/docs/cloud-browser-api/cdp-reference)
- [ Integrations  ](#cloud-browser-integrations-collapse)
    - Browser Automation
    - [Puppeteer](https://scrapfly.io/docs/cloud-browser-api/puppeteer)
    - [Playwright](https://scrapfly.io/docs/cloud-browser-api/playwright)
    - [Selenium](https://scrapfly.io/docs/cloud-browser-api/selenium)
    - [Vercel Agent Browser](https://scrapfly.io/docs/cloud-browser-api/agent-browser)
    - AI Agents
    - [Browser Use](https://scrapfly.io/docs/cloud-browser-api/browser-use)
    - [Stagehand](https://scrapfly.io/docs/cloud-browser-api/stagehand)
- [Billing](https://scrapfly.io/docs/cloud-browser-api/billing)
- [Monitoring](https://scrapfly.io/docs/cloud-browser-api/monitoring)
- [Errors](https://scrapfly.io/docs/cloud-browser-api/errors)
 
 

 

 Tools FREE  

- [Antibot Detector](https://scrapfly.io/docs/tools/antibot-detector)
 
 

 SDK  

- [Golang](https://scrapfly.io/docs/sdk/golang)
- [Python](https://scrapfly.io/docs/sdk/python)
- [ Rust NEW ](https://scrapfly.io/docs/sdk/rust)
- [Typescript](https://scrapfly.io/docs/sdk/typescript)
- [Scrapy](https://scrapfly.io/docs/sdk/scrapy)
 
 

 Scrapfly CLI  

- [Overview](https://scrapfly.io/docs/cli)
- [Installation](https://scrapfly.io/docs/cli/install)
- [Authentication](https://scrapfly.io/docs/cli/authentication)
- [Commands](https://scrapfly.io/docs/cli/commands)
- [Agent Mode](https://scrapfly.io/docs/cli/agent-mode)
- [GitHub Actions](https://scrapfly.io/docs/cli/github-actions)
- [MCP](https://scrapfly.io/docs/cli/mcp)
- [FAQ](https://scrapfly.io/docs/cli/faq)
 
 

 Integrations NEW  

- [Getting Started](https://scrapfly.io/docs/integration/getting-started)
- [Langchain](https://scrapfly.io/docs/integration/langchain)
- [LlamaIndex](https://scrapfly.io/docs/integration/llamaindex)
- [CrewAI](https://scrapfly.io/docs/integration/crewai)
- [Zapier](https://scrapfly.io/docs/integration/zapier)
- [Make](https://scrapfly.io/docs/integration/make)
- [n8n](https://scrapfly.io/docs/integration/n8n)
- [Agent Skills](https://scrapfly.io/docs/integration/agent-skills)
 
 

 

 

# Scrapfly Open API

 [  View as markdown ](https://scrapfly.io/?view=markdown)   Copy for LLM    Copy for LLM  [     Open in ChatGPT ](https://chatgpt.com/?hints=search&prompt=Read%20from%20https%3A%2F%2Fscrapfly.io%2Fdocs%2Fopenapi%20so%20I%20can%20ask%20questions%20about%20it.) [     Open in Claude ](https://claude.ai/new?q=Read%20from%20https%3A%2F%2Fscrapfly.io%2Fdocs%2Fopenapi%20so%20I%20can%20ask%20questions%20about%20it.) [     Open in Perplexity ](https://www.perplexity.ai/search/new?q=Read%20from%20https%3A%2F%2Fscrapfly.io%2Fdocs%2Fopenapi%20so%20I%20can%20ask%20questions%20about%20it.) 

 

 

 Scrapfly Web Scraping API is fully compliant with OpenApi specifications. See the OpenApi player below to explore it yourself though we recommend using our dedicated [API web player](https://scrapfly.io/dashboard/playground/web-scraper) instead.



 

#### **Summary**

 
  

 

 

 

   esc to close 

 

 

##### Search

 



 ↑↓ to navigate ↵ to select esc to close 

 

 

 

 

     
            /* Blueprint-styled scroll-top: square, dashed border, brand-blue
               accent. Light uses white-on-border, dark auto-adapts via
               [data-theme="dark"] fallback — kept inline because this button
               lives in base.html.twig and must work before CSS bundles are
               parsed. Tokens copied from _variables.sass:
               primary #4ea8f1, blueprint-night-elev hsl(220.5,77%,9.5%). */
            .docs-scroll-top {
                position: fixed;
                right: 24px;
                bottom: 24px;
                width: 40px;
                height: 40px;
                border-radius: 0;
                border: 1px dashed rgba(78, 168, 241, 0.5);
                background-color: #ffffff;
                color: #4ea8f1;
                box-shadow: 0 2px 10px rgba(9, 30, 66, 0.1);
                cursor: pointer;
                z-index: 1050;
                opacity: 0;
                pointer-events: none;
                transition: opacity 150ms ease, background-color 150ms ease, border-color 150ms ease;
                font-size: 14px;
                line-height: 1;
                padding: 0;
                display: inline-flex;
                align-items: center;
                justify-content: center;
            }
            .docs-scroll-top.is-visible {
                opacity: 1;
                pointer-events: auto;
            }
            .docs-scroll-top:hover,
            .docs-scroll-top:focus {
                background-color: rgba(78, 168, 241, 0.08);
                border-color: #4ea8f1;
                color: #4ea8f1;
                outline: none;
            }
            [data-theme="dark"] .docs-scroll-top {
                background-color: hsl(220.5, 77%, 9.5%);
                color: #4ea8f1;
                border-color: rgba(78, 168, 241, 0.35);
            }
            [data-theme="dark"] .docs-scroll-top:hover {
                background-color: rgba(78, 168, 241, 0.14);
                border-color: #4ea8f1;
            }
         
            (function () {
                var btn = document.getElementById('docs-scroll-top');
                if (!btn) return;
                var threshold = 400;
                var reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
                function onScroll() {
                    if (window.scrollY > threshold) {
                        if (btn.hasAttribute('hidden')) btn.removeAttribute('hidden');
                        btn.classList.add('is-visible');
                    } else {
                        btn.classList.remove('is-visible');
                    }
                }
                window.addEventListener('scroll', onScroll, { passive: true });
                btn.addEventListener('click', function () {
                    window.scrollTo({ top: 0, behavior: reduceMotion ? 'auto' : 'smooth' });
                });
                onScroll();
            })();
            \[ COMPLIANCE \] [  ](https://scrapfly.io/compliance) [  ](https://trust.inc/org_695c03cda42fc2450f034183) [  ](https://scrapfly.io/compliance) [  ](https://scrapfly.io/compliance) 

 The ultimate data collection APIs for developers. Scrape, capture, and extract web data with battle-tested tools that scale.

 [  ](https://github.com/scrapfly) [  ](https://www.linkedin.com/company/scrapfly) [  ](https://www.youtube.com/@scrapfly) [  ](https://x.com/Scrapfly_dev) 

 

 

### // COMPANY

- [  Products ](https://scrapfly.io/products)
- [  About Us ](https://scrapfly.io/about-us)
- [  Careers ](https://scrapfly.io/jobs)
- [  Why Scrapfly? ](https://scrapfly.io/why-choose-scrapfly)
- [  Pricing ](https://scrapfly.io/pricing)
- [  Status ](https://scrapfly.statuspage.io/)
 
 

### // RESOURCES

- [  API Docs ](https://scrapfly.io/docs)
- [  Academy ](https://scrapfly.io/academy)
- [  Blog ](https://scrapfly.io/blog/)
- [  Glossary ](https://scrapfly.io/blog/glossary)
- [  Topics ](https://scrapfly.io/blog/tags)
- [  Tools ](https://scrapfly.io/web-scraping-tools)
- [  FAQ ](https://scrapfly.io/faq)
- [  Alternatives ](https://scrapfly.io/compare)
 
 

### // LEGAL

- [  Terms of Service ](https://scrapfly.io/terms-of-service)
- [  Privacy Policy ](https://scrapfly.io/privacy-policy)
- [  DPA ](https://scrapfly.io/data-processing-agreement)
- [  KYC ](https://scrapfly.io/kyc-and-safety)
- [  Compliance ](https://scrapfly.io/compliance)
 
 

 

 

 

#### // INTEGRATIONS

- [Zapier](https://scrapfly.io/integration/zapier)
- [Make](https://scrapfly.io/integration/make)
- [N8n](https://scrapfly.io/integration/n8n)
- [LlamaIndex](https://scrapfly.io/integration/llamaindex)
- [LangChain](https://scrapfly.io/integration/langchain)
- [CrewAI](https://scrapfly.io/integration/crewai)
 
 

#### // LEARN WEB SCRAPING

- [Python](https://scrapfly.io/blog/posts/everything-to-know-about-web-scraping-python/)
- [NodeJS](https://scrapfly.io/blog/posts/web-scraping-with-nodejs/)
- [PHP](https://scrapfly.io/blog/posts/web-scraping-with-php-101/)
- [Ruby](https://scrapfly.io/blog/posts/web-scraping-with-ruby/)
- [Scrapy](https://scrapfly.io/blog/posts/web-scraping-with-scrapy/)
- [Puppeteer](https://scrapfly.io/blog/posts/web-scraping-with-puppeteer-and-nodejs/)
 
 

#### // USE CASES

- [AI Training](https://scrapfly.io/use-case/ai-training-web-scraping)
- [eCommerce](https://scrapfly.io/use-case/ecommerce-web-scraping)
- [Real Estate](https://scrapfly.io/use-case/real-estate-web-scraping)
- [Finance](https://scrapfly.io/use-case/finance-web-scraping)
- [SERP &amp; SEO](https://scrapfly.io/use-case/seo-and-serp-web-scraping)
- [Travel](https://scrapfly.io/use-case/travel-web-scraping)
 
 

#### // POPULAR TOOLS

- [cURL to Python](https://scrapfly.io/web-scraping-tools/curl-python)
- [JA3 Fingerprint](https://scrapfly.io/web-scraping-tools/ja3-fingerprint)
- [HTTP2 Fingerprint](https://scrapfly.io/web-scraping-tools/http2-fingerprint)
- [Selector Tester](https://scrapfly.io/web-scraping-tools/css-xpath-tester)
- [Antibot Detector](https://scrapfly.io/products/antibot-detector)
- [Unblocker](https://scrapfly.io/products/unblocker)
 
 

#### // ANTI-BOT BYPASS

- [Cloudflare](https://scrapfly.io/bypass/cloudflare)
- [Akamai](https://scrapfly.io/bypass/akamai)
- [DataDome](https://scrapfly.io/bypass/datadome)
- [Incapsula](https://scrapfly.io/bypass/incapsula)
- [PerimeterX](https://scrapfly.io/bypass/perimeterx)
- [View All](https://scrapfly.io/bypass)
 
 

 

 // © 2026 Scrapfly. The Best Web Scraping API For Developers.

 

 [Is Web Scraping Legal?](https://scrapfly.io/is-web-scraping-legal) • [Open Source Scrapers](https://github.com/scrapfly/scrapfly-scrapers) 

 

 

 ##### Quick Preview

    

  

 

   Close    Open Full Docs