# Google AI Overview Ads Scraper (`gytelio1/google-ai-overview-ads-scraper`) Actor

Google AI Overview Ads Scraper collects the sponsored ads Google shows inside AI Overviews, the AI answer at the top of Google Search. See which stores and brands pay to appear in Google's AI answers, which products they push, at what price, and for which questions.

- **URL**: https://apify.com/gytelio1/google-ai-overview-ads-scraper.md
- **Developed by:** [Gytis Ščipokas](https://apify.com/gytelio1) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 ads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google AI Overview Ads Scraper

### What does Google AI Overview Ads Scraper do?

Google AI Overview Ads Scraper collects the sponsored ads Google shows inside AI Overviews, the AI answer at the top of Google Search. See which stores and brands pay to appear in Google's AI answers, which products they push, at what price, and for which questions.

![Sponsored Terro ads inside a Google AI Overview](https://api.apify.com/v2/key-value-stores/fGwHAvRfzjJOukTbL/records/google-ai-overview-ad-example-terro.png)

### Use cases

- **Competitor monitoring.** See which advertisers show up in AI Overviews for your keywords, and with which products and prices.
- **Market research before buying ads.** Find out which questions bring ads into the AI Overview, and how crowded they are.
- **Ad verification.** Check that your Shopping and Performance Max ads reach AI Overviews, for which queries, and with the right details.
- **Trend tracking.** Schedule daily runs over the same queries and build a history of AI Overview ads.
- **Paid vs. cited.** Compare the advertisers with the sites the AI Overview cites for free.

### How to use it

1. Open the **Input** tab.
2. Add queries to **Queries**: name the product that solves a problem, like "mole repellent" or "pool vacuum".
3. Click **Start**.
4. Open the **Output** tab when the run finishes.

### Input

| Field | Description |
|---|---|
| `queries` | Searched on Google as is. Every ad shown inside the AI Overview is saved. |
| `depth` | How many times each query is searched: `quick` (3), `standard` (10, default), or `deep` (30). Google picks different ads each time, so deeper finds more ads and advertisers. |
| `country` | Searches run from this country. Default US, where Google shows the most AI Overview ads. Write your queries in English. |
| `saveScreenshots` | Saves screenshots of the ads, with the Sponsored label and Google's text above them. Product carousels are scrolled so every card is in a screenshot. Linked from `screenshotUrls`. Charged as an add-on for each search. Default off. |
| `includeSearchAds` | Also saves the regular search ads above, below, and beside the results, marked by `placement`. Default off. |

#### See who advertises in AI Overviews for a topic

```json
{
    "queries": ["mole repellent", "pool vacuum", "mosquito repellent for yard", "car battery charger"]
}
```

#### See which stores sell a brand, with screenshots

Add the product type to the brand name. The ads show the brand's products and the stores that sell them, and the screenshots show them as Google did.

```json
{
    "queries": ["terro ant killer"],
    "saveScreenshots": true
}
```

#### Compare AI Overview ads with regular search ads

```json
{
    "queries": ["pool vacuum"],
    "includeSearchAds": true
}
```

### Output example

You get one dataset item per ad:

```json
{
    "query": "mole repellent",
    "searchNumber": 1,
    "country": "US",
    "placement": "aiOverview",
    "adType": "shopping",
    "adId": "b183622121fc54ac",
    "position": 4,
    "advertiser": "Home Depot",
    "title": "Victor 10 lbs. Mole and Gopher Repellent Granules",
    "body": null,
    "price": 23.48,
    "currency": "USD",
    "priceText": "$23.48",
    "originalPrice": null,
    "discountPercent": null,
    "rating": 3.5,
    "reviewCount": "522",
    "delivery": null,
    "badge": null,
    "storeLocation": null,
    "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
    "url": null,
    "landingDomain": null,
    "displayedUrl": null,
    "unitText": "Here are some commercial mole repellents to consider, including castor oil-based options.",
    "overview": "Castor oil-based formulas are the most effective and humane way to repel moles, as the oil coats their food...",
    "overviewSources": ["I Must Garden", "Amazon.com", "Reddit · r/HomeImprovement"],
    "screenshotUrls": [
        "https://api.apify.com/v2/key-value-stores/.../records/ad-...-1-1.png",
        "https://api.apify.com/v2/key-value-stores/.../records/ad-...-1-2.png",
        "https://api.apify.com/v2/key-value-stores/.../records/ad-...-1-3.png"
    ],
    "scrapedAt": "2026-10-28T12:00:00.000Z"
}
```

- **`adType`**: `shopping` is a product card with a price and store. `text` is a headline and copy, sometimes with an image.
- **`badge`** and **`storeLocation`**: a card's label, like "Sale", and the nearby store it offers pickup from.
- **`url`**: the landing page of text ads. Product cards and image ads have none: Google only reveals it when the ad is clicked, and the scraper never clicks ads.
- **`adId`**: the same ad gets the same ID in every search and run, so count unique ads by `adId`.
- **`unitText`**: Google's sentence above the ads, tying them to the answer.
- **`overviewSources`**: the sites the AI Overview cites for free. Compare them with `advertiser` to see who pays for the spot and who Google cites anyway.

You can download the dataset as JSON, CSV, Excel, or HTML, or get it through the Apify API.

#### Summary and searches

Searches without ads aren't in the dataset, so two more records in the **Output** tab show what happened:

- **Summary:** for each query, the searches run, `overviewRate` (share of searches with an AI Overview), `adRate` (share with an ad in it), ads found, and advertisers by ad count.
- **Searches:** one line per search attempt, with how it ended:

| Status | Meaning |
|---|---|
| `done` | Google showed an AI Overview. |
| `no-overview` | Google showed no AI Overview, so no overview ads. |
| `blocked` | Google showed a CAPTCHA. Retried from a new IP, not charged. |
| `failed` | The page broke. Retried, not charged. |
| `skipped` | Its query had no AI Overview ads in 5 searches, so it didn't run. Not charged. |

### Tips

- **Name the product that solves a problem.** "mole repellent", "pool vacuum", and "mosquito repellent for yard" showed ads in the AI Overview on almost every search. Lawn and garden, pool, pest control, cleaning, automotive, and tools work best.
- **Add the product type to a brand.** "terro ant killer" gets ads, "terro" alone almost never does: Google answers a bare brand name without ads.
- **Plain product names and how-to steps get few ads.** "cordless drill", "non stick pan", and "how to fix a leaky faucet" got none in our tests.
- **Avoid excluded topics.** Google shows no ads in AI Overviews for finance, health, alcohol, gambling, or politics.
- **Expect some empty searches.** Not every AI Overview has an ad, and the same query shows different ads on each search. Run deeper, or on a daily schedule.

### Limitations

- **Mostly US.** Google launched AI Overview ads in the US in English. Other countries may return few or no ads.
- **Logged-out view.** You see the ads Google shows to logged-out visitors on desktop.
- **No landing page for product cards.** See `url` above.
- **Speed.** Google often answers new IPs with a CAPTCHA, so a search can take a few tries. Each takes about 30 seconds.
- **Price.** Costs more than a regular Google scraper: Google blocks most automated searches, so each one runs in real Chrome on residential proxies.

### Pricing

Two things are charged, plus one add-on:

| Event | Price |
|---|---|
| Search | for each Google search that loaded |
| Ad | for each ad saved to the dataset |
| Screenshots | for each search that loaded, only with **Save ad screenshots** on |

Platform usage and residential proxies are included. Searches blocked by Google's CAPTCHA are retried from a new IP and not charged. A query with no AI Overview ads in 5 searches stops early, and its other searches aren't charged. Set **Maximum cost per run** to cap the cost. The run stops there and keeps everything found.

What a run costs depends on whether Google shows ads for your queries:

| Run | Searches | About |
|---|---|---|
| 1 query, standard depth, with ads | 10 | $0.50 + $0.03 per ad, so ~$2.00 for 50 ads |
| 1 query, standard depth, no ads | 5–8, then it stops | $0.25–0.40 |
| 10 queries, quick depth | 30 | $1.50 + ads |
| 1 query, deep depth, with ads | 30 | $1.50 + ads |

Add $0.02 per search with **Save ad screenshots** on.

### Related Actors

- **[ChatGPT Ads Scraper](https://apify.com/gytelio1/chatgpt-ads-scraper)**: collects the sponsored ads ChatGPT shows in its answers. Run both to compare who advertises on Copilot and on ChatGPT.

- **[Bing Copilot Ads Scraper](https://apify.com/gytelio1/bing-copilot-ads-scraper)**: collects the sponsored ads Microsoft Copilot shows in its answers. Run both to compare who advertises on ChatGPT and on Copilot.

### Feedback

This scraper is under active development. Found a bug, missing data, or have an idea? Open an issue in the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/gytelio1/google-ai-overview-ads-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Searched on Google as is. Every ad shown inside the AI Overview is saved. Name the product that solves a problem, like "mole repellent" or "pool vacuum", or add it to a brand, like "terro ant killer". Google never shows these ads for finance, health, alcohol, gambling, or politics.

## `depth` (type: `string`):

How many times each query is searched. Google picks different ads each time, so deeper finds more ads and advertisers but costs more.

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

Searches run from this country, so you see the ads shown there. Google shows the most AI Overview ads in the US. Write your queries in English.

## `saveScreenshots` (type: `boolean`):

Save screenshots of the ads, with the Sponsored label and Google's text above them. Product carousels are scrolled so every card is in a screenshot. Linked from screenshotUrls in the results. Charged as an add-on for each search.

## `includeSearchAds` (type: `boolean`):

Also save the ads above, below, and beside the search results, marked by placement. Compare who pays for the AI Overview with who pays for the regular spots. Each ad is charged as a result.

## Actor input object example

```json
{
  "queries": [
    "mole repellent",
    "pool vacuum",
    "mosquito repellent for yard",
    "car battery charger"
  ],
  "depth": "standard",
  "country": "US",
  "saveScreenshots": false,
  "includeSearchAds": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all scraped ads

## `summary` (type: `string`):

Searches run, how often Google showed an AI Overview and an ad in it, ads found, and advertisers for each query. Explains a run with no ads.

## `searches` (type: `string`):

One line per search attempt: query, how it ended (done, no-overview, blocked, failed, skipped), and ads found.

# 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 = {
    "queries": [
        "mole repellent"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gytelio1/google-ai-overview-ads-scraper").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 = { "queries": ["mole repellent"] }

# Run the Actor and wait for it to finish
run = client.actor("gytelio1/google-ai-overview-ads-scraper").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 '{
  "queries": [
    "mole repellent"
  ]
}' |
apify call gytelio1/google-ai-overview-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gytelio1/google-ai-overview-ads-scraper"
        }
    }
}
```

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/u618GfohnLMGxnyjN/builds/lq7l9ctcgmenKLBXs/openapi.json
