How to Monitor AI Visibility History in 2026, via API
A single visibility check tells you where your brand stands today. But the question people actually care about is whether things are getting better or worse. Did you climb on ChatGPT this month? Did a competitor start showing up where you used to? You can only answer that with history.
That's what the Monitoring API is for. Every time you run an AI visibility check or a scheduled tracker against a brand, Trackee stores the result as a snapshot. The GET /v1/snapshots endpoint lets you query all of that back out and turn a pile of one-off checks into a timeline. This tutorial walks through it.

Where the history comes from
You don't create snapshots directly. They're a byproduct of checking a brand. Run a check or a tracker with a brand attached, and Trackee records the outcome: whether you were mentioned, your position, the sentiment, the competitors named alongside you, and how many sources the model cited. Over days and weeks, those records become the timeline the Monitoring API reads from.
The one thing to know: a raw one-off prompt with no brand is not stored. If you want history, run against a brand. That's the whole trigger.
What you need
- A free Trackee account.
- An access key from your dashboard, sent as the
x-access-keyheader. - At least one brand you've run a check against, so there's history to read.
Reading your history is free. It's a query against Trackee's own database, so it never costs credits.
The simplest call
Pull the most recent snapshots for a brand:
curl "https://api.trackee.dev/v1/snapshots?brand_id=BRAND_ID" \
-H "x-access-key: YOUR_API_KEY"You get back the total count and an array of snapshots, newest first:
{
"success": true,
"data": {
"total": 128,
"limit": 50,
"offset": 0,
"snapshots": [
{
"id": "6b1e...",
"brandId": "6a2c...",
"brand": "Acme",
"prompt": "best project management software",
"engine": "chatgpt",
"model": "gpt-4o-mini",
"mentioned": true,
"position": 2,
"sources_count": 5,
"sentiment": "positive",
"competitors_found": ["Asana", "Linear"],
"checkedAt": "2026-09-05T12:00:00.000Z"
}
]
}
}Every field is one data point in your trend: mentioned and position for ranking, sentiment for tone, competitors_found for who's crowding you out, and checkedAt for when it happened.
Query and filter
The endpoint takes filters so you can ask precise questions instead of paging through everything.
Narrow to one engine and one prompt:
curl "https://api.trackee.dev/v1/snapshots?brand_id=BRAND_ID&engine=chatgpt&prompt=best%20project%20management%20software" \
-H "x-access-key: YOUR_API_KEY"Only the runs where you were mentioned:
curl "https://api.trackee.dev/v1/snapshots?brand_id=BRAND_ID&mentioned=true" \
-H "x-access-key: YOUR_API_KEY"A specific date range, with from and to:
curl "https://api.trackee.dev/v1/snapshots?brand_id=BRAND_ID&from=2026-08-01&to=2026-09-01" \
-H "x-access-key: YOUR_API_KEY"The engine filter accepts chatgpt, claude, gemini, or perplexity. Page through large sets with limit (up to 200, default 50) and offset.
Turning snapshots into a trend
The point of monitoring is the shape over time. Say you want your average position on ChatGPT for one prompt across the last month. Pull the filtered snapshots and reduce them:
const res = await fetch(
"https://api.trackee.dev/v1/snapshots?brand_id=BRAND_ID&engine=chatgpt&mentioned=true&from=2026-08-06&to=2026-09-06",
{ headers: { "x-access-key": process.env.TRACKEE_API_KEY } },
);
const { data } = await res.json();
const positions = data.snapshots
.map((s) => s.position)
.filter((p) => p != null);
const avg = positions.reduce((a, b) => a + b, 0) / positions.length;
console.log(`Average position: ${avg.toFixed(1)} over ${positions.length} checks`);Sort by checkedAt instead and you have a line chart. Count competitors_found over time and you can see who's gaining on you. The raw snapshots are the input; the trend is whatever you compute on top. This is exactly the data you'd wire into a client dashboard.
No code? Use the dashboard
The same history renders as charts under brand tracking in your dashboard, so you can watch position and mention rate move without writing a query. The API is for when you want that history inside your own product or report.
What's next
You now have every stored check for a brand, filterable and ready to chart.
A few good next steps:
- Read the full Monitoring API page for every filter and response field.
- Set up a tracker so fresh snapshots keep landing on a schedule.
- Get alerted the moment a snapshot shows a drop, instead of catching it later.
Run a tracker for a couple of weeks, then query the history. That's when the trend becomes obvious.