# AI Overview Visibility Tracker — Who Google Cites, By Country (`eliai/ai-overview-visibility-tracker`) Actor

See which domains Google cites in its AI Overview for your keywords, and the exact passage it quoted from each. Track your own domain: cited or not, at what position, plus your organic rank. 15 countries — AI Overviews differ by market. $0.02 per keyword; failed fetches never charged.

- **URL**: https://apify.com/eliai/ai-overview-visibility-tracker.md
- **Developed by:** [Broke to Built](https://apify.com/eliai) (community)
- **Categories:** SEO tools, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Overview Visibility Tracker — who Google cites, and whether it's you

Google's AI Overview answers the question above the search results, and it names its sources. If
your site is not one of them, you are invisible for that keyword no matter where you rank.

This Actor checks a keyword — or a whole keyword set — and returns **the domains Google cited in its
AI Overview, the exact passage it quoted from each, whether your domain is among them, and your
organic position for the same term.** Per country.

**$0.02 per keyword checked.** Keywords where the fetch fails are returned as `ok: false` and are
never charged.

### What you get per keyword

| field | meaning |
|---|---|
| `verdict` | `cited` · `not-cited` · `citations-found` (no domain supplied) · `no-citations-visible` |
| `citations` | every cited source: domain, URL, and `quotedPassage` — the sentence Google lifted |
| `citedDomains` | the citation set at a glance, for share-of-voice across your keyword list |
| `citedInAiOverview` | true/false for your domain |
| `aiOverviewCitationPosition` | where you sit among the cited sources |
| `quotedPassage` | the exact passage Google quoted **from your page** |
| `organicPosition` | your classic organic rank for the same keyword |
| `organicResults` | the organic top results, with titles |

`quotedPassage` is the field people come back for: it tells you which sentence on your page earned
the citation, which is the only actionable input to writing the next one.

### Per country — the same keyword, different answers

AI Overviews are localised, and the difference is not cosmetic. Measured on 2026-08-16:

- US · *"what is a pay per event apify actor"* → cited `docs.apify.com`, `help.apify.com`,
  `apify.com`, `reddit.com`
- DE · *"bester web scraping anbieter"* → cited `trusted.de`, `botpress.com`, `thunderbit.com`,
  `reddit.com`

Fifteen countries are selectable, and all fifteen were verified working on 2026-08-16. Running the
single keyword **"best crm software"** through every one of them returned a different citation set
per market:

| | US | GB | CA | AU | DE | FR | ES | IT | NL | BR | IN | JP | MX | PL | SE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sources cited | 1 | 4 | 5 | 0 | 5 | 0 | 4 | 5 | 6 | 3 | 2 | 5 | 5 | 4 | 4 |

Two markets returned no cited sources at all for that keyword — which is itself the answer, and is
reported as `no-citations-visible` rather than dressed up. If you sell in more than one market,
checking only the US tells you about one of them.

### What this Actor does NOT do — stated plainly

- **It does not return the AI Overview prose.** Google generates the overview text asynchronously
  after the page loads; the citations are server-rendered, the paragraph is not. We return what can
  be read reliably rather than a paragraph that is sometimes missing and sometimes stale.
- **`no-citations-visible` is not proof no AI Overview exists.** It means Google served no
  server-rendered citations for that query. It is an honest "we could not see one", not a claim.
  It is still charged, because it costs the same fetch and "this keyword doesn't surface cited
  sources" is a real planning answer — but it is never dressed up as more than it is.
- **It is not a SERP scraper.** Organic results are included because they come free with the same
  fetch, capped at 20. If you need deep SERP data, buy a SERP scraper.

### Batch use

Put your whole keyword set in **Keywords (batch)**, set **Your domain**, and one run gives you a
visibility table across the set. `maxKeywords` caps the run and therefore caps your spend.

### How the data is obtained

Searches are run through **Apify's own Google SERP proxy**, the paid product Apify provides for this
purpose — not through private scraping infrastructure. Each check is one search for one keyword you
explicitly asked for; there is no background crawling.

**Your results are yours.** Everything this Actor produces is written to your run's dataset. We do
not retain, aggregate, or resell the search data it returns, and we do not build a database from your
keywords.

This Actor is not affiliated with, endorsed by, or connected to Google.

### Pricing

| event | price | when |
|---|---|---|
| `keyword-checked` | $0.02 | one keyword resolved in one country |

Six further events (`country-extra`, `ai-mode-checked`, `competitor-tracked`,
`serp-organic-captured`, `cited-page-fetched`, `report-generated`) are declared in the pricing record
but **not charged by this build**. They are reserved so planned features can ship without a pricing
change; an event that is not charged never fires and never appears on your bill.

Comparable visibility trackers on the store charge $0.05 per prompt check, and one charges $2.00 per
run to start. Raw SERP dumpers charge less — they sell a different thing.

# Actor input Schema

## `keyword` (type: `string`):

One search term to check. Use the batch field below for a whole keyword set.

## `keywords` (type: `array`):

Check a whole keyword set in one run. One failing term never stops the rest. You are charged per keyword checked, so this is also your budget.

## `domain` (type: `string`):

The domain you want to track, e.g. example.com. When set, every result says whether you are cited in the AI Overview, at what position, and the exact passage Google quoted from your page.

## `country` (type: `string`):

AI Overviews differ by country — the same keyword returns different cited sources in the US and Germany. Two-letter ISO code.

## `language` (type: `string`):

Search interface language code, e.g. en, de, fr.

## `includeOrganic` (type: `boolean`):

Return the organic top results and your organic position alongside the AI Overview citations. Comes from the same fetch, so it costs you nothing extra.

## `maxKeywords` (type: `integer`):

Safety cap. You are charged per keyword checked, so this is also your budget cap.

## Actor input object example

```json
{
  "keyword": "what is a pay per event apify actor",
  "keywords": [
    "what is a pay per event apify actor",
    "best web scraping api"
  ],
  "domain": "apify.com",
  "country": "US",
  "language": "en",
  "includeOrganic": true,
  "maxKeywords": 25
}
```

# Actor output Schema

## `results` (type: `string`):

One row per keyword: AI Overview citations, the passage Google quoted, your citation status and position, and your organic rank.

## `resultsCsv` (type: `string`):

The same rows as a spreadsheet-ready CSV.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "what is a pay per event apify actor",
    "keywords": [
        "what is a pay per event apify actor",
        "best web scraping api"
    ],
    "domain": "apify.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("eliai/ai-overview-visibility-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "what is a pay per event apify actor",
    "keywords": [
        "what is a pay per event apify actor",
        "best web scraping api",
    ],
    "domain": "apify.com",
}

# Run the Actor and wait for it to finish
run = client.actor("eliai/ai-overview-visibility-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "what is a pay per event apify actor",
  "keywords": [
    "what is a pay per event apify actor",
    "best web scraping api"
  ],
  "domain": "apify.com"
}' |
apify call eliai/ai-overview-visibility-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eliai/ai-overview-visibility-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MzDkKhKxeDJH0mJ8O/builds/QVhLncf5SU6I3axZG/openapi.json
