Case Study: Parsing 1 Million Product Pages Per Day Using Pineapple Proxy + Playwright
A real-world case study of scraping 1M product pages daily using Playwright for browser automation and Pineapple Proxy for anti-detection infrastructure.
The Challenge
A large e-commerce analytics platform needed to collect pricing data, product descriptions, availability status, and customer reviews from 200+ online retailers across 30 countries. Their target: 1 million product pages per day.
The Constraints
| Constraint | Detail |
|---|---|
| Pages per day | 1,000,000 |
| Target sites | 200+ e-commerce platforms |
| Countries | 30 |
| Anti-bot measures | Cloudflare, DataDome, Akamai, custom JS challenges |
| Data freshness | Max 24 hours between updates |
| Budget | $X,XXX/month for proxy infrastructure |
Why Playwright?
Traditional HTTP-based scraping (requests, Scrapy) failed against JavaScript-rendered content and advanced bot detection. Playwright provides:
- Full browser rendering (Chromium, Firefox, WebKit)
- JavaScript execution for dynamic content
- Realistic browser fingerprints
- Stealth plugin support (evades detection)
The Architecture
Proxy Manager (Pineapple API)
↓
Dispatcher (Celery + Redis)
↓
Worker Pool (200 Playwright instances)
↓
Each Worker:
1. Get proxy from pool
2. Launch browser with proxy
3. Navigate to product URL
4. Wait for content
5. Extract structured data
6. Submit to processing pipeline
7. Rotate proxy
↓
Data Processing Pipeline
↓
Analytics & Storage
Proxy Infrastructure
We deployed 5,000 residential proxies from Pineapple Proxy, distributed across 30 target countries. Key configuration:
# Proxy assignment strategy
proxy_pool = {
"US": {"count": 1500, "type": "residential", "rotation": "per-request"},
"UK": {"count": 500, "type": "residential", "rotation": "per-request"},
"DE": {"count": 400, "type": "residential", "rotation": "per-request"},
"JP": {"count": 300, "type": "residential", "rotation": "per-request"},
# ... 26 more countries
}
Playwright Stealth Configuration
from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync
def create_browser(proxy_url: str):
playwright = sync_playwright().start()
browser = playwright.chromium.launch(
headless=True,
proxy={"server": proxy_url}
)
context = browser.new_context(
viewport={"width": 1920, "height": 1080},
user_agent="Mozilla/5.0 ...",
locale="en-US",
timezone_id="America/New_York"
)
page = context.new_page()
stealth_sync(page) # Anti-detection
return browser, page
Handling Anti-Bot Challenges
Cloudflare Challenge
def handle_cloudflare(page):
try:
# Wait for challenge to resolve
page.wait_for_selector(
"cf-turnstile", state="attached", timeout=5000
)
# Wait for actual content
page.wait_for_load_state("networkidle")
return True
except:
return False
Rate Limiting Detection
def safe_request(page, url, max_retries=5):
for attempt in range(max_retries):
try:
response = page.goto(url, timeout=30000)
if response.status == 200:
return page.content()
elif response.status == 429:
# Rate limited — rotate proxy
rotate_proxy()
time.sleep(2 ** attempt) # Exponential backoff
else:
return None
except:
rotate_proxy()
time.sleep(5)
return None
Results
| Metric | Target | Achieved |
|---|---|---|
| Daily pages scraped | 1,000,000 | 1,023,000 |
| Success rate | >95% | 97.3% |
| Average page load | <5s | 3.2s |
| Proxy block rate | <5% | 2.1% |
| Data accuracy | >99% | 99.4% |
| Cost per 1K pages | — | $0.42 |
Key Lessons
What Worked
- Residential proxies were essential — datacenter proxies had 30%+ block rates
- Geo-targeted pools reduced Cloudflare challenges by 40%
- Per-request rotation prevented IP-based fingerprinting
- Playwright stealth dramatically reduced detection rates
What Didn't
- Sticky sessions caused more blocks (sites tracked session behavior)
- Chrome-only occasionally detected; mixing Firefox helped
- Too-fast rotation triggered behavioral detection
Cost Analysis
Proxy infrastructure: $X,XXX/mo
Compute (200 workers): $X,XXX/mo
Bandwidth: $XXX/mo
Maintenance: $XXX/mo
-----------------------------------
Total: ~$X.XX per 1K pages
Conclusion
Scaling to 1M pages per day requires robust proxy infrastructure, intelligent browser automation, and constant adaptation to anti-bot measures. Pineapple Proxy's residential pool provided the reliability and global coverage needed.
Ready to scale your scraping operation? Check our enterprise plans or browse our proxy inventory.
Related Posts
Top 10 Use Cases for Residential and Datacenter Proxies
Discover the most common and effective use cases for proxy servers — from web scraping and SEO monitoring to ad verification and OSINT.
OSINT in 2026: Why Proxy Infrastructure Is Critical for Open-Source Intelligence
How OSINT researchers use proxies for operational security, geo-targeted data collection, and avoiding detection during intelligence gathering.
Ad Verification and Brand Safety: Why Ad Tech Needs Verified Proxies
How ad verification platforms use residential proxies to audit ad placements, detect fraud, and ensure brand safety across global campaigns.