Web Scraping Best Practices in 2026

The engineer's field guide. No theory, no padding.

Server infrastructure used for proxy-based web scraping pipelines in 2026
TL;DR

Most scrapers fail not because the code is wrong, but because the infrastructure around them is wrong. Here is what actually matters in 2026.

  • Proxy tier selection is the highest-leverage decision. Datacenter IPs fail on anything behind Cloudflare, Akamai, or DataDome. Residential and hybrid pools are required for e-commerce, social platforms, and retail sites.
  • TLS fingerprinting has joined IP reputation as a primary detection vector. Python's requests library sends a different TLS ClientHello than Chrome. Detection systems identify this before any HTML loads.
  • Sticky vs. rotating sessions is not a product choice, it is a task choice. Login flows need sticky sessions. Independent page collection needs rotation. Mixing these up is the single most common failure mode I see.
  • You do not always need proxies. Public APIs, government open data, and low-traffic sites without anti-bot middleware do not need them. Adding proxies to everything is wasted cost.

The web scraping market is projected to grow from $0.99 billion in 2025 to $1.17 billion in 2026 at a CAGR of 18.5%, according to Research and Markets. That growth is being driven by AI training pipelines, price monitoring, and competitive intelligence. And most of the teams building these pipelines are learning the same expensive lessons the hard way.

The thing is, scraping has not fundamentally changed. What has changed is the sophistication of the infrastructure on the other side. Cloudflare Bot Management, Akamai Bot Manager, and DataDome are running behavioral analysis, TLS fingerprinting, and IP reputation scoring simultaneously. A scraper that worked in 2023 without proxies will not work on the same target in 2026. This guide covers what actually matters now.

This article covers proxy selection, session management, rate limiting, request headers, TLS fingerprinting, legal compliance, and the most common mistakes teams make at scale. It does not cover building your first scraper from scratch; that deserves its own guide. Let's get into it.


Why Scrapers Get Blocked in 2026

Before getting into practices, it helps to understand what you are actually up against. Detection does not happen after you have downloaded a page. It happens in the first few milliseconds of the connection, before any HTML is served. Modern anti-bot systems run multiple detection layers simultaneously, and bypassing one while failing another still gets you blocked.

🌐
IP Reputation
Your IP is checked against known datacenter ASNs, blocklists, and fraud score databases. Datacenter IPs are flagged before a single byte of your scraper's logic runs.
Fix: Use residential or hybrid proxies on protected targets. Datacenter IPs are useful only for targets with minimal or no bot protection.
🔒
TLS Fingerprinting
Python's requests library sends a TLS ClientHello with cipher suites that differ from any real browser. Detection systems identify this signature in milliseconds and block before HTML loads.
Fix: Use curl_cffi to impersonate Chrome or Safari's TLS handshake, or use a headless browser with stealth configuration.
📊
Request Rate & Timing
Fixed-interval requests, uniform timing between pages, and too many requests per minute from a single IP are all detectable patterns. Humans do not browse on a schedule.
Fix: Use randomized delays with Gaussian distribution, cap concurrent requests per IP, and implement exponential backoff with jitter on 429 responses.
🍪
Session Inconsistency
Changing IP mid-session while keeping the same cookie jar, or making abrupt navigation jumps without intermediate page visits, flags your session as non-human.
Fix: Match session management to task type. Sticky IPs for login flows. Rotating IPs for independent page collection. Never mix these.
S
Sachin Supunthaka — Senior Software Engineer
The thing is, most teams I see focus all their effort on the scraper code and treat the proxy setup as an afterthought. That is backwards. A well-written scraper with the wrong proxy type will fail. A simpler scraper with the right proxy tier will work. Get the infrastructure right first and the code problems get a lot smaller.

Proxy Tier Selection: Matching IP Type to Target

This is the decision with the highest leverage. Choosing the wrong proxy type does not just reduce your success rate. On well-protected targets, the wrong proxy type produces a zero percent success rate regardless of everything else you do. The decision is not which proxy is best in general. It is which proxy type the target's anti-bot system will accept.

Proxy Type IP Origin Trust Score Best For Will Fail On Price Range
Datacenter Cloud/hosting ASNs Low Public APIs, open databases, sites with minimal bot protection Cloudflare, Akamai, DataDome, major e-commerce $0.50–$2/GB
ISP Static ISP-assigned, datacenter hosted Medium-High Session-persistent tasks, account management, ticketing Targets that check for residential ASN specifically $4/GB
Standard Residential Real ISP home connections High General scraping, SEO monitoring, ad verification, social media Premium retail sites with advanced behavioral analysis $4/GB
Premium Residential Curated residential pool Very High E-commerce, market research, social platforms Highest-protection retail drops with real-time bot scoring $4.50/GB
Hybrid (ISP + Mobile + Residential) Mixed sources Highest Protected retail sites, Nike, Footsites, multi-account automation, Telegram bots Rarely fails on targets with commercial-grade protection $5/GB

