Best rate
Crawl
50 GB
$25
$0.50/GB
- ≈1 million HTML pages
- Catalogue and listing crawls
- Traffic does not expire
Use case · AI data pipelines · multi-TB
Collecting public web data for models is now a regulated, measured and contested activity. This page covers the volume math, the 2026 rules on opt-outs, and a crawler pattern that respects them.
Quick answer
What are the best proxies for collecting AI training data at scale?
For multi-terabyte public-web corpora, use rotating residential proxies billed per GB with traffic that never expires, and a crawler that honours robots.txt and AI opt-outs. CrawlRelay sells residential traffic at $0.50/GB from 50 GB to 1 TB, as of October 2026: about 50 GB covers one million HTML pages. Paid in crypto, with no KYC.
| CrawlRelay price at volume | $0.50/GB from 50 GB to 1 TB; traffic never expires |
|---|---|
| HTML-only page | Tens of KB compressed; median HTML 22–35 KB (HTTP Archive Web Almanac 2025) |
| Fully rendered page | Median 2,164 KB on mobile, 2,412 KB on desktop (same source) |
| 1 million HTML pages | About 30–60 GB of proxy traffic |
| AI training in crawler traffic | 22% of crawler requests in spring 2025, 52% in June 2026 (Cloudflare) |
| Standard for crawl rules | robots.txt, RFC 9309 (2022) |
Fetch HTML and text, not rendered pages, and the volume stays manageable. With 50 KB per compressed HTML page:
| Pages | HTML only (≈50 KB) | Rendered (≈2 MB) |
|---|---|---|
| 100,000 | 5 GB | 200 GB |
| 1 million | 50 GB | 2 TB |
| 10 million | 500 GB | 20 TB |
| 100 million | 5 TB | 200 TB |
A headless browser multiplies traffic by about forty, so render only the pages whose text needs JavaScript. At CrawlRelay, 1 million HTML pages fit in the 50 GB plan ($25); 10 million fit in 500 GB ($250). Measure your own average with 1,000 real pages first; the bandwidth guide shows how.
Often not for the bulk of it. Before you crawl, check three cheaper sources:
Proxies earn their cost on the rest: fresh public pages that are not in open crawls, content that changes by country or city, and sites that serve different editions per region. Residential exits let you collect what a local visitor sees.
Four layers matter, from technical to legal:
*, and do not cache it for more than 24 hours, as the RFC recommends.ai-train, ai-input and search values in robots.txt; more than 3.8 million domains use Cloudflare's managed robots.txt. The IETF aipref working group is drafting a standard vocabulary, still without consensus in October 2026.This is not legal advice. Read our 2026 overview of web scraping law and ask counsel for your project.
Check both before you queue any URL of a site. The function below fetches robots.txt through the proxy, applies RFC 9309's rules for missing (4xx) and unreachable (5xx) files, and reads a Cloudflare-style Content-Signal line. It is deliberately simple: it applies any ai-train=no in the file to your crawler.
import urllib.robotparser
from urllib.parse import urlsplit
import requests
PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
USER_AGENT = "ExampleDataBot/1.0 (+https://example.com/bot)"
_rules = {}
def site_rules(url):
"""Robots rules and Content-Signal values for the site of url (cache them for 24 h at most)."""
scheme, host = urlsplit(url)[:2]
root = "%s://%s" % (scheme, host)
if root not in _rules:
try:
r = requests.get(root + "/robots.txt", proxies=PROXIES, timeout=(10, 30),
headers={"User-Agent": USER_AGENT})
status, text = r.status_code, r.text
except requests.RequestException:
status, text = 599, ""
if 400 <= status < 500:
lines = [] # RFC 9309: unavailable, crawling allowed
elif status >= 500:
lines = ["User-agent: *", "Disallow: /"] # unreachable: assume complete disallow
else:
lines = text.splitlines()
parser = urllib.robotparser.RobotFileParser()
parser.parse(lines)
signals = {}
for line in lines:
if line.lower().startswith("content-signal:"):
for part in line.split(":", 1)[1].split(","):
key, _, value = part.strip().partition("=")
signals[key.strip().lower()] = value.strip().lower()
_rules[root] = (parser, signals)
return _rules[root]
def may_collect_for_training(url):
parser, signals = site_rules(url)
return parser.can_fetch(USER_AGENT, url) and signals.get("ai-train") != "no"
print(may_collect_for_training("https://example.com/some/page"))Collect less, then remove more. Under the GDPR and similar laws, public does not mean free to use: names, emails, phone numbers and profile pages are personal data wherever they appear.
CrawlRelay's Acceptable Use Policy forbids collecting personal data in breach of the law that applies to it.
If-Modified-Since on re-crawls, and store raw responses (for example as WARC) so you never pay twice for the same page.From 50 GB to 1 TB, CrawlRelay residential traffic costs $0.50/GB, as of October 2026, and never expires. For multi-terabyte corpora, buy several 1 TB plans at the same rate.
Best rate
50 GB
$25
$0.50/GB
100 GB
$50
$0.50/GB
500 GB
$250
$0.50/GB
1 TB
$500
$0.50/GB
In every plan: Protocols: HTTP, HTTPS, SOCKS5 · Targeting: Country, city; US state and ZIP; ASN · Sessions: Rotating, or sticky up to 30 min · Traffic expiry: Does not expire
Prices in USD, as of 2026-10-13.
It depends on the country, the content and how you collect it, and several cases are still open in October 2026. In the EU, text-and-data-mining exceptions apply unless the rights holder reserved them in a machine-readable way. Personal data needs a legal basis. This is not legal advice; read our 2026 overview.
No. Those names belong to OpenAI and Common Crawl, and sites use them to decide what those specific crawlers may fetch. Use your own user agent with a contact URL, and apply the robots.txt rules that match it or the * group. Impersonating another crawler breaks most sites' terms and our Acceptable Use Policy.
About 30 to 60 GB for compressed HTML only, and around 2 TB if you render every page in a browser with images. At CrawlRelay, 50 GB costs $25. Measure 1,000 of your real pages before you buy, because page weight varies a lot by site.
Some sites serve different content by location, and residential exits reach the public edition that local visitors see. If a site filters hosting ranges to keep automated traffic out, a residential IP does not make that access permitted. For sites that welcome crawlers or offer dumps and APIs, you may not need a proxy at all; use residential traffic where it changes the result.
No. Prepaid residential and rotating-mobile traffic never expires: unused GB stay on your account until you use them. A pipeline that pauses for weeks keeps its remaining gigabytes, which matters for training runs that crawl in bursts.
Build your corpus on non-expiring traffic
$0.50/GB from 50 GB to 1 TB.
From $0.50/GB · no KYC
Get started