Everything you need in one API over HTTP: hosted headless Chrome, anti-bot and CAPTCHA solutions, proxies, and browser automation—all made simple and scalable to meet your needs.
We value your time and offer a straightforward solution that works and delivers exactly what it promises. We believe that your time is far more valuable than the cost of our services.
We offer a generous free trial (available after your business profile is approved). Use our service with a completely free trial subscription for as long as you need to ensure it works for your use case. Subscribe to a paid plan when you are ready.
With eight years of experience running a rotating proxy network and over six billion headless Chrome sessions, we've mastered running Chrome in the cloud. Trust us — you don't want to do it yourself.
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
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"
}
Simple Python client:
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.