Fetch Bytes . com

Beat Anti-Bot Barriers & Scrape Without the Headaches

Stop wrestling with blocked requests and complex Chrome setups. Our all-in-one solution lets you bypass restrictions, skip the maintenance, and focus on getting the data you need.

What is included

  • Simple yet powerfull Web Scraping API over HTTP
  • Hosted fully managed headless Chrome browsers to execute your requests, interact with websites and extract data
  • Antibot bypass built in for all major WAFs: requests made via our API are not flagged or blocked
  • Automatic CAPTCHA solver with humans and AI on the backend
  • Integrated Rotating Datacenter and Residential Proxies
  • Instant use with any programming language

Why Us

Time-Saving Simplicity: With our all-in-one solution, you spend less time fighting technical hurdles and more time putting your data to work. Start with a free trial and stay only when you’re sure it delivers exactly what you need.

Try Before You Commit: Your trust is earned, not assumed. Once your business profile is approved, take advantage of our generous free trial for as long as needed. Only subscribe to a paid plan when you’re confident it’s the perfect fit.

Backed by Proven Expertise: With eight years of experience and over six billion headless Chrome sessions, we’ve mastered the art of cloud-based Chrome management. Lean on our know-how, and leave the complexity behind.

Pricing

Starter

$100 / month

  • 5 concurrent sessions
  • $50.00 pre paid usage

  • $12.00 extra concurrency
  • $1.00/GB DC proxy traffic
  • $6.00/GB residential traffic
Get Started

Prod

$300 / month

  • 20 concurrent sessions
  • $200.00 pre paid usage

  • $10.00 extra concurrency
  • $0.80/GB DC proxy traffic
  • $5.00/GB residential traffic
Get Started

Custom

Let's talk

  • Custom conditions
  • Only available to clients who have been on Prod with us for a while
Contact Us

Each plan includes a fixed price part for allocated concurrency and prepaid usage, which can be used to purchase extra concurrency or make requests. Each request is priced individually based on actual traffic used in real time. You can view all your requests and add funds to your current billing period usage through the account dashboard. Usage limit is reset every billing cycle.

Taxes not included. 10% off for annual subscription (set up via support).

We accept payments via PayPal
Buy now with PayPal

Examples

Getting rendered page content:

$ curl "https://api.fetchbytes.com/navigate?key=YOUR_API_KEY&url=https://httpbin.org/anything&content=True"

{
  "url": "https://httpbin.org/anything",
  "status": 200,
  "content": "<html><head><meta ...</div></body></html>",
  "actions": [],
  "data": {
  },
  "transferSize": 1178,
  "session": "cwJyBV930X"
}

Generating PDF:

$ curl "https://api.fetchbytes.com/pdf?key=YOUR_API_KEY&url=https://example.com" > res.pdf 

Taking page screenshot:

$ curl "https://api.fetchbytes.com/screenshot?key=YOUR_API_KEY&url=https://example.com" > res.png

Navigating to web page, interacting and extracting data:

$ curl -X POST "https://api.fetchbytes.com/navigate?key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "url": "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)",
  "actions": [
    {
      "action": "click",
      "element": ".wikitable > thead:nth-child(2) > tr:nth-child(1) > th:nth-child(1)"
    }
  ],
  "extract": {
    "table": "table.wikitable"
  },
  "content": false
}'

{
  "url": "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)",
  "status": 200,
  "content": null,
  "actions": [
    {
      "selector": ".wikitable > thead:nth-child(2) > tr:nth-child(1) > th:nth-child(1)",
      "verbose": "Element \".wikitable > thead:nth-child(2) > tr:nth-child(1) > th:nth-child(1)\" clicked"
    }
  ],
  "data": {
    "table": [
      {
        "tag": "table",
        "value": null,
        "text": null,
        "options": null,
        "html": "<table ...<content omitted for the sake of examaple>"
        "rows": [
          [
            "Afghanistan",
            "14,467",
            "2022",
            "14,266",
            "2021",
            "14,174",
            "2022"
          ],
          ....<rows omitted for the sake of example>
        ],
        "headers": [
          [
            "Country/Territory",
            "IMF[1][13]",
            "World Bank[14]",
            "United Nations[15]"
          ],
          ...
        ]
      }
    ]
  },
  "transferSize": 412998,
  "session": "GQpC7BO3xD"
}

Use it with your existing Puppeteer or Playwright code directly:


import puppeteer from 'puppeteer';

const browser = await puppeteer.connect({
    browserWSEndpoint: 'ws://api.fetchbytes.com/ws?api_key=xxxxxx',
});

const page = await browser.newPage();

await page.goto('https://botproxy.com/');
await page.screenshot({ path: 'puppeteer_test.png' });

await browser.close();
        

Implement Python client in just 10 lines of code:

import requests
import time
import os


API_URL = "https://api.fetchbytes.com/"
API_KEY = os.environ.get("FETCHBYTES_API_KEY", "password1")


def fetch_bytes(method, json=True, **kwargs):
    start = time.time()
    res = requests.post(API_URL + method + "?key=" + API_KEY, json=kwargs)
    print(f"API call <{method}> took {time.time() - start:.2f} seconds")
    if res.status_code != 200:
        print("Error:", res.status_code, res.text)
    res.raise_for_status()
    if json:
        return res.json()
    return res.content



# Example client usage
import pprint

def test_residential_proxy():
    res = fetch_bytes("session", keep_alive=2, enable_adblock=True, proxy_country="rs-fr")
    session_id = res["session"]
    res = fetch_bytes(
        "navigate",
        session=session_id,
        url="https://ipinfo.io/json",
        content=False,
    )
    pprint(res, indent=2)
    print("Taking screenshot")
    res = fetch_bytes("screenshot", json=False, session=session_id)
    with open("test_proxy.png", "wb") as out:
        out.write(res)

def test_extract():
    res = fetch_bytes(
        "navigate",
        url="https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)",
    )
    session_id = res["session"]
    res = fetch_bytes(
        "data",
        session=session_id,
        extract={"table": "table.wikitable"},
    )
    pprint(res, indent=2)
        

View the API documentation (GitHub) and usage examples for complete information on available methods and parameters.

Still have questions?

Contact Us