Looking for the best mobile proxy providers for web scraping? I compared six mobile proxy networks and ScrapingBee as a managed alternative across Google, Amazon, Instagram, and a mixed sample from the Tranco Top 1000 to see how they perform in real scraping jobs.
Mobile, 4G/LTE, and 5G proxies are useful when regular datacenter IPs get blocked, when you need carrier-grade addresses, or when mobile IPs are simply part of the job. But provider websites all tend to promise huge pools, great success rates, and blazing speeds, which doesn't tell you much about what happens when you actually send requests through them.
In this article, I'll compare pricing, features, success rates, errors, and response times across the same set of targets. I'll also show how I built the benchmark and how I decided whether a request actually succeeded. No synthetic scores or mystery methodology — just the same targets, the same test, and the results each provider returned.

TL;DR: Mobile proxy benchmark results
I tested six mobile proxy providers — Oxylabs, Decodo, SOAX, NodeMaven, DataImpulse, and AirProxy — plus ScrapingBee Premium and Stealth as managed alternatives.
The benchmark covered four target groups: Google Search, Amazon product pages, Instagram public profiles, and a mixed sample of websites from the Tranco Top 1000. Regular proxy configurations went through 400 requests each.
| Provider | Amazon | General web | Overall | Non-Google | Median | P95 | ||
|---|---|---|---|---|---|---|---|---|
| ScrapingBee Premium | 20.0% | 98.0% | 100.0% | 100.0% | 79.5% | 99.3% | 1.88s | 118.23s |
| ScrapingBee Stealth | 82.0% | 98.0% | 100.0% | 96.0% | 94.0% | 98.0% | 13.29s | 68.56s |
| AirProxy | 0.0% | 100.0% | 100.0% | 100.0% | 75.0% | 100.0% | 1.69s | 4.43s |
| NodeMaven | 0.0% | 100.0% | 99.0% | 99.0% | 74.5% | 99.3% | 1.82s | 12.46s |
| DataImpulse | 0.0% | 100.0% | 100.0% | 98.0% | 74.5% | 99.3% | 1.84s | 4.98s |
| SOAX | 0.0% | 100.0% | 100.0% | 90.0% | 72.5% | 96.7% | 2.08s | 8.85s |
| Oxylabs | 0.0% | 100.0% | 100.0% | 76.0% | 69.0% | 92.0% | 1.08s | 2.94s |
| Decodo | 0.0% | 100.0% | 100.0% | 76.0% | 69.0% | 92.0% | 1.10s | 2.66s |
- ScrapingBee Stealth used one round instead of two, for 200 requests total rather than 400 because of its much higher credit cost.
- AirProxy latency measures the target request after the new mobile IP was ready. It does not include the roughly 10–20 seconds normally spent rotating the dedicated SIM before each request in my test.
A few things stand out immediately:
- Google was the outlier. Every conventional mobile proxy provider scored 0% on usable Google SERPs. ScrapingBee Premium reached 20%, while Stealth managed 82%.
- Outside Google, most providers performed extremely well. AirProxy completed all 300 non-Google requests successfully, while NodeMaven and DataImpulse both managed 298 out of 300.
- Oxylabs and Decodo were the fastest overall, but provider-side restrictions pulled down their success rates on the general web sample.
- AirProxy had the best raw success rate at 75%, but its dedicated-SIM rotation took roughly 10–20 seconds per IP change in my setup, and that overhead is not included in the latency numbers.
- ScrapingBee traded speed for reliability. Premium retries substantially improved its results, while Stealth was by far the strongest option for Google — at the cost of much higher latency.
There isn't one obvious winner for every workload. For ordinary raw mobile proxy access, AirProxy, NodeMaven, and DataImpulse produced the strongest results in my test. Oxylabs and Decodo were particularly fast, while ScrapingBee made the most sense when getting a usable page mattered more than raw proxy speed.
ScrapingBee