What this actually means in practice: if you are targeting Amazon, Shopify storefronts, or major footwear sites, datacenter proxies will not get you past the first layer of protection. A reviewer on Trustpilot confirmed this from experience with Plan X: "IPs test clean on whoer.to. Suitable for almost every use case." The clean fraud score is what matters on protected targets, not the proxy type label.

The Case for Target-Specific Pools

Most proxy guides stop at proxy type selection. What they skip over is that the same residential IP pool can have wildly different success rates depending on whether those IPs have been recently burned on the specific target you are hitting. This is where target-specific pools become relevant.

TorchProxies offers pre-configured pools for specific high-protection retail targets: Footsites (US, CA, EU, AU, SG, MY), Nike (US, EU, MY), Supreme (US, EU, JP), Yeezy Supply (US), Popmart (US, CA, EU, AU, SG, MY, JP), and Pokemon Center (US, CA, EU, AU, SG, MY, JP). These pools contain IPs that have been validated against those specific targets. Most providers make you figure out the right configuration yourself, which on protected retail targets usually means burning through a lot of trial and error before finding IPs with acceptable success rates.

Honest Limitation
Even in a pool of millions of IPs, rotation can occasionally serve a lower-quality address. This happens across every provider in the market. On high-protection retail targets, expect occasional failed requests in any pool and build retry logic that handles them gracefully rather than treating a single failed request as a scraper problem.

Session Management: Sticky vs. Rotating

This one catches teams constantly. The mistake is picking either sticky or rotating and applying it to everything. The right answer is different for different task types, and using the wrong one will break your scraper in ways that are genuinely hard to debug.

Session Type Decision Framework
Task Type?
Independent Pages
Product listings, prices, news
Rotating Proxies
New IP per request
Session-Dependent Tasks
Login, pagination, cart flows
Sticky Sessions
Same IP for entire session
Mixing session types mid-flow is the most common cause of mysterious 403s on sites you were previously accessing fine.

Rotating Proxies: When and How

Use rotating proxies when each page you are collecting is independent of every other page. Product listings, public pricing pages, news articles, search results. No cookies need to persist between requests. New IP per request means no single address accumulates enough request history to trigger rate limiting or reputation scoring.

Where I see this fail: teams using rotating proxies on flows that actually require session continuity. If you hit page 1 of a paginated result from one IP and then hit page 2 from a different IP, many sites will detect this as session anomalous behavior. You will get served a captcha or a redirect to the homepage, not a useful 429 response. The scraper logs look fine. The data is empty.

Sticky Sessions: When and How

Use sticky sessions for any task that requires maintaining state across requests: login flows, authenticated pages, checkout sequences, anything where the site is tracking your session via cookie. The IP and the cookie jar must stay consistent for the duration of the session. If you rotate the IP while keeping the same cookies, the site sees a session originating from two different network locations, which is a strong bot signal.

TorchProxies supports sticky sessions on all plans, with session duration configurable through the dashboard. For ISP static proxies specifically, the IP remains fixed indefinitely, which makes them ideal for account management tasks where you need the same identity over days or weeks rather than just a single session.


Rate Limiting and Request Timing

Sending 100 requests per second from a residential IP is technically possible. It is also exactly the kind of behavior that gets that IP flagged within minutes. Rate limiting is not about being slow. It is about being indistinguishable from a human.

Human Timing Patterns

Real users do not browse pages every 2.0 seconds. They read, scroll, click around, pause, and navigate non-linearly. Fixed-interval requests, even generous ones, are detectable by timing analysis. Use randomized delays drawn from a realistic distribution rather than uniform sleeps.

A conservative starting point: 1 to 5 requests per minute per IP on smaller sites. Well-resourced platforms can tolerate 20 to 30 per minute before flagging, according to ScrapeHero's analysis. The key is that these numbers need to be varied, not constant. A scraper that makes exactly 12 requests per minute, every minute, is as detectable as one that makes 1,200.

Exponential Backoff with Jitter

Standard exponential backoff is a well-known pattern, and sophisticated bot detection systems have started recognizing it as a detection signal in itself. The deterministic nature of pure exponential backoff, always doubling, is its own fingerprint. Add random jitter to break the pattern:

Backoff With Jitter (Python)
import time, random

