Mobile proxies vs residential proxies
What differs between mobile and residential proxies on our pages: the address, how long a session holds, what a gigabyte costs, and a check to run on both.
- Published November 10, 2026
- 9 min read
In this article
Mobile costs twice what Essential residential does today. Before you pay that, know what the extra $1.50 a gigabyte buys.
On our price list, 2026-11-10: Essential residential $1.50 a GB, Premium residential $3.00, Mobile $3.00. Our Mobile page describes the address as a carrier's, and a session can run 24 hours where Essential stops at 120 minutes. Everything else a buyer usually asks about, a city, SOCKS5, a long hold, Premium also has, at the same rate as Mobile.
So the decision is narrow. Pick Mobile when the job has to be seen as a visitor on a cellular network. For everything else start on residential, and go to Premium if you need the long session, the city or SOCKS5. Below is what each claim rests on, and a check that settles it with your own traffic for about a dollar.
Two lines, ten requests each, and the registry's answer
Every public IP address is held by someone, and the registries will say who. The lookup is RDAP, the registries' own query protocol: RFC 7480 covers how it runs over HTTP, RFC 9082 the URLs you query, and RFC 9083 the JSON you get back (all three read 2026-11-10). The answer carries a network name and, usually, the organisation that registered the block. It doesn't care what a seller's page says.
You need one line from each product. Generate a few lines on a Mobile pool and a few on Essential residential, and paste one of each exactly as the dashboard hands it out, in the host:port:username:password form. Don't shorten or retype it. The line itself says which product it belongs to, so an edited line can land on a different one, and then you'd be comparing the wrong things. For this check use HTTP lines, the ones on port 7777.
# Paste one complete line from each product, unedited.
MOBILE_LINE='host:7777:username:password'
ESSENTIAL_LINE='host:7777:username:password'
check() {
# $1 is one line. Empty means no proxy, which tests the script on your own connection.
proxy_args=()
if [ -n "$1" ]; then
IFS=: read -r host port user pass <<< "$1"
proxy_args=(-x "http://$host:$port" -U "$user:$pass")
fi
for i in $(seq 1 10); do
curl -s --max-time 30 "${proxy_args[@]}" https://icanhazip.com
done | sort | uniq -c | sort -rn | while read -r n ip; do
who=$(curl -sL --max-time 20 "https://rdap.org/ip/$ip" | jq -r '[.name, (.entities[]? | select(.roles[]? == "registrant") | .vcardArray[1][]? | select(.[0] == "fn") | .[3])] | map(select(.)) | join(" / ")') || who="lookup failed"
echo "$n $ip $who"
done
}
echo "Mobile:"; check "$MOBILE_LINE"
echo "Essential:"; check "$ESSENTIAL_LINE"
It needs curl and jq, and it spends a few kilobytes of each wallet. Each output line is a count, an address and the registry's names. With the two variables set to empty strings the script runs on your own connection: ten requests, one address, and whatever your internet provider is registered as.
Reading the names: the first is the network's name, the second is the registrant the registry lists for the block. For US ranges that is the organisation. For ranges in other regions it can be a maintainer handle, a short tag ending in -MNT for instance, not the holder's name, so read the first name as the network and don't expect the second to be a company. A name tells you who holds the block, not who is using it, and a carrier can sell home broadband as well. A hosting company's name on a line sold as mobile would be worth a message to support. That is what this check is for.
Our own run, on 2026-11-10, used one Mobile line and one Premium residential line, both set to us. Each line returned ten different addresses in ten requests. The addresses are left out here and the rows are grouped by the registrant the registry returned:
Mobile:
8 T-Mobile USA, Inc.
2 Verizon Business
Premium residential:
2 AT&T Enterprises, LLC
1 Atlas Networks Corporation
1 Buckeye Cablevision, Inc.
1 Charter Communications Inc
1 Comcast Cable Communications, Inc.
1 Comcast IP Services, L.L.C.
1 Cox Communications
1 T-Mobile USA, Inc.
1 Windstream Communications LLC
All ten Mobile addresses were registered to two mobile carriers. The residential line came back from nine registrants in ten requests. That is one run on one evening, so run it on your own lines before you decide.
Our Mobile page says its addresses "are listed in IP databases as consumer phones, not residential ISPs or datacenters" (read 2026-11-10). That's the page's claim. The run above is ours, on one line, and the script is how you test it on yours.
What our pages say differs
The residential definition on our page is an address "an internet provider assigned to a home connection", and the Mobile datasheet lists its network type as "Mobile carriers (NAT)" (both read 2026-11-10). NAT matters because of how addresses are shared. RFC 6888 is the IETF's requirements document for Carrier-Grade NAT, defined there as "used to share the same IPv4 address among several subscribers". It describes ISPs offering "a service where a public IPv4 address would be shared by many subscribers". It doesn't say which kind of ISP. So the RFC tells you the sharing exists; it can't tell you which of two lines has it, and you can't see it from your side. The ten-request count above shows exits, not neighbours.
Hold time is where the pools do differ, from the product pages on 2026-11-10:
- Mobile: rotating, or sticky from 1 minute to 24 hours, 60 minutes by default.
- Premium residential: rotating, or sticky from 1 minute to 24 hours.
- Essential residential: rotating, or sticky from 1 to 120 minutes.
On every pool the generated lines carry a session ID, and a session ID alone doesn't hold an exit. The minutes field is what turns the hold on; the rotating or sticky post shows the count that proves it. Run that count on a line from each pool before a long job.
Targeting differs a little. Essential takes a country and a US state, over HTTP. Premium adds city targeting and SOCKS5. Mobile takes a country and, in the US, a state or a city, with HTTP on port 7777 and SOCKS5 on port 1080. All three take a network (ASN) target, an asn field on the generate call described in the API docs; the schema there notes it isn't applied on pools that force a geography, and none of the three does.
What a target makes of a mobile address as against a home one is not something we've measured, so there is no number here. If someone quotes you a percentage for "mobile gets refused less", ask for the target, the dates and the sample size.
Mobile costs twice Essential and the same as Premium
On the pricing page on 2026-11-10: $1.50 a GB for Essential, $3.00 for Premium, $3.00 for Mobile. If those have moved, the pricing page wins over this paragraph. At those rates 100 GB is $150 on Essential and $300 on Mobile.
The smallest purchase is $0.50 on each product. Each pool has its own prepaid wallet, with no subscription and no expiry date under normal circumstances. Convert moves value between wallets at each pool's rate, so $3.00 becomes 1 GB of Mobile or 2 GB of Essential. The Mobile page says there is no port or modem to rent and that the wallet only falls when traffic moves.
Doubling the rate is a bad deal if the job didn't need the carrier. It's a fair one if it did. Find out on the minimum purchase, not on a hundred gigabytes. The first-gigabyte post has the arithmetic against other sellers' residential rates, if cost is what you came for.
Choose by what the page you're checking was built for
Our Mobile page says to choose Mobile "when the job needs a visitor on a cellular network: the page, the ad or the sign-in flow you load from a mobile address", and Residential for most web scraping and SERP tracking, where a household address is what the site expects. Write down what you're checking first, because the answer belongs to the job, not to the proxy.
- Mobile: you're loading a page from a carrier network, such as an ad booked in a given country, US state or US city, or a flow built around mobile networks.
- Essential residential: each request stands alone and the page doesn't depend on the network type. Prices, listings, search results in volume, where $1.50 against $3.00 is half the bill.
- Premium: you need the 24-hour session, a city or SOCKS5, and the carrier doesn't matter.
If the job has two parts, run each on the product that fits. They're separate wallets on one account.
Send the same URLs through both lines
Don't take this table or anyone else's. Spend the minimum on each product and send the pages you actually need through both. Put the URLs in urls.txt, one per line, and reuse the two lines from above.
fetch_all() {
# $1 is one line, as the dashboard gave it. Empty means no proxy.
proxy_args=()
if [ -n "$1" ]; then
IFS=: read -r host port user pass <<< "$1"
proxy_args=(-x "http://$host:$port" -U "$user:$pass")
fi
while read -r url; do
printf '%s ' "$url"
curl -s --max-time 30 -o /dev/null "${proxy_args[@]}" -w '%{http_code} %{size_download}\n' "$url"
done < urls.txt
}
echo "Mobile:"; fetch_all "$MOBILE_LINE"
echo "Essential:"; fetch_all "$ESSENTIAL_LINE"
It prints a status and a byte count per URL and does not follow redirects, so a 301 shows a size of 0. A status and a size tell you whether the two lines got the same answer, not whether either answer was right.
If both lines return the same status and about the same size for every URL, the extra $1.50 a gigabyte bought you nothing on this job: use Essential. If the Mobile line returns pages the residential one doesn't, you have a reason, and it's a number from your own target. Then buy the product that won.
Start small, then measure.
Top up a wallet from $0.50 and point it at your own targets, or try the free trial first.