Proxies & scraping11 min read
Firecrawl takes a URL and a JSON schema, renders the page, and returns the product as structured JSON in one API call, for 5 credits a page (1 for the scrape plus 4 for the JSON format). 10,000 product pages a month is 50,000 credits, which fits the Standard plan at $83 a month billed yearly. A DIY pipeline with Playwright and Beautiful Soup costs little to run, but you still need an LLM call to turn the cleaned text into JSON, proxies for protected stores and a few hours a month of upkeep: by our estimate about $180 to $490 a month for the same 10,000 pages. DIY wins when you scrape a few sites with good schema.org data, or at very high volume.
Proxies & scraping10 min read
Replace chromium.launch() with chromium.connect_over_cdp('wss://production-sfo.browserless.io?token=...') and your existing Playwright code drives a Chrome running on Browserless instead of your own server. Browserless bills units of up to 30 seconds of browser time per connection, so how you connect decides the bill: opening one session per page costs at least a unit a page, while reusing each session for many pages costs only the seconds you use. For 100,000 six-second pages a month, that's about $35 with reused sessions or $200 with a session per page, against about $124 for a 4 GB VPS plus an estimated two hours of upkeep. Keep workers at or below your plan's concurrent browsers, reconnect before the session time cap, and always close the browser.
Proxies & scraping11 min read
Zyte API's automatic extraction takes a product URL and returns name, price, currency, availability and SKU as JSON, without any selectors, so a store redesign doesn't break your scraper. On pay-as-you-go it costs about $0.40 to $2.35 per 1,000 product pages fetched over HTTP, and about $1.30 to $17 per 1,000 when the page has to be rendered in a browser. Hand-written Playwright selectors cost almost nothing per page but need developer time every time a store changes its HTML. At an estimated half hour of maintenance per store per month, Zyte is cheaper until a single store passes roughly 16,500 to 35,000 HTTP pages a month on a moderate (tier 3) site.
Proxies & scraping15 min read
Run Redis and several Playwright worker containers with Docker Compose on one VPS. Workers pull jobs from a Redis stream, render pages in a shared Chromium with a few pages open at once, retry temporary failures with exponential backoff, and move jobs that keep failing to a dead-letter stream. On a 4 GB, 2 vCPU server, start with 2 browsers and 3 pages each, then tune from measured memory and CPU.
Proxies & scraping9 min read
Bot management scores every request on IP reputation, client signals, behaviour and the site owner's rules, then allows, challenges or blocks it. A challenge or a run of 403s means the owner doesn't want that traffic on those terms, so a well-built crawler detects it and stops the host instead of retrying or trying to solve it. Cloudflare marks challenge responses with the cf-mitigated: challenge header. Treat 429 as slow down, with additive increase and multiplicative decrease of the interval. Then get the data legitimately: an official API or feed, allow-listing by the owner, an identified and signed crawler, or licensed datasets. The tested script in this guide reads a crawl log and decides continue, slow down or stop per host.
Proxies & scraping5 min read
Pick Apify for ready-made scrapers (Actors) for Amazon, Google Maps and social platforms, plus scheduling and storage. Pick ScrapingBee if you write code and want one API call that handles proxies and JavaScript rendering. Pick Browse AI for point-and-click monitoring of a few competitor pages, synced to Google Sheets, without code.
Proxies & scraping7 min read
Webshare is the cheapest place to start, with 10 free datacenter proxies and low-cost static plans. IPRoyal suits irregular workloads because its residential traffic doesn't expire. Decodo is the balanced mid-market pick with simple dashboards and scraping APIs. Bright Data costs the most but has the deepest network and unblocking tools.
Proxies & scraping8 min read
Residential proxies bill per GB in both directions, so the budget is bytes per page times pages times runs. Measure bytes per page from a HAR file of a real page load instead of guessing, then compare four ways of collecting the same data: a full browser load, a browser with images, media, fonts and analytics blocked, the HTML alone with a plain client, and the HTML only for pages that changed (conditional requests answered 304 for the rest). In the tested example below, the gap between the first and the last is about 60 times. The tested script in this guide reads a HAR and prints that comparison with your page count, schedule and price per GB.
Proxies & scraping9 min read
A Squid proxy on a small VPS gives your team and your scripts one fixed datacenter IP with bandwidth included in the server price. It fits allow-listing (suppliers, APIs, admin panels that accept only known IPs), a stable egress for webhooks and monitors, and outbound filtering. It doesn't fit jobs that need many IPs or consumer locations; that's what commercial residential and ISP pools are for. Run it with authentication, a firewall rule limiting the port to your own IPs, CONNECT only to port 443, no forwarding headers and no caching, then read the access log weekly. The tested script in this guide reports usage per user and destination, refusals, probing from unknown IPs and egress against your plan.
Proxies & scraping7 min read
Most product pages don't need a browser: the data is in the raw HTML, in a JSON-LD block, in framework state such as __NEXT_DATA__, or in a JSON endpoint the page calls. Check that first with a plain request, and render only the pages where the values appear after JavaScript runs. When you do render, block images, media and fonts, use one browser context per task, cap concurrency by memory, and capture the JSON responses the page fetches. The tested script in this guide makes that decision per URL and reports the JSON endpoint when one exists.
Proxies & scraping10 min read
Pick the proxy type by what the job needs (datacenter for volume on unprotected sources, ISP for stable sessions, residential or mobile only where the answer depends on a consumer location), then build rotation around three rules. A 429 or 503 from the site means slow down that host, not switch IP: hold the host for Retry-After or an exponential backoff with jitter. A timeout, connection error or 403 counts against the proxy: after a few in a row, open its circuit breaker for a cooldown that doubles each time. A 407 is a credentials problem, so stop. Keep a session key on one proxy for multi-step tasks, and send one identified User-Agent. The tested standard-library module in this guide does all of this.
Proxies & scraping9 min read
For Amazon, read prices and offers through the Selling Partner API (getPricing, getCompetitivePricing, getItemOffersBatch) and stay inside each operation's published rate and burst. For Walmart, use the Marketplace APIs for your own items and the affiliate API for catalog data. Crawl public pages only where the site's terms and robots.txt allow it, at a fixed interval per host with one identified User-Agent, and stop when a host challenges or blocks you. Before scheduling anything, count the calls each refresh needs against each source's limit: the tested script in this guide does that and flags any tier that can't be met.