def backoff_with_jitter(attempt, base=2, cap=60):
    # Exponential growth with a random offset
    wait = min(cap, (base ** attempt)) + random.uniform(0, 1)
    time.sleep(wait)

def fetch_with_backoff(url, session, proxies, max_retries=5):
    for attempt in range(max_retries):
        response = session.get(url, proxies=proxies, timeout=30)
        if response.status_code == 200:
            return response
        elif response.status_code == 429:
            retry_after = int(response.headers.get('Retry-After', 2 ** attempt))
            time.sleep(retry_after)
        elif response.status_code in (403, 503):
            # Rotate IP and back off before retry
            backoff_with_jitter(attempt)
    return None
Rate Limit Detection
Observe response headers on your target before building rate limit logic. Many sites return RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers that tell you exactly how fast you can go. Respecting these headers directly is more efficient than guessing from trial and error.

When You Do Not Need Proxies

I will not go deep on proxy-free scraping targets here because it deserves its own guide. But the short version: public government databases, academic data repositories, official open APIs, and any site without IP-based rate limiting or bot detection do not need proxies. Adding proxy infrastructure to everything is a cost you are paying unnecessarily. Always test without proxies first on low-risk targets. You only need proxies when the target actively requires them.


Request Headers and TLS Fingerprinting

Getting the IP right and the timing right still leaves two major detection vectors: request headers and TLS fingerprinting. These are the ones most guides skip over, and in 2026 they are increasingly the primary reason properly proxied scrapers still get blocked.

Headers: Complete or Caught

A real browser sends a full set of HTTP headers on every request: User-Agent, Accept, Accept-Language, Accept-Encoding, Connection, and often Referer. Python's requests library sends minimal headers by default. Any site examining incoming headers will immediately distinguish a Python scraper from a browser.

Set a complete, browser-consistent header set. The User-Agent string is the most commonly discussed, but the full header consistency matters more than any single header. Use a current browser version. A User-Agent referencing Chrome 2021 is a statistical anomaly that real traffic does not produce in 2026.

Browser-Consistent Header Set (Python)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1"
}

TLS Fingerprinting: The 2026 Problem

This is the part most guides do not cover, and it is increasingly the primary detection mechanism on heavily protected targets in 2026. During the HTTPS handshake, your scraper sends a TLS ClientHello message that contains a specific combination of cipher suites and extensions. Python's underlying OpenSSL stack produces a fingerprint that differs from Chrome, Firefox, or Safari. Detection systems identify this before any of your headers are read.

The practical fix: use curl_cffi, which impersonates the TLS handshake of real browsers. It is a drop-in replacement for requests on most scraping tasks.

TLS Impersonation with curl_cffi
from curl_cffi import requests as cffi_requests

response = cffi_requests.get(
    "https://target.com/product-page",
    impersonate="chrome124",
    proxies={
        "http": "http://user:[email protected]:31112",
        "https": "http://user:[email protected]:31111"
    }
)

What this actually means in practice: on Cloudflare-protected targets, switching from requests to curl_cffi with a residential IP often converts a 100% block rate to a working scraper, with no other changes. The TLS fingerprint is the thing that was failing, not the IP quality.

Stealth Plugins Are Not Complete Protection
curl_cffi and stealth headless browser plugins reduce detection risk significantly but do not eliminate it. Cloudflare Turnstile and Akamai Bot Manager have evolved to catch even patched headless browsers in some configurations. For the highest-protection targets, a managed scraping browser environment or pre-built target-specific proxy pools will outperform any DIY stealth setup.

Geolocation Matching: Why It Matters for Your Target Markets

Your proxy IP's geolocation needs to match what the target site expects to see. A US e-commerce site receiving traffic from a German IP on a US-only promotion is an immediate anomaly signal. This is not just about bypassing geo-restrictions on content. It is about making your traffic statistically plausible.

United States & Canada Use US or CA residential IPs for US-targeted retail, Amazon, and Google Shopping. City-level targeting is available on select TorchProxies plans for ASN-level precision.
United Kingdom & Germany EU sub-regional pools (EU W for Benelux and France, EU C for Central) improve match rates on country-specific e-commerce and price comparison sites.
Indonesia, Korea & Japan Asian market scraping requires locally-originated IPs. Japanese and Korean retail platforms and payment pages actively reject non-regional traffic at the IP level.
India & Hong Kong High-growth scraping markets. Local residential IPs matter for app store data, regional pricing research, and social platforms with geo-restricted content feeds.

TorchProxies supports 195 countries with city-level targeting on supported plans, and offers state-level targeting for US IPs on select pools. The EU sub-regional pools (EU1 through EU5, EU SC Nordic, EU W Benelux and France, EU S Southern, EU C Central, EU E Eastern) give more precise regional control than a generic "Europe" pool option.



