OwnTracks Recorder
Self-hosted store and access for location history
OwnTracks Recorder is a lightweight program that stores and accesses location data published by the OwnTracks mobile apps. It enables private, self-hosted presence detection and location history.
Key features
- Stores location history
- Private presence detection
- MQTT and HTTP modes
- Home Assistant integration
Pros & cons
Strengths
- Fully private location tracking
- Very lightweight
Trade-offs
- Requires the OwnTracks app
- Setup is technical
OwnTracks Recorder replaces
Last reviewed Sep 13, 2026 · 815 words
A year of location history for two phones, reporting every few minutes, is a few hundred megabytes of plain text files in OwnTracks Recorder's store directory, served by a C program that idles well under 64 MB. That is the pitch: Google Timeline or Life360 functionality on the smallest machine you own, in a format you can grep. The parts that need thought are not the Recorder itself but the plumbing around it: whether phones talk to it over MQTT or HTTP, how you put TLS on that path, and what job you leave to Home Assistant.
Pick HTTP mode unless you already run a broker
The OwnTracks phone apps for iOS and Android publish small JSON payloads with latitude, longitude, battery and a timestamp. Recorder can receive those two ways. In MQTT mode the apps publish to a broker such as Mosquitto and Recorder subscribes to the owntracks/# topics; in HTTP mode the apps POST directly to Recorder's own /pub endpoint. MQTT is the older, richer path: it enables friends-sharing between family members' phones and works with any other MQTT consumer. HTTP is one fewer service and one fewer port to expose, and for a household that wants history and presence it is the setup I recommend. If Mosquitto already exists for your smart home, use it; otherwise do not add it just for this.
The Docker version is one image and one volume
services:
recorder:
image: owntracks/recorder
environment:
- OTR_PORT=0 # 0 disables MQTT; remove this line for MQTT mode
volumes:
- ./store:/store
ports:
- "8083:8083"
/store holds everything: the per-user, per-device .rec files, cached reverse-geocoding results and the last known positions. Back it up with whatever already backs up your compose directory; there is no database to dump. The built-in web UI on port 8083 is deliberately spartan, with a map of last positions and a table view. For something nicer, the separate owntracks/frontend container talks to the same API and gives you timelines and heat maps.
Put TLS in front, or do not expose it
Your phones send their position from wherever they are, so the endpoint has to be reachable from the internet or over a VPN. Recorder speaks plain HTTP and expects a reverse proxy to terminate TLS and, in HTTP mode, to enforce basic auth. The setup that works: Caddy or Traefik in front with a Let's Encrypt certificate and a username and password, the apps configured with those credentials, and Recorder itself listening only on the Docker network. The other setup that works is not exposing it at all and having the phones connect over Tailscale, which the apps handle fine since they only need the hostname to resolve. What does not work is 8083 forwarded straight from the router, which is how strangers end up with your daily movements.
Presence belongs to Home Assistant, history to Recorder
Home Assistant has its own OwnTracks integration that consumes the same payloads and turns them into device trackers for automations like "turn on the heating when the first phone enters the home zone". That integration does not need Recorder. Recorder's job is the part HA does badly: storing every point for years and letting you query it, through the web UI or API calls like /api/0/locations?user=jane&device=phone&from=2026-01-01. Run both against the same broker in MQTT mode, or in HTTP mode point the apps at Recorder and let HA's integration receive its copy through its own webhook. Either way, treat HA as the consumer of "now" and Recorder as the owner of "then".
Where it sits against Traccar and Dawarich
Traccar is the bigger project, built for fleets and dedicated GPS hardware, with a Java server that wants 1 GB and a far larger feature set including geofences and reports. Dawarich is the newer, prettier Google Timeline replacement with a Rails backend and Postgres, and it imports Google's export directly. Recorder wins on footprint, on file-based storage you can read without the app, and on being stable and largely unchanged since 2015. It loses on polish and on setup, which is technical: you will read the Booklet documentation on the OwnTracks site, and you should.
What I'd do
HTTP mode, Recorder plus the frontend container, Caddy in front with basic auth, the store directory in the same backup job as everything else. Configure the phones in significant-changes mode to save battery and accept gaps of 100 metres or so. Let Home Assistant handle presence through its own integration. If you want the Google Timeline import and a dashboard your family will actually open, look at Dawarich instead; if you are tracking vehicles, Traccar. For quietly keeping your own history for a decade, this is the tool.
Compare OwnTracks Recorder
1 head-to-head comparisons.
Similar home automation apps
Home Assistant
Home AutomationOpen-source home automation that puts privacy first
Replaces SmartThings, Google Home
Frigate
Home AutomationLocal NVR with real-time AI object detection
Replaces Google Home
ntfy
Home AutomationSend push notifications to your phone via simple HTTP
Replaces Pushover, Pushbullet
Homebridge
Home AutomationBring non-HomeKit smart devices into Apple Home
Replaces Apple HomeKit hubs
Tasmota
Home AutomationOpen-source firmware for ESP-based smart devices
Replaces Tuya Cloud
ThingsBoard
Home AutomationOpen-source IoT platform for device management and data
Replaces AWS IoT, Azure IoT