# Free Google Ads Scraper (`cryptdarkly/google-ads-scraper`) Actor

The most robust, domain-focused Google Ads Scraper on Apify. Extract active ads, creative details, and landing pages with built-in OCR and stealth technology. FREE FOR A LIMITED TIME

- **URL**: https://apify.com/cryptdarkly/google-ads-scraper.md
- **Developed by:** [Bruce Martin](https://apify.com/cryptdarkly) (community)
- **Categories:** Lead generation, E-commerce, SEO tools
- **Features:** Limited permissions
- **Stats:** 92 total users, 4 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

### 🚀 Domain Intelligence & OCR: The Ultimate Google Ads Scraper

**The most robust, domain-focused Google Ads Scraper on Apify. Extract active ads, creative details, and landing pages with built-in OCR and stealth technology.**

[![Apify](https://img.shields.io/badge/apify-platform-ff9000.svg)](https://apify.com)
[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://github.com/your-repo)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/your-repo/blob/master/LICENSE)

***

### 🚀 Why this Scraper?

Unlike generic scrapers, this tool is engineered for **Competitor Intelligence**. It allows you to target specific domains (e.g., `tesla.com`, `monday.com`) and extract their entire ad portfolio, including text within images using our **Advanced OCR** engine.

#### ✨ Key Features

- 🔍 **Domain Intelligence**: Scrape all active ads for a specific advertiser domain.
- 🧠 **Built-in OCR**: Automatically extract text from Image and Video ads (headlines, descriptions).
- 🌍 **Global Coverage**: Scrape active ads from any region (US, EU, UK, CA, and more).
- 🖼️ **Multi-Format**: Supports **Text**, **Image**, and **Video** ad formats.
- 🛡️ **Stealth Mode**: Optimized for **Residential Proxies** to evade detection and blocking.
- 🎯 **Platform Targeting**: Filter ads by **Google Search** or **YouTube**.

***

### � Use Cases

#### 1. Cold Outreach & Lead Gen

Identify companies spending money on Google Ads but running suboptimal campaigns. Use the **OCR data** to analyze their ad copy at scale, find weak headlines, and pitch your creative services or SEO alternatives personalized to their current ads.

#### 2. Competitor Intelligence

Stop guessing what your competitors are doing. Enter their domain to retrieve their **entire active ad portfolio**. Analyze their headlines, creative angles, and landing pages to reverse-engineer their strategy.

#### 3. Ad Creative Swipe Files

Building a new campaign? Scrape the top 10 players in your niche (e.g., `monday.com`, `asana.com`, `clickup.com`) to build a massive library of **high-performing ad creatives** (images, videos, text) for inspiration.

#### 4. Market Research & Trends

Planning to enter a new market? See how established brands are positioning themselves in different regions. Use the **Region** filter to see how major players advertise in the US vs. Germany vs. Japan.

***

### �📖 How to Use

#### 1. Simple Domain Search (Recommended)

The easiest way to start is by providing the target domain.

1. Enter the domain (e.g., `nike.com`) in the `domain` field.
2. Select your target `region` (default: `anywhere`).
3. Click **Start**.

#### 2. Advanced Configuration

Customize your scrape with precision filters:

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `domain` | String | **Required** | The target advertiser's domain (e.g. `monday.com`). |
| `region` | String | `anywhere` | The region code to search from (e.g. `US`, `GB`, `DE`). |
| `maxResults` | Integer | `20` | Maximum number of ads to scrape (Max: 500). |
| `format` | String | `any` | Filter by `image`, `video`, `text`, or `any`. |
| `platform` | String | `any` | Filter by `youtube`, `google_search`, or `any`. |
| `extractHeadlines`| Boolean| `true` | **Enable OCR** to read text from ad images. |
| `proxyConfiguration`| Object | `Residential` | **Required**. Use Residential proxies for best results. |

***

### 📊 Output Example

The scraper returns structured JSON data for each ad. Here is a sample of what you get:

```json
{
  "id": "CR03335465984256376833",
  "advertiserId": "AR17828074650563772417",
  "creativeId": "CR03335465984256376833",
  "format": "image",
  "platform": ["google_search"],
  "domain": "monday.com",
  "originalUrl": "https://adstransparency.google.com/advertiser/AR17828.../creative/CR033...",
  "media_urls": [
    "https://tpc.googlesyndication.com/simgad/1058291827483...",
    "https://tpc.googlesyndication.com/simgad/847382910293..."
  ],
  "ocr_text": [
    "Manage Your Projects",
    "The Visual Project Management",
    "Try monday.com For Free"
  ],
  "landing_page": "https://monday.com/project-management?utm_source=google...",
  "last_seen": "2023-10-27T10:00:00.000Z"
}
```

***

### 🔌 Integrations

Connect your data to your favorite tools:

- **Clay**: Enrich your CRM with competitor ad copy.
- **n8n / Make**: Automate daily competitor monitoring reports.
- **LangChain / LLMs**: Feed ad copy into AI to analyze sentiment and messaging strategy.

***

### ❓ FAQ

#### 1. Why do I need Residential Proxies?

Google aggressively blocks data center IPs (like standard AWS/Google Cloud IPs). To ensure you get results and don't get blocked, **Residential Proxies** are essential. They mimic real user traffic.

#### 2. Can I search by keyword?

Currently, this scraper is optimized for **Domain Intelligence** (finding ads by a specific advertiser). Keyword search is on our roadmap!

#### 3. Does it scrape historical data?

The Google Ads Transparency Center shows currently active ads and some recently inactive ones. We scrape what is currently visible in the transparency center for the selected region.

#### 4. How fast is the OCR?

Our optimized OCR engine adds only ~2-3 seconds per ad. It allows you to search and analyze text that is otherwise "trapped" inside images.

***

### 🛠 Troubleshooting

- **0 Results?**:
  - Check if the `domain` is correct (e.g., use `nike.com`, not `https://nike.com`).
  - Try a different `region`. Some advertisers only run ads in specific countries.
  - Ensure you are using **Residential Proxies**.
- **Timeout?**:
  - Reduce `maxResults` or increase the timeout setting in Apify if you are scraping a massive advertiser.

***

#### Support

Found a bug or have a feature request? Please [open an issue](https://github.com/your-repo/issues) or contact us directly.

# Actor input Schema

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

The domain to scrape ads for (e.g., tesla.com, nike.com, shopify.com)

## `region` (type: `string`):

Region to scrape from (e.g., US, GB, CA, anywhere)

## `maxResults` (type: `integer`):

Maximum number of ads to scrape

## `format` (type: `string`):

Filter by ad format

## `platform` (type: `string`):

Filter by platform

## `extractHeadlines` (type: `boolean`):

Extract headline and description text from ad images using OCR. Fast (~2-3 seconds per ad).

## `proxyConfiguration` (type: `object`):

Select proxies to use. Automatic mode works on all plans. Residential proxies are recommended for best results with Google Ads.

## Actor input object example

```json
{
  "domain": "shopify.com",
  "region": "anywhere",
  "maxResults": 5,
  "format": "any",
  "platform": "any",
  "extractHeadlines": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "domain": "shopify.com",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cryptdarkly/google-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 = {
    "domain": "shopify.com",
    "maxResults": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cryptdarkly/google-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 '{
  "domain": "shopify.com",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cryptdarkly/google-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cryptdarkly/google-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/DaGanFMHSMXPdwJgQ/builds/IPduZFjelIFxfftoO/openapi.json