The Most Common Mistakes at Scale

What I see fail repeatedly, after watching teams build and debug scraping pipelines over the last few years.

Mistake 01
Over-rotation on session-dependent flows
Rotating IPs on login flows or paginated results where the site expects session continuity. The scraper produces empty results or gets served a homepage redirect. No error code, just wrong data.
Mistake 02
Mistake 02
Using datacenter IPs on protected targets
The proxy works on test targets and fails silently on production. Teams assume the scraper code is broken and debug for hours before checking the IP type.
Mistake 03
Fixed-interval request timing
Sending requests at exactly 3 second intervals looks like a machine, because it is. Timing regularity is a detection signal independent of request rate. Randomize all delays.
Mistake 04
Ignoring TLS fingerprinting
Using Python requests with residential IPs and wondering why Cloudflare-protected targets still block every request. The IP is fine. The TLS handshake is the problem.
Mistake 05
Treating 100% structural success as data accuracy
A parser producing perfectly formed JSON from Cloudflare challenge pages reports a 100% success rate. The data is completely wrong. Build validation that checks content, not just structure.
Mistake 06
No exponential backoff on rate limit responses
Immediately retrying on 429 errors accelerates the block into a permanent ban. Implement proper backoff with jitter and respect Retry-After headers when they are present.
The mistake I made personally: I spent three hours debugging a pipeline that was producing clean output on every request. Logs looked perfect. The issue: the upstream crawler had been receiving 302 redirects to a login page for a target that had added authentication since we built the scraper. The redirected page structured fine into perfectly formatted records about a login form. Build validation at the content layer, not just the structural layer. I got this wrong and it cost us a full day of data.

Which TorchProxies Plan for Which Scraping Use Case

Picking a plan is simpler than most articles make it. The question is not which plan is most powerful in general. It is which IP quality your specific target needs to return real content.

Use Case Recommended Plan Why Price
General web scraping, SEO monitoring, ad verification Standard Residential
30M+ IPs, 195 countries
Enough IP diversity for most unprotected to moderately protected targets. Pay-as-you-go with no minimum. $4/GB
Social media, market research, e-commerce monitoring Premium Residential
90M+ premium IPs
Higher-quality IP pool with better success rates on platforms that score IP reputation more aggressively. $4.50/GB
Account management, ticketing, crypto platforms, gaming automation ISP Static Proxies
Fixed identity
Same IP for the lifetime of the account. Supports SOCKS5 and HTTPS with switchable authentication. No session expiration. $4/GB
Nike, Footsites, Supreme, advanced retail scraping, Telegram bots, enterprise data collection Plan X (Hybrid)
120M+ IPs, mixed sources
Combines ISP, mobile, and residential sources. Target-specific pools for retail sites. Highest success rate on protected targets. Confirmed via Trustpilot: fast, clean IPs, high anonymity. $5/GB

All plans are pay-as-you-go with no long-term contracts and no rate limits. The 10 Gbps network with automatic retries means your throughput is not capped at the infrastructure level. A free trial is available on all products with no credit card required, which lets you test your specific target before committing to a plan.

Protocol Selection
TorchProxies supports HTTP (port 31112), HTTPS (port 31111), and SOCKS5 (port 31113) on all plans. For most scraping tasks, HTTPS is the right default. SOCKS5 is more flexible for non-HTTP traffic (Telegram bots, gaming automation) and tunnels all protocols without protocol-level inspection. ISP proxies additionally support switching between SOCKS5 and HTTPS authentication through the dashboard.

Test Your Target Before You Build

The fastest way to know which proxy tier your specific target needs is to test against it. Free trial on all plans, no credit card required, results in minutes.

Start Free Trial

✓ No credit card required✓ All proxy types✓ 24/7 support


Final Verdict

The fundamentals of web scraping have not changed: send requests, parse responses, store data. What has changed is the sophistication of the detection systems sitting between your scraper and the HTML it wants. In 2026, getting blocked is rarely a code problem. It is an infrastructure problem, a session management problem, or a timing problem.

The practices that actually move the needle: pick the right proxy tier for the target's protection level, match session type to task type, randomize request timing, set complete browser-like headers, use TLS fingerprinting countermeasures on protected targets, and validate data content rather than just structural success.

On the question of whether you need proxies at all: only when the target requires them. Proxy infrastructure adds cost and complexity. Add it precisely where it solves a concrete problem, not as a default for every project.