I'll start with ScrapingBee, which comes with one important caveat: it isn't a mobile-only proxy provider.
Its Premium Proxy pool can include mobile IPs, but you can't force every request through a mobile connection. What you get instead is a managed scraping layer around the proxy pool: retries, geotargeting, optional browser rendering, Stealth mode, and some extra help with websites that really don't want to be scraped.
That makes ScrapingBee a useful reference point for this benchmark. The other providers mostly give you mobile IPs and leave the rest of the scraping logic to you. ScrapingBee can do quite a bit more behind the scenes.
For the Premium Proxy tests, I used Italian geotargeting without JavaScript rendering and enabled custom_google=true for Google requests. I first tested the normal configuration with ScrapingBee's retry system enabled, then repeated the same benchmark with retries turned off to see how much difference they actually make.
Pricing
ScrapingBee starts at $19/month for 75,000 API credits, with a free 1,000-credit trial available. Requests get more expensive as you turn on heavier artillery: a basic request costs 1 credit, Premium Proxy starts at 10 credits, and Stealth Proxy costs 75 credits.
That sounds steep until you hit a site that really hates bots. Then the expensive modes start making a lot more sense.
Join ScrapingBee today and get 1,000 credits as gift! No credit card required.
Premium Proxy with managed retries
This is the normal ScrapingBee experience. You send one request; if something goes wrong internally, ScrapingBee can retry it through another proxy before giving up.
I put it through the same test as every other provider: 50 targets across four categories, two rounds, and 400 requests in total. The full methodology — including where the targets came from and what counted as a success — is explained later in the article.
| Target | Requests | Success | Blocked | Errors | Success rate | Median | P95 |
|---|---|---|---|---|---|---|---|
| 100 | 20 | 77 | 3 | 20.0% | 8.32s | 17.08s | |
| Amazon | 100 | 98 | 2 | 0 | 98.0% | 6.35s | 123.38s |
| 100 | 100 | 0 | 0 | 100.0% | 1.33s | 2.58s | |
| General web | 100 | 100 | 0 | 0 | 100.0% | 1.47s | 2.99s |
| Total | 400 | 318 | 79 | 3 | 79.5% | 1.88s | 118.23s |
Take Google out of the picture and the numbers get pretty ridiculous: ScrapingBee completed 298 of 300 Amazon, Instagram, and general-web requests successfully. That's a 99.3% success rate.
Amazon finished at 98%, while Instagram and the general web sample both hit 100%.
Google was by far the hardest target in the entire benchmark. ScrapingBee Premium managed to return a usable SERP in 20 of 100 requests, which doesn't sound amazing until you see the other results: none of the conventional mobile proxy providers managed to retrieve a usable Google SERP at all. Most of the failed ScrapingBee requests still came back with HTTP 200, but without actual search results. I count those as blocked because a successful status code is not very useful when the page you asked for never shows up.
Google has also been changing how links inside search results work. One recent example is the new
gotoredirect format. If you've run into those URLs while scraping SERPs, I took them apart and explained what they are and how to deal with them in my Googlegotoredirect URLs guide.
The interesting bit is what retries did to latency. Most successful requests were still reasonably quick, but the slow tail got very slow. Amazon had a median of 6.35 seconds, while its P95 jumped all the way to 123.38 seconds. In other words, most requests were fine, but some of the requests ScrapingBee managed to rescue took close to two minutes.
So the retry layer clearly improves reliability, although some requests require a lot more work behind the scenes.
What happens without retries?
Next, I deliberately made ScrapingBee less helpful. I repeated the same 400-request benchmark with transparent_status_code=true. Besides returning the first target status code, this disables ScrapingBee's automatic retries and makes the test much closer to a single-shot proxy request.
Here's what happened:
| Target | Success rate with retries | Success rate without retries |
|---|---|---|
| 20.0% | 0.0% | |
| Amazon | 98.0% | 67.0% |
| 100.0% | 92.0% | |
| General web | 100.0% | 99.0% |
| Overall | 79.5% | 64.5% |
That is not a subtle difference. Amazon dropped from 98% to 67%. Instagram went from 100% to 92%. Google went from “occasionally works” to a clean 0%.
The no-retry run also produced 42 errors, compared with just three when ScrapingBee was allowed to retry. A lot of the failures that looked final in the first-attempt test were apparently recoverable once ScrapingBee had another go.
This is worth keeping in mind when comparing ScrapingBee with a plain proxy pool. The IP itself is only part of the product. The managed retry layer can materially change whether you end up with a usable page. For that reason, I use the managed result as ScrapingBee's main Premium Proxy score. The no-retry run is more of a "what happens under the hood if I remove the safety net?" experiment.
Stealth Proxy: much harder to block, much slower
Then I turned on the expensive stuff. For the Stealth Proxy test, I enabled JavaScript rendering, stealth_proxy=true, custom_google=true for Google, Italian geotargeting, and ScrapingBee's normal retry behavior.
Because Stealth requests cost considerably more, I ran one round instead of two: 50 targets per category, 200 requests total.
| Target | Requests | Success | Blocked | Errors | Success rate | Median | P95 |
|---|---|---|---|---|---|---|---|
| 50 | 41 | 9 | 0 | 82.0% | 33.74s | 80.76s | |
| Amazon | 50 | 49 | 1 | 0 | 98.0% | 13.24s | 17.35s |
| 50 | 50 | 0 | 0 | 100.0% | 11.72s | 23.23s | |
| General web | 50 | 48 | 1 | 1 | 96.0% | 11.37s | 29.74s |
| Total | 200 | 188 | 11 | 1 | 94.0% | 13.29s | 68.56s |
And this is where things got interesting. Google went from 20% with Premium Proxy to 82% with Stealth. Amazon stayed at 98%, Instagram hit 100%, and the general web sample reached 96%.
The price you pay is speed. A successful Google request took 33.74 seconds at the median and 80.76 seconds at P95. Even Amazon, Instagram, and the general web sample usually took around 11–13 seconds.
So Stealth Proxy is not really comparable to “give me an IP and forward my packet.” It is doing browser rendering, retries, and extra anti-bot work behind the scenes. That makes it much more capable on difficult targets, but also slower.
When ScrapingBee makes the most sense
ScrapingBee is the better fit if you care more about getting a usable page back than about raw proxy speed. Its managed retries and Stealth mode add overhead, but they also handle much more of the anti-bot work for you.
If low latency and direct proxy access matter more, a conventional mobile proxy provider may be the better choice.
Oxylabs

