Google Ads Scraper

Scrape competitor ads from Google Ads by domain.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/ads/capabilities/google-ad-scraper#main ~/.claude/skills/google-ad-scraper

For one project only, change the path to .claude/skills/google-ad-scraper.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text115 lines
google-ad-scraper/SKILL.md115 lines3.8 KBpushed 96d agoRawView on GitHub

Google Ads Scraper

Scrape ads from Google Ads using the Apify burbn/google-ads-search actor. Search by domain to get ad creatives, formats, and campaign details.

Quick Start

Requires APIFY_API_TOKEN env var (or --token flag).

# Search by domain (recommended)
python3 skills/google-ad-scraper/scripts/search_google_ads.py \
  --domain "hubspot.com"

# Search by company name (resolves to domain via transparency center)
python3 skills/google-ad-scraper/scripts/search_google_ads.py \
  --company "Nike"

# Limit results
python3 skills/google-ad-scraper/scripts/search_google_ads.py \
  --domain "hubspot.com" --max-ads 30

# Human-readable summary
python3 skills/google-ad-scraper/scripts/search_google_ads.py \
  --domain "stripe.com" --output summary

How It Works

  1. Domain Input: Pass the target company's domain directly via --domain
  2. Company Name Resolution (optional): If only --company is provided, the script searches Google Ads Transparency Center using Apify's web-scraper (Puppeteer) to resolve the company name to advertiser info
  3. Ad Scraping: Calls the Apify burbn/google-ads-search actor with {"domain": "...", "maxItems": N}
  4. Output: Returns ads as JSON or human-readable summary

CLI Reference

Flag Default Description
--domain none Company domain (e.g. hubspot.com) — recommended
--company none Company name (resolved to domain via transparency center)
--max-ads 50 Maximum number of ads to return
--output json Output format: json or summary
--token env var Apify token (prefer APIFY_API_TOKEN env var)
--timeout 300 Max seconds to wait for Apify run

At least one of --company or --domain is required.

Output Fields

Each ad in the output contains:

{
  "advertiserId": "AR13129532367502835713",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR12345678901234567890",
  "originalUrl": "https://www.nike.com/",
  "imageUrl": "https://...",
  "variantFormat": "TEXT",
  "variantContent": "Shop the latest Nike shoes...",
  "variants": [...],
  "variantCount": 3,
  "startDate": "2026-01-15"
}

Output fields:

Field Description
advertiserId Google Ads advertiser ID
advertiserName Company/advertiser display name
creativeId Unique ID for the ad creative
originalUrl Destination URL the ad links to
imageUrl URL of the ad image (if applicable)
variantFormat Ad format (TEXT, IMAGE, VIDEO, etc.)
variantContent Ad copy/text content
variants Array of ad variants
variantCount Number of variants for this creative
startDate Date the ad first appeared

Cost

  • Ad scraping: Varies by actor pricing, typically a few cents per domain
  • Company name resolution (optional): ~$0.05 (one web-scraper page)

Common Workflows

1. Competitor Ad Research

python3 skills/google-ad-scraper/scripts/search_google_ads.py \
  --domain "competitor.com" --max-ads 100 --output summary

2. Compare Multiple Competitors

# Run for each competitor domain
for domain in "competitor1.com" "competitor2.com" "competitor3.com"; do
  python3 skills/google-ad-scraper/scripts/search_google_ads.py \
    --domain "$domain" --max-ads 50
done

Limitations

  • Company name resolution uses Puppeteer-based web scraping of Google's SPA. It may occasionally fail — use --domain for best results.
  • Ad coverage: Google only shows ads from verified advertisers. Some smaller advertisers may not appear.
  • Historical data: Primarily shows recently active ads.
