---
name: dataforseo-ai-overview-ctr-impact
description: "Every Monday: which of your top 30 queries now show an AI Overview, whether it cites you, and what happened to your CTR there at the same position. Use when the user asks for this, or when it runs on a schedule."
---

# AI Overviews eating your clicks: DataForSEO SERPs and Search Console CTR

Every Monday: which of your top 30 queries now show an AI Overview, whether it cites you, and what happened to your CTR there at the same position.

Clicks are down and position is flat, and nobody can say why. Often the answer sits above the results: an AI Overview that answers the question before anyone scrolls. Search Console does not say which of your queries show one, and SERP tools do not know your click-through rate, so the effect stays a hunch.

Every Monday the agent fetches the live results for your 30 biggest queries through DataForSEO, notes which carry an AI Overview and whether your domain is among its sources, and sets that against your Search Console CTR for the last 28 days and the 28 before, only where your position held steady. Queries without an Overview are the control group, so the card can tell an AI Overview effect apart from a sitewide dip.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- Read access to the Search Console property, with the country filter set to the same market as the DataForSEO location.
- DataForSEO API login and password, or the DataForSEO MCP server. A run is 30 Standard-queue SERPs with the AI Overview option, a few cents at list price; test on `https://sandbox.dataforseo.com/v3/` first.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Pull CTR for two periods** (Google Search Console): Call `searchanalytics.query` with `dimensions: ["query"]` and your country filter for the last 28 full days and for the 28 days before that. Take the 30 queries with the most clicks in the recent period, and keep clicks, impressions, CTR and position for both periods.
2. **Fetch the 30 SERPs with AI Overviews loaded** (DataForSEO): Send one `POST /v3/serp/google/organic/task_post` with 30 tasks: keyword in lowercase, your `location_code` and `language_code`, `depth: 10`, `load_async_ai_overview: true` (without it, Overviews Google builds on request come back missing) and `tag` set to the keyword. Collect results with `tasks_ready` and `task_get/advanced/<id>`.
3. **Read the Overview and its sources** (DataForSEO): A query has an Overview when `item_types` includes `ai_overview`. Read that item's `references` (and the `references` inside its `items`), normalize each `domain` (lowercase, strip `www.`) and mark the query cited when one matches your domain. Note your organic `rank_group` too.
4. **Compare CTR at the same position**: Join the SERP results to the Search Console rows on the query string. Keep queries whose average position moved by less than 1.0 between the periods, and compute group CTR (sum of clicks / sum of impressions) for both periods in three groups: with an Overview and cited, with one and not cited, without one. The group without an Overview is the baseline.
5. **Post and keep the history**: Post how many of the 30 show an Overview, the CTR change with and without one, the cited count, and the queries that lost most. Save which queries showed an Overview in `aio-watch.json`, so next week can say which ones are new.

## Route B: the browser

### What you need

- Signed in to Google with access to the Search Console property, and to the DataForSEO dashboard with a funded balance.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://search.google.com/search-console/performance/search-analytics. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Compare two 28-day periods**: Pick the property, add your country filter, then in Date choose Compare, Custom, and set the last 28 days against the 28 before. Turn on all four metrics and sort Queries by Clicks; note the top 30 with CTR and position for both periods.
2. **Check each query for an AI Overview**: Open `https://app.dataforseo.com/`, go to API Playground, SERP API > Google > Organic > Live Advanced, set your location and language, depth `10`, and turn on the option to load asynchronous AI Overviews. Run each of the 30 queries once and note whether `ai_overview` is in `item_types` and whether your domain is in its `references`.
3. **Compare CTR at a steady position**: Keep queries whose position moved by less than 1.0. Add up clicks and impressions for both periods in three groups (Overview and cited, Overview not cited, no Overview) and divide for each group's CTR.
4. **Report**: Give the number of queries with an Overview, the CTR change in each group, the cited count, and the queries that lost most CTR.

Note: Thirty Playground requests take a while and use Live pricing. Searching Google yourself shows whether an Overview appears for you, but it is personalized and does not list every source, so the counts will differ from the API route.

## The report

- **AI Overview reach**: how many of your top 30 queries show one, and how many are new since last week.
- **CTR with and without an Overview**, last 28 days against the 28 before, at a steady position.
- **Cited**: in how many Overviews your domain is a source.
- **The queries that lost most**, with position, CTR before and after, and whether you are cited.
- The query to work on first.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "dataforseo-ai-overview-ctr-impact/<date of this run, e.g. 2026-10-16>",
  "item_key": "dataforseo-ai-overview-ctr-impact",
  "project": "example.com",
  "source": "AI Overviews eating your clicks: DataForSEO SERPs and Search Console CTR skill",
  "kind": "update",
  "title": "AI Overviews on 11 top queries cut CTR from 6.1% to 3.4%",
  "summary": "AI Overviews now show on **11 of your top 30** queries. On those, CTR fell from **6.1% to 3.4%** at the same position, while queries without one held at 5.2% to 5.0%. You are cited in **3 of the 11**.",
  "widget": [
    {
      "type": "Grid",
      "props": {
        "columns": 3
      },
      "children": [
        {
          "type": "Stat",
          "props": {
            "label": "CTR with an AI Overview",
            "value": 3.4,
            "unit": "%",
            "delta": -44
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "CTR without one",
            "value": 5,
            "unit": "%",
            "delta": -4
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Cited in Overviews",
            "value": "3 of 11"
          }
        }
      ]
    },
    {
      "type": "Table",
      "props": {
        "columns": [
          "Query",
          "Position",
          "CTR before",
          "CTR now",
          "Cited"
        ],
        "align": [
          "left",
          "right",
          "right",
          "right",
          "left"
        ],
        "rows": [
          [
            "how to write an invoice",
            2.1,
            "11.8%",
            "5.9%",
            "no"
          ],
          [
            "what is a proforma invoice",
            3.4,
            "8.2%",
            "4.1%",
            "no"
          ],
          [
            "invoice payment terms",
            4,
            "6.5%",
            "3.6%",
            "yes"
          ],
          [
            "how to invoice as a freelancer",
            2.8,
            "9.9%",
            "6.0%",
            "no"
          ],
          [
            "net 30 meaning",
            5.2,
            "4.4%",
            "2.3%",
            "no"
          ],
          [
            "what to include on an invoice",
            3.1,
            "7.7%",
            "5.2%",
            "yes"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Start with \"how to write an invoice\": position 2, half the CTR it had, and the Overview cites two rivals but not you. A short numbered answer near the top of the page is what gets cited.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Mondays at 9:00 (`0 9 * * 1`). From cron, with the agent signed in on that machine:

```bash
0 9 * * 1 claude -p "Run the dataforseo-ai-overview-ctr-impact skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/dataforseo-ai-overview-ctr-impact#schedule

Source: https://briefkin.dev/skills/dataforseo-ai-overview-ctr-impact