Oxylabs is one of the bigger names in mobile proxies, with a large rotating pool of 3G/4G/5G/LTE IPs and plenty of geo-targeting options. You can narrow traffic down by country, state, city, coordinates, or ASN, while the proxies rotate automatically unless you ask for a sticky session.
For the actual web scraping test, I pointed the pool at Italy and ran the same 400 requests I used everywhere else: Google, Amazon, Instagram, and a mixed sample of normal websites.
Pricing
The cheapest mobile plan starts at $30/month for 4 GB of traffic, or $7.50/GB. I ended up paying roughly €33 for the test account once everything was said and done. Larger plans get cheaper per GB, but for a benchmark like this the Starter plan is more than enough. VAT may apply depending on where you are.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Provider-restricted | Success rate | Success on permitted targets | Median | P95 |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 0 | 100 | 0 | 0 | 0.0% | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 2.37s | 3.14s |
| 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 0.78s | 1.21s | |
| General web | 100 | 76 | 1 | 23 | 22 | 76.0% | 97.4% | 0.92s | 2.35s |
| Total | 400 | 276 | 101 | 23 | 22 | 69.0% | 73.0% | 1.08s | 2.94s |
Amazon and Instagram were basically perfect. All 200 requests succeeded, and Instagram in particular was fast as hell, with a median response time of just 0.78 seconds.
Google, on the other hand, was a brick wall. All 100 requests came back with HTTP 200, but none contained an actual usable SERP. Instead, I got Google's fallback page saying there was a problem accessing Search.
At first, I thought this might be some account-level restriction, so I asked Oxylabs support. They confirmed that nothing was restricted on my account and said Google had recently changed something on its side that was making scraping much harder across multiple proxy providers. So the 0% Google score is real, but it doesn't look like an Oxylabs-only problem. As you'll see later, raw mobile proxies in general had a pretty miserable time with Google in this test.
The general web sample failed in a completely different way. Twenty-two requests, covering the same 11 domains in both rounds, never reached the target site at all. Oxylabs rejected the proxy connection with a 403, so I classify those as provider-restricted targets rather than normal website blocks.
This kind of restriction isn't unique to Oxylabs. Several proxy services maintain their own lists of domains they won't connect to. Some let you request exceptions under certain conditions — SOAX, for example, told me that restricted-domain unblocking is available only to Enterprise customers with a signed Order Form and completed KYB. With Oxylabs, though, I simply treated those domains as unavailable through the mobile proxy product I tested.
Those failures stay in the raw score, which is why general web comes out at 76%. But if I only look at targets Oxylabs actually allowed me to reach, it succeeded on 76 of 78 requests, or 97.4%.
So the short version is: Oxylabs was fast and extremely reliable on the targets it allowed, but provider-side restrictions hurt the raw score, and Google was a complete no-go.
Decodo