1---
2name: google-ad-scraper
3description: Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.
4---
5 
6# Google Ads Scraper
7 
8Scrape ads from Google Ads using the Apify `burbn/google-ads-search` actor. Search by domain to get ad creatives, formats, and campaign details.
9 
10## Quick Start
11 
12Requires `APIFY_API_TOKEN` env var (or `--token` flag).
13 
14```bash
15# Search by domain (recommended)
16python3 skills/google-ad-scraper/scripts/search_google_ads.py \
17 --domain "hubspot.com"
18 
19# Search by company name (resolves to domain via transparency center)
20python3 skills/google-ad-scraper/scripts/search_google_ads.py \
21 --company "Nike"
22 
23# Limit results
24python3 skills/google-ad-scraper/scripts/search_google_ads.py \
25 --domain "hubspot.com" --max-ads 30
26 
27# Human-readable summary
28python3 skills/google-ad-scraper/scripts/search_google_ads.py \
29 --domain "stripe.com" --output summary
30```
31 
32## How It Works
33 
341. **Domain Input**: Pass the target company's domain directly via `--domain`
352. **Company Name Resolution** (optional): If only `--company` is provided, the script searches Google Ads Transparency Center using Apify's web-scraper (Puppeteer) to resolve the company name to advertiser info
363. **Ad Scraping**: Calls the Apify `burbn/google-ads-search` actor with `{"domain": "...", "maxItems": N}`
374. **Output**: Returns ads as JSON or human-readable summary
38 
39## CLI Reference
40 
41| Flag | Default | Description |
42|------|---------|-------------|
43| `--domain` | none | Company domain (e.g. hubspot.com) — recommended |
44| `--company` | none | Company name (resolved to domain via transparency center) |
45| `--max-ads` | 50 | Maximum number of ads to return |
46| `--output` | json | Output format: `json` or `summary` |
47| `--token` | env var | Apify token (prefer `APIFY_API_TOKEN` env var) |
48| `--timeout` | 300 | Max seconds to wait for Apify run |
49 
50At least one of `--company` or `--domain` is required.
51 
52## Output Fields
53 
54Each ad in the output contains:
55 
56```json
57{
58 "advertiserId": "AR13129532367502835713",
59 "advertiserName": "Nike, Inc.",
60 "creativeId": "CR12345678901234567890",
61 "originalUrl": "https://www.nike.com/",
62 "imageUrl": "https://...",
63 "variantFormat": "TEXT",
64 "variantContent": "Shop the latest Nike shoes...",
65 "variants": [...],
66 "variantCount": 3,
67 "startDate": "2026-01-15"
68}
69```
70 
71**Output fields:**
72 
73| Field | Description |
74|-------|-------------|
75| `advertiserId` | Google Ads advertiser ID |
76| `advertiserName` | Company/advertiser display name |
77| `creativeId` | Unique ID for the ad creative |
78| `originalUrl` | Destination URL the ad links to |
79| `imageUrl` | URL of the ad image (if applicable) |
80| `variantFormat` | Ad format (TEXT, IMAGE, VIDEO, etc.) |
81| `variantContent` | Ad copy/text content |
82| `variants` | Array of ad variants |
83| `variantCount` | Number of variants for this creative |
84| `startDate` | Date the ad first appeared |
85 
86## Cost
87 
88- Ad scraping: Varies by actor pricing, typically a few cents per domain
89- Company name resolution (optional): ~$0.05 (one web-scraper page)
90 
91## Common Workflows
92 
93### 1. Competitor Ad Research
94 
95```bash
96python3 skills/google-ad-scraper/scripts/search_google_ads.py \
97 --domain "competitor.com" --max-ads 100 --output summary
98```
99 
100### 2. Compare Multiple Competitors
101 
102```bash
103# Run for each competitor domain
104for domain in "competitor1.com" "competitor2.com" "competitor3.com"; do
105 python3 skills/google-ad-scraper/scripts/search_google_ads.py \
106 --domain "$domain" --max-ads 50
107done
108```
109 
110## Limitations
111 
112- **Company name resolution** uses Puppeteer-based web scraping of Google's SPA. It may occasionally fail — use `--domain` for best results.
113- **Ad coverage**: Google only shows ads from verified advertisers. Some smaller advertisers may not appear.
114- **Historical data**: Primarily shows recently active ads.
115 

Discussion

Alternatives

Also in Search ads