SERP + AI Answer Monitor
Pricing
from $40.00 / 1,000 keyword checkeds
SERP + AI Answer Monitor
For each keyword: your Google rank, whether an AI Overview appeared and cited you, and whether ChatGPT, Claude, Gemini or Perplexity name your domain. Diff against your last snapshot. Pay per keyword.
Pricing
from $40.00 / 1,000 keyword checkeds
Rating
0.0
(0)
Developer
Laxman Kafle
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
One keyword list, two answers: where you rank on Google, and whether Google's AI Overview, ChatGPT, Claude, Gemini and Perplexity name you.
Rank trackers tell you position 1–100. They don't tell you that an AI Overview now sits above position 1 citing three competitors, or that Perplexity recommends someone else when a buyer asks the same question. This Actor checks both for every keyword and scores them separately, so an SEO report can show "search visibility" and "AI visibility" side by side — and what changed since last time.
What you get
For one domain and up to 200 keywords, per keyword:
| Field | What it tells you |
|---|---|
rank | Google organic position of your domain (1–100) or null |
rankedUrl | The page that ranks |
topUrls[] | Top 10 organic URLs for the keyword |
aiOverview.present | Google showed an AI Overview for this query |
aiOverview.cited | Your domain is one of the overview's sources |
aiEngines[] | Per engine: named or not, rank among the domains it mentioned, cited as a source, snippet |
searchVisibility | 0–100: rank curve, adjusted for being cited / not cited in an AI Overview |
aiVisibility | 0–100: presence and position across the AI assistants |
diff | vs. your previous snapshot: rank up / down / new / lost, citations gained / lost per engine |
Plus overall searchVisibility, aiVisibility, a summary (top 3, top 10, AI Overviews seen/cited, AI mentions), a changes block listing improved / declined / newly cited / lost keywords, and a compact snapshot to feed into the next run.
Example (one keyword, trimmed):
{"keyword": "best note taking app","rank": 2,"rankedUrl": "https://www.notion.so/product","topUrls": ["https://zapier.com/blog/best-note-taking-apps/", "https://www.notion.so/product", "..."],"aiOverview": { "present": true, "cited": true, "citedUrls": ["https://zapier.com/...", "https://www.notion.so/help/..."] },"aiEngines": [{ "engine": "openai", "mentioned": true, "rank": 2, "domainsMentioned": ["obsidian.md", "notion.so", "evernote.com"], "cited": false },{ "engine": "perplexity", "mentioned": true, "rank": 1, "domainsMentioned": ["notion.so", "obsidian.md"], "cited": true }],"searchVisibility": 97,"aiVisibility": 93,"diff": { "previousRank": 5, "rankChange": 3, "rankDirection": "up", "aiOverviewCitation": "gained", "aiEngines": [{ "engine": "openai", "change": "unchanged" }, { "engine": "perplexity", "change": "gained" }] }}
The dataset has one flat row per keyword (ready for Google Sheets / Looker). The full report, summary and snapshot are in the run's key-value store as REPORT, REPORT_SUMMARY and SNAPSHOT.
Who uses this
- SEO agencies adding an "AI answers" column to monthly rank reports without a second tool.
- SEO platforms and dashboards that want an AI Overview + assistant feed per keyword via API.
- In-house SEO / content teams watching which queries lost clicks to AI Overviews and whether they are cited in them.
- AI agents that need a structured "how visible is this site for these queries" answer.
Pricing
Pay per event. No subscription.
- $0.04 per keyword checked (Google rank, top 10, AI Overview status)
- $0.03 per AI check (one engine × one keyword)
50 keywords on Google plus ChatGPT and Perplexity: 50 × $0.04 + 100 × $0.03 = $5.00. Google-only for 100 keywords: $4.00.
Google results are cached for 6 hours and AI answers for 24 hours, so re-running the same list the same day (for example after fixing an input) costs nothing extra upstream.
Bring your own keys: the Google lookups use SerpAPI. Add your own SerpAPI key — and optionally OpenAI / Anthropic / Google AI / Perplexity keys — in the input to run on your quota. Per-event prices stay the same; upstream usage is then on your accounts.
Input
| Field | Required | Notes |
|---|---|---|
domain | yes | notion.so — subdomains count |
keywords | yes | 1–200 queries |
brand | Notion — how assistants name you; defaults to the domain label | |
country | Google gl, default us | |
language | Google hl, default en | |
engines | subset of openai, anthropic, google, perplexity; empty = all configured | |
previousSnapshot | the SNAPSHOT object from a previous run, enables diff and changes | |
serpApiKey | bring your own SerpAPI key | |
openaiApiKey, anthropicApiKey, googleApiKey, perplexityApiKey | bring your own AI keys |
Use from code or an AI agent
Apify API (Node), with week-over-week diff:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const previousSnapshot = await fs.readFile("snapshot.json", "utf8").then(JSON.parse, () => undefined);const run = await client.actor("exepal/serp-ai-monitor").call({domain: "notion.so", brand: "Notion",keywords: ["best note taking app", "notion alternatives"],country: "us", engines: ["openai", "perplexity"], previousSnapshot,});const kv = client.keyValueStore(run.defaultKeyValueStoreId);const { value: report } = await kv.getRecord("REPORT");await fs.writeFile("snapshot.json", JSON.stringify(report.snapshot));console.log(report.searchVisibility, report.aiVisibility, report.changes);
Scheduled monitoring: create an Apify Schedule for the Actor and pass the last run's SNAPSHOT as previousSnapshot (an Apify webhook or a 10-line integration task does this). Each run then reports what moved.
MCP (Claude, ChatGPT, Cursor): add exepal/serp-ai-monitor to the Apify MCP server at https://mcp.apify.com and ask: "Check where notion.so ranks for 'best note taking app' and 'notion alternatives' in the US, and whether ChatGPT and Perplexity mention it." The agent fills the input and pays per keyword.
Direct HTTP with USDC (x402): the same tool is available at https://api.exepal.com/v1/serp-ai-monitor for agents that pay per request in stablecoins. See exepal.com.
How it works
- For each keyword, fetches the Google results page for your country and language through SerpAPI: organic results, and the
ai_overviewblock when Google rendered one (including its source links). - Asks each configured AI engine a neutral question — "Answer the query: <keyword>. Name specific websites or companies." — with no hint of your brand, so this measures unprompted recall.
- Parses every answer for domain names and your brand name, ranks your position among the domains named, and checks the engine's citations (Gemini grounding, Perplexity sources) for your domain.
- Scores:
searchVisibilityfollows a click-curve (position 1 = 100, position 10 ≈ 30, page 2 = 15) and is lifted when an AI Overview cites you, lowered when one appears and doesn't.aiVisibilityaverages presence across engines (first-named = 100, each later position −15). - If you passed a previous snapshot, diffs rank and citations per keyword and lists what improved, declined, was newly cited or lost.
Limits and notes
- Ranks come from a single fetch per keyword; Google personalises and rotates results, so treat ±2 positions as noise and track trends.
- AI Overviews are shown for a subset of queries and vary by country;
present: falsemeans none was rendered for that fetch. - Domain detection in AI answers is regex-based plus brand-name matching. Common-word brands (e.g. "Monday") can over-match; set
brandto the exact form assistants use. - Keyword lists above 200 are truncated; split into several runs.
About Exepal
Exepal builds paid, agent-ready tools: upstream APIs in, computed answers out. Questions or custom runs: contact@laxmankafle.com