Disclosure: I work with 98IP. This post describes a vendor-neutral test method and does not claim that one lookup service is authoritative.
A proxy gateway accepts country=US&city=New_York. Your first request returns an IP that one lookup service calls New York. Is the location requirement validated?
No. You validated one exit against one dataset at one time.
A production-quality acceptance test needs a row per exit observation and enough dimensions to expose pool-level inconsistencies.
Use an append-only observation schema
Start with a record like this:
{
"run_id": "geo-us-nyc-001",
"observed_at_utc": "2026-09-01T00:00:00Z",
"requested": {
"country": "US",
"region": "NY",
"city": "New York",
"gateway": "us-east",
"protocol": "http-connect",
"address_family": "ipv4",
"session_mode": "rotating"
},
"network": {
"exit_ip_hash": "sanitized-value",
"asn": 64500,
"prefix": "sanitized-prefix"
},
"location_observations": [
{"dataset": "A", "country": "US", "region": "NY", "city": "New York"},
{"dataset": "B", "country": "US", "region": "NJ", "city": "Newark"}
],
"destination": {
"market": "US-NY",
"accepted": true
},
"transport": {
"attempts": 1,
"exit_changes": 0,
"success": true
}
}
Do not overwrite the requested city with an observed city. Do not collapse disagreeing datasets into one value. Preserve the evidence that explains the disagreement.
Build the matrix around production dimensions
At minimum, cross:
- every production market;
- every gateway used by the application;
- rotating and sticky session modes;
- IPv4 and IPv6 when both are sold;
- at least three separated time windows;
- multiple unique exits per cell.
For a high-value market, 20–30 exits is a useful starting sample. For early provider screening, use a smaller bounded sample and expand only if the decision value justifies the traffic.
Disable retry ambiguity
Automatic retries can hide the first failing exit.
During the acceptance run:
retries = 0
concurrency = 1
redirects = explicit
connection_reuse = documented
session_id = recorded
Capture proxy connections and HTTP attempts separately. If the zero-retry test passes but production does not, investigate retry amplification and session reuse before blaming the location control.
Test rotation and stickiness separately
For rotating inventory:
- create a new session identifier;
- make one lookup and one authorized destination request;
- close the connection;
- wait for the documented rotation boundary;
- repeat without reusing browser state.
For sticky inventory, retain the identifier and sample over the promised lifetime. Record the exact moment the exit changes or authentication fails.
An accurate exit that cannot remain stable still fails a sticky-session requirement.
Calculate nested accuracy
Country, region, and city matches are not independent.
country_rate = country_matches / successful_observations
region_rate = region_matches / country_matches
city_rate = city_matches / city_targeted_observations
Also calculate:
- median and P95 distance from the requested metro center;
- expected network-classification rate;
- destination acceptance rate;
- sticky retention rate;
- unexpected exit-change rate;
- repeat-exit rate;
- ASN and prefix concentration.
Always report the denominator, markets, time window, address family, and match definition.
Classify disagreement patterns
Useful categories include:
- one stale dataset;
- administrative-boundary mismatch;
- carrier aggregation with stable country but unstable city;
- recent prefix reassignment;
- gateway or session control defect;
- IPv4/IPv6 location split.
This classification turns “the databases disagree” into a retest or escalation plan.
Make the gate executable
A machine-readable gate could look like:
country_match_min: 0.99
city_distance_p95_km_max: 50
sticky_cross_country_changes_max: 0
expected_asn_share_min: 0.90
time_windows_min: 3
result_states:
- pass
- conditional_pass
- fail
- inconclusive
The actual thresholds depend on the product and workload. The important part is defining them before reviewing results.
Security and compliance
Hash or truncate exit identifiers when full IP retention is unnecessary. Never store proxy passwords, authorization headers, cookies, or raw session tokens in the evidence bundle. Test only authorized destinations and markets, honor rate limits, and do not use location controls to bypass access restrictions or misrepresent identity.
For authorized global proxy testing, 98IP is available at https://en.98ip.com/?k=dev
Top comments (0)