IP Geolocation vs Browser Device Location
The browser's device Geolocation API (navigator.geolocation) asks the user for permission and can return a precise, device-measured position; IP geolocation needs no permission and runs on every request, but only estimates location from the connection's network address. They solve different problems and are not interchangeable.
Permission and source
navigator.geolocation.getCurrentPosition() (the W3C Geolocation API, implemented by every major browser) requires an explicit, per-origin permission prompt and, on modern browsers, a secure (HTTPS) context. When granted, it can use GPS, Wi-Fi positioning, cell-tower triangulation, or IP as a fallback, depending on what the device has available. IP geolocation needs no permission prompt and no device cooperation — an API like GET /v1/geo reads it directly from the connecting request — but it only ever has the network address to work from.
Accuracy
A granted device position typically includes an explicit accuracy radius in meters, and on a phone with GPS and a clear sky view can be accurate to a few meters. IP geolocation resolves to a network range, not a device — country-level results are usually reliable, city-level results are a genuine estimate, and neither Watch-IP nor any provider returns a meter-level accuracy figure, because the underlying data isn't that precise. See accuracy for a fuller breakdown of city-level uncertainty.
Failure states
Device geolocation can fail or be denied: the user can decline the permission prompt, the browser can be configured to block it, a desktop machine may have no meaningful location hardware, or the request can time out. Handle PERMISSION_DENIED, POSITION_UNAVAILABLE, and TIMEOUT (the API's own error codes) as distinct, expected outcomes, not exceptions. IP geolocation fails differently — a resolvable field can simply be null or, for a supplied-IP lookup, found: false — and never shows the user a permission prompt at all.
Choosing between them
Use device geolocation when you need the user's actual position and can justify asking permission for it — a map, a store locator, or step-by-step navigation. Use IP geolocation for a low-friction default: pre-filling a country or currency, routing analytics, or suggesting (never forcing) a locale before or instead of asking permission. A common pattern is to use IP geolocation as the zero-permission default and offer device geolocation as an explicit, user-triggered upgrade for tasks that actually need precision.
What this article does not claim
This is a general comparison of two different browser mechanisms, not a claim that Watch-IP implements or wraps the device Geolocation API — it doesn't. GET /v1/geo is IP-based only; if your application also needs device geolocation, call the browser API directly and treat the two results independently rather than trying to reconcile them.
Sources
Written by Watch-IP editorial, 2026-09-06. Reviewed against apps/web/lib/cf.ts and apps/api/src/routes/geo.ts.