Ios Imprecise Location

iOS 14 lets users share approximate location instead of precise. For native apps, it's per app. For Safari, one choice affects every website. Here is what that means and how to detect it.

June 10, 20264 min read6 / 17

Here is a change that broke hundreds of location-based web apps in 2020 without anyone's code changing.

Apple added a "Precise Location" toggle to the iOS 14 location permission dialog. Users can flip it off and share only approximate location -- roughly the city, or a neighborhood in a dense area. No exact coordinates.

The problem is not the toggle. The problem is how Safari handles it. It is not per website. It is per browser.

Native Apps Get Per-App Control

In native apps, the precise/imprecise toggle is independent for every app. User grants precise location to a maps app, imprecise to a delivery app, precise again to a fitness tracker. Each grant is isolated. Each app gets its own setting.

Android 12 shipped an equivalent feature. And for Progressive Web Apps installed through Android, the behavior mirrors native: the setting is per installed PWA, not per browser. Each installed app gets its own location grant.

Safari Is One App for the Entire Web

Safari doesn't work that way. On iOS and iPadOS, Safari is a single app -- not a different app per website. When the location permission dialog appears, it appears for Safari as a whole.

The first website a user visits that requests geolocation is the one that sets the mode. If that user toggles imprecise, the choice applies to Safari as an app.

Every website from that point forward receives imprecise location.

There is no way to know this happened. No API tells you which mode the browser is operating in. No flag in the position object. No error code. The Geolocation API returns a position normally -- it just happens to be a coarse one. This is an extension of the browser permission model: once a user makes a privacy choice, the API respects it silently.

What Imprecise Actually Means

Imprecise is not GPS-level or even Wi-Fi-level accuracy. The browser picks a random point within a roughly city-sized area around the user's real location.

In testing, coords.accuracy consistently falls between 3000 and 9000 meters in imprecise mode. That is 2 to 6 miles. For context, normal Wi-Fi scanning gives accuracy of 50 to 200 meters. GPS gives around 10 meters.

An accuracy value above 3000 meters is a reliable indicator that the user is in imprecise mode.

It is not a guarantee -- a very poor GPS fix or a device with no Wi-Fi data could theoretically produce similar values. But in practice, if you see 3000-9000m accuracy on a modern phone, you're in imprecise territory.

Precise vs imprecise location: per-app native behavior vs Safari global scope, and accuracy as a diagnostic ExpandPrecise vs imprecise location: per-app native behavior vs Safari global scope, and accuracy as a diagnostic

The System Is Border-Smart

One non-obvious detail: imprecise mode is not purely random.

Apple's implementation constrains the randomized point to stay within the same political boundary as the user. If someone is in France, close to the Spanish border, the imprecise location will still be in France. If someone is in New Mexico, it will stay in New Mexico.

You will always get the correct country, and typically the correct state or province. City-level is the useful granularity for imprecise mode -- neighborhood and below is not reliable.

This matters for use cases like "show me nearby restaurants" or "which stores are in my area" -- imprecise mode still tells you enough to answer the right country and city. It does not help with anything requiring street-level or block-level precision.

What You Can Do About It

There are two practical responses.

Detect and inform. Check coords.accuracy after a successful position fix. If it's above 3000 meters, show a message explaining that precise location is off and give instructions for enabling it in iOS Settings → Privacy → Location Services → Safari. Do not try to re-request the permission -- there is no API for that.

Design for it. If your feature works reasonably well at city level, do not gate it on precision. A "restaurants near me" feature that degrades gracefully to a neighborhood radius is more useful than one that silently shows wrong results.

The one thing you cannot do is override the user's choice or detect it before you receive position data. You find out when the first position fix comes back with a 9000-meter accuracy radius.

Geolocation has more edge cases than most APIs -- providers, permissions, iOS quirks. The next topic is simpler: screen orientation, which splits cleanly into two operations with two different browser support tiers.

The Essentials

  1. iOS 14+ added a "Precise Location" toggle. For native apps it's per-app. For Safari, one setting applies to every website.
  2. If the first geolocation user on an iPhone chose imprecise, every website ever after gets imprecise. No per-site reset exists.
  3. Imprecise mode accuracy is 3000–9000 meters (~2–6 miles). Compare to normal Wi-Fi: 50–200 meters.
  4. The system is border-smart -- imprecise location stays within the user's country and typically their state or province.
  5. Android 12 has an equivalent feature but for installed PWAs it's per app, not global like Safari.

Further Reading and Watching