Why it's different Features How it works Pricing Support Docs
Book a demo Start free trial
Geofencing SDK · iOS · Android · React Native · Flutter

Reliable location events, even when the app is closed.

Add geofencing to your app with one SDK for iOS, Android, React Native, and Flutter. Receive enter, exit, and dwell events in the background — with low power use and no constant location tracking.

Keeps monitoring zones in the background Thousands of zones, iOS limits managed for you
● LIVE · monitoringapp state: closed
Downtown zone · r150m
Enter · Downtown zone
delivered in the background → user notified
event: enterlatency: ~1spower: low
🍎 iOS
.package(url: "…/geofencekit-ios")
🤖 Android
implementation("com.geofencekit:geofence-sdk:0.1.0")
⚛️ React Native
npm i @geofencekit/sdk
🐦 Flutter
flutter pub add geofence_sdk
Why GeofenceKit

Works in the background, when your app needs it.

Some location solutions stop the moment the app moves to the background. GeofenceKit builds on the native location capabilities of iOS and Android to register your zones and receive crossing events with as little constant running and power use as possible.

iOS Native zone monitoring on iOS

Zones are registered directly with iOS. When a user enters or leaves a zone, the system can deliver the event to your app in the background, subject to the user's location permission and OS constraints.

  • Monitoring is built on Core Location
  • The iOS registered-region limit is managed for you
  • Monitored zones change based on the user's location

Android Reliable background events on Android

GeofenceKit uses Android's location services to deliver enter, exit, and dwell events without running a constant foreground service or showing a permanent notification.

  • Notifications are built from locally-saved content
  • Zones are restored after a device restart or app update
  • Events are saved when offline and sent later, without duplication
Everything included

A complete geofencing platform.

Works in the background

Receive enter, exit, and dwell events whether your app is open or running in the background, subject to each OS's permissions and capabilities.

Thousands of zones

Add thousands of locations — GeofenceKit automatically picks the nearest zones for each device to stay within operating-system limits.

Circles & custom polygons

Create a circular zone around a store, or draw a precise polygon around a mall, campus, or operating area.

Offline event storage

Events are stored on-device and uploaded in the background by the OS — the upload completes even if the app is killed, dozing, or rebooted, with automatic duplicate prevention.

Fewer false events

GPS-accuracy filtering, de-duplication, and cooldowns help reduce incorrect or repeated alerts.

Dashboard & analytics

Create zones, manage messages, track visits and events, and give each customer their own API key.

Real-time webhooks

Stream every enter, exit, and dwell event straight to your own server as a signed POST — plug geofencing into your CRM, backend, or automations.

From signup to your first event in minutes

How it works

1

Install the package

Add the GeofenceKit package to your project, then configure it with your API key.

2

Create your zones

Use the dashboard to draw circular zones or custom polygons, and define the events and notifications tied to them.

3

Start receiving events

Receive enter, exit, and dwell events, and follow them in the analytics dashboard.

import GeofenceSDK

let sdk = GeofenceSDK.shared
sdk.configure(baseUrl: "https://api.geofencekit.com",
              apiKey: "sdk_live_…")

let status = await sdk.requestPermissions()
let fences = try await sdk.start()
// enter / exit / dwell now fire — even after force-quit.
val sdk = GeofenceSdk.getInstance(context)
sdk.configure(GeofenceConfig(
    baseUrl = "https://api.geofencekit.com",
    apiKey  = "sdk_live_…",
))

val status = sdk.permissionStatus()
val fences = sdk.start()  // suspend; returns watched fences
import { GeofenceSDK } from '@geofencekit/sdk'

await GeofenceSDK.init({
  baseUrl: 'https://api.geofencekit.com',
  apiKey:  'sdk_live_…',
})

await GeofenceSDK.requestPermissions()
const fences = await GeofenceSDK.start()
import 'package:geofence_sdk/geofence_sdk.dart';

final sdk = GeofenceSdk();
await sdk.configure(GeofenceConfig(
  baseUrl: 'https://api.geofencekit.com',
  apiKey: 'sdk_live_…',
));

await sdk.requestPermissions();
final fences = await sdk.start();
Simple pricing

Start free, then choose a plan for your app's size.

All plans include the four platforms, background operation, circular and polygon zones, and the dashboard and analytics. Production cost is based on device count and usage volume.

Free trial

Try all features for 30 days
Free
  • Get an API key in minutes
  • All platforms & features available
  • Circular & polygon zones, with analytics
  • No payment card required
Start your free trial

Want production pricing? Send us a message and we'll prepare a quote for your usage.

We're here to help

Talk to our team.

Questions about technical integration, pricing, or moving to production? Send us a message and we'll reply within one business day.

✉ support@geofencekit.com
↳ Integration help ↳ Production keys ↳ Enterprise & SLA

We reply within one business day.

Add location features to your app in hours.

Get a free API key, add the package to your project, then create your first geofence from the dashboard.

Start your free trial Book a demo