# reverseGeocodeAsync fails: Geocoding rate limit exceeded

> Apple's on-device geocoder has a tight per-app rate limit. Calling reverseGeocodeAsync on every provider mount (Fast Refresh, remounts, re-entering onboarding) hits it quickly in development.

Web page: https://davidewins.com/errors/expo-location-geocode-rate-limit

React Native. Likely fix, 6 September 2026.

Versions: expo-location, iOS

Error:

```
Error: FunctionCallException: Calling the 'reverseGeocodeAsync' function has failed → Caused by: GeocodingNetwork: Geocoding rate limit exceeded - too many requests
```

## Cause

Apple's on-device geocoder has a tight per-app rate limit. Calling reverseGeocodeAsync on every provider mount (Fast Refresh, remounts, re-entering onboarding) hits it quickly in development.

## Fix

Only re-geocode when the coordinates move meaningfully or enough time has passed (e.g. >60 s or >100 m), and cache the last result.

## More React Native errors

- [Screen crashes the whole app: Rendered more hooks than during the previous render](https://davidewins.com/errors/rules-of-hooks-usememo-after-early-return)
- [Feed shows an error state for every address: ReferenceError before initialization](https://davidewins.com/errors/tdz-const-used-in-map-before-declaration)
- [Screen crash: Maximum update depth exceeded](https://davidewins.com/errors/maximum-update-depth-competing-effects)
- [Reanimated crash on device: Tried to synchronously call a non-worklet function on the UI thread](https://davidewins.com/errors/worklet-calls-non-worklet-helper)
- [Rows wrapped in <Link asChild> collapse to a tiny height](https://davidewins.com/errors/link-aschild-function-style-dropped)

[Search all errors](https://davidewins.com/errors)