Decodo is another big mobile proxy provider, with a pool of 10M+ 3G/4G/5G IPs across 160+ locations and support for country, city, and ASN targeting. You can use rotating or sticky sessions over HTTP(S) or SOCKS5, so setup-wise it fits the usual web scraping workflow without much ceremony.
For my benchmark, I used rotating Italian mobile IPs and ran the same 400 requests as everywhere else: Google, Amazon, Instagram, and the general web sample.
Pricing
Decodo is pretty cheap to get into. At the time of writing, the smallest mobile plan is 2 GB for $7.50 plus VAT, while pay-as-you-go traffic costs $4/GB. Larger plans bring the per-GB price down further.
I paid roughly €7–8 for the test, so this was one of the cheaper providers to throw into the benchmark without committing to a big monthly plan.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Provider-restricted | Success rate | Success on permitted targets | Median | P95 |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 0 | 100 | 0 | 0 | 0.0% | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 2.18s | 2.79s |
| 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 0.81s | 1.28s | |
| General web | 100 | 76 | 2 | 22 | 22 | 76.0% | 97.4% | 0.86s | 2.05s |
| Total | 400 | 276 | 102 | 22 | 22 | 69.0% | 73.0% | 1.10s | 2.66s |
Amazon and Instagram were basically flawless. All 200 requests succeeded, with no proxy errors or blocks, and Instagram was especially quick at a 0.81-second median.
Then there was Google. All 100 requests reached Google, but not one of them produced a usable SERP. Most came back with HTTP 200 and no actual search results, while one landed on Google's /sorry/ page. So, just like with Oxylabs, having a fresh mobile IP on every request was nowhere near enough to make Google Search happy.
The general web test had a different problem. Decodo refused 22 requests at the proxy level, covering the same 11 domains in both rounds. Since the target sites were never reached, I count those as provider-restricted targets rather than ordinary website blocks.
That drags the raw general-web score down to 76%. But on the 78 requests Decodo actually allowed through, 76 succeeded, which works out to 97.4%. The other two were plain target-side HTTP 403 responses.
So the story here is pretty similar to Oxylabs: Decodo was fast and extremely reliable when the target was allowed, but provider restrictions hurt the headline number. Google, meanwhile, remained completely hopeless with raw rotating mobile proxies.
SOAX

