I stopped babysitting six Find My tabs and pointed a script at the API instead
The dashboard that ate a weekend and now I can't live without.
I have a tracking problem, and I mean that in two different ways.
Between me, my partner and my parents there are, at last count, six AirTags. Keys. Two cars. A suitcase that travels more than I do. My dad's e-bike, and one on the cat that has never once left the apartment. Find My shows all of them on one map, as of this exact second. Ask it where the suitcase was yesterday and it just stares at you.
I wanted history. And I wanted it as data, not a screen I have to sit and stare at.
The hacky phase
Tried the usual stuff first. Shortcuts automations that fire when a device reaches a location: fine for one tag, unusable for six, and they silently stop running whenever they feel like it. Then I looked at the various unofficial iCloud / Find My scraping libraries. Some of them even work, for a while. Right up until Apple changes something and your cron job starts emailing you stack traces at 3am. I did not want to maintain that. I have enough bugs of my own.
What I actually ship now
LogMyTag exposes the location history over a plain REST API. You create a key in the account, send it as a header, and get JSON back per device, per day. That's basically the whole learning curve:
curl -H "X-API-Key: lmt_live_xxx" \
"https://api.logmytag.online/v1/devices/$ID/locations?date=2026-10-30"
{
"device_id": "…",
"date": "2026-10-30",
"count": 37,
"points": [
{ "lat": 44.787, "lon": 20.479, "reported_at": "2026-10-30T08:14:00Z" },
{ "lat": 44.788, "lon": 20.481, "reported_at": "2026-10-30T08:19:00Z" }
]
}
I've got a tiny cron job that pulls every device once an hour and drops the points into a Postgres table. On top of that there's a Grafana dashboard: one panel per tag, a map panel for the routes, plus a couple of alerts (suitcase leaves the airport geofence, it pings me on Telegram). GeoJSON comes straight out of the API, so the map panels were basically free.
It's the first time "where has my stuff been" is a database query and not a vibe.
The part I appreciate as a dev: I'm not reverse-engineering anything. There's a documented endpoint, the keys are mine and I can revoke them, and when something breaks it's my dashboard that broke, not a scraper losing a fight with Apple. For a weekend project I now genuinely depend on, that's exactly the trade I want.
Is aggregating your family's AirTags into a Grafana board overkill? Completely. Would I do it again? Already did. I'm wiring up my own bike this week.
– Dmytro
Pull your AirTag history as JSON
Create an API key in your account and read the docs: location history as JSON / GeoJSON, by device and day.
Start loggingBuilt something on top of LogMyTag? We'd love to feature it. Email us at info@aintdev.online.