Key Takeaways
Proxy tier selection is the highest-leverage decision Wrong IP type means zero success rate on protected targets, regardless of code quality.
TLS fingerprinting is a 2026 primary detection vector Python's TLS handshake differs from browsers. Use curl_cffi or headless browser with stealth config on protected targets.
Sticky and rotating sessions serve different task types Login flows and paginated results need sticky sessions. Independent page collection needs rotation. Never mix mid-flow.
Rate limiting protects you legally as well as operationally Aggressive scraping can be characterized as denial of service under the CFAA. Rate limiting is a compliance requirement, not just detection avoidance.
Validate data content, not just data structure A parser structuring Cloudflare challenge pages reports 100% success. Build content-level validation into every pipeline.
Geolocation matching reduces anomaly signals Match proxy IP geography to the target site's expected user base. Country-level is minimum; city-level improves match rates on high-protection targets.

Frequently Asked Questions

The core practices are: rotate IPs using residential proxies on protected targets, set realistic request delays between 2 and 10 seconds, use complete browser-like HTTP headers including a current User-Agent string, match proxy geolocation to the target site's expected audience, use sticky sessions for login flows and rotating sessions for independent page requests, and implement exponential backoff with jitter on 429 and 503 responses. TLS fingerprinting is now a primary detection vector in 2026, so using curl_cffi or a headless browser with stealth configuration is increasingly necessary on heavily protected targets.
It depends on the target. Open government databases, public APIs, and sites without anti-bot middleware do not require residential proxies. Any site behind Cloudflare, Akamai, DataDome, or similar systems will reject or challenge datacenter IP traffic. For e-commerce, social media, and any consumer-facing platform with real bot protection, residential proxies are effectively required. Datacenter IPs are fine for low-protection targets and can significantly reduce cost on bulk collection jobs where block rates stay low. Test without proxies first on new targets before adding infrastructure cost.
Sticky sessions hold the same IP address for the duration of a session, maintaining cookie consistency and session state. Use them for login flows, account-based scraping, pagination, and any sequence where the target tracks session state. Rotating proxies assign a new IP per request, maximizing coverage and reducing per-IP exposure. Use rotating proxies for collecting independent pages such as product listings, prices, and public data where no login or session cookie is required. Mixing these mid-flow creates anomaly signals that result in silent failures rather than explicit error codes.
Web scraping publicly available data is generally legal in the US following the hiQ v. LinkedIn Ninth Circuit ruling, which established that accessing publicly available information does not constitute unauthorized access under the CFAA. However, scraping data behind logins or paywalls, collecting personally identifiable information without a lawful basis under GDPR or CCPA, or overwhelming servers with excessive requests creates legal risk. Always check robots.txt, respect rate limits, and consult a lawyer for high-stakes use cases as the legal landscape continues to evolve in 2026 with new AI-related litigation underway.
TLS fingerprinting analyzes the ClientHello message your scraper sends during the HTTPS handshake. Each TLS client, including Python's requests library, has a distinct combination of cipher suites and extensions that differs from a real browser's fingerprint. Detection systems identify Python scrapers by their TLS signature before any HTML is served, meaning a blocked scraper may never see a 403 or captcha response and instead just receives a connection reset. The practical fix is to use curl_cffi with a browser impersonation target (e.g., impersonate="chrome124"), which sends an authentic browser-level TLS handshake alongside your residential proxy IP.
There is no universal safe number. A conservative starting point for most sites is 1 to 5 requests per minute per IP. Well-resourced platforms with dedicated infrastructure can tolerate 20 to 30 requests per minute before flagging, according to ScrapeHero's rate limiting research. The key is to vary timing using randomized delays rather than fixed intervals, as deterministic timing patterns are themselves a detection signal. Monitor HTTP response codes and slow down immediately on 429 responses using exponential backoff with jitter rather than immediate retry.
Residential proxies or a hybrid pool combining residential and ISP IPs are the most effective for high-protection e-commerce targets. Datacenter IPs are reliably blocked by Amazon, Google Shopping, and major retail platforms. A hybrid plan like TorchProxies Plan X, which combines ISP, mobile, and residential sources from 120M+ IPs, delivers higher success rates on these targets because the IP blend matches what real user traffic looks like across different network types. For specific retail targets like Nike and Footsites, target-specific pools with pre-validated IPs further improve success rates compared to generic residential pools.
You do not need proxies when scraping government open data portals, academic databases, public APIs that supply data directly, or any site that does not implement IP-based rate limiting or bot detection. If you are running a small, low-frequency crawler on a site that does not block bots, proxies add cost without value. Always test without proxies first on low-risk targets before adding infrastructure. The web scraping market includes many use cases where proxies genuinely are not required, and adding them unnecessarily is a cost most teams can avoid on simpler targets.