Goose-skills google-ad-scraper

Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.

install
source · Clone the upstream repo
git clone https://github.com/gooseworks-ai/goose-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/gooseworks-ai/goose-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/capabilities/google-ad-scraper" ~/.claude/skills/gooseworks-ai-goose-skills-google-ad-scraper && rm -rf "$T"
manifest: skills/capabilities/google-ad-scraper/SKILL.md
source content

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

FlagDefaultDescription
--domain
noneCompany domain (e.g. hubspot.com) — recommended
--company
noneCompany name (resolved to domain via transparency center)
--max-ads
50Maximum number of ads to return
--output
jsonOutput format:
json
or
summary
--token
env varApify token (prefer
APIFY_API_TOKEN
env var)
--timeout
300Max 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:

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