Meta Ad Scraper
Pulls competitor ads from Meta Ad Library via an Apify actor; needs a paid 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 · a4495ab
Cloned the repo into a throwaway HOME=$(mktemp -d) and confirmed the copy lands SKILL.md at ~/.claude/skills/meta-ad-scraper/SKILL.md; frontmatter has name+description, and the CLI reference table in the body matches argparse exactly (flags and defaults: --country ALL, --ad-status active, --max-ads 50, --output json, --timeout 300). Of the files the body references, scripts/search_meta_ads.py returns HTTP 200 but references/apify-config.md returns HTTP 404 (the directory does not exist in the tree), and the example commands use the path skills/meta-ad-scraper/scripts/... which matches neither the repo layout nor the installed layout. I imported the module and ran build_ad_library_url directly: --company "Notion" --country US produced https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=Notion&search_type=keyword_unordered (correct), but --page-url "https://www.facebook.com/nike" produced view_all_page_id=nike — that parameter takes a numeric Page ID, so the "no need to manually find Page IDs" claim looks wrong for vanity URLs. With no token the script exits 1 with a clear message; with a deliberately invalid token it reached api.apify.com and died on an unhandled requests.exceptions.HTTPError 401 traceback rather than a friendly error. I could not execute the actual scrape (no paid APIFY_API_TOKEN), so no baseline-vs-skill artifact pair exists and outputMeasured is false; separately, the documented snake_case "Output Fields" schema (spend_lower, impressions_lower, etc.) is not produced by the code — json output is a raw json.dumps of the Apify dataset with no parsing, and format_summary itself falls back to camelCase keys. Security scan found no curl|sh, base64 blobs, subprocess/eval, hardcoded machine paths, or injection text; one undocumented data-flow: setting GOOSEWORKS_API_KEY silently reroutes all requests through api.gooseworks.ai.
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 3/10
- Docs & honesty 2/5
What Meta Ad Scraper does
Wraps the Apify `apify/facebook-ads-scraper` actor in a Python CLI that builds a Meta Ad Library search URL from a company name, keyword, or Facebook Page URL, runs the actor, polls it, and prints the resulting ads as JSON or a table. Triggers when you ask what ads a competitor is currently running on Facebook or Instagram, or ask to scrape the Meta Ad Library for a brand or keyword. Requires an Apify account and APIFY_API_TOKEN (or a Gooseworks key); the scrape itself is billed per ad on Apify.
How to install Meta Ad Scraper
git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git /tmp/meta-ad-scraper-src
mkdir -p ~/.claude/skills
cp -R /tmp/meta-ad-scraper-src/skills/ads/capabilities/meta-ad-scraper ~/.claude/skills/meta-ad-scraper
# Dependency: pip install requests
# Required credential: export APIFY_API_TOKEN=apify_api_xxx (https://console.apify.com/account/integrations)
# Alternative: export GOOSEWORKS_API_KEY=... — the script then routes calls through https://api.gooseworks.ai/v1/proxy/apify instead of api.apify.com
# Run: python3 ~/.claude/skills/meta-ad-scraper/scripts/search_meta_ads.py --company "Nike" --country US --max-ads 20 --output summary
# Cost: the Apify actor bills per ad scraped (SKILL.md claims ~$5 / 1,000 ads) — unverified, no run was billed during this test
# Marketplace alternative: npx goose-skills install meta-ad-scraper
Skills live in ~/.claude/skills/ (global) or .claude/skills/
(per-project). Restart Claude Code after installing.
Commands — how to trigger Meta Ad Scraper
-
/meta-ad-scraperPulls competitor ads from Meta Ad Library via an Apify actor; needs a paid Apify token
It also activates on plain-language prompts like these:
-
Pull competitor ads from Meta's Ad Library -
Check spend estimates for this brand's Facebook ads -
Find creative inspiration from Instagram ad campaigns
Frequently asked questions
- Is the Meta 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 Meta Ad Scraper work with Claude Code?
- We tested it with Claude Code 2.x (agent harness) on Jul 21, 2026. Verdict: Works with setup. Cloned the repo into a throwaway HOME=$(mktemp -d) and confirmed the copy lands SKILL.md at ~/.claude/skills/meta-ad-scraper/SKILL.md; frontmatter has name+description, and the CLI reference table in the body matches argparse exactly (flags and defaults: --country ALL, --ad-status active, --max-ads 50, --output json, --timeout 300). Of the files the body references, scripts/search_meta_ads.py returns HTTP 200 but references/apify-config.md returns HTTP 404 (the directory does not exist in the tree), and the example commands use the path skills/meta-ad-scraper/scripts/... which matches neither the repo layout nor the installed layout. I imported the module and ran build_ad_library_url directly: --company "Notion" --country US produced https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=Notion&search_type=keyword_unordered (correct), but --page-url "https://www.facebook.com/nike" produced view_all_page_id=nike — that parameter takes a numeric Page ID, so the "no need to manually find Page IDs" claim looks wrong for vanity URLs. With no token the script exits 1 with a clear message; with a deliberately invalid token it reached api.apify.com and died on an unhandled requests.exceptions.HTTPError 401 traceback rather than a friendly error. I could not execute the actual scrape (no paid APIFY_API_TOKEN), so no baseline-vs-skill artifact pair exists and outputMeasured is false; separately, the documented snake_case "Output Fields" schema (spend_lower, impressions_lower, etc.) is not produced by the code — json output is a raw json.dumps of the Apify dataset with no parsing, and format_summary itself falls back to camelCase keys. Security scan found no curl|sh, base64 blobs, subprocess/eval, hardcoded machine paths, or injection text; one undocumented data-flow: setting GOOSEWORKS_API_KEY silently reroutes all requests through api.gooseworks.ai.
- What is the Meta Ad Scraper SkillProof Score?
- 5.6/10 — installs cleanly 4/5, triggers reliably 5/5, output vs. baseline 3/10, docs & honesty 2/5.
- How do I install Meta 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 Meta 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.