/Catalogue/Prompt/gooseworks-ai/gooseworks-ai-goose-skills-google-ad-scraper

Origin: github

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.

by gooseworks-ai · updated 11h ago · imported from GitHub

Installs0+0/7d
Security score100/100
Retention 14d0%
GitHub stars1.2K

Skill logic

Execution graph
User message
Prompt rewrites behaviour
Response

SKILL.md

View 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

FlagDefaultDescription
--domainnoneCompany domain (e.g. hubspot.com) — recommended
--companynoneCompany name (resolved to domain via transparency center)
--max-ads50Maximum number of ads to return
--outputjsonOutput format: json or summary
--tokenenv varApify token (prefer APIFY_API_TOKEN env var)
--timeout300Max 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
advertiserIdGoogle Ads advertiser ID
advertiserNameCompany/advertiser display name
creativeIdUnique ID for the ad creative
originalUrlDestination URL the ad links to
imageUrlURL of the ad image (if applicable)
variantFormatAd format (TEXT, IMAGE, VIDEO, etc.)
variantContentAd copy/text content
variantsArray of ad variants
variantCountNumber of variants for this creative
startDateDate 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.

Discussion

No comments yet — start the thread.

Sign in to join the discussion.

/More from gooseworks-ai/goose-skills

gooseworks-ai· 11h agoCommunity
create-music-elevenlabs

Prompts · Python · v0.1.0

Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades the tail. Prompt + length from the template recipe. Use for the music layer of any video-ad format.

#claude#claude-skills#claudecode

0 1.2K
gooseworks-ai· 11h agoCommunity
render-airdrop-carousel

Prompts · Python · v0.1.0

Assemble a viral iOS "AirDrop" notification-carousel video ad (≈6–8s, 9:16) from a brand line plus 6–16 real product photos — a native AirDrop share-sheet card ("Brand would like to share a ___ · Decline / Accept") springs up and its preview window CYCLES through the products, landing on a range/lineup payoff with an Accept tap; a chime + soft per-swap ticks track the swaps. DETERMINISTIC assembly — an HTML card (real DOM text) rendered to PNG via headless Chrome, chroma-keyed, its magenta window refilled per-product in PIL, then animated + audio-synthed with FFmpeg. FREE (no paid model calls); the recipe supplies the brand line, product images, and payoff and gates the only optional paid step (a hero shot when the brand has NO usable photo → create-image-fal). Use for the airdrop-notification-carousel format.

#claude#claude-skills#claudecode

0 1.2K
gooseworks-ai· 11h agoCommunity
answer-ads-questions

Prompts · Python · v0.1.0

Answer questions about a brand's Meta ads (spend, results, which ad is winning, is it paused, why did Goose do that) only from reads made in the same turn, with the data window and sync time on every number and a plain caveat when the connection is stale or partial. Use it whenever a user asks how their ads are doing or why an ad action was taken.

#claude#claude-skills#claudecode

0 1.2K
gooseworks-ai· 11h agoCommunity
create-image-fal

Prompts · Python · v0.1.0

Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls must be public URLs (orchestrator hosts local product refs via MCP upload->presign). The recipe names the model + prompt. Use for keyframes, flat-cover transforms, product hero edits. (For the OpenAI gpt-image family specifically, create-image-gpt-image-fal also exists.)

#claude#claude-skills#claudecode

0 1.2K