SOAX sells rotating mobile proxies built from real 3G/4G/5G/LTE connections, with coverage in 195+ locations and targeting by country, region, city, or ASN. You can rotate the IP on every request or keep it sticky for longer sessions, which makes the setup flexible enough for both scraping and account-heavy workflows.
For my benchmark, I picked the mobile network, targeted Italy, and configured SOAX to give me a fresh IP on every request. Then I threw the usual 400 requests at it: Google, Amazon, Instagram, and the general web sample.
Pricing
SOAX pricing is a little more complicated than the classic "buy X GB per month" model. New accounts can start on the Sandbox tier and buy prepaid credits instead of committing to a monthly subscription, while the public site also advertises paid plans and a short mobile proxy trial.
For this test, I topped up $25 worth of credits and ended up paying roughly €30 after tax. That was plenty for the benchmark, so you don't necessarily need one of the larger monthly plans just to try the mobile proxy pool.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Restricted | Success rate | Permitted success | Median | P95 |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 0 | 100 | 0 | 0 | 0.0% | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 2.95s | 11.64s |
| 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 1.32s | 4.02s | |
| General web | 100 | 90 | 0 | 10 | 8 | 90.0% | 97.8% | 1.99s | 4.84s |
| Total | 400 | 290 | 100 | 10 | 8 | 72.5% | 74.0% | 2.08s | 8.85s |
Amazon and Instagram gave SOAX basically nothing to complain about: all 200 requests succeeded. The general web sample was pretty healthy too, with 90 successes out of 100.
Eight of the ten general-web failures were not target-side blocks at all. SOAX refused the connection before the site was reached, so I count those separately as provider-restricted targets. The other two requests simply timed out.
If I remove those restricted targets from the calculation, SOAX completed 90 of 92 permitted general-web requests, or 97.8%. Across Amazon, Instagram, and general web combined, it managed 290 of 292 permitted requests — 99.3%.
Then Google showed up and ruined the party. Not one of the 100 Google requests returned a usable SERP. Fifty-six landed on Google's "sorry" page, while the other 44 returned HTTP 200 responses with no actual search results. So despite rotating to a fresh mobile IP on every request, direct Google Search scraping was still a complete failure.
SOAX was also a little slower than the fastest mobile proxy providers I tested. The overall median successful request took 2.08 seconds, while P95 reached 8.85 seconds. Amazon had the longest tail, with a P95 of 11.64 seconds.
Still, outside Google the results were very good. SOAX handled Amazon and Instagram perfectly, had relatively few provider-side restrictions, and reached a 99.3% success rate across permitted non-Google targets. The big weakness was the same one I kept running into with raw mobile proxy networks: Google Search simply did not care that the IP came from a mobile carrier.
NodeMaven

NodeMaven combines residential and mobile proxies in the same network, with around 250K real-device 5G/LTE mobile IPs and geo-targeting across 190+ countries. You can rotate on every request, keep sticky sessions for longer jobs, and use either HTTP(S) or SOCKS5 depending on the workload.
For my main benchmark, I selected Italian mobile IPs, used rotating sessions over HTTP, and ran the same 400-request set as with the other providers.
Pricing
NodeMaven has a small paid trial for $3.50 with 750 MB of traffic, but the regular entry-level plan starts at $8.50 for 2 GB. The same traffic allowance can be used across residential and mobile proxies, and pay-as-you-go is also available.
In my case, I paid roughly €10–11 to get enough traffic for the benchmark. I didn't use all of it, so that number is the cost of getting started rather than the actual cost of the requests I sent.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Success rate | Median | P95 |
|---|---|---|---|---|---|---|---|
| 100 | 0 | 100 | 0 | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 100.0% | 2.80s | 14.36s |
| 100 | 99 | 0 | 1 | 99.0% | 0.90s | 2.48s | |
| General web | 100 | 99 | 0 | 1 | 99.0% | 1.76s | 12.71s |
| Total | 400 | 298 | 100 | 2 | 74.5% | 1.82s | 12.46s |
Outside Google, NodeMaven did extremely well. Amazon completed all 100 requests successfully, while Instagram and the general web sample each hit 99%.
It also had no provider-side target restrictions at all, which was a nice change after some of the other networks. The only two non-Google failures were plain timeouts: one on Instagram and one on the general web sample.
And then, once again, Google ruined the party. None of the 100 HTTP requests returned a usable SERP. Eighty came back with HTTP 200 but no actual search results, while 20 landed on Google's "sorry" page.
What about SOCKS5?
NodeMaven specifically recommends SOCKS5 for heavily protected targets, including Google, so I figured it was worth giving that a fair shot. I regenerated the proxy configuration with the same Italian mobile pool and rotating setup, switched the protocol to SOCKS5, and reran the same 50 Google queries twice.
The result was wonderfully easy to analyze:
| Protocol | Google requests | Successful SERPs |
|---|---|---|
| HTTP | 100 | 0 |
| SOCKS5 | 100 | 0 |
So, for Google at least, switching protocols changed absolutely nothing.
That does not mean SOCKS5 is useless in general, but it did not help with Google's blocking in my test. NodeMaven was still one of the strongest conventional mobile proxy providers for normal web targets: fast, reliable, and free of provider-side restrictions. Direct Google Search scraping, though, was a complete dead end.
DataImpulse

