Events
Every geofence event carries these properties, taken from the geofence when the
event is recorded:
Events never contain coordinates: they say which of your places the contact
visited, not where they were.
Dwell is worked out by Sequenzy, not the phone: when the dwell time has passed
after an entry with no exit in between,
app.geofence_dwelled is recorded.
A phone that was offline can report its exit after that point, so a short visit
close to the dwell time can occasionally count as a dwell.
Set up your app
Each mobile SDK has a geofencing add-on. It watches the geofences nearest to the user with the phone’s region monitoring, so visits are reported also while the app is in the background or closed. Only identified contacts are tracked: nothing is watched or sent beforeidentify succeeds, and reset stops it.
Your app needs “Always” location access with precise location.
- iOS
- Android
- React Native
- Flutter
Link the
SequenzyGeofences product of
https://github.com/Sequenzy/sequenzy-swift, and add
NSLocationWhenInUseUsageDescription and
NSLocationAlwaysAndWhenInUseUsageDescription to your Info.plist.disable() when the user withdraws consent. On React Native and Flutter,
native code reports visits while your JavaScript or Dart is not running, using
the identity token the SDK last handed it, so configure an
identityTokenProvider: tokens that expire within three days, or that are
rejected, are replaced through it. A visit recorded without a connection is
sent with the next visit, or when the app starts or opens, within 24 hours. Google Play asks apps that use background
location for a declaration, and the App Store asks why you need “Always”
access: say that the app tells users about places they arrive at.
Apps that already monitor regions themselves can skip the add-on and call
fetchNearbyGeofences and trackGeofenceTransition on the core SDK; see the
client endpoints.
Add geofences
Add places under Settings > Channels > Geofences: click the map or paste coordinates or a Google Maps link, then set a radius. You can also import a CSV or GeoJSON file, or use the API, the CLI (sequenzy geofences) or the MCP server.
A workspace can have up to 10,000 geofences. Pause one to stop it without
losing its history. Adding, editing, pausing or deleting a geofence takes up
to a minute to reach every server, and apps pick up the change on their next
refresh.
Start a sequence on a visit
Pick Event received as the trigger and chooseapp.geofence_entered,
app.geofence_exited or app.geofence_dwelled. A Geofence picker then
lets you limit it to one geofence or a group. Through the API, CLI or MCP, the
same trigger is an event trigger with a property filter, for example
geofenceGroup equals stores or geofenceId one_of ["geo_123"].
Segment by visits
Add a Geofence condition to a segment: entered, left or stayed in any geofence, a group or one geofence, at least or fewer than a number of times, within a number of days or ever. “Didn’t happen” excludes contacts, so you can find customers who have not been to a store in 30 days. In API filters the field isgeofence and the value is transition:target:timeRange, or
transition:target:count:timeRange for count operators, for example
entered:group=stores:30d or dwelled:id=geo_123:2:90d.
Time windows count whole days in UTC, so “last 30 days” includes all of the
day 30 days ago. Group conditions use each geofence’s current group.
Privacy
- Geofencing only runs for signed-in users, after your app enables it and the user grants location access. Get your users’ consent as your local law requires.
- To find the nearest geofences, the app sends its position rounded to about 1 km. Sequenzy does not store or log it.
- Deleting a contact deletes their geofence events and visit counts.
Limits
To keep battery use and noise down, Sequenzy records at most 100 geofence transitions per contact per day, and ignores repeats inside a geofence’s cooldown. Phones watch only a few regions per app (20 on iOS, 100 on Android), so the SDK registers the geofences nearest to the user (19 on iOS, 49 on Android) plus one region around the device, and fetches the next ones when the device leaves it. Lower the SDK’smaxRegions if your app watches regions of
its own.