Meta Ad Scraper

Pulls competitor ads from Meta Ad Library via an Apify actor; needs a paid Apify token

Works with setup

Test report

Verdict
Works with setup
Score
5.6/10
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-scraper Pulls 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.