DataImpulse offers rotating mobile proxies from a pool of 16M+ 3G/4G/5G/LTE IPs across 195 countries. It supports country targeting, rotating and sticky sessions, and both HTTP(S) and SOCKS5, so there isn't much exotic setup involved — pick the location, grab the gateway credentials, and start sending requests.
For my benchmark, I selected Italy, used rotating HTTP proxies with a fresh connection for every request, and ran the same 400-request test as with the other providers.
Pricing
DataImpulse uses a pay-as-you-go model rather than forcing you into a monthly subscription. Mobile traffic starts at $2/GB, and the introductory package for new users is $5 for 2.5 GB.
That is exactly what I used for this test: I paid roughly €5 and got 2.5 GB, which was more than enough for the benchmark. The next regular package is $50 for 25 GB, while larger plans bring the price down to around $1.60/GB. Traffic does not expire, and country-level targeting is included in the price.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Restricted | Success rate | Permitted success | Median | P95 |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 0 | 99 | 1 | 0 | 0.0% | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 3.32s | 4.98s |
| 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 1.56s | 3.41s | |
| General web | 100 | 98 | 0 | 2 | 2 | 98.0% | 100.0% | 1.27s | 5.70s |
| Total | 400 | 298 | 99 | 3 | 2 | 74.5% | 74.9% | 1.84s | 4.98s |
Outside Google, DataImpulse was almost boringly reliable. Amazon and Instagram both finished at 100%, while the general web sample reached 98%.
The only two general-web failures were the same target, usda.gov, rejected by the proxy before the website was reached. Once those provider-restricted requests are excluded, DataImpulse went 98 for 98 on the permitted general-web targets.
Across Amazon, Instagram, and general web, that works out to 298 successful requests out of 300 — or 100% if I only count targets the proxy actually allowed me to reach.
Google, naturally, was having none of it. Out of 100 requests, 88 returned HTTP 200 without a usable SERP, 11 landed on Google's "sorry" page, and one timed out. So once again, fresh rotating mobile IPs were perfectly fine for almost everything except the one target that apparently woke up and chose violence.
Performance was good too. The overall median successful request took 1.84 seconds, while P95 was just 4.98 seconds. That gives DataImpulse one of the tidier latency tails in the test: the typical request was fast, and the slowest few were not dramatically worse.
Overall, DataImpulse was one of the strongest raw mobile proxy providers I tested. It matched NodeMaven's 74.5% overall success rate, but produced a much lower P95 and only two provider-side restrictions. As usual, Google was the giant exception.
AirProxy

