The counterfeit drop happened in the gap.
A few hundred hashtags, handles and review pages, re-polled at whatever cadence the target tolerates, and the value is the delta.
Every poll in that window returned 200 with an empty array. The series has a flat stretch where the counterfeit listing drop was, and no alert fired.
Sample mention series, illustrative. The rate-limit wording is the platform's own, and it parses clean.
A quiet week on the dashboard, a live counterfeit drop
The value is entirely in the delta between runs, which is why a degraded exit costs more than a blocked one: your ETL writes a row of zeros, the rolling average barely moves, and the dashboard shows a quiet week. The counterfeit listing gets found by legal on Thursday rather than by your pipeline at 02:00, and the archive you needed for the takedown was never collected.
One global health score per exit→Reputation scored per target host
A pool that tracks exit health globally keeps handing you an address that one platform has already started throttling while it still looks clean everywhere else. You get truncated results, not errors.
Scoring is per host, so a platform that throttles an exit does not cost you the exits carrying your marketplace and review polls. Each target keeps its own view of every exit.
You pay by the gigabyte to be blocked→Failed attempts absorbed, not billed
Every challenge page, consent wall and re-fetch is metered traffic on a conventional pool. Across a few hundred targets polled around the clock, being blocked becomes a standing line on the invoice.
An attempt that fails at the transport — reset, TLS error, block status, known challenge response — is re-run through another exit before your code sees it, and absorbed rather than billed.
Rotation voids the cursor mid-listing→One exit per machine, for the window
Session and pagination state can be validated against the address that earned them. Rotate on page 4 and the cursor is void: you restart the listing at page 1 and pay for the first three pages twice.
Ask the operator to put the account in sticky mode: every connection from one machine leaves through the same exit, 10 minutes by default and raised on request. A second pinned chain needs a second machine.
The wrong market is the wrong evidence→Country rides on the username
An exit in the wrong country lands on a different consent state, a different seller set and a different review catalogue. Collect the wrong market and the capture proves nothing in a takedown.
USER-country-de fetches the German storefront from Germany, with no geo surcharge. Consent state, seller set and pricing match what a buyer in that market sees, which matters when the HTML becomes evidence.
Before you point a crawler at it.
I already have a residential pool. What actually changes?
Where the retry decision is made, and who pays for it. Your pool retries blind and bills you for the challenge page. The edge scores exits against the specific host you are hitting, re-runs an attempt that failed at the transport, and does not bill it. Across a few hundred targets on a repeated cadence, that is the difference between a clean time series and a noisy one.
The platform returns 200 with an empty result set. Does your edge catch that?
Not from the payload — an empty result set is a valid response as far as the transport is concerned. The edge acts on connection failures, TLS errors, block status codes and known challenge responses; a stripped page served as a clean 200 is yours to detect. Keep a row-count floor in front of your sink and score your own soft-block rate per host.
Do you solve CAPTCHAs?
No. We do not solve or bypass them, and the acceptable use policy rules it out. What the edge does is route around exits that are drawing challenges on a given target and re-run through cleaner ones. If a site is deliberately gating something behind a human check, treat that as a signal to stop, not a problem to engineer past.
Can I pin a different exit per crawler thread?
No, and it is worth being exact about why. There is no session-id parameter on the username, so a pin cannot be named per thread; the one per-connection switch is -rotate, which does the opposite and gives every new connection a different exit. Longer stickiness is an account mode the operator sets, keyed on your source IP: every connection from one machine leaves through one exit until it has been idle for 10 minutes, the default. Two pinned listings at once means two machines.
This is monitoring people's posts. Where does that sit legally?
We are the transport, not the data source. Retention, minimisation and your DPIA are yours to run; the line here is public content at a rate the target tolerates, no logged-in scraping, no credential use. The proxy-side control that helps is country: collect EU-facing content from EU exits, so what you archive is what was published in that market.
One credential, every job.
All six →Start with 1 GB free and re-run yesterday's poll
Take the listing your pipeline lost last week and re-run it on the free 1 GB. Compare row counts per page against your current pool, then ask us for sticky mode if the crawl needs it.
Get 1 GB free