Knowledge

Collecting Web Data for AI and LLM Training with Residential Proxies

Building a training or eval corpus means crawling the web at scale, across regions, without getting blocked. Here is where residential proxies fit.

James Meadow

James Meadow

August 16, 2026 · 8 min read

Every model is a bet on its data. Whether you are pretraining from scratch, fine-tuning on a domain, assembling a retrieval corpus, or building an evaluation set, the quality and breadth of what you collect from the web sets a ceiling on what the model can do. And collecting web data at the scale a model needs, across millions of pages and many regions, runs into the same infrastructure problems every large crawler hits: per-IP rate limits, content that varies by geography, and sites that increasingly block anything that looks like an automated crawler. Residential proxies are the collection layer that makes that crawl possible, and this is where they fit, along with the parts of the job they do not solve, which for AI data matter more than usual.

What AI teams are actually collecting

The shape of the collection varies with the goal. Pretraining and continued-pretraining corpora are broad, high-volume text pulls across a wide slice of the public web. Domain fine-tuning is narrower and deeper, a focused crawl of the sites that matter for a task. Retrieval corpora for a RAG system are curated and refreshed on a schedule so the index does not drift out of date. Evaluation and benchmark sets are smaller but need to be representative and clean. Multimodal work adds images and other assets on top of text. What all of these share is a collection layer underneath: fetch a lot of public pages, reliably, from where they actually live. That layer is the same regardless of what sits on top of it, and it is what the rest of this piece is about.

Scale: why one IP cannot crawl the web

The web does not want a single address pulling millions of pages. Most sites enforce per-IP rate limits, and a crawler that sends everything from one place is throttled within minutes, then blocked, and the crawl stalls far short of the volume a model needs. Even where limits are generous, one connection is a bottleneck against a corpus measured in millions of documents.

Distributing the crawl across many residential IPs is what turns a slow trickle into a corpus. Each IP stays comfortably inside its own per-IP limit while your aggregate throughput scales with the pool, which is the load-balancing logic every high-volume collector relies on, and it is what unlimited concurrent connections are for. The point is not to overwhelm any single site, it is to spread a large, polite crawl across enough addresses that no individual target sees more than an ordinary amount of traffic from any one of them.

Representativeness: a corpus is only as broad as where you collect from

This is the part that is specific to training data and easy to get wrong. A model learns the distribution of what it was fed, so a corpus collected entirely from one location inherits that location’s slice of the web. Many sites serve different content by region: localized pages, different languages, region-specific catalogs, prices, and availability, and sometimes entirely different front pages. Crawl the web from a single country and you systematically under-sample everything that country does not see, and that skew is baked into the model.

Country and, when it matters, city-level targeting let you collect the versions of pages that real users in each region see, so your corpus reflects the geographic and linguistic spread you actually want rather than the accident of where your crawler runs. If multilingual coverage or regional balance is a goal, this is not a nice-to-have, it is the difference between a representative dataset and a lopsided one. The same geo-targeting that reaches region-varying content legitimately is how you build breadth into the data from the start.

Staying accessible as sites harden against crawlers

Sites have gotten markedly more defensive about automated collection, and a good deal of that hardening is aimed squarely at AI crawlers. Known datacenter IP ranges and obvious bot signals get blocked quickly, and some of the largest sites now challenge or refuse traffic that does not look like an ordinary human visitor. A crawl that runs from datacenter addresses increasingly returns blocks and challenge pages instead of content.

Residential proxies route requests through real, home-grade IPs, so each request looks like a normal visitor rather than a server in a datacenter, and clean addresses with good reputation pass where flagged ones get challenged. That is necessary but not sufficient: the IP gets you in the door, and the rest is behaving like a real client, which means sensible request rates, honest handling of the signals that trigger blocks, and not hammering a target just because you can. The goal is to collect public data the way a browser would, not to force your way past a site that has decided it does not want to be crawled.

Freshness: corpora go stale

A dataset is a snapshot, and the web moves. Retrieval corpora especially need regular refresh crawls so the index reflects the current state of its sources, and continued pretraining depends on pulling in what is new. That makes collection an ongoing pipeline rather than a one-time job, and an ongoing pipeline needs to survive the routes that degrade over time. Detect a block, a timeout, or a challenge on a given IP, retire that route, and continue on a fresh one, which is the failover pattern that keeps a long-running crawl alive. None of it should run blind, so monitor the pipeline: success rate, coverage, and error patterns per source tell you when a target has changed its defenses or a slice of the crawl is silently failing, before that gap shows up as missing data in the next training run.

Collect responsibly

The honest part, and for AI data it is not optional. Residential proxies are collection infrastructure, they are not permission. Building a corpus responsibly means collecting public data only, respecting each site’s robots directives and terms of service, and crawling politely, with rate limits and backoff so you never degrade the sites you depend on. Just as important, and separate from whether you can technically fetch a page, is the question of rights: the ability to collect data is not the same as the right to train on it, and copyright, licensing, and personal-data rules are real constraints that sit above the collection layer and are the team’s responsibility to get right. Handle personal and sensitive data with care and within the law. Proxies solve the how of reaching public pages at scale, the what and the may are decisions you still own, and treating them seriously is what separates a defensible dataset from a liability.

A minimal polite crawl

A rotating residential proxy looks like an ordinary proxy to your crawler. Targeting lives in the username on the gateway, so a US exit with no session identifier rotates per request, spreading the crawl across the pool:

import time
import requests
PROXY = "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443"
proxies = {"http": PROXY, "https": PROXY}
def fetch(url):
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "research-crawler/1.0"})
r.raise_for_status()
return r.text
for url in urls: # your queue of public pages
try:
html = fetch(url)
store(html) # persist for the corpus
except requests.HTTPError:
retry_later(url) # on a block or timeout, back off and requeue
time.sleep(1.0) # be polite; do not hammer a single origin

Spread the queue so no single site sees a burst from one IP, back off on errors rather than retrying hard, and for multilingual or regional coverage run the same crawl with different country targets. The general client patterns carry over from the guide to using residential proxies with Python, and where a corpus needs session-consistent multi-page fetches, a sticky session holds one IP for that sequence.

The bottom line

Collecting web data for AI and LLM training is bounded by three things: the scale a model needs, which a single IP cannot reach; the representativeness a good corpus requires, which a single location cannot capture; and the rising wall of anti-crawler defenses, which datacenter addresses increasingly cannot get past. Residential proxies answer all three. Distribute the crawl across a large pool so each IP stays polite and the aggregate scales, target countries and cities so the corpus reflects the geography and languages you actually want, route through clean home-grade IPs so requests look like ordinary visitors, and fail over with monitoring so a continuous refresh crawl keeps running. Then do the part proxies do not do: collect public data only, respect robots and terms, crawl politely, and keep licensing and privacy above the collection layer where they belong.

That collection layer is what residential proxies are for, a large pool of real, home-grade IPs with country and city targeting and sticky sessions when a sequence needs them. The per-GB pricing means you pay for the data you actually pull, which fits a workload that ranges from a focused domain crawl to a corpus measured in millions of pages.

Ready to get started?

Try Shifter's residential proxies, 205M+ IPs, 195+ countries, from $0.75/GB.

Get Started