OS has awesome geofences APIs on the device, accessible through Play services. Though if you are geofencing for say 1000 devices, first you have to manage the geofences on the device (download them to device, get callback events, then send them to server using say Firebase). And then secondly, if devices have different hardware, OS version and Play services versions, then the geofencing service reliability might vary. Our implementation ingests locations to server, and all geofences are done on the server. This provides a more consistent experience. Does this answer your question?