API
Base URL https://shortlistdai.vercel.app
Read your results and start scans from your own scripts and tools, such as Zapier, n8n or a spreadsheet. The API works for websites saved to your signed-in account.
Authentication
Create a key in Settings > API keys. It is shown once, so copy it then. Send it with every request:
Authorization: Bearer sl_your_key
A key can read every website on your account and start scans with your saved settings. Keep it private, and delete it in Settings if it leaks. New keys can take up to a minute to start working.
Endpoints
| Request | Returns |
|---|---|
GET /api/v1/sites | Your websites, with the last scan date and latest visibility |
GET /api/v1/sites/{domain} | Latest results: visibility, recommended, scores, each engine, competitors, wrong facts and head-to-head comparisons |
GET /api/v1/sites/{domain}/history | Every daily and scan point: visibility, recommended, each engine, competitors, alerts |
GET /api/v1/sites/{domain}/plan | The fix plan, with which fixes are done |
GET /api/v1/sites/{domain}/lab | Fix Lab tests: tries with and without the page per engine, where each one is (in review, live, measuring) and the measured result |
POST /api/v1/scan | Starts a full scan of {"url": "example.com"} |
Use the domain without https:// or www., for example /api/v1/sites/example.com.
Examples
Latest results
curl https://shortlistdai.vercel.app/api/v1/sites/example.com \
-H "Authorization: Bearer sl_your_key"
{
"domain": "example.com",
"name": "Example",
"lastScan": "2026-10-29T14:02:11.000Z",
"visibility": 34,
"recommended": 25,
"scores": { "seo": 71, "aeo": 58, "geo": 49, "answers": 312 },
"byEngine": { "chatgpt": 31, "claude": 27, "gemini": 40 },
"competitors": [{ "name": "Rival One", "answers": 140 }],
"wrongFacts": [{ "said": "starts at $49 a month", "truth": "Plans start at $29/month", "engines": ["ChatGPT"] }],
"headToHead": [{ "vs": "Rival One", "verdict": "them", "tally": { "you": 1, "them": 4, "depends": 1 }, "whyThem": ["..."], "whyYou": ["..."] }]
}
Visibility and recommended are percentages of AI answers. A head-to-head verdict is you, them or depends.
Visibility history (JavaScript)
const r = await fetch("https://shortlistdai.vercel.app/api/v1/sites/example.com/history", {
headers: { Authorization: "Bearer " + process.env.SHORTLISTD_KEY },
});
const { points } = await r.json();
console.log(points.at(-1).visibility);
Start a scan
curl -N -X POST https://shortlistdai.vercel.app/api/v1/scan \
-H "Authorization: Bearer sl_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}'
The scan uses the settings saved on your account and takes about 4 to 5 minutes. Progress streams back as one JSON object per line. You can disconnect at any time, because the scan finishes on the server and saves to your account. Read the results afterwards with GET /api/v1/sites/{domain}.
Errors and limits
401: the key is missing, wrong or deleted.404: that website isn't on your account, or the path is wrong.429: too many requests. Reads allow 300 an hour and scans 15 an hour.
Connector for Claude and ChatGPT
The same key also works as a connector, so Claude, ChatGPT or any app that takes remote MCP servers can read and update your tracked sites. Add this as a custom connector:
https://shortlistdai.vercel.app/api/mcp?key=sl_your_key
Apps that can send a header can use https://shortlistdai.vercel.app/api/mcp with Authorization: Bearer sl_your_key instead, which keeps the key out of the URL. Without a key the connector still works, but only for scans by code.
| Tool | What it does |
|---|---|
list_my_sites | Your websites and their latest visibility |
get_site_report | Visibility, recommended, each engine, rivals named instead, questions you lose, wrong facts, next fixes |
get_history | Visibility over time, with your notes and finished fixes |
get_fixes | The numbered fix plan, open or done |
write_my_fix | The finished work for one fix, from your own site's facts |
mark_fix_done | Marks a fix done so later scans measure it |
get_cited_pages | The outside pages AI cites, who each names, and what changed |
get_outreach_pipeline | Pitched, replied, listed, and whether AI now cites the page |
get_ai_traffic | Visits, conversions and revenue from AI assistants (needs Google Analytics) |
get_fix_lab | Fix Lab tests: with and without the page, where each one is, and the live result |
add_chart_note | Puts a note on your progress chart |
A wrong or deleted key gets a 401, so you never get the anonymous tools by mistake.