meta-ads-audiences
Skill0 starsChanged 44 days agoMITView on GitHub
Plan and build Meta (Facebook/Instagram) custom and lookalike audiences: choosing a lookalike's source, country and size, website and engagement audiences, exclusions, and checking an audience before it is used. Use for "build a lookalike", "who should we target", "create an audience from our customers", "exclude existing buyers", or "why is this audience so small".
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Read meta-ads-core first. Its safety policy governs everything here.
- Very specific: line 20
1. Meta's official Ads MCP - the execution layer: Look for tools named ads_* in this session.
- Distinctive: line 84
All website visitors resemble people who visit websites.
- Distinctive: line 162
Read each exclusion audience's size and status too: an empty one is a gap that looks like a guard.
- Very specific: line 168
Every proposed change edits a live ad set's targeting: update_active, one approval per ad set, or the whole list shown first when there are …
- Distinctive: line 185
If any of those is missing, stop and say which.
- Distinctive: line 190
Read back: its size, its status, which ad sets already use it, and for a lookalike its source and percentage.
- Distinctive: line 197
Read Meta's help, or say you have not.
- Distinctive: line 198
Treat approval to create an audience as approval to attach it to a live ad set.
- Distinctive: line 200
Put any member of a customer list anywhere but Meta's upload.
- Distinctive: line 201
Delete an audience without checking which ad sets use it.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audiences
Read meta-ads-core first. Its safety policy governs everything here.
<!-- shared:preflight start - generated from packaging/shared/preflight.md by scripts/sync_skill_blocks.py - edit there -->Preflight: two checks, kept separate
Independent questions; never let one answer stand in for the other.
1. Meta's official Ads MCP - the execution layer. Look for tools named
ads_* in this session. With none, nothing here can reach an account: say so
and help the user connect it - connect-meta-mcp.md under references/ in the
meta-ads-core skill, or
https://github.com/bartlomiejborzucki/meta-ads-agent/blob/master/skills/meta-ads-core/references/connect-meta-mcp.md.
The local CLI does not replace it.
2. The local meta-ads-agent CLI - optional, usually absent. Assume it is
missing until this succeeds:
meta-ads-agent --version"command not found" is the normal answer, not a fault. Show no
meta-ads-agent ... command before that probe has succeeded - a command that
fails at the user's prompt costs more than the step it saves. Say "that step
needs the optional CLI, which is not installed here" and carry on.
The MCP alone covers audits, reporting, Ad Library research, previews,
tracking, creative, optimisation and the changes that follow; .meta-ads/
files can be written directly from the templates in meta-ads-core's
assets/. Only these need the CLI: plan validation (so campaign builds),
local image and video upload, video / existing-post / multi-variant /
carousel creatives, deletion, and the report arithmetic (which has a
by-hand route).
<!-- shared:preflight end -->ads_get_ad_account_custom_audiences → what exists already
ads_get_custom_audience → one audience: size, status, subtype
ads_get_custom_audience_adsets → where it is used - check before changing it
ads_create_custom_audience → website, engagement, lookalike, customer file
ads_update_custom_audience → name, description, rule
ads_update_custom_audience_users → customer-list members: PII, highest risk
ads_get_help_article → Meta's current rules, to quote rather than recallLook before you build
Most accounts already have the audience someone is about to create. List them first, and reuse one that fits: a second copy of the same website audience splits nothing and confuses every later report.
For an audience that exists, read its size and status before relying on it. An audience still populating, or too small to deliver, is a finding - say so before it goes into a plan.
Approval, by what the step changes
| Step | Class | Why |
| Listing, reading, sizing | read | changes nothing |
| Creating a website, engagement or lookalike audience | update_active - explicit approval | no PII and no delivery change by itself, but the capability map classes it here, and it is a new object in their account |
| Attaching an audience to a live ad set, or excluding one | update_active | delivery shifts the moment it is saved |
| Adding people to a customer-list audience | pii_upload | the highest-risk operation on the server - see below |
| Deleting an audience | delete | check ads_get_custom_audience_adsets first: deleting one in use breaks those ad sets |
Lookalikes: the source decides everything
A lookalike is Meta finding people who resemble a source audience. The source is the decision; the rest is settings.
Choose the source by value, not by size. Purchasers resemble purchasers. All website visitors resemble people who visit websites. In order of how much they usually say about a customer:
- Customers by value or repeat purchase, if the user has that list
- Purchasers, from the dataset's purchase events
- Leads that became customers
- Leads
- People who engaged deeply - watched most of a video, saved, messaged
- All website visitors
Recency matters too: last-180-day purchasers describe today's customer better than all-time purchasers.
Size the source. Meta sets a minimum source size and publishes guidance on
what size works well; both have changed over time. Read the current numbers
with ads_get_help_article and quote them with the date, rather than stating
them from memory. A source below the minimum cannot be used; one barely above
it produces a lookalike of a handful of people's quirks.
Country and percentage. A lookalike is built within one or more countries, as a percentage of each country's population. Smaller is closer to the source and smaller in reach; larger is broader and looser. For a first lookalike, the closest band is the usual starting point, widened only when delivery is limited. Say what the choice trades, in those words.
It takes time to populate. A new lookalike is not ready the moment it is created. Check its status before building an ad set on it, and do not activate anything that depends on one still being filled.
What to propose
LOOKALIKE PROPOSAL
Source Purchasers, last 180 days (dataset 1234567890)
4,120 people - above Meta's minimum (help article, read 2026-09-24)
Country PL
Size 1% - closest match, smallest reach
Why Purchasers describe the customer better than visitors, and
180 days describes today's customer better than all-time.
Alternative 3%, if 1% under-delivers after the learning phase.
Creating it needs your approval (it is a new audience in your account).
Attaching it to the live ad set "PL broad 25-55" is a separate approval,
because delivery changes when that is saved.Exclusions
Excluding existing customers from prospecting is usually right and costs nothing to propose. Two checks first:
- The exclusion audience exists and has populated - an empty exclusion excludes nobody, silently.
- The same audience is not also included in that ad set. The validator
refuses an audience that is both (
targeting.audience_included_and_excluded) because it leaves nobody to reach.
Reviewing exclusions across a campaign
For "are my ad sets fighting each other" or "check my exclusions", read every
live ad set's targeting in one ads_get_ad_entities query, then lay out which
custom audiences each includes and excludes:
EXCLUSIONS - campaign "Acme leads Q4", 3 live ad sets
Buyers 180d Site visitors 30d LAL 1% buyers
PL prospecting broad excluded - -
PL lookalike - - included
PL retargeting excluded included -
FACT "PL lookalike" does not exclude Buyers 180d; the other two do.
FACT "Site visitors 30d" is included in retargeting and excluded
nowhere, so prospecting ad sets can reach those visitors too.
QUESTION Exclude Buyers 180d from "PL lookalike"? A lookalike of buyers
reaches some of them.Read each exclusion audience's size and status too: an empty one is a gap that looks like a guard. Meta's MCP has no audience-overlap tool, so do not estimate overlap between two audiences; the overlap view in Ads Manager can measure it. That ad sets with overlapping audiences split delivery between them is a practitioner heuristic - say so.
Every proposed change edits a live ad set's targeting: update_active, one
approval per ad set, or the whole list shown first when there are several
(bulk).
Customer lists: pii_upload
A customer-file audience is built from personal data. Everything in the core
safety policy's pii_upload class applies, without exception:
- explicit instruction from the user, for this list, now;
- a lawful basis the user has stated - their consent records or legitimate interest, not an assumption;
- identifiers hashed before they leave the machine;
- nothing from the list written to a log, a state file, a report, or this conversation;
- the source file never committed.
If any of those is missing, stop and say which. There is no fallback for this path on purpose: one route, maximum scrutiny.
Before an audience is used
Read back: its size, its status, which ad sets already use it, and for a lookalike its source and percentage. Put that in the plan, so the user approves an audience they can see rather than a name.
Never
- Invent a source-size minimum, a population figure, or a "best" percentage. Read Meta's help, or say you have not.
- Treat approval to create an audience as approval to attach it to a live ad set. They are two steps.
- Put any member of a customer list anywhere but Meta's upload.
- Delete an audience without checking which ad sets use it.
Audience sizing and source-quality details: references/lookalike-sources.md.
In this repository11 other files it gives its agents.
- meta-ads-auditSkill
- meta-ads-campaignSkill
- meta-ads-catalogSkill
- meta-ads-coreSkill
- meta-ads-creativeSkill
- meta-ads-experimentsSkill
- meta-ads-optimizeSkill
- meta-ads-previewSkill
- meta-ads-reportSkill
- meta-ads-researchSkill
- meta-ads-trackingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

