Analytics
See what people search for, and which searches find nothing.
On this page
Analytics show what people search for in your app, day by day, and which searches find nothing. Use the misses to add custom emoji or aliases, and the top queries to tune your quick-reaction row.
What is recorded
For each app, UTC day and normalized query, the API counts searches and misses. A miss is a search that returned no result.
- Only keyed
/v1/searchcalls count, including cache hits and over-limit answers. - Searches answered on the device never reach the API, so they are not in analytics. They are the confident ones.
- Anonymous calls and development keys are not recorded.
- Counts arrive in batches, about 10 seconds after the search.
Plans and retention
| Plan | Analytics in the dashboard | Rows kept |
|---|---|---|
| Free | — | 7 days |
| Solo | — | 7 days |
| Pro | 30 days | 30 days |
| Scale | 1 year | 1 year |
Plans without analytics keep the last week of rows, so an upgrade shows data at once. A daily job deletes older rows.
Read them
The dashboard reads analytics from its own API, with your signed-in session: GET /api/apps/:id/analytics?days=. The window is 7, 30, 90 days, cut to your plan’s retention. The default is 30.
{
"days": [{ "day": "2026-10-14", "searches": 0, "misses": 0 }, { "day": "2026-10-15", "searches": 412, "misses": 9 }],
"topQueries": [{ "query": "ship it", "searches": 120 }],
"topMisses": [{ "query": "lgtm", "misses": 7 }]
}dayshas one entry per UTC day of the window, oldest first and today last, with0for days without searches.topQueriesandtopMisseshave up to 20 entries for the whole window.- On a plan without analytics, the answer is
402with{ "error": { "code": "plan_required", "plan": "pro", "message": "…" } }. - Every team role can read analytics. Team members see the owner’s plan.
The full contract is in the HTTP API reference.