Google Ad Scraper
Pulls a competitor's live Google Ads by domain via an Apify actor; needs an Apify token
Test report
- Verdict
- Works with setup
- Score
- Tested
- Jul 21, 2026
- Environment
- Claude Code 2.x (agent harness)
- Upstream re-checked
- Aug 10, 2026 · 85a821c
Found the skill at skills/ads/capabilities/google-ad-scraper/ (SKILL.md, scripts/search_google_ads.py, skill.meta.json all HTTP 200) and ran the script locally: --help, missing-args and missing-token paths all behave as documented, and format_summary rendered correctly on a mock dataset shaped per the documented schema. I could not run a real scrape (needs APIFY_API_TOKEN plus a paid Apify actor run), so outputMeasured is false; I did verify the baseline alternative is genuinely blocked — curl of adstransparency.google.com returns a 2.5 MB JS bundle where the only "hubspot" hits are the echoed query param, zero creatives. Two concrete defects found by execution, not just reading: stubbing a successful advertiser lookup shows the --company flag can never work, because resolve_advertiser_id returns {advertiser_id, advertiser_name, url} while main() requires result["domain"] and exits 1 ("Could not resolve company name to domain"); and the recommended --output summary table drops variantContent, the ad copy field that the skill's own "messaging analysis" use case depends on. No dangerous patterns (no curl|sh, no base64, no secret exfiltration, no injection text), though the API token is passed as a ?token= URL query param and is sent to api.gooseworks.ai when GOOSEWORKS_API_KEY is set.
Scored on four weighted criteria — install, triggering, output vs. baseline, docs. How scoring works
- Installs cleanly 4/5
- Triggers reliably 5/5
- Output vs. baseline 4/10
- Docs & honesty 3/5
What Google Ad Scraper does
Wraps a Python CLI that calls the Apify `burbn/google-ads-search` actor to fetch the ads a given domain is currently running on Google, returning advertiser ID, creative ID, ad format, ad copy, destination URL and start date as JSON or a table. Triggers when you ask to scrape or look up a competitor's Google Ads, research their ad creatives, or analyze the messaging behind their search and display ads. Requires an APIFY_API_TOKEN (or a Gooseworks API key) and a paid Apify run per domain.
How to install Google Ad Scraper
git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git /tmp/google-ad-scraper-src
mkdir -p ~/.claude/skills
cp -R /tmp/google-ad-scraper-src/skills/ads/capabilities/google-ad-scraper ~/.claude/skills/google-ad-scraper
# pip3 install requests # undeclared dependency, no requirements.txt in the skill
# export APIFY_API_TOKEN=apify_api_... # or GOOSEWORKS_API_KEY=... to route via api.gooseworks.ai
# Run: python3 ~/.claude/skills/google-ad-scraper/scripts/search_google_ads.py \
# --domain hubspot.com --max-ads 30 --output summary
# Note: SKILL.md's examples use skills/google-ad-scraper/scripts/... which matches neither the repo layout nor the install dir.
Skills live in ~/.claude/skills/ (global) or .claude/skills/
(per-project). Restart Claude Code after installing.
Commands — how to trigger Google Ad Scraper
-
/google-ad-scraperPulls a competitor's live Google Ads by domain via an Apify actor; needs an Apify token
It also activates on plain-language prompts like these:
-
Scrape our competitor's Google Ads by domain -
Show me what ad formats this competitor is running -
Research competitor messaging from their Google ads
Frequently asked questions
- Is the Google Ad Scraper skill free?
- Yes. The skill itself is free from gooseworks-ai/goose-skills. SkillProof publishes the install command and an independent test verdict at no cost.
- Does Google Ad Scraper work with Claude Code?
- We tested it with Claude Code 2.x (agent harness) on Jul 21, 2026. Verdict: Works with setup. Found the skill at skills/ads/capabilities/google-ad-scraper/ (SKILL.md, scripts/search_google_ads.py, skill.meta.json all HTTP 200) and ran the script locally: --help, missing-args and missing-token paths all behave as documented, and format_summary rendered correctly on a mock dataset shaped per the documented schema. I could not run a real scrape (needs APIFY_API_TOKEN plus a paid Apify actor run), so outputMeasured is false; I did verify the baseline alternative is genuinely blocked — curl of adstransparency.google.com returns a 2.5 MB JS bundle where the only "hubspot" hits are the echoed query param, zero creatives. Two concrete defects found by execution, not just reading: stubbing a successful advertiser lookup shows the --company flag can never work, because resolve_advertiser_id returns {advertiser_id, advertiser_name, url} while main() requires result["domain"] and exits 1 ("Could not resolve company name to domain"); and the recommended --output summary table drops variantContent, the ad copy field that the skill's own "messaging analysis" use case depends on. No dangerous patterns (no curl|sh, no base64, no secret exfiltration, no injection text), though the API token is passed as a ?token= URL query param and is sent to api.gooseworks.ai when GOOSEWORKS_API_KEY is set.
- What is the Google Ad Scraper SkillProof Score?
- 6.4/10 — installs cleanly 4/5, triggers reliably 5/5, output vs. baseline 4/10, docs & honesty 3/5.
- How do I install Google Ad Scraper?
- Copy the install command from this page, run it in your terminal, and restart Claude Code. Skills live in ~/.claude/skills/ (global) or .claude/skills/ inside a project.
- Can I use Google Ad Scraper with Cursor, Copilot, Gemini CLI, Codex or other AI tools?
- The SKILL.md format is native to Claude (Claude Code, Desktop, claude.ai). The instructions inside adapt to other assistants: Cursor rules, GitHub Copilot instructions, Windsurf rules, Custom GPTs, AGENTS.md for OpenAI Codex, and GEMINI.md for Google Gemini CLI — our conversion guides cover each, and the free converter on the tools page does the wrapping for you.