agentsclimarketplace

Nexus for meta

Skill redwoodmeridian/nexus-for-meta/.claude/skills/nexus-for-meta

Query and manage a firm's own Meta marketing assets — Facebook Ads, Pages, Instagram, and Lead forms — through the Graph API. Use whenever the user asks about ad performance, spend, leads, audiences, creatives, best/worst ads, page or Instagram stats, or wants to create/edit/pause campaigns. Talks to graph.facebook.com directly with curl + their access token (no MCP, no SDK).From its SKILL.md

Install
npx -y skills add redwoodmeridian/nexus-for-meta --skill nexus-for-meta

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • reads credentialsReads from 1 credential source: `.env`.
  • 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 8 commands, including `./scripts/meta me "fields=id,name"` and 7 more.

SKILL.md

4.9 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

Nexus for Meta — Recipes

All calls go through ./scripts/meta <path> "<query>". The token is loaded from .env automatically. Base API version is v25.0.

If META_AD_ACCOUNT is set in .env, use it as the default ad account; otherwise discover accounts with the first recipe and ask the user which one.


Discover what you can reach

./scripts/meta me "fields=id,name"
./scripts/meta me/adaccounts "fields=account_id,name,account_status"
./scripts/meta me/accounts "fields=id,name"        # Facebook Pages

Ads — performance

Account overview (last 30 days). Note actions is an array; pull lead, link_click, etc. from it.

./scripts/meta act_ACCOUNT/insights \
  "date_preset=last_30d&fields=spend,impressions,reach,clicks,cpc,cpm,ctr,actions,cost_per_action_type"

Lifetime (use this if last_30d is empty — the account may have no recent spend):

./scripts/meta act_ACCOUNT/insights "date_preset=maximum&fields=spend,impressions,clicks,actions"

Per campaign / ad set / ad — change level:

./scripts/meta act_ACCOUNT/insights \
  "date_preset=last_30d&level=campaign&fields=campaign_name,spend,clicks,ctr,actions&limit=100"
./scripts/meta act_ACCOUNT/insights \
  "date_preset=last_30d&level=ad&fields=ad_id,ad_name,adset_name,spend,clicks,ctr,actions&limit=200"

Cost per lead = spend ÷ the lead value inside actions. Compute it yourself per row; Meta doesn't return it directly.

Structure (names, status, budgets):

./scripts/meta act_ACCOUNT/campaigns "fields=name,status,effective_status&limit=100"
./scripts/meta act_ACCOUNT/adsets "fields=name,status,daily_budget&limit=100"
./scripts/meta act_ACCOUNT/ads "fields=name,status,adset_id&limit=200"

Best ad → viewable link (Instagram preferred)

  1. Rank ads by spend + leads from the level=ad insights call above.
  2. For the winner, pull its creative's links:
./scripts/meta AD_ID "fields=name,creative{id,instagram_permalink_url,effective_object_story_id,object_type,title}"
  1. Give the user instagram_permalink_url (opens on Instagram). If it's absent, build the Facebook post URL from effective_object_story_id ({page-id}_{post-id}https://www.facebook.com/{post-id}), or generate a preview:
./scripts/meta AD_ID/previews "ad_format=INSTAGRAM_STANDARD"

Leads (needs a PAGE token — use --page)

Page-level endpoints reject the user token with error 190. Pass --page PAGE_ID and the script fetches that Page's own token for you:

# 1. find the page
./scripts/meta me/accounts "fields=id,name"
# 2. list lead forms + counts
./scripts/meta --page PAGE_ID PAGE_ID/leadgen_forms "fields=name,status,leads_count&limit=50"
# 3. pull actual leads from a form
./scripts/meta --page PAGE_ID FORM_ID/leads "fields=created_time,field_data&limit=100"

Pages & Instagram

# Page basics
./scripts/meta PAGE_ID "fields=name,fan_count,followers_count,category"
# Page posts (PAGE token — use --page)
./scripts/meta --page PAGE_ID PAGE_ID/posts "fields=message,created_time,permalink_url&limit=10"
# Instagram account linked to the page
./scripts/meta PAGE_ID "fields=instagram_business_account{id,username,followers_count,media_count}"
# Instagram media
./scripts/meta IG_ID/media "fields=caption,like_count,comments_count,permalink,timestamp&limit=20"

Page insights metric names change between API versions — if a metric errors, ask for the current name rather than guessing. The token itself is fine.


Audiences & creatives

./scripts/meta act_ACCOUNT/customaudiences "fields=name,approximate_count,subtype&limit=50"
./scripts/meta act_ACCOUNT/adcreatives "fields=name,object_type,thumbnail_url&limit=50"

Writes — campaigns, ad sets, ads (CONFIRM FIRST)

These spend money or change live delivery. Follow the safety rule in CLAUDE.md: describe the exact action and dollar amounts, get an explicit yes, then run it.

Writes go through the same script with --post. Values are form-encoded, so spaces, commas and braces are safe:

# Example: create a PAUSED campaign (does NOT spend until activated)
./scripts/meta --post act_ACCOUNT/campaigns \
  "name=My Campaign&objective=OUTCOME_LEADS&status=PAUSED&special_ad_categories=[]"

Always create as status=PAUSED first so nothing goes live by accident. Pausing an existing object:

./scripts/meta --post CAMPAIGN_ID "status=PAUSED"

Deleting:

./scripts/meta --delete ADSET_ID

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most marketing audience skills give in ~1.2k tokens

Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07

  • Apply Poppins font to headingsin 41 of 690, across 6 files
  • Apply Lora font to body textin 41 of 690, across 6 files
  • Use Arial fallback for headingsin 39 of 690, across 4 files
  • Use Georgia fallback for body textin 39 of 690, across 4 files
  • Maintain text hierarchy and formattingin 39 of 690, across 4 files
  • Use accent colors for non-text shapesin 38 of 690, across 3 files
  • Use RGB values for precise color matchingin 38 of 690, across 3 files
  • Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
  • Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
  • Use active voice instead of passive voicein 26 of 690, across 10 files
  • Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
  • Prioritize clarity over clevernessin 22 of 690, across 8 files

Said here and by no other author read

  • route all calls through the provided script
  • discover accounts if the default is missing
  • ask the user which account to use
  • compute cost per lead manually
  • use lifetime data if recent data is empty
  • pass the page flag for page-level endpoints

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.