Skip to main content

quantumproxies — Python SDK for the QuantumProxies API

Scrape any page to clean Markdown, run structured Google/Bing/DuckDuckGo searches, crawl and map whole sites, run 74 ready-made Collectors (Amazon, Google Maps, LinkedIn jobs, app stores…), build datasets from a plain-language prompt — everything through QuantumProxies' residential proxy network with real-browser TLS fingerprints. Pay per successful call; blocked pages cost nothing.

pip install quantumproxies

Quickstart

from quantumproxies import QuantumProxies

client = QuantumProxies()  # reads QUANTUMPROXIES_API_KEY from the environment

page = client.scrape("https://example.com")
print(page["title"], page["engine"])
print(page["content"])          # the page as clean Markdown

Get a free API key at quantumproxies.io — every account includes free monthly usage, no card required. Set it once:

export QUANTUMPROXIES_API_KEY=qp_live_your_key_here

What's in the box

Every REST endpoint, one method each — responses come back with the API envelope already unwrapped:

# Structured search — 3 engines, 17 verticals, SerpApi-compatible JSON
serp = client.search("best espresso machine", country="us", num=20)
for r in serp["organic"]:
    print(r["rank"], r["title"], r["link"])

# SERP → citation-ready Markdown context for an AI prompt
ctx = client.search_and_read("latest EU AI act status", top_n=3)

# Map a site's URLs in seconds (sitemaps + homepage links)
urls = client.map("https://stripe.com", search="/blog")

# Async crawl — wait=True polls until it settles and returns the pages
job = client.crawl("https://docs.python.org", limit=30, depth=2, wait=True)

# Batch-scrape known URLs
job = client.batch(["https://a.example", "https://b.example"], wait=True)

# CSS/AI extraction on one page
data = client.scrape(
    "https://books.toscrape.com",
    extract={"titles": {"selector": "h3 a", "attr": "title", "all": True}},
)

# Learn selectors once with an LLM, then scrape the same layout for free
parser = client.generate_parser(
    "https://news.ycombinator.com",
    fields={"titles": "every story title, as a list"},
)

# 74 ready-made Collectors — semantic input instead of URLs
places = client.run_collector(
    "google_maps_places", keyword="dentist", location="Austin, TX", max_results=20
)

# Dataset from a prompt (validated rows, budget-capped)
ds = client.create_dataset(
    "coffee roasters in Portland with email and phone",
    limits={"max_rows": 50, "max_cost_usd": 2},
    wait=True,
)

# Proxy endpoints of every type — residential, mobile, datacenter, ISP, IPv6
plans = client.list_proxies(active=True)
proxies = client.generate_proxies(plans["proxies"][0]["orderId"], country="us", quantity=5)

Web Unlocker

unlock() replays any HTTP request — method, headers, body — through a residential exit with a real browser TLS fingerprint, retries on a fresh IP when the target blocks it, and escalates a blocked GET to a real browser. You get the raw response back: status, headers, body, finalUrl.

r = client.unlock("https://www.example-shop.com/item/42", country="us")
if r["blocked"]:
    print(r["blockClass"], r.get("vendor"), r.get("blockReason"))  # e.g. "waf", "cloudflare"
else:
    print(r["status"], r["body"][:200])

# Force a real browser render and wait for the price to appear
page = client.unlock(
    "https://www.example-shop.com/item/42",
    render="html", wait_for_selector=".price", wait_ms=1500,
)

A still-blocked page is never returned as a silent 200: it comes flagged with blocked: true (pass fail_on_block=True to get an error instead). Interactive captchas are not solved — they arrive with blockClass: "captcha". Billed per GB of the tier's prepaid unlocker balance (usage in the response).

Errors and retries

Failures raise QuantumProxiesError with .status, .message and .payload. Connection errors and HTTP 429 are retried with backoff; billable calls are never re-sent after a response was received, so nothing gets double-billed behind your back.

from quantumproxies import QuantumProxies, QuantumProxiesError

try:
    QuantumProxies(api_key="qp_live_wrong").scrape("https://example.com")
except QuantumProxiesError as err:
    print(err.status, err.message)

Also available

MIT licensed.

Metadata

Release files for quantumproxies 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quantumproxies 0.2.0
File Size Uploaded
quantumproxies-0.2.0.tar.gz 11.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for quantumproxies 0.2.0
File Interpreter ABI Platform
quantumproxies-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.3 kB

Release files / quantumproxies-0.2.0.tar.gz

Download URL quantumproxies-0.2.0.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e7d4dd384299791e43b004048b59ad63b084d0bd021fa257d2dacc82030bdd93
BLAKE2b-256 checksum
How to use checksums
c6734e2d3928a5e9ed2c581ab40e0058b04905b8a9a33bac6cff9457f353f66e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.6

Release files / quantumproxies-0.2.0-py3-none-any.whl

Download URL quantumproxies-0.2.0-py3-none-any.whl
Size 12.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6db894a8d3c2120744d2f3c741d8731b3cf0c44ec6e916f5e63b77d93527a04c
BLAKE2b-256 checksum
How to use checksums
d12afe55cce5f7dcceacaaf00d472b9722ed323fa40fd7db9fb11d1aa4e81e5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.6

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page