AirProxy is a bit different from the big rotating mobile proxy pools above. Instead of giving you access to millions of shared IPs around the world, it runs dedicated 4G proxies on real Italian SIM cards. Its entire proxy infrastructure is in Italy, using more than 1,200 modems across Vodafone, TIM, WindTre, and Fastweb.
That makes AirProxy much more of a dedicated mobile proxy service than a global proxy network. You get your own SIM-backed proxy, unlimited traffic, and the ability to change the mobile IP automatically, manually, or through an API.
For my benchmark, Italy was therefore not a targeting choice — it was the only location available.
Pricing
AirProxy normally costs €67 per proxy for 30 days, with unlimited traffic and unlimited IP changes. Fortunately, there is also a 72-hour trial for €9.90 with no automatic renewal.
That is what I used for this test, so the whole AirProxy experiment cost me roughly €10 rather than €67.
A note about rotation
This test took much longer than any of the other raw proxy benchmarks: 1 hour and 55 minutes. The reason is how AirProxy handles IP rotation. The service can rotate automatically on a schedule or at a custom interval — for example, every 15–60 minutes — but that is obviously too slow for a benchmark where I want a fresh mobile IP for every request.
AirProxy also provides an API that triggers an IP change on demand, so I used that instead. Before every benchmark request, my Python runner called the rotation API, waited for the mobile connection to come back, checked that the exit IP had actually changed, and only then sent the request to the target.
In practice, a rotation often added roughly 10–20 seconds. I also had to add retries and a short backoff to the benchmark code because hammering the rotation endpoint too quickly occasionally resulted in failed IP changes.
That overhead is not included in the latency numbers below. The table measures the target request itself after the new mobile IP was ready. So AirProxy's 1.69-second median should not be read as “rotate the SIM and fetch the page in 1.69 seconds.” The complete workflow was much slower.
Benchmark results
| Target | Requests | Success | Blocked | Errors | Restricted | Success rate | Permitted success | Median | P95 |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 0 | 100 | 0 | 0 | 0.0% | 0.0% | — | — | |
| Amazon | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 3.50s | 4.57s |
| 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 1.49s | 2.59s | |
| General web | 100 | 100 | 0 | 0 | 0 | 100.0% | 100.0% | 1.16s | 2.59s |
| Total | 400 | 300 | 100 | 0 | 0 | 75.0% | 75.0% | 1.69s | 4.43s |
Once the IP was ready, AirProxy was absurdly consistent.
Amazon, Instagram, and the entire general web sample all scored 100%. That is 300 successful non-Google requests out of 300, with no timeouts, no target blocks, no provider-side restrictions, and no other errors.
The response times were good too. General websites had a median of 1.16 seconds, Instagram 1.49 seconds, and the overall successful-request median was 1.69 seconds. P95 stayed at a fairly tidy 4.43 seconds.
However, all 100 Google requests failed my content check. Every request reached Google and returned a response, but none contained a usable SERP. Unlike some of the other providers, I did not even get a mixture of /sorry/ pages and other errors here — all 100 were simply HTTP responses without actual search results.
So AirProxy ended up with the highest raw success rate among the conventional mobile proxy providers in my benchmark: 75%. But that number hides a very clear split. Everything outside Google worked perfectly; Google worked exactly zero times.
The main downside is operational rather than reliability-related. AirProxy's dedicated-SIM model works very well once the connection is ready, but forcing a fresh IP before every request is dramatically slower than using a normal rotating proxy pool. If your job can reuse an IP for several requests or rotate every few minutes, that matters much less. If you genuinely need a new mobile IP for every single request, expect the rotation itself to dominate the total runtime.
How I tested the proxies
I wanted this benchmark to answer a pretty simple question: if you send a request through one of these proxy providers, do you actually get the page you wanted back?
So instead of picking a couple of friendly websites and calling it a day, I built a fixed set of 200 targets and sent every provider through the same obstacle course.
The benchmark itself was written in Python. I used curl_cffi with Chrome impersonation for the requests and parsed the returned HTML to check whether I got the actual content I expected rather than just trusting the HTTP status code. The scripts also saved raw results after every request, along with failure details and response bodies when something went wrong.
I used four target categories:
- Google Search — 50 fixed, fairly ordinary queries covering programming, travel, food, finance, general knowledge, and similar topics.
- Amazon — 50 real product pages collected from several Amazon Best Sellers categories.
- Instagram — 50 public profiles based on a list of widely followed accounts.
- General web — 50 websites sampled from the Tranco Top 1000 list.
The general web set needed some cleaning before it was useful. Plenty of popular sites return almost no HTML without JavaScript, immediately throw a challenge page, redirect somewhere weird, or simply don't behave properly with a normal HTTP request.
I pre-checked the candidates and kept only pages that returned real HTML, had a title, contained a reasonable amount of visible text, and weren't already serving an obvious CAPTCHA or anti-bot challenge. The idea was simple: don't blame the proxy for a website that was already broken before the proxy entered the picture.
Once the 200 targets were ready, I froze the list. Every provider got the same URLs in the same deterministic shuffled order.
For the regular mobile proxy tests, I ran the complete set twice: 100 requests per category and 400 requests per provider. Requests were sent sequentially, with no retries in my own Python client. One request went in, and I recorded whatever came back.
Managed services are a slightly different beast. If a provider does its own retries, browser rendering, or anti-bot handling behind the scenes, I count that as part of the product and call it out separately. Otherwise I'd be pretending a managed scraping API and a raw rotating proxy are doing the same job when they clearly aren't.
What counted as a success?
A 200 OK was not enough. Anti-bot systems are perfectly capable of returning HTTP 200 along with a page that is completely useless.
- Google had to contain an actual search results page. A "sorry" page or a
200response with no SERP did not count. - Amazon had to contain real product-page content.
- Instagram had to contain metadata matching the public profile I requested.
- General websites needed a normal page title and enough visible content to look like the actual site rather than a placeholder or challenge page.
I split failures into three broad groups:
- Blocked — the target responded, but gave me a CAPTCHA, block page, empty result, or otherwise unusable content.
- Error — the request timed out, failed at the network/provider level, or returned another technical failure.
- Provider restricted — the proxy provider itself refused to connect to that target. These are tracked separately because that's very different from reaching the website and getting a
403from the site itself.
How I measured speed
For successful requests, I report the median and P95 latency.
- The median is straightforward: half of the successful requests were faster than this number, and half were slower.
- P95 is there to expose the ugly tail. If P95 is 10 seconds, 95% of successful requests finished within 10 seconds, while the slowest 5% took even longer. That's useful because averages can make a provider look perfectly fine even if it occasionally leaves you staring at the terminal for a minute.
So, roughly speaking: the median tells you what a normal request feels like, while P95 tells you how bad things get when the proxy decides to have a moment.
The full Python benchmark, frozen target lists, raw results, and result-processing scripts are available in the GitHub repository, so you can inspect the setup, reproduce the tests, or throw another proxy provider into the same benchmark yourself.
What the benchmark results mean
The biggest takeaway is that mobile IPs alone are not a magic anti-bot switch.
For Amazon, Instagram, and most of the general web, the conventional mobile proxy providers worked extremely well. AirProxy completed every non-Google request successfully, while NodeMaven and DataImpulse missed only two each. Even providers with lower overall scores were usually very reliable once the request actually reached an allowed target.
The differences were more about speed, restrictions, and how the proxy network operates. Oxylabs and Decodo were particularly fast, but both refused connections to a noticeable number of websites. SOAX had fewer restrictions but slightly higher latency. NodeMaven and DataImpulse offered a good balance of reliability and speed, while AirProxy was flawless outside Google but required much slower dedicated-SIM rotation when I wanted a fresh IP for every request.
Then there is Google. Every conventional mobile proxy configuration scored 0% on usable Google SERPs. Fresh carrier IPs, different networks, and even switching NodeMaven from HTTP to SOCKS5 did not solve the problem.
This is where ScrapingBee becomes a different kind of product rather than simply another proxy provider. Premium Proxy combines the proxy pool with managed retries and other scraping infrastructure, while Stealth adds browser rendering and additional anti-bot handling. Premium managed to retrieve usable Google results in 20% of my requests, and Stealth pushed that to 82%.
That extra work comes with a clear cost in latency, especially in Stealth mode. But if you are trying to scrape a site that is genuinely difficult to access, waiting longer for a usable page can be a much better trade than getting a fast block page.
So if you simply need mobile IPs for sites that already behave reasonably well, a raw mobile proxy provider may be cheaper, faster, and easier to control. If your real problem is getting through anti-bot protection and receiving usable content, ScrapingBee is the strongest candidate from this benchmark because the proxy is only one part of what it does. You also get managed retries, JavaScript rendering, Stealth Proxy, geotargeting, and other scraping-specific features without having to build that infrastructure yourself.
Want to see how it behaves on your own targets? Try ScrapingBee with 1,000 free API credits. No credit card required.
Conclusion
There is no single best mobile proxy provider for every scraping job.
AirProxy, NodeMaven, and DataImpulse produced the strongest raw mobile proxy results in my tests, while Oxylabs and Decodo were among the fastest. But when the target itself was heavily protected, raw mobile IPs stopped being enough.
That is the real distinction to keep in mind: choose a mobile proxy network when you mainly need good IPs, and choose a managed scraping service like ScrapingBee when the harder problem is getting the page to load at all.

Kevin worked in the web scraping industry for 10 years before co-founding ScrapingBee. He is also the author of the Java Web Scraping Handbook.


