Competitive pricing is the backbone of e-commerce success. Monitoring competitor prices across thousands of products requires proxy infrastructure that can handle scale without getting blocked. Here is how to build it.
Why Price Monitoring Needs Proxies
E-commerce platforms actively block price scrapers because:
- Competitor intelligence — They do not want rivals tracking their pricing strategies
- MAP enforcement — Minimum Advertised Price agreements require monitoring
- Dynamic pricing — Sites show different prices based on location, device, and browsing history
- Server protection — High-volume scraping strains their infrastructure
Without proxies, you will get blocked within minutes on major platforms.
Architecture for Price Monitoring
Product URL Database
|
v
Scheduler (cron/Celery)
|
v
Scraper Workers (parallel)
|
v
Proxy Pool (rotating residential)
|
v
Target E-Commerce Sites
|
v
Price Parser
|
v
Price Database (PostgreSQL/MongoDB)
|
v
Alert System (price changes)
Platform-Specific Proxy Requirements
| Platform | Proxy Type | Difficulty | Notes |
|---|---|---|---|
| Amazon | Residential | High | Heavy bot detection, geo-specific pricing |
| eBay | Residential | Medium | Rate limiting focused |
| Walmart | Residential | High | Akamai Bot Manager |
| Shopify stores | Datacenter | Low | Basic rate limiting |
| AliExpress | Residential | Medium | Cloudflare protected |
| Target | Residential | Medium | PerimeterX protection |
Building the Scraper
import requests
from bs4 import BeautifulSoup
import json
import time
import random
class PriceMonitor:
def __init__(self, proxy_manager):
self.proxy_manager = proxy_manager
self.session = requests.Session()
def get_price(self, url, selectors):
proxy = self.proxy_manager.get_proxy()
headers = self.get_headers()
try:
time.sleep(random.uniform(1, 3))
response = self.session.get(
url,
proxies={"http": proxy, "https": proxy},
headers=headers,
timeout=15
)
if response.status_code == 200:
return self.extract_price(response.text, selectors)
else:
self.proxy_manager.report_failure(proxy)
return None
except Exception as e:
self.proxy_manager.report_failure(proxy)
return None
def extract_price(self, html, selectors):
soup = BeautifulSoup(html, "html.parser")
for selector in selectors:
element = soup.select_one(selector)
if element:
price_text = element.get_text(strip=True)
# Extract numeric price
price = float(
price_text.replace("$", "")
.replace(",", "")
.strip()
)
return price
return None
def get_headers(self):
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
]
return {
"User-Agent": random.choice(user_agents),
"Accept": "text/html,application/xhtml+xml",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
}
Handling Dynamic Pricing
Many sites show different prices based on:
Location
Use geo-targeted proxies to see prices in different regions:
# Check price from US
us_price = monitor.get_price(url, proxy_geo="US")
# Check price from UK
uk_price = monitor.get_price(url, proxy_geo="UK")
Device Type
Mobile vs desktop can show different prices. Set appropriate User-Agent headers.
Browsing History
Use clean proxy sessions without cookies to get baseline prices.
Price Change Alerts
def check_price_change(product_id, new_price, db):
old_price = db.get_latest_price(product_id)
if old_price is None:
db.save_price(product_id, new_price)
return
change_pct = ((new_price - old_price) / old_price) * 100
if abs(change_pct) > 5: # 5% threshold
send_alert(
f"Price change detected for {product_id}: "
f"${old_price} -> ${new_price} ({change_pct:+.1f}%)"
)
db.save_price(product_id, new_price)
Scaling Tips
- Schedule intelligently — Check prices 2-4 times daily, not every hour
- Prioritize products — High-value products get checked more frequently
- Use appropriate proxies — Datacenter for easy targets, residential for Amazon/Walmart
- Cache product pages — Extract multiple data points per request
- Respect rate limits — 1-2 requests per second per target domain
For e-commerce proxy guides and price monitoring tutorials, visit DataResearchTools.
Top comments (0)