CtrlK
BlogDocsLog inGet started
Tessl Logo

meta-ad-scraper

Scrape competitor ads from Meta's Ad Library (Facebook, Instagram, Messenger, Threads, WhatsApp). Search by company name, Facebook Page URL, or keyword. Returns ad creatives, spend estimates, reach, impressions, and campaign details. Use for competitive ad research, messaging analysis, and creative inspiration.

69

Quality

87%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

78%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A highly actionable, well-structured body with verified executable commands and an accurate CLI reference. Its two real weaknesses are a broken reference to a nonexistent references/apify-config.md and the absence of any error-recovery guidance (timeouts, empty results, failed Apify runs).

Suggestions

Create references/apify-config.md (or remove the "See references/apify-config.md" line in the Configuration section) — the referenced file does not exist in the bundle.

Add brief error-handling guidance for the polling step: what to do on timeout, a failed Apify run, or zero results (e.g., retry with a larger --timeout, verify the company name or use --page-url).

Trim low-value lines like "No need to manually find Page IDs. The Apify actor resolves the search internally" and the "Compare Multiple Competitors" workflow, which merely says to run the script multiple times.

DimensionReasoningScore

Conciseness

The body is efficient — a CLI table, copy-paste commands, and a sample output object with no explanation of concepts Claude already knows. Small trims are available: "No need to manually find Page IDs. The Apify actor resolves the search internally" and the "Compare Multiple Competitors" workflow ("Run the script multiple times... and compare") add little. It is not quite the every-token-earns-its-place level of the 5 anchor.

4 / 5

Actionability

Fully executable, copy-paste-ready commands covering the common cases (company, country filter, page URL, status, output format, max-ads), a complete flag table whose defaults and choices match the actual argparse definitions in scripts/search_meta_ads.py, prerequisites (token env var, pip install), cost, and a concrete output-field schema.

5 / 5

Workflow Clarity

"How It Works" gives a clear five-step sequence (input → construct Ad Library URL → call actor → poll → fetch and parse), and the read-only nature of the operation means destructive-operation validation caps don't apply. Minor gaps: no guidance on what to do when a run times out, returns zero ads, or fails, so it sits below the explicit-feedback-loop anchor at 5.

4 / 5

Progressive Disclosure

Sections are well organized and the script path (scripts/search_meta_ads.py) is real, but the only external reference — "See `references/apify-config.md` for detailed API configuration, token setup, and rate limits" — is a dangling pointer: no references/ directory or apify-config.md exists in the bundle. A broken reference is more than the "minor organization gaps" of the 4 anchor, while the overall structure is clearly better than the buried/misplaced-content pattern of the 3 anchor's lower neighbors, so 3 is the best fit.

3 / 5

Total

16

/

20

Passed

Description

92%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: concrete capabilities, enumerated data fields, explicit search modes, and a clear "Use for..." trigger clause in third person. The only minor gap is a few missing natural synonyms a user might say when looking for ad intelligence.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions — "Scrape competitor ads", "Search by company name, Facebook Page URL, or keyword", and specific returned data ("ad creatives, spend estimates, reach, impressions, and campaign details") — with comprehensive coverage of the skill's capability surface.

5 / 5

Completeness

It explicitly answers both: what ("Scrape competitor ads from Meta's Ad Library... Returns ad creatives, spend estimates, reach, impressions, and campaign details") and when ("Use for competitive ad research, messaging analysis, and creative inspiration"), matching the anchor's requirement for a clear what plus explicit trigger guidance.

5 / 5

Trigger Term Quality

Good natural-term coverage: "competitor ads", "Meta's Ad Library", "Facebook", "Instagram", "company name", "competitive ad research", "creative inspiration" — terms users would actually say. A few plausible phrasings (e.g., "ad spy", "Facebook ads library") are absent, keeping it just below the comprehensive-synonyms anchor.

4 / 5

Distinctiveness Conflict Risk

A clear niche — scraping Meta's Ad Library via a specific actor — with distinct triggers (competitor ad research, messaging analysis) that would not plausibly fire a generic document or data skill.

5 / 5

Total

19

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

referenced_paths_exist

Referenced path issues: 1 missing

Warning

Total

15

/

16

Passed

Repository
gooseworks-ai/goose-skills
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.