About google-ad-scraper
A command-line skill that retrieves Google Ads for a company using its domain or name. Marketing teams can inspect ad creatives, formats, destinations, and other campaign details in JSON or a readable summary.
Key features
- 01Search ads by company domain
- 02Resolve company names to advertiser details
- 03Retrieve creatives, formats, and campaign fields
- 04Output JSON or a readable summary
Use cases
- 01Review a competitor's Google ads
- 02Compare ads across several company domains
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill google-ad-scraperAfter installing, type/google-ad-scraperin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
skill.meta.jsonscripts/search_google_ads.pytests/actor-input-contract.jsontest_search_contract.pyDetails
From the project READMEGoogle 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
- Domain Input: Pass the target company's domain directly via
--domain - Company Name Resolution (optional): If only
--companyis provided, the script searches Google Ads Transparency Center using Apify's web-scraper (Puppeteer) to resolve the company name to advertiser info - Ad Scraping: Calls the Apify
burbn/google-ads-searchactor with{"domain": "...", "maxResults": N} - Output: Returns ads as JSON or human-readable summary
Input contract: maxResults is the actor’s documented limit field (official schema). This fallback remains temporary research; it does not create a saved GooseWorks ad-library source. Prefer the confirmed durable Google workflow in competitor-ad-intelligence when saving is requested.
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
--domainfor best results. - Ad coverage: Google only shows ads from verified advertisers. Some smaller advertisers may not appear.
- Historical data: Primarily shows recently active ads.