Public beta v1.0.14 · MIT · self-hosted
Your App Store and Google Play numbers. On your own server.
OxiLytics pulls downloads, crashes, ratings and reviews from App Store Connect and Google Play into one dashboard that you host. No SDK in your apps, no vendor cloud, no telemetry. Just the official store APIs and a SQLite file you own.
- iOS · iPadOS · macOS
- Android
- Docker amd64 + arm64
- ~30 MB RAM
// Privacy first
Analytics that never touch your users
Most analytics tools are an SDK inside your app that reports every user to someone else's cloud. OxiLytics works the other way round: it signs in to Apple and Google as you and reads the aggregated statistics they already publish to you in their consoles.
oxilytics.dbOxiLytics cloud does not exist. Neither does a licence server, an account or an "anonymous statistics" switch.
No SDK. Ever.
Nothing is compiled into your apps. No tracking pixel, no device IDs, no IDFA prompt, no new line in your privacy label.
On-premises
One Go binary and one SQLite file in a Docker image. Runs on a small VPS, a NAS, a Raspberry Pi or a laptop.
Egress: stores only
Outbound traffic goes to apple.com and googleapis.com (plus Apple's public lookup for icons). Check it with tcpdump.
No telemetry
No phone-home, no usage statistics, no licence check. Your numbers stay in your jurisdiction, under your backups.
| Typical SaaS analytics | OxiLytics | |
|---|---|---|
| Data source | An SDK inside your app | Official store reporting APIs |
| Who sees your numbers | The vendor and its sub-processors | Only you |
| Where data lives | Vendor cloud, foreign jurisdiction | Your server, your disk |
| User-level tracking | Events, device IDs, sessions | None exists |
| GDPR paperwork | Processing agreements, transfers | Nothing leaves your machine |
| Cost | Per event or per user | Free, MIT |
| Lock-in | Export if they let you | Plain SQLite you already own |
// Features
Everything the stores tell you, in one place
A dashboard for the whole portfolio
Downloads, crashes, average rating and new reviews for any date range, with the per-platform split under every number. Downloads per product by day, week or month, top performers, platform share, crash trend and top countries.

Products, not bundle IDs
You think in "Neon Sudoku", not in io.example.sudoku on one store and 6744125178 on the other. OxiLytics links store listings into products, so the iOS, macOS and Android builds of one app roll up into one row with one number. The platform breakdown is one click away.
- Automatic linking suggestions for unmatched listings
- Ignore stale or foreign listings: they leave every total
- Ratings per platform, crash rate per 1,000 downloads

Setup that tells you what is wrong
Until a store is connected, OxiLytics starts in setup mode and walks you through creating the App Store Connect key or the Google Play service account. Test connection checks each step separately and names the one that failed, instead of a generic "invalid credentials".

Syncs you can see
Full sync walks the whole history both stores expose; delta sync fetches only what changed, daily on a schedule or on demand. Every run is logged with per-app progress, row counts and errors, so a failure is visible instead of silent.
- Reviews from both stores in one inbox, full-text search, CSV export
- Admin and viewer roles, TOTP two-factor sign-in
- Automatic database backups, light and dark theme

// Honest numbers
Apple and Google do not report the same things
A single "portfolio total" can quietly mean one platform. OxiLytics shows the split under every number and keeps one-store metrics off the portfolio view, so you never compare a number with a store that never reported it.
| Metric | App Store | Google Play |
|---|---|---|
| Downloads | Yes | Yes |
| Redownloads | Yes | No |
| Updates | Yes | Not in Play reports |
| Uninstalls | Weekly, above a volume threshold | Daily |
| Active devices | No | Yes |
| Crashes | Yes | Yes, plus ANRs |
| Ratings | Store-wide average | Daily |
| Written reviews | Yes | Yes |
| Per country | Yes | Yes |
Platforms: iOS and iPadOS, macOS (one App Store Connect key covers both, tracked as separate platforms) and Android. Microsoft Store is planned.
// Screenshots
Real data, real screens
Taken from OxiLytics running on OxiSoft's own App Store and Google Play portfolio. Click to enlarge.






// Quick start
Running in five minutes
Download the compose file and the example .env, set a session key and start it. The app opens in setup mode and guides you through connecting a store.
- Distroless image, runs as a non-root user
- Binds to 127.0.0.1: put your reverse proxy in front
- Back up one file:
oxilytics.db
# get the compose file and the example config
mkdir oxilytics && cd oxilytics
curl -fsSLO https://raw.githubusercontent.com/oxisoft/oxilytics/main/deploy/docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/oxisoft/oxilytics/main/deploy/.env.example -o .env
# paste the output as OXI_SESSION_KEY in .env
openssl rand -hex 32
mkdir -p data secrets
sudo chown -R 65532:65532 data
docker compose up -d
# open http://127.0.0.1:8080 and sign in// API and MCP
Ask your analytics in plain language
Create a read-only API token in your profile and use it from scripts, a spreadsheet or Grafana. Or connect the OxiLytics MCP server to an AI assistant such as Claude and ask "how did downloads go last month, and what are people complaining about?"
- Tokens are read-only unless you grant "start a sync" at creation
- The MCP server runs on your machine and has no write tools at all
- Tools: overview, products, apps, metrics, time series, countries, reviews, sync runs

{
"mcpServers": {
"oxilytics": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/oxisoft/oxilytics-mcp",
"oxilytics-mcp"
],
"env": {
"OXILYTICS_SERVER_URL": "https://stats.example.com",
"OXILYTICS_ENV_FILE": "/home/you/.config/oxilytics/mcp.env"
}
}
}
}
// mcp.env (chmod 600): OXILYTICS_TOKEN=...// Beta status
In daily use, still growing
OxiLytics has measured OxiSoft's own iOS, macOS and Android apps every day since September 2026, and its App Store numbers were checked against Apple's Sales and Trends. It is labelled beta because the feature set is still moving and you may hit rough edges. Issues and pull requests are welcome.
- App Store Connect: iOS, iPadOS, macOS
- Google Play
- Read-only API and MCP server
- Microsoft Store (planned)
// FAQ
Questions
Is OxiLytics really free?
Yes. It is MIT licensed with no paid tier, no open-core split and no feature held back. OxiSoft built it to measure its own apps and published the code for everyone.
What does beta mean here?
OxiLytics already runs OxiSoft's own portfolio every day, with numbers checked against Apple's Sales and Trends. Beta means the feature set is still growing (Microsoft Store is planned) and you may meet rough edges. Please report them on GitHub.
Does it put an SDK or tracker in my app?
No. Nothing is added to your app. OxiLytics only reads the store reporting APIs with credentials you create. Your users are never contacted, identified or counted by it.
Is my data sent anywhere?
No. Data goes from Apple and Google straight into a SQLite file on your server. There is no OxiLytics cloud, no licence check and no telemetry. Outbound traffic goes only to the store APIs (plus Apple's public lookup for app icons).
Can I see individual users, sessions or funnels?
No, by design and by data source. Apple and Google publish aggregates per day, country and platform. If you need per-user product analytics you need an in-app SDK, and OxiLytics is the wrong tool.
Why do my Apple and Google numbers not line up?
The stores report different things. Google Play has no updates column, Apple publishes deletions only weekly and above a volume threshold, and active devices and ANRs exist only on Android. OxiLytics shows the per-platform split under every number instead of adding up metrics that only one store reports.
Does it work with only one store?
Yes. Connect App Store Connect only, Google Play only, or both. Platforms without a store are hidden.
Does it support macOS apps?
Yes. One App Store Connect key covers iOS and macOS, and macOS is tracked as its own platform.
What does it need to run?
Anything that runs Docker: a small VPS, a NAS, a Raspberry Pi or a laptop. About 30 MB of RAM when idle and a few hundred MB of disk for years of history. Images are published for amd64 and arm64.
Can I ask my analytics questions from an AI assistant?
Yes. The OxiLytics MCP server connects your instance to an assistant such as Claude. It runs on your machine, uses a read-only API token and has no write or sync tools.
Own your store analytics
Free, open source and private by construction.