# Meta Ads — full corpus # LLM Wiki An open-source template for building LLM-powered knowledge bases, following [Andrej Karpathy's "LLM Wiki" pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f). You provide raw sources. The LLM reads them, writes structured wiki pages, cross-links everything, and maintains it over time. You never edit the wiki directly — you curate sources and ask questions. ## How It Works The system has three layers: ``` raw/ Sources you collect (articles, transcripts, notes, PDFs) wiki/ LLM-written & maintained pages (summaries, concepts, entities, syntheses) CLAUDE.md Schema that tells the LLM how to structure everything ``` Three operations drive the workflow: | Operation | Trigger | What happens | |-----------|---------|--------------| | **Ingest** | "ingest raw/my-source.txt" | LLM reads the source, creates a summary page, creates/updates concept and entity pages, adds cross-links, updates the index and log | | **Query** | Ask any question | LLM searches the wiki, synthesizes an answer with citations, optionally creates a synthesis page for novel insights | | **Lint** | "lint" or "health check" | LLM audits all pages for orphans, contradictions, missing links, incomplete sections, and low-confidence claims — fixes what it can, reports the rest | ## Quick Start 1. **Clone this repo** ```bash git clone https://github.com/YOUR_USERNAME/llm-wiki.git my-knowledge-base cd my-knowledge-base ``` 2. **Customize CLAUDE.md** for your domain - Update the Purpose section with your topic - Replace the placeholder tagging taxonomy with your own categories - Adjust confidence level descriptions if needed - Everything else (workflows, page formats, linking rules) works as-is 3. **Drop sources into `raw/`** - Text files, transcripts, articles, notes — any plain text - These are immutable once added; the LLM never modifies them 4. **Tell the LLM to ingest** ``` ingest raw/my-first-source.txt ``` The LLM will create summary pages, concept pages, entity pages, cross-links, and update the index. 5. **Ask questions** ``` What are the key differences between X and Y? ``` The LLM answers from the wiki, citing specific pages. 6. **Run health checks** ``` lint ``` The LLM audits the wiki and fixes issues. ## Directory Structure ``` . ├── CLAUDE.md # Schema — the LLM's instructions ├── raw/ # Your source documents (immutable) └── wiki/ ├── index.md # Master catalog of all pages ├── log.md # Append-only activity log ├── dashboard.md # Dataview dashboard (Obsidian) ├── analytics.md # Charts View analytics (Obsidian) ├── flashcards.md # Spaced repetition cards ├── summaries/ # One page per source document ├── concepts/ # Concept and framework pages ├── entities/ # People, tools, organizations, etc. ├── syntheses/ # Cross-cutting analyses and comparisons ├── journal/ # Research/session journal entries │ └── template.md # Journal entry template └── presentations/ # Marp slide decks ``` ## Enhancements This template includes several extras beyond the core wiki pattern: ### Dataview Dashboard (`wiki/dashboard.md`) Live queries that surface low-confidence pages, recent updates, concepts by tag, and pages with the most sources. Requires the [Dataview](https://github.com/blacksmithgu/obsidian-dataview) Obsidian plugin. ### Charts View Analytics (`wiki/analytics.md`) Visual analytics with pie charts, bar charts, and word clouds. Requires the [Charts View](https://github.com/caronchen/obsidian-chartsview-plugin) Obsidian plugin. ### Mermaid Diagrams Use Mermaid code blocks in any wiki page to create flowcharts, sequence diagrams, or concept maps. Native support in Obsidian and GitHub. ### Marp Slides (`wiki/presentations/`) Create slide decks from markdown using [Marp](https://marp.app/). Drop presentation files in this directory. ### Research Journal (`wiki/journal/`) Track your research sessions, experiments, or applied work with the included template. The LLM can reference journal entries when answering queries. ### Spaced Repetition (`wiki/flashcards.md`) Flashcards in the format used by the [Spaced Repetition](https://github.com/st3v3nmw/obsidian-spaced-repetition) Obsidian plugin. Ask the LLM to generate flashcards from any wiki page. ### MCP Server This repo works with Claude Code's MCP server capabilities. Point an MCP-compatible client at this repo and the LLM can read/write the wiki programmatically. ## Customizing for Your Domain The schema in `CLAUDE.md` is domain-agnostic. To adapt it: 1. **Purpose** — Describe your knowledge domain in one paragraph 2. **Tagging taxonomy** — Replace placeholder categories with your own (e.g., for a cooking KB: `cuisine`, `technique`, `ingredient`, `equipment`) 3. **Confidence levels** — Adjust the descriptions to match your domain's evidence standards 4. **Entity types** — Update the entity page description to match what entities mean in your domain (people, tools, companies, etc.) 5. **Journal template** — Customize `wiki/journal/template.md` for your workflow Everything else — page format, linking conventions, workflows, rules — is universal and works across domains. ## Example Domains This template works for any knowledge-intensive topic: - **Research notes** — papers, experiments, methodologies - **Book analysis** — themes, characters, author techniques - **Competitive analysis** — companies, products, market trends - **Course notes** — lectures, readings, key concepts - **Personal development** — frameworks, habits, book summaries - **Technical documentation** — APIs, architectures, design patterns - **Hobby deep-dives** — any subject you want to master ## License MIT --- title: "Meta Ads KB — Master Index" type: index updated: 2026-06-11 marketing_api_version: "v25.0" --- # Meta Ads KB — Master Index Master catalog of all wiki pages. Every page in the wiki must have an entry here. **Freshness:** all sources fetched 2026-06-11; official semantics verified against Marketing API v25.0 **KB pages:** 24 (12 concepts + 4 entities + 2 summaries + 4 syntheses + 2 system) ## Concepts (12) ### Structure & delivery - [[concepts/campaign-structure]] — campaign/ad set/ad, the 6 ODAX objectives, buying types - [[concepts/budgets-bidding]] — the auction, bid strategies, CBO/ABO, pacing - [[concepts/audiences]] — core/custom/website/lookalike/dynamic audiences, targeting specs - [[concepts/advantage-targeting]] — Advantage+ audience and targeting expansion semantics - [[concepts/special-ad-categories]] — housing/employment/credit/SIEP restrictions ### Measurement - [[concepts/meta-pixel]] — base code, the 17 standard events, conversion tracking - [[concepts/conversions-api]] — CAPI, server events, dedup, offline events - [[concepts/attribution-reporting]] — attribution windows, insights/breakdowns, the learning phase ### Creative, automation & policy - [[concepts/creative-formats]] — creative objects, asset feed spec, Advantage+ creative, gen-AI features - [[concepts/advantage-plus-campaigns]] — ASC and the Advantage+ campaign experience - [[concepts/ad-policies]] — the Advertising Standards: review, enforcement, prohibited/restricted categories - [[concepts/account-issues]] — rejected ads, disabled accounts, appeals (highest-demand page) ## Entities (4) - [[entities/instagram-ads]] — Instagram formats, placements, carousel specifics - [[entities/placements-catalog]] — CATALOG: the full placement space with constraints - [[entities/policy-catalog]] — CATALOG: the complete ad-standards policy tree (~45 policies) - [[entities/marketing-api]] — the Marketing API as an entity: object model, limits, who needs it ## Summaries (2) - [[summaries/community-field-notes]] — attributed practitioner findings (CBO/ABO data, learning-phase math, 2026 attribution shifts) - [[summaries/odax-migration]] — the official objective-consolidation migration, old → new mapping ## Syntheses (4) - [[syntheses/objective-picker]] — 6 objectives compared → pick by business goal, incl. when ASC replaces manual sales - [[syntheses/budget-bid-recipes]] — CBO/ABO + bid-strategy ladder + learning-phase-aware sizing - [[syntheses/pixel-capi-setup]] — the ordered measurement recipe with dedup, verbatim parameters - [[syntheses/rejection-account-triage]] — rejected vs restricted vs disabled: causes, appeal routes, what NOT to do ## Gaps / TODO - **Business Help Center is bot-walled** — Ads Manager UI walkthroughs, Account Quality appeal flow, official per-placement ad specs, billing disputes are covered community-only or declared out of scope; revisit if a fetchable official source appears. - Madgicx rejection article captured without body — excluded from citations. - 2026 attribution changes (view-through removal) rest on single community sources — corroborate next pass. - Meta ships continuous unversioned changes — re-fetch and re-verify each maintenance pass; bump `marketing_api_version` when the API rolls. ## Statistics - **Total pages**: 24 - **Concepts**: 12 - **Entities**: 4 - **Summaries**: 2 - **Syntheses**: 4 --- title: "Account Issues: Rejected Ads & Restricted Accounts" type: concept tags: [troubleshooting, ad-review, account-quality, appeals, rejections, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: medium sources: ["raw/web_community-facebook-ads-rejected-here-s-what-to-do-social-media-examine.md", "raw/web_community-facebook-ad-account-disabled-appeal-step-by-step-guide-2026.md", "raw/web_community-leadenforce-how-to-get-your-disabled-facebook-ad-account-bac.md", "raw/web_community-manage-your-ad-object-s-status.md", "raw/web_community-introduction-to-the-advertising-standards-transparency-cente.md"] --- # Account Issues: Rejected Ads & Restricted Accounts ## Definition Account issues are the enforcement outcomes advertisers actually experience: an individual **rejected (disapproved) ad**, a **restricted or disabled ad account**, or restrictions on a Page, user account, or whole Business Account. Officially, both ad rejections and asset restrictions can be appealed via **Account Quality** (business.facebook.com/business-support-home); in practice, recovery is part process, part persistence. Confidence is medium: this page leans on attributed community guides because Meta's official Account Quality / Business Help Center flow docs are bot-walled and not in raw/ (declared gap). ## How It Works **Rejection.** Every ad passes automated (sometimes manual) review before delivery and can be re-reviewed at any time — see [[concepts/ad-policies]]. A rejected ad shows the (often generic, sometimes wrong) reason at the ad level in Ads Manager. In the API, troubled objects surface as `WITH_ISSUES` in the ad object `status`/`effective_status` lifecycle (`ACTIVE`, `PAUSED`, `PENDING_REVIEW`, `CREDIT_CARD_NEEDED`, `PREAPPROVED`, `DISABLED`, `PENDING_PROCESS`, `WITH_ISSUES`, plus `ARCHIVED`/`DELETED`); a campaign set to `with_issues`/`paused`/`archived`/`deleted` cascades that status to its children, while a single problem ad does *not* drag down its ad set. **Account disablement.** Meta may disable the entire ad account rather than one ad. Top community-documented causes (Cropink, attributed): (1) policy-violating content (shocking/violent, adult, copyright, profanity, misleading claims/clickbait pricing); (2) repeatedly deleting or heavily editing already-approved ads (reads as review evasion); (3) unpaid balances (easiest fix — settle the balance and delivery resumes); (4) unusual activity — suspicious logins, repeated payment failures, sudden dramatic spend increases, multiple accounts running identical ads; (5) enforcement evasion — new accounts after a restriction, recycling violating ads across accounts, "tag-teaming" via colleagues' accounts. **Appeals.** - *Rejected ad*: ad level → **Edit** → **Request Review** button; or Business Help (business.facebook.com/business/help) chat/email with your **Business account ID** and the **ad ID**, plus a clear argument for compliance. Track progress in the Support Inbox (facebook.com/support); follow up after a couple of days (Social Media Examiner, attributed). - *Disabled account*: Ads Manager → "?" help icon → **Contact support** (keep the message under 1,000 characters), or business-support-home → **Account status overview** → select the restricted account → "What you can do" → **Request review**. Reviews typically take ~48 hours; complex cases run weeks (Cropink). - LeadEnforce (attributed) adds: the first "final decision" rejection letter is often automated — politely re-contact support, ideally from another ad account in the Business Manager with good standing; never resubmit the same ads unchanged. ## Key Parameters - **180 days**: appeal window for disabled accounts; after that, permanent (Cropink). - **Limited review requests**: you get a small number of restriction reviews and once an appeal is decided, "the decision is final" — make each one count with error messages, exact steps taken, account ID/ad ID, and concrete evidence. - **~48 hours**: typical account review turnaround; ~24 hours for initial ad review. - **28 days**: a deleted ad may still accrue tracked impressions/clicks/actions after last delivery — delete ads only 28+ days after final delivery if reporting consistency matters; archived objects cap at 100,000 each for campaigns/ad sets/ads. ## When To Use - **Ad rejected**: first check whether the stated reason is plainly wrong (instant dispute) vs. plausibly right. The single most common cause is **personal attributes** copy — "Meet other Buddhists" (implies the viewer is Buddhist) fails where "Meet Buddhists near you" passes. Workaround: testimonials/stories that describe the customer without addressing the viewer's traits. Edit-and-resubmit re-enters review as a new ad; deleting disapproved ads is optional hygiene. - **Account disabled**: check business-support-home for strikes; if no violation is apparent, gather evidence (exact ad creative copy, ad IDs, targeting, landing page, special ad categories, advertiser permissions) before burning an appeal. - **Prevention**: keep payment methods current; scale spend gradually rather than in spikes; keep landing pages as compliant as the ads; pre-flight sensitive verticals against [[entities/policy-catalog]]; and never create replacement accounts while restricted — that converts a recoverable situation into an evasion case. - Full decision flow: [[syntheses/rejection-account-triage]]. ## Risks & Pitfalls - **Burning appeals**: low-effort appeals waste a capped resource. Draft like a compliance memo, not a complaint. - **Evasion spiral**: spinning up a new account after disablement is itself a violation ([[concepts/ad-policies]]) and tends to get the new account flagged faster. - **Wrong rejection reasons happen** — Meta's own stated reason can be incorrect (e.g., a false cryptocurrency flag); don't "fix" a violation you didn't commit, dispute it. - **Survivorship advice**: community recovery stories (LeadEnforce's "contact them again and again") reflect outcomes that worked, not guarantees; accounts sometimes never come back. - **Reporting drift after cleanup**: ad-set insights include deleted children, but `level=ad` listings exclude them — sums won't match if you delete ads early (`/insights` vs. `effective_status` filter behavior). - Official-source gap: appeal UIs change frequently; the flows above were verified by community authors in 2026 but Meta's own Account Quality docs could not be captured. ## Related Concepts - [[concepts/ad-policies]] — what review checks and why ads/accounts get flagged - [[entities/policy-catalog]] — locate the specific policy behind a rejection - [[syntheses/rejection-account-triage]] — step-by-step triage decision guide - [[concepts/special-ad-categories]] — mis-declared categories as a rejection cause - [[entities/marketing-api]] — `status`/`effective_status` management via API ## Sources Official: Marketing API "Manage Your Ad Object's Status" (status enums, archive/delete semantics); Advertising Standards Introduction (review process, Account Quality appeal path). Community (attributed): Social Media Examiner / Andrea Vahl (rejection triage, personal attributes), Cropink (disabled-account causes, appeal steps, 180-day window), LeadEnforce (appeal persistence tactics). Note: the Madgicx "Why Your Facebook Ad Was Rejected" capture in raw/ contains no article body (JS-walled) and was not used; Meta's Business Help Center / Account Quality docs are bot-walled — both are declared gaps. --- title: "Ad Policies (Advertising Standards)" type: concept tags: [policy, compliance, ad-review, restricted-categories, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-introduction-to-the-advertising-standards-transparency-cente.md", "raw/web_community-unacceptable-business-practices-transparency-center.md", "raw/web_community-fraud-scams-and-deceptive-practices-transparency-center.md", "raw/web_community-discriminatory-practices-transparency-center.md", "raw/web_community-financial-and-insurance-products-and-services-transparency-c.md", "raw/web_community-ads-about-social-issues-elections-or-politics-transparency-c.md"] --- # Ad Policies (Advertising Standards) ## Definition Meta's **Advertising Standards** (transparency.meta.com) define what ad content is allowed, what is prohibited, and what advertiser behavior triggers restrictions on a Business Account or its assets (ad accounts, Pages, user accounts). Every ad placed is reviewed against these policies, on top of the platform-wide Community Standards. Mistaken rejections and restrictions can be appealed in **Account Quality**. ## How It Works **Review process.** The ad review system is primarily automated (with some manual review), starts automatically before ads run, and typically completes within 24 hours (status: "In review"). Review covers the ad's components — images, video, text, targeting information — *and* the landing page or other destination. Ads remain subject to **re-review at any time**, including after going live. Lower-quality ads that don't violate policy may simply see degraded performance. **Enforcement levels.** A violation gets the ad rejected; patterns of violation, misrepresentation signals, suspicious or inauthentic behavior can restrict the Business Account or its assets — a restricted asset can't advertise across Meta technologies (though other users on the account may still be able to). Advertisers in scam-prone categories may be required to complete extra verification. If rejected or restricted: edit the ad / create a new one (re-enters review as a new ad), or **request a review of the decision in Account Quality** — see [[concepts/account-issues]]. **Policy principles**: protecting people from unsafe and discriminatory practices; protecting people from fraud or scams; promoting positive user experiences; promoting transparency (Ad Library; SIEP ads stored 7 years). ## Key Parameters The standards organize into families (full map: [[entities/policy-catalog]]). The highest-traffic ones for practitioners: **Prohibited — Unacceptable Business Practices** (under Fraud, Scams and Deceptive Practices): ads must not promote "products, services, schemes or offers using identified deceptive or misleading practices, including those meant to scam people out of money or personal information." Specifically banned: deceptive/exaggerated success or health-benefit claims, celebrity-bait imagery, misrepresenting an entity/industry association/news outlet to promise financial benefits. Common violation areas: investment/banking opportunities, health or weight loss, fake "free" offers, nonexistent product functionality. **Prohibited — Fraud, Scams and Deceptive Practices** (ads addendum to the Community Standard): no claims to cure/heal/eliminate the exhaustive incurable-disease list (Diabetes, Herpes, Thyroid, Psoriasis, Ebola, Cancer, Autism, Alzheimer's, Parkinson's, ALS, HIV); no promised health results in a specific time without disclaimers; no health click-bait. **Prohibited — Discriminatory Practices**: ads must not discriminate or encourage discrimination based on personal attributes (race, ethnicity, color, national origin, religion, age, sex, sexual orientation, gender identity, family status, disability, medical or genetic condition) — neither via content nor via audience-selection tools (wrongful targeting *or* exclusion). US/Canada/parts-of-Europe advertisers running **financial products and services, housing or employment ads** must self-identify a Special Ad Category with approved targeting — see [[concepts/special-ad-categories]]. **Restricted — Financial and Insurance Products and Services**: credit cards, loans, insurance must target 18+, carry legally required disclosures, and never directly request personally identifiable or financial information. Prohibited products: Payday Loans, Paycheck Advances, Bail Bonds, Short-term Loans (≤90 days), misleading student-loan consolidation/forgiveness offers, Binary Options, Contract for Difference trading, Initial Coin Offerings, Penny Auctions. Licensing/authorization may be required per target country; US-targeted investment ads can't push users into direct-message interaction. Exempt without authorization: bank/insurer brand ads, news articles, financial education, mere mentions without a path to obtain the product. Cryptocurrency trading platforms need prior written permission. **Restricted — Ads about Social Issues, Elections or Politics (SIEP)**: requires Meta's authorization process (per designated country) and a verified **"Paid for by"** disclaimer; ads run without a required disclaimer are disapproved and archived in the Ad Library (7 years). SIEP ads are **not allowed in the European Union**, banned for Washington-state elections/Seattle legislation, and in US/BR/IN/IL/MX/UK must not discourage voting or delegitimize elections. Advertisers must self-disclose photorealistic genAI media (fake depictions of real people/events); from June 1, 2026 Meta also auto-detects third-party genAI media and applies an "AI Info" label. API side: `special_ad_categories` on the campaign plus `authorization_category` on the creative — see [[concepts/creative-formats]]. Other notable rules: lead ads can't request account numbers, criminal history, financial info, government IDs, health, insurance, political affiliation, race/ethnicity, religion, sexual orientation, trade-union status, or usernames/passwords without prior written permission; ads must not assert or imply personal attributes; all ad components must be relevant and match the landing page; branded content must use the branded content tool; EU DSA requires accurate **Beneficiary** and **Payor** fields. ## When To Use Consult this page (and [[entities/policy-catalog]]) when: pre-flighting creative in sensitive verticals (health, finance, dating, gambling, crypto, addiction treatment — the last requires LegitScript certification for US targeting); diagnosing a rejection ([[syntheses/rejection-account-triage]]); planning lead-ad forms; entering regulated geographies; or deciding whether a campaign needs SIEP authorization or a Special Ad Category declaration. ## Risks & Pitfalls - **Landing pages count.** Compliant creative with a non-compliant or mismatched destination still fails review. - **Live ads aren't safe.** Re-review can reject a running ad at any time; policies "are subject to change at any time without notice," and Meta "reserves the right to reject, approve or remove any ad for any reason, in our sole discretion." - **Behavior, not just content**: account-level restrictions stem from Account Integrity, Inauthentic Behavior, Cybersecurity, and Spam standards — circumventing enforcement (e.g., new accounts to evade restrictions) is itself a violation. - **Agency hygiene**: each client must run in a separate ad account; never repurpose an established ad account for a new advertiser. - **Data use restrictions**: Meta advertising data may only be used aggregate/anonymous for performance assessment — no profile building, no transfer to ad networks/data brokers. - Personal-attribute *implications* ("Are you diabetic?") violate Privacy Violations and Personal Attributes even when well-intentioned — the most common rejection trap in health/finance copy. ## Related Concepts - [[entities/policy-catalog]] — full category tree with doc paths - [[concepts/account-issues]] — rejections, restrictions, and the appeal path in practice - [[concepts/special-ad-categories]] — housing/employment/credit (and SIEP) targeting limits - [[syntheses/rejection-account-triage]] — decision guide when something gets flagged - [[concepts/creative-formats]] — `authorization_category` and creative-level flags ## Sources Official transparency.meta.com Advertising Standards: Introduction, Unacceptable Business Practices, Fraud Scams and Deceptive Practices, Discriminatory Practices, Financial and Insurance Products and Services, Ads about Social Issues Elections or Politics. Business Help Center process docs (editing steps, authorization flows) are referenced but not captured — declared gap. --- title: "Advantage+ Campaigns" type: concept tags: [advantage-plus, automation, shopping, sales, campaigns, advanced] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-advantage-shopping-campaigns.md", "raw/web_community-advantage-campaign-experience-for-sales-app-and-leads.md", "raw/web_community-the-ultimate-guide-to-meta-advantage-shopping-campaigns-ai-p.md", "raw/web_community-understanding-meta-s-advantage-sales-campaigns-2026-guide.md"] --- # Advantage+ Campaigns ## Definition Advantage+ campaigns are Meta's end-to-end automated campaign type: AI handles targeting, placements, budget allocation, and creative combination testing, while the advertiser supplies the conversion signal, geography, budget, and creative assets. **Advantage+ shopping campaigns (ASC)** were the original ecommerce version; they are being superseded by the unified **Advantage+ campaign experience** for Sales, App, and Leads, where "Advantage+ On" is a *state* a campaign earns by enabling three automation levers rather than a separate campaign type. ## How It Works **Legacy ASC (pre-v25.0 API).** Created with `objective=OUTCOME_SALES` and `smart_promotion_type=AUTOMATED_SHOPPING_ADS`; only `buying_type=AUCTION`. Exactly **one ad set per campaign**, targeting restricted to `geo_locations` (countries/regions) only. The ad set's `promoted_object` carries `pixel_id` + `custom_event_type` (`PURCHASE` for Website/Shop conversion locations; `OFFSITE_CONVERSIONS` optimization supports `ADD_TO_CART`, `INITIATED_CHECKOUT`, `LEAD`-style events, custom conversions, etc.). `billing_event=IMPRESSIONS` is the only supported billing event. Bid strategies: `LOWEST_COST_WITHOUT_CAP` (default), `COST_CAP` (requires `bid_amount`), `LOWEST_COST_WITH_MIN_ROAS` (requires `roas_average_floor` in `bid_constraints`, range 100–10000000); `optimization_goal=VALUE` requires `PURCHASE`. ASC replaces a portfolio of manual campaigns, testing up to **150 creative combinations** (vs. ~50 manual) with budget liquidity inside one campaign. Optional: define `existing_customers` (custom audience IDs at account level) and cap spend on them via `existing_customer_budget_percentage` (0–100); ad account `account_controls` set `age_min` (18–25), geo exclusions, and placement exclusions (Audience Network, Marketplace, Right Column) account-wide. **New Advantage+ campaign experience (v24.0+/v25.0).** From v25.0, `smart_promotion_type=AUTOMATED_SHOPPING_ADS` (and `SMART_APP_PROMOTION`) can no longer create campaigns. Instead a normal campaign earns `advantage_state` ≠ `DISABLED` by meeting three criteria, readable via `advantage_state_info`: 1. **Advantage+ placements** (`advantage_placement_state`): no placement targeting or exclusions on any ad set (account-level exclusions are fine). This is the API default. 2. **Advantage+ campaign budget** (`advantage_budget_state`): budget at the *campaign* level with a supported bid strategy (`LOWEST_COST_WITHOUT_CAP` recommended; `COST_CAP`, `LOWEST_COST_WITH_BID_CAP`, `LOWEST_COST_WITH_MIN_ROAS`). 3. **Advantage+ audience** (`advantage_audience_state`): at least one ad set with `"targeting_automation": {"advantage_audience": 1}`, or nothing beyond `geo_locations`, or relaxed targeting (age ≤25/suggestion, gender as suggestion, Advantage custom audience) — see [[concepts/advantage-targeting]]. With all three `ENABLED`, `advantage_state` becomes `ADVANTAGE_PLUS_SALES` (`OUTCOME_SALES`), `ADVANTAGE_PLUS_APP` (`APP_PROMOTION`), or `ADVANTAGE_PLUS_LEADS` (`OUTCOME_LEADS`), and `smart_promotion_type` reads `GUIDED_CREATION`. You cannot POST `advantage_state` directly. Unlike ASC, the new structure allows **multiple ad sets** (max 150 ads per campaign, 50 per ad set) and more conversion locations. **Migration.** `POST /copies?migrate_to_advantage_plus=true` (copy + migrate) or `POST ?migrate_to_advantage_plus=true` (in place; AAC is migrate-only). Migration **forces the campaign back into the learning stage** — no workaround. Campaigns using `existing_customer_budget_percentage` can only migrate via Ads Manager ("Duplicate Campaign"); that field is gone for new campaigns — replicate it with two ad sets (one including the existing-customer custom audience with `targeting_relaxation_types: {"custom_audience": 0}` plus `daily_spend_cap`, one excluding it via `excluded_custom_audiences`). Legacy ASC/AAC become read-only at v25.0 (edit exceptions exist) and fully blocked, with `existing_customer_budget_percentage` campaigns paused, at v26.0. ## Key Parameters - Campaign: `objective` (`OUTCOME_SALES` / `APP_PROMOTION` / `OUTCOME_LEADS`), `special_ad_categories` (required, even if `[]`), `advantage_state_info` (read-only). - Ad set: `promoted_object` (`pixel_id`, `custom_event_type`; `omnichannel_object` for Website+App or `destination_type=SHOP_AUTOMATIC` for Shops), `daily_budget`/`lifetime_budget` (+`end_time`), `optimization_goal` (`OFFSITE_CONVERSIONS` or `VALUE`), `bid_strategy`, `targeting.geo_locations`, `targeting_automation.advantage_audience`. - Reporting: `user_segment_key` breakdown splits new vs. existing customers — see [[concepts/attribution-reporting]]. ## When To Use Practitioner guidance (Marpipe, Bïrch — attributed): - **Use Advantage+ when** you have conversion volume (~50+/week), broad product appeal, multiple strong creatives, and budget for AI learning; you want scale with minimal management; your funnel already converts. Media buyers quoted by Bïrch run ASC for high-volume mid-funnel sales while keeping manual campaigns for niche retargeting, new-market tests, and message testing. - **Stay manual when** you need full control of targeting/placements/budget, serve hyper-niche audiences, or need transparency into every decision. - **Setup checklist** (Marpipe): clean product catalog (accurate inventory, pricing, images, categories — feed errors propagate straight into ads); [[concepts/meta-pixel]] + [[concepts/conversions-api]] configured with dedup verified; diverse creative refreshed regularly. - **Scaling**: raise budgets gradually (10–20% every few days) to avoid disrupting learning; monitor ROAS, cost per purchase, product-level performance, and new-vs-existing splits. ## Risks & Pitfalls - **Black-box trade-offs**: broad targeting can waste spend before the algorithm converges (Bïrch's practitioners report "complete randomness" in cost-per-result when run with minimal input); automated budgets may distribute unevenly; reporting is less granular. - **Meta's creative AI is polarizing**: one agency quoted by Bïrch disables/customizes Advantage+ creative components as standard practice — review [[concepts/creative-formats]] enhancement opt-outs. - **Migration resets learning** — schedule migrations when you can absorb the [[concepts/attribution-reporting]] learning-phase instability. - **Deadline risk**: un-migrated legacy ASC/AAC campaigns lose editability (v25.0/v26.0 windows). Don't wait. - **Special Ad Categories**: Advantage+ audience tools for Housing/Employment/Financial campaigns are still rolling out; ineligible campaigns migrate to broad targeting instead — see [[concepts/special-ad-categories]]. - One misconfigured ad set (e.g., a placement exclusion) silently flips the whole campaign to `advantage_state: DISABLED`. ## Related Concepts - [[concepts/advantage-targeting]] — the audience automation lever in detail - [[concepts/budgets-bidding]] — Advantage campaign budget and bid strategies - [[concepts/campaign-structure]] — objectives and the ODAX model ([[summaries/odax-migration]]) - [[concepts/creative-formats]] — creative variation feeds the optimizer - [[syntheses/objective-picker]] — choosing Advantage+ vs. manual per goal ## Sources Official Marketing API docs: Advantage+ Shopping Campaigns (Dec 2025) and Advantage+ Campaign Experience for Sales, App, and Leads (May 2026, incl. migration FAQ). Community (attributed): Marpipe "Ultimate Guide to Meta Advantage+ Shopping Campaigns" (Feb 2025), Bïrch "Understanding Meta's Advantage+ Sales Campaigns" (Aug 2025) with practitioner interviews. --- title: "Advantage Targeting (Audience Expansion)" type: concept tags: [advantage, targeting-expansion, automation, audiences, advanced, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-advantage-audience.md", "raw/web_community-advantage-detailed-targeting.md", "raw/web_community-advantage-targeting.md", "raw/web_community-ad-set.md"] --- # Advantage Targeting (Audience Expansion) ## Definition Advantage targeting is Meta's family of audience-automation features that let the delivery system reach **beyond** the audience you specified when doing so is predicted to produce more results at lower cost per result. It spans three distinct mechanisms — Advantage+ audience (your inputs become a *suggestion*), Advantage detailed targeting (interest/behavior expansion), and Advantage custom-audience/lookalike expansion — each controlled by a different field in the targeting spec, which is why Ads Manager toggles map confusingly onto the API. ## How It Works Three properties express targeting automation: - **`targeting_automation.advantage_audience`** (`1`/`0`) — Advantage+ audience. When on, Meta builds the broadest possible audience and treats your demographics/interests/custom audiences as signals rather than constraints. Non-negotiable constraints are **never** expanded: location, *minimum* age, language, and custom audience **exclusions**. - **`targeting_optimization`** (`expansion_all` / `none`) — Advantage detailed targeting: expands beyond your detailed-targeting (interests/behaviors) selections. Erroring on unsupported objectives. - **`targeting_relaxation_types`** (`{"custom_audience": 1, "lookalike": 1}`) — opt-in Advantage custom audience and Advantage lookalike expansion: your included custom audiences / lookalikes can be "relaxed" into similar people. A fourth, read-only property reports *enforced* automation: **`targeting_optimization_types`** on the campaign spec, e.g. `{detailed_targeting: 1, lookalike: 1}`. For a long list of optimization goals — including Value, App installs, App events, Conversations, Offsite clicks, Landing page views, Offsite Conversions, Return on ad spend, Store visits — lookalike and detailed-targeting expansion are **always on and cannot be disabled**. The ad set reference states this directly: since v13.0, ad sets optimizing for value, conversions, or app events have lookalike expansion enabled by default with no opt-out. **Advantage+ audience defaulting (v23.0+).** When creating a new ad set, `advantage_audience` defaults to `1` — or must be explicitly set — depending on your setup: - *Default setup* (default/omitted Age, Gender, Custom Audience inclusion, Detailed Targeting inclusion): silently defaults to `1`. - *Relaxed setup* (custom audiences/interests present but with `targeting_relaxation_types` and `targeting_optimization: "expansion_all"` applied): also defaults to `1`. - *Anything else* (e.g. `age_min: 30, age_max: 50` with a custom audience and no relaxation settings): the API **errors** until you explicitly pass `targeting_automation.advantage_audience` as `1` or `0`. Updating existing ad sets never triggers this defaulting. **Age semantics under Advantage+ audience.** You may pass an `age_range` (e.g. `[25, 35]`) as a *suggestion*; hard `age_min` can only be 18–25, `age_max` is forced to 65, and existing min/max are reset to defaults when the feature is enabled. If `age_range` is absent it's derived from min/max. ## Key Parameters | Field | Where | Values | Meaning | |---|---|---|---| | `targeting_automation.advantage_audience` | targeting spec | `1` / `0` | Advantage+ audience on/off (Ads Manager: "Advantage+ audience" vs "original audience options") | | `age_range` | targeting spec | `[min, max]` | Suggested age range under Advantage+ audience | | `targeting_optimization` | targeting spec | `expansion_all` / `none` | Advantage detailed targeting on/off | | `targeting_relaxation_types` | targeting spec | `{"custom_audience":0|1,"lookalike":0|1}` | Advantage custom audience / lookalike expansion | | `targeting_optimization_types` | campaign spec (read-only) | `{detailed_targeting, lookalike}` | Reports enforced expansion | ## When To Use - Default to Advantage+ audience for conversion-oriented campaigns with solid pixel/CAPI signal — that's the direction Meta's defaults push (v23.0 auto-opt-in) and the design assumption behind [[concepts/advantage-plus-campaigns]]. - Use suggestions (audience signals: custom audiences, interests, `age_range`) rather than hard constraints when your real boundary is soft ("mostly 25–35"). - Switch Advantage+ audience **off** (`advantage_audience: 0`) when you have genuine hard boundaries: compliance-driven age limits beyond min-age, strict retargeting-only ad sets, or audience-split tests where contamination invalidates the read. - Remember exclusions still bind: excluding purchasers via `excluded_custom_audiences` works even with full expansion — lean on exclusions, not inclusions, for guarantees (see [[concepts/audiences]]). ## Risks & Pitfalls - **You can't fully opt out for many goals**: `targeting_optimization_types` documents enforced lookalike + detailed-targeting expansion for value/conversion/app-event-type optimization goals. Treat lookalike percentages and interest picks as seeds, not fences. - The v23.0 creation-time error (non-default, non-relaxed setup without explicit `advantage_audience`) breaks naive ad set creation scripts; always set the flag explicitly. - Reach estimates with `targeting_optimization=expansion_all` differ between the Reach Estimate API (full expanded audience) and Ads Manager — don't reconcile them expecting equality. - Expansion never overrides location, minimum age, language, or custom-audience exclusions — but everything else (gender, detailed targeting, included audiences, max age) is fair game, which surprises advertisers who assumed gender targeting was hard. - Automation is **not supported in Reservation** (`buying_type=RESERVED`) flows. - For housing/employment/financial-products campaigns, the available audience features change entirely — Advantage+ audience and detailed targeting expansion are among the *supported* features there while lookalikes and saved audiences are removed; see [[concepts/special-ad-categories]]. ## Related Concepts - [[concepts/audiences]] — the underlying targeting spec being expanded - [[concepts/advantage-plus-campaigns]] — campaign-level automation built on these mechanics - [[concepts/special-ad-categories]] — restricted-vertical interaction with expansion - [[concepts/campaign-structure]] — where targeting attaches - [[entities/marketing-api]] ## Sources - `raw/web_community-advantage-audience.md` — `targeting_automation.advantage_audience`, v23.0 defaults, `age_range` rules - `raw/web_community-advantage-detailed-targeting.md` — `targeting_optimization` opt-in/out, reach estimate caveat - `raw/web_community-advantage-targeting.md` — the three automation properties, enforced goals list, Reservation exclusion - `raw/web_community-ad-set.md` — v13.0 mandatory lookalike expansion for value/conversions/app events --- title: "Attribution & Reporting" type: concept tags: [measurement, attribution, insights-api, learning-phase, reporting, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-leadenforce-facebook-attribution-window-explained-how-it-imp.md", "raw/web_community-meta-attribution-in-2025-how-to-track-facebook-ads-with-meta.md", "raw/web_community-ads-insights-api.md", "raw/web_community-insights-api-breakdowns.md", "raw/web_community-graph-api-reference-v25-0-ad-campaign-learning-stage-info-do.md", "raw/web_community-about-the-facebook-ads-learning-phase-2025-update.md", "raw/web_community-how-to-exit-the-facebook-ads-learning-phase-quicker-social-m.md", "raw/web_community-15-facebook-ads-metrics-that-maximize-roi-for-your-clients-s.md"] --- # Attribution & Reporting ## Definition Attribution is how Meta decides which ad gets credit for a conversion; reporting is how those credited results surface in Ads Manager and the Ads Insights API. An **attribution window** is the period after someone clicks or views an ad during which a conversion is still credited to it. Meta's default attribution setting is **7-day click and 1-day view**: convert within 7 days of clicking, or within 1 day of viewing, and the ad gets the conversion. ## How It Works **Attribution settings.** Since the 2021 iOS 14 / App Tracking Transparency changes, the old separate "attribution window" (reporting) and "conversion window" (optimization) were merged into a single **attribution setting** per ad set that drives *both* what reports show *and* what the delivery system learns from. Where signal is missing (e.g., opted-out iOS users), Meta fills in with statistical modeling rather than observed data. **API semantics.** In the Marketing API, attribution is expressed via `attribution_spec` / `action_attribution_windows` (e.g., `1d_click`, `7d_click`, `1d_view`, `incrementality`) on Insights queries. The Ad Campaign Learning Stage Info reference notes the API-level default attribution window as 1-day view and 28-day click — legacy semantics that survive in the reference even though Ads Manager defaults to 7-day click/1-day view. Community reporting (Swydo) describes 2025–2026 changes practitioners must reconcile: 7-day and 28-day *view-through* windows removed from the API (January 12, 2026), click-through narrowed to link clicks only, "engaged-view" became **engage-through** (threshold 10s → 5s), and an **Incremental Attribution** option (April 2025) that uses holdout testing to count only conversions the ad caused. Swydo cites the resulting default as 7-day click, 1-day engage-through, 1-day view. **Insights API.** Performance data is an `/insights` edge on every ad object level: | Level | Endpoint | |---|---| | Account | `/{ad-account-id}/insights` | | Campaign | `/{campaign-id}/insights` | | Ad set | `/{ad-set-id}/insights` | | Ad | `/{ad-id}/insights` | Requests combine **parameters** (`date_preset=last_7d`, time ranges, attribution windows), **fields** (metrics like `impressions`, `spend`, `clicks`, `actions`, `action_values`, `reach`, `frequency`), and **breakdowns**. **Breakdowns** group results: demographic (`age`, `gender`), geographic (`country`, `region`, `dma`), delivery (`publisher_platform`, `platform_position`, `device_platform`, `impression_device`), time (`hourly_stats_aggregated_by_advertiser_time_zone` / `_audience_time_zone`), creative-asset (`image_asset`, `video_asset`, `body_asset`, `title_asset`, etc. — Dynamic Creative asset breakdowns support only `impressions`, `clicks`, `spend`, `reach`, `actions`, `action_values`), and action breakdowns (`action_type` is implied if `action_breakdowns` is unset). `user_segment_key` splits Advantage+ Shopping results into new vs. existing customers. Only listed permutations of breakdowns can be combined; hourly breakdowns return 0 for `reach`/`frequency`. **Learning phase.** Every new or significantly edited ad set enters a learning period while delivery explores who to show ads to. API object `AdCampaignLearningStageInfo` (ad set field, active ad sets only; not returned for Dynamic Creative Optimization ad sets) exposes: `status` enum — `LEARNING`, `SUCCESS` (exited), `FAIL` (not generating enough results); `conversions` (count since last significant edit; returns zero after successful exit); `last_sig_edit_ts`; and dynamic thresholds `dynamic_lp_conversions_threshold` / `dynamic_lp_days_threshold` / `dynamic_lp_status`. ## Key Parameters - **Attribution setting** per ad set: combinations of 1/7-day click and 1-day view (`1d_click`, `7d_click`, `1d_view`; `incrementality` for incremental attribution). - **Insights request**: `level`, `fields`, `breakdowns`, `action_breakdowns`, `date_preset`/`time_range`, `filtering`, `action_attribution_windows`. - **Learning-phase exit threshold** (community consensus): ~50 optimization events per ad set within 7 days. Falling short flips the Delivery column to **Learning Limited**. - **Core Ads Manager metrics** (Swydo's practitioner funnel): Impressions, Reach, CPM, Frequency → CTR, CPC, hook rate → Landing Page Views, add-to-cart rate → ROAS (`Revenue ÷ Ad Spend`), CPA (`Spend ÷ Conversions`), Conversion Rate, AOV, Incremental Conversions. ## When To Use - **Choosing a window** (LeadEnforce/Triple Whale guidance): 1-day click for impulse buys and flash sales; 7-day click for considered or B2B purchases; default 7-day click/1-day view for most ecommerce; view-through matters mainly for awareness measurement. Per Facebook data cited by LeadEnforce, 53% of paid-ad conversions happen within 48 hours of the click. - **Comparing windows**: query `action_attribution_windows` with multiple values to see how much reporting depends on the window before changing it. Never aggregate across different attribution settings — the API refuses those metrics. - **Learning-phase management** (Social Media Examiner / Lebesgue, attributed): use fewer ad sets so budget concentrates (e.g., 3–5 ad sets, 1 ad each); budget realistically — daily budget ≈ (CPA × 50) ÷ 7; avoid resets by not changing budget >20%, audiences, or adding new ads to a live ad set — duplicate the campaign instead, and bulk-create ads up front, toggling them on/off (which does not reset learning). ## Risks & Pitfalls - **Window changes masquerade as performance changes.** The January 2026 removal of 7/28-day view-through wiped 30–40% of some advertisers' reported conversions overnight (Swydo). Explain measurement changes to stakeholders before they read the charts. - **Longer windows over-credit Meta** by absorbing conversions other channels assisted; shorter windows under-report latent conversions. - **Learning Limited is not a death sentence.** Lebesgue's aggregated account data found ad sets *in* learning had ~10% lower CAC than after exit — don't chase exit by switching the optimization event to a cheaper action (e.g., purchases → add-to-carts); that optimizes for the wrong audience. - **Frequent edits reset learning** (`last_sig_edit_ts` resets, conversions count restarts at 0): budget swings >20%, bid/bid-strategy changes, targeting, placements, optimization event, new ads, or pausing 7+ days. - **Deprecated metrics**: 100+ metrics were removed from the Insights API (October 30, 2024), including unique purchases; `relevance_score` and other fields can't be requested with breakdowns; off-Meta action metrics lost `region`/`dma`/hourly (Type 1) and device/destination (Type 2) breakdowns. - **Estimated numbers**: breakdown values are estimates; `dma` uses sampling — query impressions alongside for sanity. ## Related Concepts - [[concepts/meta-pixel]] and [[concepts/conversions-api]] — the signal sources attribution depends on - [[concepts/budgets-bidding]] — budget sufficiency drives learning-phase exit - [[concepts/advantage-plus-campaigns]] — `user_segment_key` reporting; Advantage+ defaults change metric granularity - [[concepts/campaign-structure]] — fewer ad sets concentrate optimization events - [[syntheses/budget-bid-recipes]] — concrete budget math for exiting learning ## Sources Official: Ads Insights API overview, Insights API Breakdowns, Ad Campaign Learning Stage Info (Graph API v25.0 reference). Community (attributed): LeadEnforce and Triple Whale on attribution windows, Lebesgue and Social Media Examiner on the learning phase, Swydo on 2025–2026 attribution/metric changes. Ads Manager Help Center docs on attribution settings are a declared gap. --- title: "Audiences & Targeting" type: concept tags: [audiences, targeting, custom-audiences, lookalikes, retargeting, foundational, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-audiences-overview.md", "raw/web_community-basic-targeting.md", "raw/web_community-advanced-targeting.md", "raw/web_community-customer-file-custom-audiences.md", "raw/web_community-website-custom-audiences.md", "raw/web_community-lookalike-audiences.md", "raw/web_community-dynamic-product-audiences.md"] --- # Audiences & Targeting ## Definition An audience is who an ad set can deliver to, expressed in the ad set's `targeting` spec. Meta distinguishes two approaches: **specific** — you supply the people (Custom Audiences, Lookalike Audiences, Dynamic Audiences) — and **broad** — you set basic constraints (location, demographics, interests) and let delivery find the best people. Ads Manager's "core audience" / saved audience corresponds to the broad approach; everything reusable you build in Audience Manager is an API `customaudiences` object of some subtype. ## How It Works **Core (basic) targeting** lives directly in the targeting spec: demographics (`age_min` — default 18, minimum 13 — `age_max` ≤ 65, `genders` where `1`=male `2`=female), location (`geo_locations` with `countries`, `regions`, `cities` with `radius`, `zips`, `places`, `custom_locations`, `geo_markets` (DMA/Comscore), `country_groups` like `europe`; plus `excluded_geo_locations` and `location_types: ["home","recent"]`), `interests`, `behaviors`, `life_events`, `relationship_statuses`, `industries`, `income`. IDs come from Targeting Search (`GET /search?type=adinterest`, `type=adgeolocation`, `type=adTargetingCategory&class=behaviors`...). You must target at least one country unless a Custom Audience is used. A saved audience is this spec stored for reuse (`/act_{id}/saved_audiences`). **Advanced targeting** adds education/work (`education_schools`, `education_statuses` enums 1–13, `education_majors`, `work_employers`, `work_positions`), `locales`, device/OS (`user_os`, `user_device`, `excluded_user_device`, `wireless_carrier: Wifi`), and `flexible_spec` — AND-of-ORs combinations of interests/behaviors (a `flexible_spec` requires `geo_locations`, `custom_audiences`, `product_audience_specs`, or `dynamic_audience_ids` alongside it). Inclusion: `custom_audiences`; exclusion: `excluded_custom_audiences` (up to 500 each). **Customer file Custom Audiences** (`subtype=CUSTOM` + required `customer_file_source`: `USER_PROVIDED_ONLY`, `PARTNER_PROVIDED_ONLY`, or `BOTH_USER_AND_PARTNER_PROVIDED`): upload hashed CRM data to `/{audience_id}/users` in batches of up to 10,000 with a `session` object (`session_id`, `batch_seq`, `last_batch_flag`). All PII must be SHA256-hashed after normalization — keys include `EMAIL`, `PHONE`, `FN`/`LN`/`FI`, `GEN` (`m`/`f`), `DOBY`/`DOBM`/`DOBD`, `ST`, `CT`, `ZIP`, plus unhashed `EXTERN_ID`, App User IDs, Page Scoped User IDs (`PAGEUID`), and mobile advertiser IDs. Multi-key matching raises match rates. Updates take up to ~24 hours. **Website Custom Audiences (WCA)**: built from [[concepts/meta-pixel]] traffic via a JSON `rule` (e.g. `{"field":"url","operator":"i_contains","value":"shoes"}` or event-based filters), with `retention_days` 1–180 and `prefill` (include pre-creation traffic, max 180 days back). Events shared through [[concepts/conversions-api]] can feed WCAs too — send `external_id` to improve matching (note: CAPI `external_id` and customer-file `EXTERN_ID` mappings are *not* interchangeable). Max 10,000 WCAs per account; deleting a targeted audience pauses the campaign. **Lookalike Audiences** (`subtype=LOOKALIKE`): Meta models people similar to a seed. Seeds: an existing Custom Audience (≥ 100 members; `origin_audience_id`), campaign/ad set converters (`conversion_type: "campaign_conversions"`, ≥ 100 unique conversions, 200+ recommended, up to 180 days of data), or page fans (`conversion_type: "page_like"`). The `lookalike_spec` sets `country` (or `location_spec`) and size: `type` `similarity` (~top 1%, precise) or `reach` (~top 5%), or a manual `ratio` 0.01–0.20 in 0.01 steps, optionally with `starting_ratio` for stacked tiers (e.g. 1%–2%). Population takes 1–6 hours; members refresh every 3 days while in use. **Dynamic Product Audiences** (Advantage+ catalog ads retargeting): built from purchase-intent signals — Pixel events `Search`, `ViewCategory` (custom), `ViewContent`, `AddToCart`, `Purchase` with `content_ids`/`contents` + `content_type` (`product` or `product_group`), or App Events `fb_mobile_search`/`fb_mobile_content_view`/`fb_mobile_add_to_cart`/`fb_mobile_purchase` with `fb_content_id`. Apps must be associated to the catalog via `external_event_sources`. These power "viewed product X but didn't buy" catalog retargeting. ## Key Parameters - `targeting` (ad set), `custom_audiences` / `excluded_custom_audiences` - `subtype` (`CUSTOM`, `LOOKALIKE`), `customer_file_source`, `rule`, `retention_days`, `prefill`, `lookalike_spec` (`ratio`, `starting_ratio`, `country`, `allow_international_seeds`) - `operation_status` (incl. `471` = flagged, `EXPIRING`), `delete_time`, `audience_labels` (e.g. `HIGH_VALUE_CUSTOMERS`, `QUALIFIED_LEADS`) ## When To Use - Cold prospecting: broad core targeting (increasingly via [[concepts/advantage-targeting]]) or 1–5% lookalikes of buyers; lookalikes of *paying* customers beat interest stacks in community experience. - Retargeting: WCAs segmented by recency/action; dynamic product audiences for catalog e-commerce. - Exclusions are as valuable as inclusions: exclude purchasers from acquisition, exclude customer lists from prospecting. - Build lookalikes from your best-performing custom audiences, not just your biggest ones (docs' own best practice). ## Risks & Pitfalls - **Flagged audiences** (rolling out from September 2, 2025): custom audiences, lookalikes, or custom conversions suggesting health conditions ("arthritis", "diabetes") or financial status ("credit score", "high income") get `operation_status` 471; new campaign use is blocked and ad sets carry `issues_info` errors (`error_code` 2460003/2460004). A flagged seed also blocks lookalike creation (subcode 1713232). Review/appeal in Audience Manager. - **Two-year expiry**: any audience unused in active ad sets for 2+ years becomes `EXPIRING` and is deleted 90 days later (`delete_time`); customer-list audiences require your "instruction" — using the audience retains it, ignoring it deletes it. - Bad hashing silently drops customer-file rows — check `num_invalid_entries` and `invalid_entry_samples` in the upload response. - WCA `retention_days` caps at 180 via rule (365 absolute max via UI per FAQ); members drop out when the window lapses unless they re-trigger the rule. - Lookalike expansion is **forced on** (cannot be disabled) for ad sets optimizing for value, conversions, or app events since v13.0 — your "1% lookalike" is a starting point, not a boundary (see [[concepts/advantage-targeting]]). - Housing/employment/financial campaigns lose lookalikes, saved audiences, and most detailed targeting entirely — see [[concepts/special-ad-categories]]. - Don't use `radius` across many locations in one call (error subcode 1815946); split ad sets. ## Related Concepts - [[concepts/meta-pixel]] — the event source behind WCAs and dynamic audiences - [[concepts/conversions-api]] — server-side events that also build audiences - [[concepts/advantage-targeting]] — expansion semantics layered on top of these inputs - [[concepts/special-ad-categories]] — audience restrictions for regulated verticals - [[concepts/campaign-structure]] — where `targeting` lives - [[entities/marketing-api]], [[entities/instagram-ads]] ## Sources - `raw/web_community-audiences-overview.md` — taxonomy, expiry policy, flagging - `raw/web_community-basic-targeting.md` — demographics, location, interests, behaviors - `raw/web_community-advanced-targeting.md` — education/work, devices, `flexible_spec`, custom-audience limits - `raw/web_community-customer-file-custom-audiences.md` — upload flow, hashing/normalization keys - `raw/web_community-website-custom-audiences.md` — rules, retention, FAQ - `raw/web_community-lookalike-audiences.md` — seeds, `lookalike_spec`, ratios - `raw/web_community-dynamic-product-audiences.md` — catalog retargeting signals --- title: "Budgets, Bidding & Pacing" type: concept tags: [budgets, bidding, auction, cbo, pacing, bid-strategy, foundational, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-bidding-overview.md", "raw/web_community-budgets.md", "raw/web_community-pacing-and-scheduling.md", "raw/web_community-advantage-campaign-budget.md", "raw/web_community-cbo-now-advantage-campaign-budget-or-abo.md", "raw/web_community-ad-set.md"] --- # Budgets, Bidding & Pacing ## Definition Meta sells almost all ad inventory through a real-time auction. Your **bid** expresses how much you value reaching a person and getting your `optimization_goal`; your **budget** caps what an ad set or campaign can spend; **pacing** decides how that budget is spread across the day or flight. The bid strategy (`bid_strategy`) is the control knob between cost stability and volume. ## How It Works **The auction.** Meta evaluates your `bid_strategy`, `bid_amount`, and the estimated probability that this impression produces your `optimization_goal`, computing an *effective bid* so you win auctions only when you're likely to get your result within your cost constraints. You pay per `billing_event` (`IMPRESSIONS` for most goals; also `LINK_CLICKS`, `THRUPLAY`, `APP_INSTALLS`, etc.), but you bid on the optimization goal — the two are independent. Example from the bidding docs: `objective=APP_INSTALLS` + `optimization_goal=REACH` + `billing_event=IMPRESSIONS` spends ~$10 per 1,000 daily unique views, while the same objective with `optimization_goal=APP_INSTALLS` spends $10 per install. **Pacing.** Default `pacing_type=["standard"]` enters you into every relevant auction and adjusts your bid through the day for smooth delivery. `["no_pacing"]` is **accelerated delivery** — full max bid in every eligible auction; budgets can exhaust before day's end. `["day_parting"]` enables ad scheduling via `adset_schedule` (lifetime budgets only; applies in the *audience's* timezone, not the account's). With Advantage campaign budget on, pacing happens at the campaign level; otherwise at the ad set level. ## Key Parameters **Bid strategies** (campaign level under Advantage campaign budget, otherwise ad set level; `AUCTION` buying type only): | API enum | Ads Manager name | Behavior | |---|---|---| | `LOWEST_COST_WITHOUT_CAP` | Lowest cost / "Highest volume" (shown as **Highest Value** when `optimization_goal=VALUE`) | Automatic bidding; most results for budget, average costs may drift as you spend | | `LOWEST_COST_WITH_BID_CAP` | Bid cap | Caps the *bid* per auction at `bid_amount` ("manual maximum-cost bidding"); too-low caps choke delivery | | `COST_CAP` | Cost cap | Caps the *average cost* per optimization event at `bid_amount` | | `LOWEST_COST_WITH_MIN_ROAS` | ROAS goal | Holds a ROAS floor via `bid_constraints={"roas_average_floor": ...}` on the ad set (with `optimization_goal=VALUE`); cannot use `bid_amount` together with `bid_constraints`, and you can't switch away from this strategy after creation | (`TARGET_COST` was deprecated in Marketing API v9.) `bid_amount` is in your currency's minor unit (cents for USD), per 1,000 occurrences for `IMPRESSIONS`/`REACH` billing, per occurrence otherwise. **Daily vs lifetime budgets.** `daily_budget` is the *average* you'll spend per day — Meta may spend **up to 25% more on a given day** (e.g. $12.50 on a $10 daily budget) while keeping weekly spend ≤ 7× daily. `lifetime_budget` covers the whole flight and requires `end_time`; spend flexes day-to-day toward opportunity (a 5-day, $250 lifetime budget might spend $50/$50/$75/$25/$50). Daily budgets pace within each day; lifetime budgets pace across the flight. Minimum daily budgets under `LOWEST_COST_WITHOUT_CAP`: $0.50 for impressions billing, $2.50 for clicks/likes/video views, $40 for low-frequency actions (2× in ~24 high-cost countries); under `LOWEST_COST_WITH_BID_CAP`: at least the `bid_amount` (impressions) or 5× `bid_amount` (clicks/actions). **Advantage campaign budget (CBO).** Set `daily_budget` or `lifetime_budget` on the *campaign* and Meta continuously redistributes it across ad sets toward the best available results. Campaign-level fields: budget, `pacing_type`, `bid_strategy`, `adset_bid_amounts` (per-ad-set caps when using bid cap/cost cap). Ad-set-level guardrails: `daily_min_spend_target` / `daily_spend_cap` and `lifetime_min_spend_target` / `lifetime_spend_cap` (best-effort minimums, hard caps). To turn CBO off, post `adset_budgets=[{"adset_id":..., "daily_budget":...}, ...]` to the campaign. Constraints: all ad sets share the campaign's bid strategy; under auto-bid all ad sets must share the same `optimization_goal`; >70 ad sets locks bid strategy and the CBO toggle; don't use the deprecated `budget_rebalance_flag`. ## When To Use - Start with `LOWEST_COST_WITHOUT_CAP` — it's the default recommendation and the right choice when you care about cost efficiency and volume. Add `COST_CAP` once you know your viable CPA; use a bid cap only when you must control per-auction price; use ROAS goal only with value optimization and a configured value event. - **CBO vs ABO** (community guidance, Lebesgue, attributed — medium confidence): one e-commerce dataset showed ad-set budgets (ABO) outperforming CBO on prospecting ROAS, 94% vs 81%. The recommended split: CBO for large campaigns with many ad sets and limited management time; ABO when you need per-ad-set spend control (specific products/categories), granular performance reads, or strict retargeting/prospecting budget separation. Recipes in [[syntheses/budget-bid-recipes]]; more practitioner notes in [[summaries/community-field-notes]]. - Accelerated delivery (`no_pacing`) only for genuine time pressure: flash sales, live events, seasonal peaks. It won't fix under-delivery caused by low bids or narrow audiences — pacing is already effectively off there. ## Risks & Pitfalls - Budget or bid changes reset bid learning; the docs advise limiting changes to 2–3 times a day, early in the day. Frequent edits keep delivery perpetually suboptimal (related: the learning phase, see [[summaries/community-field-notes]]). - A bid cap set too low quietly strangles delivery rather than erroring. - Daily budgets can legitimately overspend 25% in a day — alarming if you watch daily spend without knowing the weekly guarantee (`recurring_budget_semantics`). - Ad scheduling (`day_parting`) silently requires a lifetime budget, and schedules run in the viewer's timezone unless `timezone_type` says otherwise. - Under CBO, small or niche ad sets can be starved; use `*_min_spend_target` sparingly — every floor reduces the optimizer's freedom. - Partial first/last days prorate daily budgets (start at 6 PM → ~25% of daily budget delivered). ## Related Concepts - [[concepts/campaign-structure]] — where each budget/bid field attaches - [[concepts/advantage-plus-campaigns]] — Advantage+ shopping relies on campaign-level budgets - [[concepts/audiences]] — audience size interacts with bid/budget viability - [[concepts/attribution-reporting]] — how optimization events get counted - [[syntheses/budget-bid-recipes]], [[summaries/community-field-notes]] ## Sources - `raw/web_community-bidding-overview.md` — auction mechanics, optimization goal validation - `raw/web_community-budgets.md` — `daily_budget` / `lifetime_budget` semantics - `raw/web_community-pacing-and-scheduling.md` — `pacing_type`, `adset_schedule`, pacing FAQ - `raw/web_community-advantage-campaign-budget.md` — CBO fields, min/max spend controls, limitations - `raw/web_community-cbo-now-advantage-campaign-budget-or-abo.md` — community CBO-vs-ABO data and guidance (medium confidence) - `raw/web_community-ad-set.md` — `bid_amount` units, minimum budget tables, `recurring_budget_semantics` --- title: "Campaign Structure" type: concept tags: [campaign, ad-set, ad, objectives, odax, buying-type, foundational, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-ad-campaign-group.md", "raw/web_community-ad-set.md", "raw/web_community-ad.md", "raw/web_community-an-update-to-ad-objectives-upcoming-api-changes-to-campaign-.md", "raw/web_community-6-facebook-campaign-objectives-explained-2026-odax-guide.md", "raw/web_community-reservation.md"] --- # Campaign Structure ## Definition Every Meta ad lives in a three-level hierarchy: **campaign → ad set → ad**. The campaign (API object: *Ad Campaign Group*) is the highest-level container in an ad account and carries exactly one `objective`, a `buying_type`, and the mandatory `special_ad_categories` declaration. The ad set (API: *Ad Campaign*) groups ads that share the same budget, schedule, bid settings, and targeting. The ad (API: *Adgroup*) pairs a creative with its parent ad set and is the unit that actually gets reviewed and delivered. ## How It Works Each level owns distinct settings — a frequent source of confusion because Ads Manager spreads related controls across all three: - **Campaign**: `objective`, `buying_type` (`AUCTION` or `RESERVED`), `special_ad_categories`, `spend_cap`, and optionally a campaign-level `daily_budget`/`lifetime_budget` when Advantage campaign budget is on (see [[concepts/budgets-bidding]]). The objective enforces validation: ads created under the campaign must be compatible with it, and it constrains which ad set `optimization_goal` values are valid. - **Ad set**: `daily_budget` or `lifetime_budget`, `start_time`/`end_time`, `optimization_goal`, `billing_event`, `bid_amount`/`bid_strategy`, `targeting` (see [[concepts/audiences]]), `promoted_object` (the pixel, app, page, or catalog being promoted), and `destination_type` (e.g. `WEBSITE`, `APP`, `MESSENGER`, `INSTAGRAM_DIRECT` — surfaced in Ads Manager as "conversion location"). At the campaign level `start_time`/`stop_time` are read-only merges of the ad sets' values. - **Ad**: `creative` (required at creation), `status`, `tracking_specs`, `conversion_domain`. New ads enter `PENDING_REVIEW` and only deliver after approval. Status cascades downward: pausing a campaign gives its children `effective_status: CAMPAIGN_PAUSED`. Configured statuses are `ACTIVE`, `PAUSED`, `DELETED`, `ARCHIVED`; effective status adds delivery states like `IN_PROCESS` and `WITH_ISSUES`. ## Key Parameters **The six ODAX objectives.** Since the Outcome-Driven Ad Experiences (ODAX) redesign, new campaigns can only use six simplified objectives. API enum ↔ Ads Manager name: | API `objective` | Ads Manager | |---|---| | `OUTCOME_AWARENESS` | Awareness | | `OUTCOME_TRAFFIC` | Traffic | | `OUTCOME_ENGAGEMENT` | Engagement | | `OUTCOME_LEADS` | Leads | | `OUTCOME_APP_PROMOTION` | App promotion | | `OUTCOME_SALES` | Sales | **The 2023 objective migration.** Meta announced (developer blog, February 13, 2023) that beginning with Marketing API v17.0, `POST {ad-account-id}/campaigns` rejects the original objectives: `APP_INSTALLS`, `BRAND_AWARENESS`, `CONVERSIONS`, `EVENT_RESPONSES`, `LEAD_GENERATION`, `LINK_CLICKS`, `LOCAL_AWARENESS`, `MESSAGES`, `OFFER_CLAIMS`, `PAGE_LIKES`, `POST_ENGAGEMENT`, `PRODUCT_CATALOG_SALES`, `REACH`, `STORE_VISITS`, `VIDEO_VIEWS`. Existing campaigns kept running and could be duplicated. The opt-in parameters `odax_opt_in` and `has_advertiser_opted_in_odax` were deprecated. Store traffic campaigns now use `OUTCOME_AWARENESS` with a `PLACE_PAGE_SET_ID` in the ad set's `promoted_object` and `optimization_goal=REACH`. See [[summaries/odax-migration]] for the full mapping and [[syntheses/objective-picker]] for choosing between objectives. **Buying types.** `buying_type=AUCTION` (default) competes in the real-time auction with flexible budgets and bids. `buying_type=RESERVED` is Reservation (Reach and Frequency) buying: you lock a fixed CPM, predicted reach, and frequency cap in advance — closer to how TV is bought. Reservation constraints: target audience ≥ 300k Accounts Center accounts, minimum reach 200k (per `rf_spec` per country), ad sets run 1–90 days, you cannot set `pacing_type`, frequency caps or external bids directly, and once in flight you can only swap creatives, raise budget/reach, or extend the end date — pausing a live reservation more than 30 minutes voids the prediction. Reach and Frequency is disabled for housing, employment and credit ads (see [[concepts/special-ad-categories]]). **Structural limits** (verbatim from the campaign/ad set/ad references): 200 ad sets per campaign; 5,000 non-deleted ad sets and 5,000 non-deleted ads per regular ad account; 50 non-archived ads per ad set; 100,000 archived ads per account. ## When To Use - One campaign per business outcome; the objective tells delivery what to optimize toward, so don't run Traffic when you need purchases — delivery will find clickers, not buyers (community guidance, medium confidence). - Split ad sets by audience or budget boundary — each ad set is the unit of targeting, schedule, and learning. - Put 3–6 creative variations in one ad set and let delivery optimize among them, rather than one ad per ad set. - Use `RESERVED` only for large awareness/engagement bookings that need guaranteed reach and frequency control; auction is right for nearly everything else, including all Advantage+ sales/app campaigns ([[concepts/advantage-plus-campaigns]]). ## Risks & Pitfalls - `special_ad_categories` is **required on every campaign creation** — pass `NONE` or an empty array if no category applies; omitting it fails the call. - Duplicating legacy-objective campaigns into the new enum values (`OUTCOME_*`) may throw errors; recreate instead. - Campaigns with more than 70 ad sets using Advantage campaign budget cannot change `bid_strategy` or turn the campaign budget off. - Budget lives at campaign **or** ad set level, never both. Switching between them (`adset_budgets` on the campaign endpoint) restarts budget pacing. - Ad sets targeting the EU require `dsa_payor` and `dsa_beneficiary` (DSA transparency); creation fails with subcodes 3858079/3858081 without them. - `BRAND_AWARENESS`-era validation quirks persist for legacy campaigns (e.g. creatives must be all-image or all-video, not mixed). - Reservation books real inventory: if the ad set goes live with no active ad (within 24h for 3–30-day sets, 6h for 1–2-day sets) the reservation is deleted and repeat no-shows can penalize the account. ## Related Concepts - [[concepts/budgets-bidding]] — where budgets, bid strategies and pacing attach to this hierarchy - [[concepts/audiences]] — the ad set `targeting` spec - [[concepts/advantage-plus-campaigns]] — streamlined campaign shells on top of `OUTCOME_SALES`/`OUTCOME_APP_PROMOTION` - [[concepts/special-ad-categories]] — the mandatory campaign-level declaration - [[concepts/creative-formats]] — what goes in the ad's `creative` - [[concepts/attribution-reporting]] — reading results back per level - [[entities/marketing-api]], [[entities/placements-catalog]], [[entities/instagram-ads]] - [[syntheses/objective-picker]], [[summaries/odax-migration]] ## Sources - `raw/web_community-ad-campaign-group.md` — campaign reference (fields, limits, objective validation) - `raw/web_community-ad-set.md` — ad set reference (fields, budget validation, DSA) - `raw/web_community-ad.md` — ad reference (creation, review, limits) - `raw/web_community-an-update-to-ad-objectives-upcoming-api-changes-to-campaign-.md` — official Meta blog on the v17.0 objective migration - `raw/web_community-6-facebook-campaign-objectives-explained-2026-odax-guide.md` — community ODAX guide (Ads Manager naming, objective advice; medium confidence) - `raw/web_community-reservation.md` — reservation buying mechanics --- title: "Conversions API (CAPI)" type: concept tags: [tracking, conversions-api, server-side, measurement, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-conversions-api.md", "raw/web_community-get-started.md", "raw/web_community-server-event-parameters.md", "raw/web_community-sending-offline-events-using-the-conversions-api.md", "raw/web_community-conversion-tracking-meta-pixel-documentation-meta-for-develo.md", "raw/web_community-meta-attribution-in-2025-how-to-track-facebook-ads-with-meta.md", "raw/web_community-15-facebook-ads-metrics-that-maximize-roi-for-your-clients-s.md"] --- # Conversions API (CAPI) ## Definition The Conversions API (CAPI) is Meta's server-side event interface. Instead of (or in addition to) the browser-based [[concepts/meta-pixel]], your server, website platform, mobile app, or CRM sends conversion events — website events, app events, business messaging events, and offline conversions — directly to Meta's endpoint. Meta uses these server events to optimize ad targeting, decrease cost per result, and measure outcomes, processing them the same way as Pixel, SDK, or offline event-set data. ## How It Works Server events are linked to a **dataset ID** and posted to: ``` POST https://graph.facebook.com/{API_VERSION}/{DATASET_ID}/events?access_token={TOKEN} ``` Datasets are the unifying container in Events Manager: one dataset can receive events from the Meta Pixel (website), App Events API (app/SDK/MMP), the legacy Offline Conversions API, and the Messaging Events API, so all customer activity is visible in one interface. **Prerequisites** (from the official get-started doc): 1. A **Pixel ID** — if a Pixel already runs on your website, use the *same* Pixel ID for browser and server events. 2. A **Business Manager**. 3. An **access token**, generated either in Events Manager (Settings tab of the Pixel → Conversions API section → **Generate access token**; visible only to users with developer privileges) or via your own app + system user in Business Manager settings. Neither path requires App Review or extra permissions. Since Graph API v12.0, these tokens work with all available API versions. Setup flow: choose an integration method (direct integration vs. a partner platform such as a commerce platform integration) → complete prerequisites → implement POST requests → verify in Events Manager (Test Events tool) that events arrive, deduplicate, and match correctly. The Payload Helper tool generates a template payload. Note Meta's access-tier rename: "Standard Access" is now **Limited Access**, "Advanced Access" is now **Full Access** (Full Access threshold: 500 Marketing API calls in the past 15 days). ## Key Parameters Each event in the `data` array carries these server event parameters (verbatim API names): | Parameter | Required | Notes | |---|---|---| | `event_name` | Yes | Standard event (`Purchase`, `Lead`, `AddToCart`, ...) or custom event name; used in dedup against Pixel/app events | | `event_time` | Yes | Unix timestamp (GMT); up to 7 days in the past, else the whole request errors | | `user_data` | Yes | Customer information parameters (hashed `em`, `ph`, etc.) used for matching | | `action_source` | Yes | Where the conversion happened — see enum below | | `event_id` | Recommended | Advertiser-chosen unique string (e.g., order number) used for dedup | | `custom_data` | Optional | `currency` + `value` (required for `Purchase`), `contents`, `content_type`, etc. | | `event_source_url` | Required for website events | Browser URL; should match the verified domain | | `opt_out` | Optional | `true` = use event for attribution only, not delivery optimization | | `data_processing_options` | Optional | `LDU` for Limited Data Use (with `data_processing_options_country`/`_state`) | | `app_data` / `extinfo` | Required for app events | Device info; `extinfo` version `a2` (Android) / `i2` (iOS) | | `customer_segmentation` | Optional | Enums like `new_customer_to_business`, `existing_customer_to_business`, `customer_in_loyalty_program` | `action_source` enum values: `email`, `website`, `app`, `phone_call`, `chat`, `physical_store`, `system_generated`, `business_messaging`, `other`. **Deduplication with the Pixel.** When the same action fires from both browser and server, Meta matches the browser `event`/`eventID` pair against the server `event_name`/`event_id` pair. Matches within 48 hours keep only the first event; if browser and server events arrive within ~5 minutes of each other, the browser/app event wins. Use intrinsic IDs (order number, transaction ID) or a shared random ID. **Offline events.** Send store/offline conversions with `action_source: physical_store` to a dataset. Customer information parameters for offline events: `email`, `phone`, `gen`, `db`, `ln`, `fn`, `ct`, `st`, `zip`, `country` (all hashed), plus `madid` and `lead_id` (do not hash) and `external_id`. Common custom data: `order_id`, `item_number`, `store_data` (`store_page_id`, `brand_page_id`, `store_code`). Upload within 62 days of the conversion; offline events deduplicate only against other offline events (`order_id`-based by default, else user-based; 7-day max dedup window). ## When To Use - **Pixel + CAPI together (redundant setup)** is Meta's recommended default for any website advertiser. Browser tracking alone loses signal to iOS App Tracking Transparency, ad blockers, and cookie restrictions; the server channel fills the gaps. Community benchmark (Swydo, attributed): pixel-only setups see roughly ~40% attribution accuracy, while Pixel + CAPI recovers an estimated 20–30% of lost conversion data. Triple Whale similarly recommends pairing CAPI with the Pixel and monitoring **Event Match Quality (EMQ)** — Meta's 0–10 match score; community guidance is to aim for 6.0+. - **CAPI-only** fits events that never touch a browser: CRM-qualified leads, phone sales, subscription renewals (`system_generated`), in-store purchases (`physical_store`), and messaging conversions. - **Offline/physical-store measurement**: CAPI is Meta's recommended replacement for the legacy Offline Conversions API (deprecated per community reporting in May 2025). - Consolidating multiple data sources into one dataset to simplify the stack. ## Risks & Pitfalls - **Missing dedup = inflated conversions.** Without matching `event_id`/`eventID` on both channels, two purchases can report as four. `event_id` is technically optional, which makes this an easy miss. - **Stale events rejected wholesale**: one `event_time` older than 7 days fails the *entire* request. - **Wrong `action_source`** misrepresents where conversions happen; you contractually agree it is accurate. - **Low EMQ**: sending too few `user_data` identifiers degrades matching and attribution; hash PII fields exactly as specified. - **Firewall issues**: outbound requests must allow Meta's crawler IPs, and the IP list changes often. - **Custom conversions restrictions**: from September 2, 2025 Meta proactively flags custom conversions implying health or financial status; flagged ones return `is_unavailable: true` and can't be used in new campaigns. ## Related Concepts - [[concepts/meta-pixel]] — the browser-side channel CAPI complements and deduplicates against - [[concepts/attribution-reporting]] — how CAPI events feed attribution windows and reported results - [[syntheses/pixel-capi-setup]] — step-by-step decision guide for the redundant setup - [[concepts/audiences]] — server events power custom audience creation - [[entities/marketing-api]] — CAPI is part of the broader Marketing API surface ## Sources Official Conversions API developer docs (overview, get-started, server event parameters, offline events) and Meta Pixel conversion-tracking doc; community context from Triple Whale (EMQ, post-iOS14 rationale) and Swydo (attribution-accuracy benchmarks). Business Help Center articles (e.g., "About Conversions API," "Test Your Server Events") are referenced by the official docs but not captured in raw/ — declared gap. --- title: "Creative & Ad Formats" type: concept tags: [creative, ad-formats, advantage-plus, dynamic-creative, specs, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-ad-creative.md", "raw/web_community-asset-feed-spec.md", "raw/web_community-advantage-creative.md", "raw/web_community-standard-enhancements-for-advantage-creative.md", "raw/web_community-get-started-with-the-generative-ai-features-on-marketing-api.md", "raw/web_community-2025-facebook-ad-sizes-and-specs-cheat-sheet.md", "raw/web_community-always-up-to-date-list-of-facebook-ad-sizes-specs-august-202.md"] --- # Creative & Ad Formats ## Definition Creative is the content layer of a Meta ad: the image/video, primary text, headline, description, call-to-action, and destination. In the Marketing API this is the **ad creative object** (`/adcreatives`), reusable across ads in an account's creative library; in Ads Manager it is what you build at the ad level. Formats range from a single image or video to carousels, collections, and catalog-driven dynamic ads, increasingly transformed automatically by Advantage+ creative features. ## How It Works **The ad creative object.** A creative provides layout + content and fills the `creative` field of one or more [[concepts/campaign-structure]] ads. Most creatives wrap a page post: reference an existing post via `object_story_id`, or create an unpublished post inline with `object_story_spec` (containing `link_data`, `photo_data`, `video_data`, `text_data`, or `template_data`). Key fields: `image_hash` (or `image_url`), `video_id`, `body`, `title`, `call_to_action_type` (enum of 100+ values — `SHOP_NOW`, `LEARN_MORE`, `SIGN_UP`, `BUY_NOW`, `WHATSAPP_MESSAGE`, ...), `url_tags` for tracking parameters, `platform_customizations` (placement-specific media), and `status` (`ACTIVE`, `IN_PROCESS`, `WITH_ISSUES`, `DELETED`). Carousels use `link_data.child_attachments` (2–10 cards, each with its own link, image/video, name, description). Political/SIEP ads must set `authorization_category` (`POLITICAL`, or `POLITICAL_WITH_DIGITALLY_CREATED_MEDIA` for AI-altered media) on top of the campaign-level `special_ad_categories` — see [[concepts/special-ad-categories]]. **Asset feed spec (flexible/dynamic creative).** `asset_feed_spec` supplies *multiple* assets per type — `images`, `videos`, `bodies`, `titles`, `descriptions`, `call_to_action_types`, `link_urls`, `ad_formats` — and Meta assembles combinations. Two modes: **Dynamic Creative** (automatic mixing; no customization rules; `ad_formats: ["AUTOMATIC_FORMAT"]` lets images and videos mix across placements) and **Asset Customization Rules** (you write at least two placement-targeting rules controlling which asset shows where). You can edit a feed by supplying a replacement creative (add/remove/replace assets) but cannot change `ad_formats` (e.g., `SINGLE_IMAGE` → video) or convert a feed-based creative to a non-dynamic one. **Advantage+ creative.** For single image, single video, carousel, catalog, or existing-post ads, Advantage+ creative automatically generates variations and shows each Accounts Center account the version it's most likely to respond to. Enrollment is per-feature via `degrees_of_freedom_spec.creative_features_spec` with `enroll_status: OPT_IN` / `OPT_OUT`. Since Marketing API v22.0 the bundled "standard enhancements" toggle is gone — you opt in/out of sub-features individually: for single image ads `image_template`, `image_touchups`, `text_optimizations`, `inline_comment`; for single video `video_auto_crop`, `text_optimizations`, `inline_comment`. Enhancements include auto aspect-ratio adjustment, placement templates, and showing relevant comments under the ad. **Generative AI features** (same `creative_features_spec` mechanism): `text_generation` (AI primary-text variations from your `message`; ad is created `PAUSED` so you can review `asset_feed_spec` — `optimization_type` becomes `DEGREES_OF_FREEDOM` — before setting `ACTIVE`), `image_uncrop` (image expansion for `INSTAGRAM_STANDARD`, `FACEBOOK_REELS_MOBILE`, `INSTAGRAM_REELS`, `MOBILE_FEED_STANDARD`, `INSTAGRAM_STORY`), and `image_background_gen` (generated product backgrounds; Advantage+ catalog ads on Mobile Feed only). Preview via `//previews` or `/generatepreviews` with `creative_feature` set; advertisers are responsible for previewing AI output before publishing, and ads may carry an "AI info" label. ## Key Parameters **Text limits (API, recommended):** title ≤25 characters, body ≤90, words ≤30 characters, URL ≤1000; no leading punctuation; characters `^~_={}[]|<>` disallowed. **Sizes/specs cheat sheet** (community: Hootsuite 2025 + Sprout Social Aug 2025, attributed — Meta shifts these; verify in the Ads Guide before launch): | Placement format | Recommended size | Aspect ratio | Max file | |---|---|---|---| | Feed image | 1440×1440 or 1440×1800 | 1:1 or 4:5 | 30MB (PNG/JPG) | | Feed video | 1080×1080+ | 1:1 / 4:5 (4:5 mobile-only) | 4GB, ≤241 min | | Carousel image/video | 1080×1080+ | 1:1 or 4:5 | 30MB / 4GB | | Stories (image/video) | 1440×2560 | 9:16 | 30MB / 4GB | | Reels video | 500×888 min | 9:16 | 4GB | | Reels overlay | 1080×1080 | 1.91:1 or 1:1 | 30MB | | Right column (desktop only) | 1080×1080 | 1:1 | image only | | In-stream video | 1080×1080 | 16:9 to 1:1 | 4GB | | Marketplace / Search | 1080×1080 (min 600×600) | 1:1 | 30MB | | Messenger Stories | 1080×1080 | 9:16 | 30MB / 4GB | | Audience Network | 398×208 image / 1080×1080 video | 9:16 | 30MB / 4GB | Video: H.264, square pixels, fixed frame rate, stereo AAC 128kbps+. ## When To Use - **Single image/video**: default for most direct-response ads; simplest to QA and report. - **Carousel** (2–10 cards): multiple products, feature walkthroughs, catalogs; one of the most placement-flexible formats — see [[entities/instagram-ads]] for Instagram specifics. - **`asset_feed_spec` Dynamic Creative**: when you have several text/visual variants and want Meta to find winners — but note reporting limits in [[concepts/attribution-reporting]] (asset breakdowns support few metrics; DCO ad sets return no learning-stage info). - **Asset customization rules**: when you need *control* over which asset renders per placement (e.g., 9:16 video for Stories, 1:1 for Feed) rather than automatic mixing. - **Advantage+ creative / standard enhancements**: low-risk uplift for most performance campaigns; opt out of specific sub-features (e.g., `text_optimizations`) for brand-sensitive accounts. - **Generative AI features**: scaling variation volume; always use the paused-review workflow. ## Risks & Pitfalls - **One creative per concept, sized per placement.** Reusing a 1:1 feed asset in Stories yields awkward cropping — supply 9:16 or rely on `video_auto_crop`/`image_uncrop` deliberately. - **Right column** can't run video/collection/canvas ads and (as of v3.0) only supports single image/video/carousel for `TRAFFIC`, `CONVERSIONS`, `PRODUCT_CATALOG_SALES`. - **Enhancements alter your ad without re-approval from you**: AI text or backgrounds you didn't review can ship if you skip the preview step; unacceptable generations require recreating the ad *without* the opt-in — there is no in-place removal. - **Duplicate creatives are deduplicated**: posting a non-unique creative returns the existing creative ID rather than creating a new one. - **Community spec tables drift**: the cheat sheets disagree in places (e.g., feed video display size); official Ads Guide is authoritative. - Account creative library caps reads at 50,000 creatives (no pagination past that). ## Related Concepts - [[entities/placements-catalog]] — where each format can serve and placement constraints - [[concepts/advantage-plus-campaigns]] — Advantage+ campaigns lean heavily on creative variation - [[entities/instagram-ads]] — Instagram-specific format notes (carousel, Reels, Stories) - [[concepts/ad-policies]] — creative content must pass ad review - [[entities/marketing-api]] — `/adcreatives` endpoint mechanics ## Sources Official Marketing API docs: Ad Creative reference (v25.0), Asset Feed Spec, Advantage+ Creative, Standard Enhancements, Generative AI features get-started. Community (attributed): Hootsuite "2025 Facebook ad sizes and specs cheat sheet" and Sprout Social "Always Up-to-Date List of Facebook Ad Sizes & Specs (August 2025)" for sizes/specs tables. --- title: "Meta Pixel" type: concept tags: [pixel, conversion-tracking, standard-events, fbq, measurement, foundational, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-get-started-meta-pixel-documentation-meta-for-developers.md", "raw/web_community-reference-meta-pixel-documentation-meta-for-developers.md", "raw/web_community-conversion-tracking-meta-pixel-documentation-meta-for-develo.md", "raw/web_community-website-custom-audiences.md"] --- # Meta Pixel ## Definition The Meta Pixel is a JavaScript snippet that loads `fbevents.js` and exposes the `fbq()` function for reporting website visitor activity to Meta. It relies on Facebook cookies to match visitors to their accounts; matched events power conversion measurement in Ads Manager/Events Manager, conversion optimization, website Custom Audiences, and Advantage+ catalog ads. There is one pixel per ad account, identified by a pixel ID. ## How It Works **Base code.** Install this between the `` tags of every page (your ID appears twice): ```html ``` Head placement reduces blocking and fires before visitors bounce. The base code auto-tracks `PageView` on every load — leave that call intact. Get the code from **Events Manager** (Ads Manager > Events Manager); verify installation by watching for `PageView` events there, and debug with the **Pixel Helper** Chrome extension. Tag managers work; a bare `` tag (`https://www.facebook.com/tr?id=...&ev=...`) is the no-JavaScript fallback. Separate mobile sites need the pixel too. **Three ways to track conversions** (all require base code on the page): 1. **Standard events** — predefined actions via `fbq('track', 'EventName', {params})`, callable anywhere in ``, on page load or user action (e.g. a purchase-confirmation page firing `fbq('track', 'Purchase', {currency: "USD", value: 30.00});`). 2. **Custom events** — your own names via `fbq('trackCustom', 'ShareDiscount', {promotion: 'share_discount_10%'})`; names are strings ≤ 50 characters. 3. **Custom conversions** — URL-rule based, defined entirely in Events Manager (or via `POST /{AD_ACCOUNT_ID}/customconversions` with a `pixel_rule`), e.g. any page containing `/thank-you`. No code changes needed; max **100 custom conversions per ad account**. When running alongside [[concepts/conversions-api]], pass an `eventID` as the fourth `fbq('track')` parameter so Meta can deduplicate browser and server copies of the same event — full setup in [[syntheses/pixel-capi-setup]]. ## Key Parameters **The 17 standard events** (verbatim names): `AddPaymentInfo`, `AddToCart`, `AddToWishlist`, `CompleteRegistration`, `Contact`, `CustomizeProduct`, `Donate`, `FindLocation`, `InitiateCheckout`, `Lead`, `Purchase`, `Schedule`, `Search`, `StartTrial`, `SubmitApplication`, `Subscribe`, `ViewContent` (plus the automatic `PageView`). Each maps to a `promoted_object.custom_event_type` for optimization (e.g. `Purchase` → `PURCHASE`, `ViewContent` → `VIEW_CONTENT`, `Lead` → `LEAD`). **Parameter requirements that matter:** - `Purchase` **requires** `currency` and `value`. - Advantage+ catalog ads require `contents` or `content_ids` (+ `content_type`) on `ViewContent`, `Search`, `Purchase`, and `contents` on `AddToCart` — these are what link events to catalog items (see [[concepts/audiences]] dynamic product audiences). **Object properties** (attachable to standard and custom events as a JSON third argument): `content_category`, `content_ids` (SKU array), `content_name`, `content_type` (`product` | `product_group` — must match the ID type, else Meta matches every item with that ID), `contents` (array of `{id, quantity}` objects — both fields required), `currency`, `num_items` (with `InitiateCheckout`), `predicted_ltv` (with `StartTrial`/`Subscribe`), `search_string` (with `Search`), `status` (with `CompleteRegistration`), `value`, `delivery_category` (`in_store` | `curbside` | `home_delivery`). Custom properties are allowed alongside these. ## When To Use - Install the pixel before spending anything — conversion campaigns need event history, and community guidance warns a brand-new pixel can't support conversion optimization out of the gate (run traffic/engagement to seed data first). - Fire standard events wherever a predefined name fits: standard events feed optimization (`optimization_goal=OFFSITE_CONVERSIONS` with `promoted_object` pixel + `custom_event_type`) and ready-made reporting columns. Use custom events only for actions with no standard equivalent; use custom conversions when you can't touch code or need URL-sliced variants of an event. - Tie event firing to real completion (confirmation page, or button `onclick` for single-page flows) rather than intent pages, unless you *want* the looser signal. ## Risks & Pitfalls - **Flagged custom conversions** (from September 2, 2025): rules suggesting health conditions or financial status are blocked from campaign use (`is_unavailable: true`); once a campaign is published you cannot swap its custom conversion — duplicate the campaign instead. Appeals run through Events Manager/Ads Manager. - Custom-conversion URL rules need genuinely unique URL strings; ambiguous URLs ("thank-you" appearing on multiple flows) silently overcount. - Parameter keys used to build custom audiences must not contain spaces. - Tracking pixels are **not** applied to ads by default for conversion campaigns — the pixel must be referenced explicitly (`promoted_object.pixel_id`; offsite tracking via the `fb_pixel` field in the ad's `tracking_specs`). - The IMG-only pixel can't fire on dynamic actions, caps payloads at HTTP GET size, and loses the JS pixel's async/cache-busting benefits — use it only as a fallback. - Browser-side tracking degrades under ad blockers and privacy features; pair the pixel with [[concepts/conversions-api]] and dedupe with `eventID` rather than choosing one channel. - Insights on custom conversions don't support product-ID breakdowns or unique action counts. ## Related Concepts - [[concepts/conversions-api]] — the server-side counterpart and redundancy layer - [[concepts/audiences]] — website custom audiences and dynamic product audiences built on pixel events - [[concepts/attribution-reporting]] — how tracked conversions are attributed and reported - [[concepts/budgets-bidding]] — pixel events as optimization goals - [[syntheses/pixel-capi-setup]] — operational setup walkthrough - [[entities/marketing-api]] ## Sources - `raw/web_community-get-started-meta-pixel-documentation-meta-for-developers.md` — base code, installation, Pixel Helper - `raw/web_community-reference-meta-pixel-documentation-meta-for-developers.md` — standard events table, object properties, `eventID` - `raw/web_community-conversion-tracking-meta-pixel-documentation-meta-for-develo.md` — standard vs custom events vs custom conversions, flagging, limits - `raw/web_community-website-custom-audiences.md` — pixel-per-account, audience rules built on events --- title: "Special Ad Categories" type: concept tags: [special-ad-categories, policy, housing, employment, credit, siep, compliance, well-established] created: 2026-06-11 updated: 2026-06-11 marketing_api_version: "v25.0" confidence: high sources: ["raw/web_community-special-ad-categories.md", "raw/web_community-discriminatory-practices-transparency-center.md", "raw/web_community-ads-about-social-issues-elections-or-politics-transparency-c.md", "raw/web_community-ad-campaign-group.md"] --- # Special Ad Categories ## Definition Special Ad Categories are mandatory campaign-level declarations for ads in regulated areas — housing, employment, credit/financial products and services, and social issues, elections or politics (SIEP). Declaring one restricts the targeting toolkit (for housing/employment/financial) or triggers authorization and disclaimer requirements (for SIEP). The system exists because Meta's Discriminatory Practices ad standard prohibits using audience tools to wrongfully target or exclude people by protected attributes, and it was formalized as part of a historic civil-rights settlement over housing, employment and credit ads. ## How It Works **Declaration is universal.** Every campaign creation must pass `special_ad_categories` (an array; it replaced the older string `special_ad_category` as of Marketing API v7.0). If nothing applies, send `NONE` or an empty array — omitting the field fails the call. Available enum values: `HOUSING`, `EMPLOYMENT`, `CREDIT`, `FINANCIAL_PRODUCTS_SERVICES`, `ISSUES_ELECTIONS_POLITICS`, `ONLINE_GAMBLING_AND_GAMING`, `NONE`. When any category is selected you must also set `special_ad_category_country` (array of ISO Alpha-2 codes). `FINANCIAL_PRODUCTS_SERVICES` replaced the `CREDIT` input as of January 14, 2025, and is required for US-based advertisers or US-reaching financial-services campaigns; the underlying credit policy still applies in the US, Canada and parts of Europe. **Who must declare housing/employment/financial:** advertisers based in the US or reaching the US (since December 2019), Canada (since December 3, 2020), or Europe (since December 7, 2021). Businesses entirely outside those regions still pass the field but may opt out with `NONE`. **SIEP is different:** the `special_ad_categories` label itself doesn't restrict targeting. Instead, advertisers must complete Meta's authorization process in each country (start at facebook.com/id), the Page/ad account must be eligible, `special_ad_category_country` must be a country the user and Page are authorized in, and the ad creative must set `authorization_category=POLITICAL` (or, since January 9, 2024, `POLITICAL_WITH_DIGITALLY_CREATED_MEDIA` for digitally created/altered media). SIEP ads carry a verified **"Paid for by"** disclaimer and enter the Ad Library. Campaigns are all-or-nothing: you cannot mix SIEP and non-SIEP ads in one campaign, and you can no longer mark individual ads. ## Key Parameters - `special_ad_categories` (required, array) and `special_ad_category_country` - `authorization_category` enum `POLITICAL` / `POLITICAL_WITH_DIGITALLY_CREATED_MEDIA` (ad creative level, SIEP) - `tune_for_category` (ad set level) — one-call retrofit of an existing ad set's audience to category-compliant settings - `is_eligible_for_sac_campaigns` — check whether a customer-list custom audience can be used in a Special Ad Category campaign (with `special_ad_categories` + `special_ad_category_countries` query params) **What's limited for `HOUSING` / `EMPLOYMENT` / `FINANCIAL_PRODUCTS_SERVICES`** (enforced with hard errors, mostly `error_code` 2909035): | Removed | Still supported | |---|---| | **Lookalike Audiences** (inclusion *and* exclusion) | Custom Audience inclusion & exclusion | | Saved Audiences | Custom Audience expansion | | Custom age ranges — fixed to 18–65+ (exception: European credit ads may set a different range) | Advantage+ Audience | | Gender selection — all genders only | Detailed Targeting Expansion | | Location exclusion; radius below 15 mi / 25 km (US/Canada) or 15 km (Europe); location types `subcity`, `neighborhood`, `metro_area`, `small_geo_area`, `subneighborhood`, `electoral_district`, `zips` | Broad location (country/region/city with compliant radius) | | Behavior & demographic detailed targeting; interest exclusions; detailed-targeting exclusions; non-approved interests | Approved interest list | | Bid multipliers | — | Also: Reach and Frequency (Reservation) buying is disabled for housing, employment and credit ads, and Advantage+ catalog ads using Home Listing Catalogs must declare `HOUSING`. **SIEP policy obligations** (Transparency Center): comply with local law (disclaimers, blackout periods, foreign-interference and spend-reporting rules); since **October 6, 2025**, SIEP ads are **prohibited in the EU** under the TTPA regulation; no Washington-state electoral ads (or Seattle legislation ads); in the US, Brazil, India, Israel, Mexico and the UK, ads must not discourage voting, delegitimize an election, or claim premature victory; AI-generated photorealistic media depicting real people doing things they didn't do (etc.) must be disclosed, with automated "AI Info" labeling rolling out June 1, 2026. Missing disclaimers ⇒ disapproval at review or takedown after community/automated flagging. ## When To Use - Declare honestly and early: Meta supplements self-identification with human review and machine learning; misdeclared ads get paused until the campaign is fixed, and repeated abuse escalates (see [[concepts/account-issues]]). - Borderline cases (e.g. a fintech blog promoting a credit-card comparison, a realtor's brand awareness ad) usually still count — the category attaches to the *opportunity offered*, not your industry label. Check [[entities/policy-catalog]] and the triage flow in [[syntheses/rejection-account-triage]]. - Use `tune_for_category` to bring legacy ad sets into compliance in one call instead of hand-editing targeting. - For audience strategy inside the constraints: lean on customer-file custom audiences (inclusion/exclusion both work) plus broad targeting with Advantage expansion — the supported list above is effectively Meta's recommended playbook ([[concepts/advantage-targeting]]). ## Risks & Pitfalls - A certification gate can block delivery entirely: error 2859024 "Certification Required" means a business admin must accept the non-discrimination policy in Business Settings before any ads run. - Existing campaigns defaulted to `NONE`; editing an old housing/employment/credit campaign without re-declaring trips enforcement. - Lookalike removal is total — including lookalike *exclusions* ("Excluding Lookalike Audiences is unavailable..."). - SIEP authorization is per-country and per-Page; an authorized user with an unauthorized Page (or vice versa) still fails. - The EU SIEP ban (Oct 6, 2025) is a hard stop, not a restriction — plan European advocacy campaigns off-platform. - Don't conflate restrictions: SIEP does **not** lose lookalikes or age targeting; housing/employment/financial do not need authorization or disclaimers. ## Related Concepts - [[concepts/audiences]] — the targeting features being restricted - [[concepts/advantage-targeting]] — expansion features that remain available - [[concepts/campaign-structure]] — where the declaration lives - [[concepts/ad-policies]] — the wider ad-standards system - [[concepts/account-issues]] — enforcement and appeals - [[entities/policy-catalog]], [[syntheses/rejection-account-triage]] ## Sources - `raw/web_community-special-ad-categories.md` — declaration mechanics, restrictions, milestones, error codes - `raw/web_community-discriminatory-practices-transparency-center.md` — the underlying non-discrimination ad standard - `raw/web_community-ads-about-social-issues-elections-or-politics-transparency-c.md` — SIEP authorization, disclaimers, EU ban, AI disclosure - `raw/web_community-ad-campaign-group.md` — `special_ad_categories` field requirement, v7.0 array migration, Reach & Frequency exclusion --- title: "Instagram Ads" type: entity tags: [instagram, placements, formats, reels, stories, carousel] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-instagram-ads-everything-you-need-to-know-in-2026.md", "raw/web_community-instagram-carousel-ads.md", "raw/web_community-placement-targeting.md"] --- # Instagram Ads ## Overview Instagram ads are paid posts delivered across Instagram surfaces — Feed, Stories, Reels, Explore, profile feeds, and search — always marked with a "Sponsored" tag. They are bought through the same Meta Ads Manager / Marketing API stack as Facebook ads: Instagram is a `publisher_platforms` value with its own `instagram_positions` in the ad set targeting spec, not a separate ad platform. Beyond ordinary posts they add CTA buttons, product tags, and links. ## Characteristics **Formats** (Hootsuite 2026 guide, attributed): | Format | Where it shows | Notes | |---|---|---| | Image ads | Feed, Explore | Static visual; Instagram recommends minimal overlaid text | | Video ads (feed) | Main feed | Tap opens the landing page immediately | | Reels ads | Home feed + Reels feed | Full-screen 9:16, ≤60s (shorter performs better); loops; CTA at bottom; likes/comments/shares/saves enabled | | Story ads | Between Stories | Full screen; photo, video, or carousel; CTA via swipe-up/link sticker; can use organic Story features (filters, GIFs, stickers) | | Carousel ads | Feed, Stories, search | 2–10 swipeable cards, each with its own link/CTA | | Collection ads | Feed | Catalog-driven; opens an Instant Experience Storefront in-app | | Explore ads | Explore grid + related-content scroll | Reuses existing feed assets | | Shopping ads | Shoppable surfaces | Tags products from the catalog; in-app product page (Instagram Checkout where available) | **Cost benchmarks** (2025 averages, Hootsuite): CPC $1.31, CPM $15.26, CPE $0.067, CPL $11.31. Drivers: audience size (niche = pricier), industry competition, seasonality (Q4 spikes), placement, bidding strategy (automated bidding generally more efficient than manual). **API positions** (`instagram_positions`, verbatim): `stream`, `story`, `explore`, `explore_home`, `reels`, `profile_feed`, `ig_search`, `profile_reels`. `stream` also serves Instagram desktop/mobile *web* feeds for eligible objectives. Threads delivery piggybacks on Instagram (`threads_stream` requires `stream`); WhatsApp `status` requires Instagram `story`. Full constraint table: [[entities/placements-catalog]]. **Instagram carousel specifics** (official carousel doc): created via `object_story_spec.link_data.child_attachments` with `instagram_user_id` set — minimum 2 cards (3 for `MOBILE_APP_INSTALLS` / `MOBILE_APP_ENGAGEMENT`). Differences vs. Facebook carousels: `multi_share_optimized` and `multi_share_end_card` have **no effect** on Instagram (no end cards; only the first 5 attachments are used if more are provided when optimized ordering is off); every attachment needs `link`; CTA defaults to "Learn more"; `caption` sets the display URL; `description` fields are ignored; card `name` renders between media and message. Image cards: `picture` or `image_hash` required (no default from `link_data`), final image ≥600×600. Video cards: square, ≥600px/side, ≤60s, thumbnail required, auto-play and loop. **Stories carousels**: up to 10 cards; `portrait_customizations.carousel_delivery_mode` = `optimal_num_cards` (default — Meta tailors how many cards show before "Expand Story") or `fixed_num_cards` (max 3 shown; may raise costs; not supported for Catalog Sales; per-card videos limited to 15s). Standalone Stories placement supports 9:16 and non-9:16 (no mixed ratios); mixed/automatic placements drop 9:16. ## How to Use 1. Connect an Instagram account (or advertise via the linked Facebook Page identity) and create the campaign in Ads Manager with a supported objective; at the ad set level select `publisher_platforms: ["instagram"]` (Instagram can't pair with `device_platforms: ["desktop"]` alone) and pick `instagram_positions`, or leave Advantage+ placements on. 2. Via API, supply `instagram_user_id` in `object_story_spec` (and/or `source_instagram_media_id` / `instagram_permalink_url` to promote existing posts — see [[concepts/creative-formats]]). 3. Match creative to surface: vertical 9:16 for Stories/Reels, 1:1 or 4:5 for feed; design mobile-first with minimal text. 4. Sanity-check bids with a draft campaign's Audience Definition / Estimated Daily Results panels before launch (Hootsuite tip); Shopping ads require an Instagram Shopping product catalog first. ## Related Entities - [[entities/placements-catalog]] — full placement space and combination rules - [[concepts/creative-formats]] — specs, asset feed, Advantage+ creative enhancements - [[entities/marketing-api]] — the buying surface behind Ads Manager - [[concepts/advantage-plus-campaigns]] — automated campaigns deliver heavily to Instagram surfaces - [[concepts/attribution-reporting]] — split results with `publisher_platform` / `platform_position` breakdowns --- title: "Marketing API" type: entity tags: [marketing-api, graph-api, automation, tooling, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-overview.md", "raw/web_community-ad-campaign-group.md", "raw/web_community-ad-set.md", "raw/web_community-ad.md", "raw/web_community-ads-insights-api.md", "raw/web_community-get-started.md", "raw/web_community-manage-your-ad-object-s-status.md"] --- # Marketing API ## Overview The Marketing API is Meta's programmatic interface for advertising — a set of Graph API endpoints (`graph.facebook.com/v25.0/...`) for automating ad creation, management, and performance analysis across Facebook, Instagram, Messenger, WhatsApp, Threads, and Audience Network. Everything Ads Manager does, it does over this API; Ads Manager is effectively a UI on the same object model, which is why API field names (e.g., `special_ad_categories`, `optimization_goal`) map directly to Ads Manager settings. ## Characteristics **Object model** — a strict hierarchy, each level owning specific settings: | Level | API object/endpoint | Owns (per official overview) | |---|---|---| | Campaign | Ad Campaign Group — `/act_/campaigns` | Objective (validated down the tree), `special_ad_categories` (required on every create/edit — `housing`/`employment`/`credit`/SIEP or empty array), buying type | | Ad set | `/act_/adsets` | Schedule, budget, bidding (`billing_event`, `optimization_goal`, `bid_strategy`), audience (`targeting` incl. placements), `promoted_object` | | Ad | `/act_/ads` | The creative (`creative_id` or inline spec), `tracking_specs`, `status` | | Ad creative | `/act_/adcreatives` | Visual elements only; immutable once created; stored in the account creative library for reuse | Cross-cutting surfaces: the Insights edge (`//insights` at account/campaign/ad set/ad level — see [[concepts/attribution-reporting]]), audiences (`/customaudiences`), the Conversions API datasets ([[concepts/conversions-api]]), and status lifecycle management (`ACTIVE`/`PAUSED`/`ARCHIVED`/`DELETED`, `effective_status`; parent status cascades to children). **Limits worth knowing**: 200 ad sets per campaign (and CBO campaigns with >70 ad sets lock their bid strategy/CBO toggle); 5,000 non-deleted ad sets per account; 100,000 archived objects per type; ad-account-level rate limiting (error 80004 / 613); `date_preset=maximum` returns at most 37 months of history (`lifetime` is gone as of v10.0). **Versioning**: explicitly versioned (v22.0–v25.0 current range); breaking changes ride version releases — e.g., v25.0 removed ASC creation via `smart_promotion_type` ([[concepts/advantage-plus-campaigns]]) and v22.0 unbundled standard enhancements ([[concepts/creative-formats]]). Tools must track the changelog. **Access tiers**: apps get **Limited Access** (formerly "Standard Access") by default; **Full Access** (formerly "Advanced Access") unlocks at 500 Marketing API calls in the past 15 days. Development-access apps can't make Ads API calls beyond their own admin accounts (error 270). Insights additionally requires the `ads_read` permission. ## How to Use Prerequisites: a Meta **app**, a **Business Manager**, an ad account, and an access token (user token via OAuth or a system-user token from Business settings; CAPI tokens can be generated in Events Manager without App Review). Minimal end-to-end flow: ``` POST /act_/campaigns # name, objective, special_ad_categories, status POST /act_/adsets # campaign_id, daily_budget, billing_event, # optimization_goal, targeting, promoted_object POST /act_/adcreatives # object_story_spec (page_id + link_data/...) POST /act_/ads # adset_id, creative={"creative_id": ...}, status=PAUSED GET //insights # fields, breakdowns, date_preset ``` Create ads `PAUSED` during testing to avoid accidental spend; use `execution_options=["validate_only"]` (optionally with `synchronous_ad_review` for integrity checks like language and image-text rules, or `include_recommendations`) to dry-run calls. Campaign stats are deduped across ad sets. **Who needs it**: ad-tech vendors and reporting dashboards, agencies automating bulk operations and rules (pause/scale on conditions), ecommerce platforms syncing catalogs and CAPI events, and in-house teams managing creative testing at a scale Ads Manager's UI can't. Solo advertisers running a handful of campaigns generally don't — Ads Manager exposes the same levers with guardrails. The practical division: **Ads Manager for judgment, Marketing API for volume**; this KB cites API field names throughout precisely because they're the stable layer under the shifting UI. ## Related Entities - [[concepts/campaign-structure]] — the campaign → ad set → ad model as a working concept - [[concepts/conversions-api]] — the server-side event arm of the same API surface - [[concepts/attribution-reporting]] — the Insights edge in depth - [[entities/placements-catalog]] — the targeting-spec placement fields - [[concepts/advantage-plus-campaigns]] — `advantage_state` mechanics and version-migration deadlines - [[concepts/account-issues]] — object status lifecycle and `WITH_ISSUES` --- title: "Placements Catalog" type: entity tags: [placements, delivery, catalog, targeting, foundational] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-placement-targeting.md"] --- # Placements Catalog ## Overview A CATALOG of the Meta placement space: every publisher platform and position an ad can serve on, as defined by the Marketing API placement-targeting reference (v25.0). Placements live in the ad set's `targeting` spec via `device_platforms`, `publisher_platforms`, and per-platform position arrays (`facebook_positions`, `instagram_positions`, `threads_positions`, `audience_network_positions`, `messenger_positions`, `whatsapp_positions`). Anything you leave unset defaults to *all* positions for that field (Advantage+ placements behavior), and Meta may auto-add new positions as they launch. ## Characteristics **Platforms (`publisher_platforms`):** `facebook`, `instagram`, `threads`, `messenger`, `audience_network` (plus `whatsapp` for status ads). If you provide the list at all, it must include `facebook`. `audience_network` can never be used alone. **Facebook positions (`facebook_positions`):** | Position | What it is | Key constraints | |---|---|---| | `feed` | Desktop/mobile Feed incl. mobile Friends Tab | Most formats; the anchor placement many others require | | `right_hand_column` | Desktop right column | Image-led only; no video/collection/canvas alone; v3.0+: single image/video/carousel for `TRAFFIC`, `CONVERSIONS`, `PRODUCT_CATALOG_SALES` | | `marketplace` | Marketplace browse | Must be paired with `feed` | | `video_feeds` | Video feed environments | — | | `story` | Facebook Stories (mobile-only) | Requires Facebook `feed` or Instagram `story` + `device_platforms: mobile` | | `search` | Facebook search results | Must be paired with `feed` | | `instream_video` | Mid-video ads | Standalone only in US/GB/FR/ES/DE/MX/IN/TH for `VIDEO_VIEWS`/`POST_ENGAGEMENT`; not supported for `CONVERSIONS` | | `facebook_reels` | Ads in Facebook Reels | 9:16 video | | `facebook_reels_overlay` | Banner/sticker overlays on Reels | 1.91:1 or 1:1 image | | `profile_feed` | Profile feed | Must be paired with `feed` | | `notification` | Notifications tab | Must be paired with `feed` | **Instagram positions (`instagram_positions`):** | Position | What it is | Key constraints | |---|---|---| | `stream` | Instagram Feed (also serves desktop/mobile web feeds) | Web eligibility for `BRAND_AWARENESS`, `REACH`, `LINK_CLICKS`, `POST_ENGAGEMENT`, `VIDEO_VIEWS`, `CONVERSIONS` | | `story` | Instagram Stories | 9:16; carousel allowed but not combined with unprompted carousel in stories in same ad set | | `explore` | Explore grid | — | | `explore_home` | Explore home | — | | `reels` | Instagram Reels | 9:16 video | | `profile_feed` | Profile feed | — | | `profile_reels` | Reels on profiles | — | | `ig_search` | Instagram search results | Carousel supported with `stream`/`story` | **Other platforms:** | Position | What it is | Key constraints | |---|---|---| | `threads_stream` (`threads_positions`) | Threads feed | Requires Instagram `stream` + both `instagram` and `threads` in `publisher_platforms` | | `classic` (`audience_network_positions`) | Native/banner/interstitial in partner apps | AN never standalone; `VIDEO_VIEWS` objective requires `THRUPLAYS` optimization | | `rewarded_video` (`audience_network_positions`) | Opt-in rewarded video in apps | Same AN rules | | `sponsored_messages` (`messenger_positions`) | Ads inside Messenger threads | Cannot combine with any other placement | | `story` (`messenger_positions`, default) | Messenger Stories (mobile-only) | Requires Facebook `feed` or Instagram `story`; single image/video for `CONVERSIONS`, `TRAFFIC`, `REACH`, `BRAND_AWARENESS`, `APP_INSTALLS` | | `status` (`whatsapp_positions`) | WhatsApp Status ads | Requires Instagram `story` + Ads that Click to WhatsApp configuration | **Combination logic:** within one parameter, options OR together; between parameters, AND. Impossible combos (e.g., `publisher_platforms:['instagram']` + `device_platforms:['desktop']`) error out. **Brand safety:** `brand_safety_content_filter_levels` controls adjacency with verbatim values per surface — in-content: `FACEBOOK_RELAXED`/`FACEBOOK_STANDARD`/`FACEBOOK_STRICT`; Audience Network: `AN_RELAXED`/`AN_STANDARD`/`AN_STRICT`; feeds: `FEED_RELAXED`/`FEED_STANDARD`/`FEED_STRICT` (Expanded/Moderate/Limited in Ads Manager). Account-level filters cap how permissive campaigns can be. Also `excluded_publisher_categories` (`dating`, `gambling`; for AN/in-stream also `debated_social_issues`, `mature_audiences`, `tragedy_and_conflict`) and `excluded_publisher_list_ids` (block lists). **Limited spend on exclusions:** even excluded placements may receive up to 5% of spend each when likely to improve performance, unless you pass those positions in `placement_soft_opt_out` on the ad set. ## How to Use Set placements in the ad set targeting spec: ``` POST /act_/adsets targeting={ "geo_locations": {"countries": ["US"]}, "publisher_platforms": ["facebook"], "facebook_positions": ["feed"] } ``` In Ads Manager this is the Placements section of ad set creation (Advantage+ placements = leave everything default; Manual = pick positions). To verify what will actually deliver, read `effective_*` fields (`effective_publisher_platforms`, `effective_facebook_positions`, `effective_instagram_positions`, `effective_audience_network_positions`, `effective_device_platforms`) on the ad set, or call `/ad_campaign_placement` with `billing_event`, `buying_type`, `objective` (+ optional `optimization_goal`, `promoted_object`) to get effective placements plus `recommendations` explaining filtered-out positions (e.g., code `1815609` "Placement Not Supported By Objective"). Available placements depend on campaign objective — see [[concepts/campaign-structure]] and [[summaries/odax-migration]] for objective mapping. ## Related Entities - [[entities/instagram-ads]] — deep dive on the Instagram positions above - [[entities/marketing-api]] — targeting spec lives on the ad set object - [[concepts/creative-formats]] — format/aspect-ratio requirements per placement - [[concepts/advantage-targeting]] — Advantage+ placements as the automated default - [[concepts/attribution-reporting]] — report by `publisher_platform`/`platform_position` breakdowns --- title: "Policy Catalog (Advertising Standards Map)" type: entity tags: [policy, catalog, compliance, transparency-center] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: ["raw/web_community-introduction-to-the-advertising-standards-transparency-cente.md", "raw/web_community-unacceptable-business-practices-transparency-center.md", "raw/web_community-fraud-scams-and-deceptive-practices-transparency-center.md", "raw/web_community-discriminatory-practices-transparency-center.md", "raw/web_community-financial-and-insurance-products-and-services-transparency-c.md", "raw/web_community-ads-about-social-issues-elections-or-politics-transparency-c.md"] --- # Policy Catalog (Advertising Standards Map) ## Overview A CATALOG mapping the transparency.meta.com Advertising Standards category tree: every policy family, what it covers, and where it lives. Root: `transparency.meta.com/policies/ad-standards/`. Six of these policies are captured in full in raw/ (marked ✦); the rest are mapped from the Introduction's per-policy summaries. Detailed treatment of the practitioner-critical policies: [[concepts/ad-policies]]. ## Characteristics **Community Standards (baseline)** — Ads must additionally comply with all Community Standards. **Unacceptable content** — illegal or unacceptable content: | Policy | Covers | |---|---| | Child Sexual Exploitation, Abuse, and Nudity | Zero tolerance; reported to NCMEC | | Coordinating Harm and Promoting Crime | No facilitating/organizing criminal or harmful activity | | Dangerous Organizations and Individuals | No praise/support/representation of designated entities | | Discriminatory Practices ✦ | No discrimination via content or targeting tools; triggers Special Ad Categories for housing/employment/financial (`.../unacceptable-content/discriminatory-practices/`) | | Hateful Conduct | No attacks on protected characteristics | | Human Exploitation | No human trafficking facilitation | | Locally Illegal Content, Products or Services | Removal on lawful local reports | | Misinformation | No fact-checker-debunked content; repeat offenders restricted | | Vaccine Discouragement | No advocating against vaccination | **Fraud, Scams, and Deceptive Practices**: | Policy | Covers | |---|---| | Fraud, Scams and Deceptive Practices ✦ | Ads addendum to the Community Standard: no incurable-disease cure claims (exhaustive 11-disease list), no timed health promises without disclaimers, no health click-bait (`.../fraud-scams/fraud-scams-deceptive-practices/`) | | Unacceptable Business Practices ✦ | No deceptive/misleading schemes (money or personal info); extra verification for suspicious advertisers (`.../fraud-scams/unacceptable-business-practices/`) | **Restricted goods and services** — allowed with conditions (age gates, permission, licensing): | Policy | Covers | |---|---| | Alcohol | Local law + 18+ minimum targeting; banned in some countries | | Commercial Exploitation of Crises and Controversial Events | No crisis profiteering | | Dating Ads | Prior written permission + dating targeting requirements | | Hazardous Goods and Materials | No sale of hazardous goods | | Health and Wellness | Weight loss/cosmetic procedures 18+; no negative self-perception framing; adult products/reproductive health rules | | Historical Artifacts | No sale | | Sale of Human Body Parts and Bodily Fluids | No sale | | Non-Endangered Animals and Endangered Species | No endangered-species products; live animals only for adoption/rehoming/donation | | Tobacco and Related Products | No tobacco/nicotine/vaping; only WHO/FDA-approved cessation products | | Weapons, Ammunition or Explosives | No sale/use promotion incl. modification accessories | | Drugs and Pharmaceuticals | No illicit/recreational drugs; prescription/OTC/cannabis-derived have specific requirements | | Drug and Alcohol Addiction Treatment | US targeting requires LegitScript certification + Meta permission | | Financial and Insurance Products and Services ✦ | 18+ targeting, disclosures, licensing; prohibited list incl. Payday Loans, Binary Options, ICOs (`.../restricted-goods-services/financial-services/`) | | Cryptocurrency Products and Services | Trading platforms etc. need prior written permission | | Online Gambling and Games | Prior written permission; 18+ minimum | **Objectionable content**: | Policy | Covers | |---|---| | Adult Nudity and Sexual Activity | No nudity/sexually suggestive content | | Adult Sexual Exploitation | No non-consensual sexual content | | Adult Sexual Solicitation and Sexually Explicit Language | No solicitation; explicit language restricted | | Bullying and Harassment | No degrading attacks; heightened under-18 protections | | Profanity | None in ads | | Privacy Violations and Personal Attributes | No sharing/asking private info; no asserting or implying personal attributes (race, health, financial status, etc.) | | Violent and Graphic Content | No shocking/sensational/excessive violence | | Suicide, Self-Injury, and Eating Disorders | No encouragement, mockery, or graphic depiction | **Intellectual property**: Third-Party IP Infringement (no copyright/trademark violations or counterfeit goods); Using Meta Intellectual Property and Licenses (Brand Resource Center rules). **Social issue, electoral or political advertising**: Ads about Social Issues, Elections or Politics ✦ — authorization + "Paid for by" disclaimer; EU prohibition; genAI disclosure; 7-year Ad Library retention (`.../SIEP-advertising/SIEP/`). **Product and format-specific policies**: Video Ads (no disruptive tactics like flashing screens; entertainment trailers need permission + 18+); Lead Ads (13 categories of prohibited form questions — account numbers, criminal history, financial info, government IDs, health, insurance, political affiliation, race/ethnicity, religion, sexual orientation, prefill duplicates, trade union, usernames/passwords); Targeting (no discriminatory/predatory use); Relevance (ad must match product and landing page); Branded Content (must use branded content tool). **Advertising policies affecting business assets** (account-level enforcement): Account Integrity, Inauthentic Behavior, Cybersecurity (no phishing/malware), Spam, User Requests. **Data use restrictions + general terms**: limits on Meta advertising data use (aggregate/anonymous performance only; no profile building or transfer to data brokers); one client per ad account; Meta's sole-discretion rejection right; EU DSA Beneficiary/Payor fields. ## How to Use Navigate from the Introduction page (`transparency.meta.com/policies/ad-standards/`) — each policy above is a child page with Policy details and a CHANGE LOG (worth checking: e.g., Financial Services logged changes May 2026, Mar 2026, Dec 2025). When an ad is rejected, identify which family the rejection cites, read that policy's detail page, then follow [[syntheses/rejection-account-triage]]. Appeals for rejections and asset restrictions run through **Account Quality** ([[concepts/account-issues]]). For campaign setup implications (declaring categories, authorization flags), see [[concepts/special-ad-categories]] and [[concepts/creative-formats]]. ## Related Entities - [[concepts/ad-policies]] — narrative treatment of review, enforcement, and key categories - [[concepts/account-issues]] — what enforcement looks like from the advertiser side - [[concepts/special-ad-categories]] — the targeting-restriction regime Discriminatory Practices triggers - [[entities/marketing-api]] — policy-related API fields (`special_ad_categories`, `authorization_category`) --- title: "Activity Log" type: log --- # Activity Log Append-only record of all wiki changes. ## Format Each entry follows this format: ``` ### YYYY-MM-DD HH:MM — [Action Type] - **Source/Trigger**: what initiated the action - **Pages created**: list of new pages - **Pages updated**: list of updated pages - **Notes**: any contradictions flagged, decisions made ``` --- ### 2026-04-08 00:00 — Setup - **Source/Trigger**: Repository initialized - **Pages created**: index.md, log.md, dashboard.md, analytics.md, flashcards.md - **Pages updated**: none - **Notes**: Empty knowledge base ready for first source ingestion --- ### 2026-06-11 — [Initial compilation] - **Source/Trigger**: KB created via source-pipeline (URL-scoped gather + agent curation per RECIPE Phase 3, MEDIUM retention ring) - **Pages created**: full initial set — see index.md - **Sources**: 66 provenance-stamped files in raw/ (per-URL fetch-verified by scoping agent; official docs high confidence, community sources medium and attributed) - **Notes**: practitioner domain, no repo anchor; declared gaps in index.md Gaps/TODO --- title: "Community Field Notes: What Practitioners Report Beyond Official Docs" type: summary tags: [community-practice, budgets-bidding, learning-phase, attribution, metrics, account-issues, advantage-plus] created: 2026-06-11 updated: 2026-06-11 confidence: medium sources: [ "raw/web_community-cbo-now-advantage-campaign-budget-or-abo.md", "raw/web_community-cbo-facebook-ads-2026-complete-guide-to-budget-optimization.md", "raw/web_community-about-the-facebook-ads-learning-phase-2025-update.md", "raw/web_community-how-to-exit-the-facebook-ads-learning-phase-quicker-social-m.md", "raw/web_community-15-facebook-ads-metrics-that-maximize-roi-for-your-clients-s.md", "raw/web_community-leadenforce-facebook-attribution-window-explained-how-it-imp.md", "raw/web_community-meta-attribution-in-2025-how-to-track-facebook-ads-with-meta.md", "raw/web_community-facebook-ads-rejected-here-s-what-to-do-social-media-examine.md", "raw/web_community-facebook-ad-account-disabled-appeal-step-by-step-guide-2026.md", "raw/web_community-leadenforce-how-to-get-your-disabled-facebook-ad-account-bac.md", "raw/web_community-understanding-meta-s-advantage-sales-campaigns-2026-guide.md", "raw/web_community-6-facebook-campaign-objectives-explained-2026-odax-guide.md" ] --- # Community Field Notes: What Practitioners Report Beyond Official Docs This page distills what Meta Ads practitioners report from running real accounts — claims that go beyond, and sometimes contradict, official Meta guidance. **Everything on this page is medium confidence at best**: single-vendor datasets, agency anecdotes, and blog heuristics. Each claim cluster is attributed. For official semantics, see [[syntheses/budget-bid-recipes]], [[syntheses/pixel-capi-setup]], and [[concepts/budgets-bidding]]. ## Key Points ### CBO vs ABO (budget allocation) *Attributed to: Lebesgue (lebesgue.io, e-commerce analytics vendor, aggregated Shopify-brand data); Cropink (cropink.com, 2026 guide)* - Lebesgue's aggregated data: **ABO (ad set budgets) delivered an average ROAS of 94% for prospecting ads compared to 81% for CBO** (Advantage campaign budget). They conclude ABO is, on average, the better choice for e-commerce businesses maximizing ROAS — directly contrary to Meta's nudge toward campaign-level automation. - Consensus split across both sources: **CBO for scaling proven campaigns and reducing management overhead; ABO for testing** new audiences/creatives/regions where you need equal spend distribution and clean reads. CBO may prematurely favor one ad set in a split test. - Cropink's CBO operating rules: **start with 3–5 ad sets per campaign**; avoid editing during the **first 3–5 days**; scale budgets by **no more than 10–20% every 2–3 days** (vertical scaling) or duplicate winning campaigns and change one variable (horizontal scaling); set **minimum spend limits** on cold/niche ad sets so warm traffic doesn't absorb everything; check **audience overlap** before launch — overlapping ad sets compete in the auction and inflate CPMs. - CBO is campaign-level optimization: judge it on campaign-level CPA/ROAS, not by switching off individual ad sets that appear weak in isolation (Cropink). ### Learning-phase exit tactics *Attributed to: Lebesgue (2025 learning-phase update); Charlie Lawrance / Social Media Examiner* - Both sources state the exit threshold as **50 optimization events per ad set within 7 days** (Lebesgue phrases it as 30–50). Below that the ad set goes to "Learning Limited." - Budget-sizing formula (Lawrance/SME): required daily budget = **current cost per result × 50 ÷ 7**. Example: $10 cost per purchase → $500 over 7 days → **$72/day per ad set**. With CBO, multiply by the number of ad sets. - Structural advice (both): **use fewer ad sets** — consolidate so the same budget concentrates on fewer learning processes. Lebesgue recommends **3 to max 5 ad sets with 1 ad per ad set**; 10 ad sets would mathematically need ~500 conversions to all exit learning. - Avoid learning resets (Lawrance/SME): the three big reset triggers are **budget changes of more than 20% (per ~72 hours)**, **changing audiences in an existing ad set**, and **adding new ads to an existing ad set**. Workaround for the last: **bulk-create 5–6 ads at launch, keep most paused, and rotate them on/off later** — toggling existing ads does not reset learning, adding new ones does. - Lebesgue's reset-trigger list also includes: bid amount, bid strategy, optimization event, targeting, placements, and pausing an ad set 7+ days. - Contrarian finding (Lebesgue, aggregated multi-account data): ad sets **still in the learning phase showed ~10% lower CAC** than ad sets that had exited — exiting learning does not magically improve CPA, partly because frequency and audience saturation rise after exit. Their conclusion: exiting learning "isn't a necessity." - Both sources warn **against** Meta's own recommendation to switch the optimization event to a higher-funnel action (e.g., add-to-cart instead of purchase) just to exit learning: you exit faster but optimize toward an audience that adds to cart and doesn't buy. "Always optimize for purchases" (Lebesgue) if purchases are the goal. - Broad targeting helps: Lebesgue cites Meta's guidance that audiences of **at least 2 million** often perform better, and reports most of their customers now use broad targeting over interests/lookalikes. ### Metrics, benchmarks, and the 2025–2026 measurement shift *Attributed to: Swydo (swydo.com agency-reporting guide, citing Triple Whale 35,000-brand dataset and WordStream data)* - 2025 e-commerce medians: **ROAS 3:1–5:1**, **CPA $38.19**, **conversion rate 1.57%** (2%+ outperforming, 5%+ exceptional), **CPM $14.19 (up ~20% YoY)**, **CPC $0.70 for traffic campaigns / $1.92 for leads**, **CTR benchmark 1.5–2.5%** (e-commerce median 2.19%), add-to-cart rate target 5–8%. - Reported attribution-model changes (single source — treat as low-to-medium until corroborated): **7-day and 28-day view-through windows removed from the API on January 12, 2026** (some advertisers reportedly lost 30–40% of reported conversions overnight); click-through attribution narrowed to **link clicks only**; "engaged-view" became "engage-through" with the threshold dropped from 10s to **5 seconds**; claimed new default attribution: **7-day click, 1-day engage-through, 1-day view**. - **Incremental Attribution** (launched April 2025, per Swydo): holdout-based measurement of conversions the ad *caused*, available as a campaign-level performance goal; early adopters saw **20–24% more incremental conversions** vs standard attribution. - Platform drift: 100+ metrics removed from the Ads Insights API (October 30, 2024); Advantage+ on by default for Sales/Leads/App Promotion campaigns since ~Q2 2025; Offline Conversions API deprecated May 2025 (use [[concepts/conversions-api]] offline events instead). - Tracking accuracy claims: **pixel-only setups ≈ 40% attribution accuracy; Pixel + Conversions API recovers 20–30% of lost conversions; target Event Match Quality (EMQ) score ≥ 6.0 out of 10**. These specific percentages are vendor figures, not Meta-published numbers. ### Attribution-window field reports *Attributed to: LeadEnforce; Triple Whale; (Swydo, above)* - Default attribution setting reported by practitioners: **7-day click / 1-day view**. LeadEnforce cites Facebook data that **53% of paid-ad conversions occur within the first 48 hours** after the initial click. - Window choice by sales cycle (both sources): **1-day click** for impulse buys and flash sales; **7-day click / 1-day view** for considered purchases (default works for most); **7-day click** (or longer where available) for B2B/high-ticket with approval chains. - Triple Whale: attribution settings now combine reporting *and* optimization — the window you pick changes both what Ads Manager reports and which conversions the delivery system learns from. Post-iOS 14, Apple-device conversions follow modeled/estimated data; pairing the Pixel with the Conversions API is the standard fix. They also note the post-iOS 14 cap of **8 custom events/conversions** per domain for optimization. ### Rejection and disabled-account experiences *Attributed to: Andrea Vahl / Social Media Examiner; Cropink (2026 appeal guide); LeadEnforce* - The single most common rejection trap reported: **personal attributes** — ad copy that implies you know a trait of the viewer. Facebook's own example: "Meet Buddhists near you" is fine; "Meet other Buddhists" is not. Workaround: use testimonials/stories to describe the ideal customer instead of addressing the viewer's traits. The stated rejection reason in Ads Manager is sometimes simply wrong — dispute it if so. - Appeal mechanics practitioners actually use (see [[syntheses/rejection-account-triage]] for the full triage path): - **Request Review** button at the ad level in Ads Manager (Edit → Request Review). - **business.facebook.com/business/help** → Get Support (chat when available, else email); have your **Business account ID and Ad ID** ready. - **web.facebook.com/business-support-home** → Account status overview → select restricted account → "What you can do" → **Request review**; reviews typically take **48 hours**. - Ads Manager Help tray (question mark, bottom left) → **Contact support**; keep the description **under 1,000 characters**. - Track everything in the **Support Inbox** (facebook.com/support). - Hard limits reported by Cropink: accounts **disabled more than 180 days cannot be reinstated**; you get a **limited number of review requests** and once an appeal is reviewed **the decision is final** — make each appeal count (include error messages, specifics, steps taken, account/ad IDs). - LeadEnforce field experience: the first "final decision" rejection letter after an appeal **is usually AI-generated boilerplate — keep contacting support through the other routes**; write polite, brief, informative appeals; if you have a second ad account in good standing in the same Business Manager, use it to reach support. Do **not** immediately create a new account to route around a ban — that is circumvention and risks permanent loss. - Disable triggers practitioners see: policy violations (including on the landing page), repeated deleting/heavy-editing of already-approved ads, unpaid balances (easiest fix: pay), unusual activity (new login locations, failed payments, sudden spend spikes), and enforcement evasion (new accounts, same ads across accounts). ### Advantage+ in practice *Attributed to: Bïrch (bir.ch, formerly Revealbot) — ODAX guide and Advantage+ sales campaigns guide, including quoted media buyers* - Readiness bar for Advantage+ shopping/sales campaigns: **~50+ conversions per week**, broad audience appeal, multiple strong creatives, and budget to feed AI learning. "If your current funnel is broken... ASC won't fix that fundamental issue" (Kevin Heimlich, The Ad Firm). - Dominant pattern: **run ASC and manual campaigns in parallel** — ASC for high-volume mid-funnel sales, manual for niche targeting, retargeting control, and creative/message testing. Practitioners report Meta's automated creative enhancements "miss the mark" for most products and are routinely disabled (Alessandro Gargiulo). - Reported ASC structure changes (2025–2026): unlimited ad sets in the sales-campaign experience, **max 150 ads total, capped at 50 per ad set**, and a 0–100 "opportunity score" in Ads Manager. See [[concepts/advantage-plus-campaigns]]. - Objective selection caveat (Bïrch ODAX guide): the algorithm optimizes for who is likely to do the chosen action — buy Traffic and you get clickers, not buyers. A brand-new pixel usually cannot support a conversion campaign immediately; practitioners seed with traffic/engagement first to build audience data. See [[syntheses/objective-picker]]. ## Relevant Concepts - [[concepts/budgets-bidding]] — official CBO/ABO and bid-strategy semantics these field notes qualify - [[concepts/campaign-structure]] — ad-set count and consolidation tactics - [[concepts/attribution-reporting]] — windows, defaults, and the 2026 view-through removal - [[concepts/meta-pixel]] / [[concepts/conversions-api]] — the pixel-only vs CAPI accuracy claims - [[concepts/advantage-plus-campaigns]] / [[concepts/advantage-targeting]] — automation trade-offs - [[concepts/ad-policies]] / [[concepts/account-issues]] — rejection and disable experiences - [[syntheses/budget-bid-recipes]], [[syntheses/objective-picker]], [[syntheses/pixel-capi-setup]], [[syntheses/rejection-account-triage]] — decision guides that tier these claims against official docs ## Source Metadata | Source | Type | Author/Publisher | Date | Identifier | |---|---|---|---|---| | CBO (now Advantage Campaign Budget) or ABO? | Vendor blog (data-backed) | Lebesgue | 2025-06-24 | lebesgue.io/facebook-ads/advantage-budget-optimization-or-ad-set-budget-optimization | | CBO Facebook Ads 2026: Complete Guide | Vendor blog | Ansherina Opena, Cropink | 2026-03-24 | cropink.com/cbo-facebook-ads | | About the Facebook Ads Learning Phase [2025 Update] | Vendor blog (data-backed) | Lebesgue | 2024-01-21 (updated 2025) | lebesgue.io/facebook-ads/facebook-ads-learning-phase... | | How to Exit the Facebook Ads Learning Phase Quicker | Practitioner article | Charlie Lawrance, Social Media Examiner | undated | socialmediaexaminer.com/how-to-exit-the-facebook-ads-learning-phase-quicker/ | | 15 Facebook Ads Metrics That Maximize ROI | Agency-reporting guide | Swydo (citing Triple Whale, WordStream) | 2025–2026 | swydo.com/blog/facebook-ads-metrics/ | | Facebook Attribution Window Explained | Vendor blog | LeadEnforce | undated | leadenforce.com/blog/facebook-attribution-window-explained... | | Meta Attribution in 2025 | Vendor blog | Kaleena Stroud, Triple Whale | 2025-04-30 | triplewhale.com/blog/facebook-attribution | | Facebook Ads Rejected? Here's What to Do | Practitioner article | Andrea Vahl, Social Media Examiner | undated | socialmediaexaminer.com/facebook-ads-rejected-heres-what-to-do/ | | Facebook Ad Account Disabled Appeal [2026] | Vendor blog | Damaris Hinga, Cropink | 2026-03-25 | cropink.com/facebook-ad-account-disabled-appeal | | How To Get Your Disabled Facebook Ad Account Back | Vendor blog | LeadEnforce | undated | leadenforce.com/blog/how-to-get-your-disabled-facebook-ad-account-back | | Understanding Meta's Advantage+ Sales Campaigns [2026] | Vendor blog (practitioner quotes) | Ana Siu, Bïrch | 2025-08-08 | bir.ch/blog/advantage-plus-sales-campaigns-guide | | 6 Facebook Campaign Objectives Explained (2026 ODAX Guide) | Vendor blog | Ana Siu, Bïrch | 2025-06-06 | bir.ch/blog/facebook-ad-objectives | All sources fetched 2026-06-11. None are official Meta documentation; where they conflict with official docs, official docs win (see the synthesis pages). --- title: "ODAX Migration: Outcome-Driven Ad Experiences Objective Changes (Official Meta Blog)" type: summary tags: [objectives, odax, marketing-api, migration] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: [ "raw/web_community-an-update-to-ad-objectives-upcoming-api-changes-to-campaign-.md", "raw/web_community-every-facebook-ad-objective-available-in-2026-when-to-use-th.md" ] --- # ODAX Migration: Outcome-Driven Ad Experiences Objective Changes Summary of the official Meta for Developers blog post **"An update to ad objectives: Upcoming API changes to campaign creation using the original objectives"** by Jay Wei, published **February 13, 2023** (developers.facebook.com/blog/post/2023/02/13/outcome-driven-ad-experiences-update/). This is the canonical statement of the ODAX (Outcome-Driven Ad Experiences) objective consolidation as it landed in the Marketing API. ## Key Points - As first announced in **December 2021**, Meta redesigned the objective-selection experience, consolidating the **11 original objectives into 6 new (simplified) objectives**. - **Beginning with Marketing API v17.0** (released Spring 2023), campaigns can **only be created with simplified objectives**. Existing campaigns on original objectives were not impacted and could still be duplicated. - The endpoint affected is `POST {ad-account-id}/campaigns`. The following original objective values were **deprecated** (verbatim list from the post): - `APP_INSTALLS` - `BRAND_AWARENESS` - `CONVERSIONS` - `EVENT_RESPONSES` - `LEAD_GENERATION` - `LINK_CLICKS` - `LOCAL_AWARENESS` - `MESSAGES` - `OFFER_CLAIMS` - `PAGE_LIKES` - `POST_ENGAGEMENT` - `PRODUCT_CATALOG_SALES` - `REACH` - `STORE_VISITS` - `VIDEO_VIEWS` - Two opt-in parameters became obsolete and were deprecated with v17.0: the write parameter **`odax_opt_in`** on the Ad Account node, and the readable Ad Account field **`has_advertiser_opted_in_odax`**. - **Store traffic special case**: `STORE_VISITS` cannot be used for new campaigns. New store traffic campaigns use the simplified objective **`OUTCOME_AWARENESS`** (where store location features now live), with three required settings: - Campaign Objective = `OUTCOME_AWARENESS` - Ad set Promoted Object contains the **`PLACE_PAGE_SET_ID`** parameter - Ad set Optimization Goal = `REACH` - Prerequisite: a Page structure with a main Page (set up in Business Manager or via the Ad Page Place Set API) if the business operates multiple stores. ## Old → New Objective Mapping The blog post lists the deprecated enums and links to a mapping table (not ingested). The name-level mapping below is corroborated by the community source (WordStream, January 2026 — medium confidence for the mapping labels; the deprecated enum list above is official): | Original objective (pre-ODAX) | New simplified objective | |---|---| | Brand Awareness | Awareness | | Reach | Awareness | | Store Traffic (`STORE_VISITS`) | Awareness (official: `OUTCOME_AWARENESS` + `PLACE_PAGE_SET_ID` + `REACH`) | | Traffic (`LINK_CLICKS`) | Traffic (unchanged) | | Engagement (`POST_ENGAGEMENT`, `PAGE_LIKES`, `EVENT_RESPONSES`) | Engagement | | Video Views | Engagement | | Messages | Engagement or Leads | | Lead Generation | Leads | | Conversions | Engagement, Leads, or Sales (by conversion location) | | Catalog Sales (`PRODUCT_CATALOG_SALES`) | Sales | | App Installs | App Promotion | The six simplified objectives in Ads Manager: **Awareness, Traffic, Engagement, Leads, Sales, App Promotion**. API enum values confirmed verbatim elsewhere in this KB's official sources: `OUTCOME_AWARENESS` (this post), `OUTCOME_TRAFFIC` and `OUTCOME_SALES` (Marketing API bidding/Advantage+ docs — see [[syntheses/budget-bid-recipes]] and [[concepts/advantage-plus-campaigns]]). Per the community source: as of **January 2024** new campaigns could no longer be created on legacy objectives in Ads Manager either, and existing legacy campaigns had to be duplicated/converted by end of 2024 (medium confidence — Business Help Center page not ingested). ## Relevant Concepts - [[syntheses/objective-picker]] — how to choose among the 6 objectives today - [[concepts/campaign-structure]] — objective sits at the campaign level - [[concepts/budgets-bidding]] — optimization goals valid per objective - [[concepts/advantage-plus-campaigns]] — `OUTCOME_SALES` is the required objective for Advantage+ shopping campaigns - [[entities/marketing-api]] — versioned API where the deprecations landed ## Source Metadata - **Primary**: Official Meta for Developers blog post, author Jay Wei, published 2023-02-13. URL: developers.facebook.com/blog/post/2023/02/13/outcome-driven-ad-experiences-update/. Fetched 2026-06-11. Confidence: high (official). - **Secondary (mapping labels only)**: "Every Facebook Ad Objective Available in 2026 + When To Use Them," Kristen McCormick, WordStream, last updated 2026-01-07. URL: wordstream.com/blog/facebook-ad-objectives. Fetched 2026-06-11. Confidence: medium (community). --- title: "Budget & Bid Recipes: CBO vs ABO, Bid Strategy, and Learning-Phase-Aware Sizing" type: synthesis tags: [budgets-bidding, cbo, abo, bid-strategy, learning-phase, pacing, decision-guide] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: [ "raw/web_community-budgets.md", "raw/web_community-bidding-overview.md", "raw/web_community-advantage-campaign-budget.md", "raw/web_community-pacing-and-scheduling.md", "raw/web_community-graph-api-reference-v25-0-ad-campaign-learning-stage-info-do.md", "raw/web_community-cbo-facebook-ads-2026-complete-guide-to-budget-optimization.md", "raw/web_community-cbo-now-advantage-campaign-budget-or-abo.md", "raw/web_community-about-the-facebook-ads-learning-phase-2025-update.md", "raw/web_community-how-to-exit-the-facebook-ads-learning-phase-quicker-social-m.md" ] --- # Budget & Bid Recipes Decision guide for the three money levers in Meta Ads: **where the budget lives** (campaign vs ad set), **how bids are constrained** (bid strategy), and **how spend is released over time** (pacing). Official Marketing API semantics are stated first (high confidence); practitioner heuristics are tiered below them (medium confidence, attributed). Background: [[concepts/budgets-bidding]], [[concepts/campaign-structure]]. ## Comparison ### CBO (Advantage campaign budget) vs ABO (ad set budgets) — official semantics | Dimension | CBO / Advantage campaign budget | ABO (ad set budgets) | |---|---|---| | Budget fields | `daily_budget` / `lifetime_budget` **on the campaign** | `daily_budget` / `lifetime_budget` **per ad set** (amounts in the account currency's minimum denomination, e.g. cents) | | Allocation | Meta "automatically and continuously finds the best available opportunities for results across your ad sets and distributes your campaign budget in real time" (official) | You fix spend per ad set; disable CBO via `adset_budgets=[{"adset_id":..., "daily_budget":...}]` | | Bid strategy | Defined **at the campaign level**, shared by all ad sets: `LOWEST_COST_WITHOUT_CAP`, `COST_CAP`, `LOWEST_COST_WITH_BID_CAP`, `LOWEST_COST_WITH_MIN_ROAS` | Per ad set via `bid_strategy` / `bid_amount` | | Ad-set guardrails under CBO | `daily_min_spend_target`, `daily_spend_cap`, `lifetime_min_spend_target`, `lifetime_spend_cap` (best effort, not guaranteed; remove by setting `0` or empty) | n/a (budget itself is the control) | | Pacing | Budget pacing at the **campaign** level; `pacing_type` set at campaign level | Budget pacing at the **ad set** level | | Hard limits | All optimization goals must match across ad sets under auto bid; optimization goals not editable after the campaign runs; `LOWEST_COST_WITH_MIN_ROAS` cannot be switched to another strategy after creation; campaigns with **more than 70 ad sets** cannot edit bid strategy or turn CBO off | — | ### Bid strategy by margin-control need — official semantics | You need | Strategy (verbatim enum) | Mechanics | Pair with | |---|---|---|---| | Maximum volume, no cost control | `LOWEST_COST_WITHOUT_CAP` | Auto-bid; Meta raises your effective bid as needed to spend the budget. Default. With `optimization_goal=VALUE`, Ads Manager displays this as **Highest Value** | Nothing extra | | Average CPA held near a target | `COST_CAP` | "Get the most results possible while we strive to meet the cost per action you set." Requires `bid_amount` (the cap). **Adherence to cost cap limits is not guaranteed** (official) | `bid_amount` | | Hard ceiling on the auction bid itself | `LOWEST_COST_WITH_BID_CAP` | Maximum bid across auctions; requires `bid_amount` (per ad set via `adset_bid_amounts` under CBO) | `bid_amount` | | ROAS floor (margin protection on value) | `LOWEST_COST_WITH_MIN_ROAS` | Requires `bid_constraints={"roas_average_floor": N}`; valid range of `roas_average_floor` is **[100, 10000000]**, i.e. minimum ROAS 0.01–1000.0 (so `10000` = 1.0x). `optimization_goal` must be `VALUE`; cannot use `bid_amount` with `bid_constraints` | `bid_constraints` | Bid setup guidance (official Bidding Overview): "Bid your true value" — bid the maximum you're willing to pay per optimization event; actual cost per result is usually at or below `bid_amount`. `billing_event` (what you pay for, e.g. `IMPRESSIONS`) is independent of `optimization_goal` (who delivery seeks). ### Budget types and pacing — official semantics - `daily_budget`: average per day; on high-opportunity days **up to 25% more than your daily budget may be spent** (e.g. $10 → up to $12.50), averaged out over the week. - `lifetime_budget`: total over the run; spend is uneven by design ($250 over 5 days might pace $50/$50/$75/$25/$50). - `pacing_type` options (campaign level under CBO, else ad set): **`standard`** (default — bid adjusted through the day for smooth delivery), **`no_pacing`** (accelerated delivery — full max bid in every eligible auction; budget can exhaust early; only sensible for flash sales, live events, key seasonal pushes; pointless if you're already under-delivering from low bid/narrow audience), **`day_parting`** (ad scheduling via `adset_schedule`; **lifetime budgets only**; schedule applies in the *audience's* timezone, hours on the hour, ≥1h blocks). - Partial days: an ad set starting at 6 PM tries to deliver only ~25% of its daily budget before midnight. - Official FAQ on changes: every budget/bid change forces the system to re-learn the optimal bid — "you should not change bid and budget frequently"; if you must, **limit to 2–3 times a day, early in the day**. ### Learning phase — official + community - Official (Graph API `learning_stage_info` on ad sets): `status` is `LEARNING`, `SUCCESS`, or `FAIL` ("isn't generating enough results to exit"); `conversions` counts events **since the last significant edit** (resets to learning on significant edits); `last_sig_edit_ts` records that edit. Only returned for active ad sets. - Community consensus threshold (medium, Lebesgue + Social Media Examiner): **~50 optimization events per ad set within 7 days** to exit; short of that, the delivery column shows **Learning Limited**. ## Analysis - **CBO and ABO answer different questions.** CBO maximizes campaign-level results given freedom to move money; ABO buys you per-segment control and clean tests at the cost of liquidity. The official docs are mechanism-only; the *when* comes from practitioners: CBO for scaling proven structures and saving management time, ABO for testing audiences/creatives/regions and for strict per-market budgets (Cropink, Lebesgue — medium). Lebesgue's dataset even shows ABO out-performing CBO on prospecting ROAS (94% vs 81%, medium, single vendor) — see [[summaries/community-field-notes]]. - **Margin control is a ladder, not a binary.** No cap → cost cap (average CPA) → bid cap (per-auction ceiling) → min ROAS (value floor). Each rung trades delivery volume for predictability; cost caps are explicitly best-effort. Min ROAS is the only one that operates on *value* rather than *cost*, and it locks you in (no strategy switch after creation). - **The learning phase is a budget-math problem.** If budget ÷ cost-per-result × 7 < 50, the ad set mathematically cannot exit learning. Every guardrail above (20% budget-change rule-of-thumb, few ad sets, no mid-flight edits) is downstream of that arithmetic (community, medium — the 50/7 numbers do not appear in the ingested official API docs; the API only exposes thresholds via `dynamic_lp_conversions_threshold` / `dynamic_lp_days_threshold`). - **Pacing interacts with everything**: budget changes trigger bid re-learning; switching `billing_event` re-adjusts pacing; under CBO the pacing and the budget both live at the campaign level, so per-ad-set spend visibility drops (Lebesgue's stated reason to prefer ABO for insight). ## Recommendations **Recipe 1 — Testing (audiences/creatives/markets):** ABO. 3–5 ad sets, one variable each, equal budgets, broad audiences unless testing the audience itself. Don't touch anything for 3–5 days. (Community, medium.) **Recipe 2 — Scaling a proven structure:** CBO (`LOWEST_COST_WITHOUT_CAP`), 3–5 ad sets, varied creative formats per ad set, `daily_min_spend_target` floors on cold/niche ad sets so warm audiences don't starve them. Scale +10–20% every 2–3 days; for bigger jumps, duplicate the campaign and re-enter learning deliberately. Judge at campaign level only. (Official mechanics + community cadence.) **Recipe 3 — Margin-protected e-commerce:** Sales campaign, `optimization_goal=VALUE`, `bid_strategy=LOWEST_COST_WITH_MIN_ROAS`, `bid_constraints={"roas_average_floor": <100×your minimum ROAS>}`. Remember: locked after creation; only `PURCHASE` events for value optimization under Advantage+ shopping ([[syntheses/objective-picker]], [[concepts/advantage-plus-campaigns]]). **Recipe 4 — Learning-phase-aware budget sizing:** daily budget per ad set = **cost-per-result × 50 ÷ 7** (e.g. $10 CPA → $72/day; two ad sets under CBO → $144/day campaign budget). If you can't fund that, cut ad sets (consolidate audiences) rather than switching to a cheaper optimization event — optimizing for add-to-cart to exit learning buys you cart-adders, not buyers. Avoid resets: keep budget changes ≤20% per ~72h, never edit audiences in place (duplicate instead), and bulk-create spare ads at launch (paused) so you can rotate without adding new ads. (Community, medium; reset mechanics corroborated by official `last_sig_edit_ts` semantics.) **Recipe 5 — Time-boxed promos:** lifetime budget + `day_parting` schedule (audience timezone), or `no_pacing` for genuine flash sales — accepting that budget may exhaust before day's end. (Official.) **Anti-patterns:** >70 ad sets under CBO (locks your bid strategy); frequent intra-day bid/budget edits; judging CBO ad sets individually; overlapping audiences competing in the auction; tiny daily budgets on Purchase optimization. See also [[concepts/attribution-reporting]] before concluding a budget change "hurt performance" — measurement changes can masquerade as delivery changes ([[summaries/community-field-notes]]). ## Pages Compared - [[concepts/budgets-bidding]] — core concept page - [[concepts/campaign-structure]] — campaign/ad set/ad hierarchy these levers attach to - [[concepts/advantage-plus-campaigns]] — CBO is mandatory plumbing in Advantage+ setups - [[concepts/audiences]] — audience size ↔ budget interaction - [[summaries/community-field-notes]] — the practitioner claims tiered here - [[syntheses/objective-picker]] — objective choice upstream of bid strategy - [[entities/marketing-api]] — field-level reference for everything verbatim above --- title: "Objective Picker: Choosing Among the 6 Meta Campaign Objectives" type: synthesis tags: [objectives, odax, decision-guide, advantage-plus, sales] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: [ "raw/web_community-an-update-to-ad-objectives-upcoming-api-changes-to-campaign-.md", "raw/web_community-every-facebook-ad-objective-available-in-2026-when-to-use-th.md", "raw/web_community-6-facebook-campaign-objectives-explained-2026-odax-guide.md", "raw/web_community-advantage-shopping-campaigns.md", "raw/web_community-understanding-meta-s-advantage-sales-campaigns-2026-guide.md", "raw/web_community-bidding-overview.md" ] --- # Objective Picker: Choosing Among the 6 Meta Campaign Objectives The campaign objective is the first and least reversible choice in Meta Ads: it determines which optimization goals, conversion locations, and delivery behavior are available downstream (see [[concepts/campaign-structure]]). Since the ODAX migration ([[summaries/odax-migration]]), exactly **six objectives** exist: **Awareness, Traffic, Engagement, Leads, Sales, App Promotion**. Tiering: the deprecated-objective list and Advantage+ shopping mechanics below are **official (high confidence)**; ad-set optimization options and conversion-location lists are from community guides (Bïrch, WordStream — **medium confidence, attributed**). ## Comparison | Objective | What delivery optimizes for (ad-set options) | Conversion-location options | Typical use | |---|---|---|---| | **Awareness** | Impressions, Reach, Ad Recall Lift (community: Bïrch). Also home of store-location features: official store-traffic recipe is `OUTCOME_AWARENESS` + promoted object `PLACE_PAGE_SET_ID` + optimization goal `REACH` | n/a (no conversion event) | New brand/market/product launches, events; replaces old Brand Awareness, Reach, Store Traffic | | **Traffic** | Landing Page Views, Link Clicks, Impressions, Daily Unique Reach (Bïrch) | Website, app, (community: also used to warm a brand-new pixel) | Drive visits when clicks — not sales — are the goal: publishers, blogs, content, affiliate/email capture; seeding data for later conversion campaigns | | **Engagement** | By conversion location: messages (Messenger/Instagram Direct/WhatsApp), video views, post engagement, event responses, conversions, landing page views, link clicks, impressions, reach (Bïrch) | Your Ad, Messaging Apps, Website, App, Facebook Page (Bïrch) | Social proof, community/video audience building, event responses; absorbed old Messages, Video Views, Post Engagement, Page Likes | | **Leads** | Lead volume / quality-lead style goals; instant forms vs website forms trade-off (WordStream: instant forms = more but lower-quality leads, website forms = fewer but warmer) | Website, Instant Forms, Messenger, Calls, App (Bïrch) | Newsletter signups, webinar registrations, ebook downloads, inquiries; replaces Lead Generation | | **Sales** | Conversions (`OFFSITE_CONVERSIONS`) or Value (`VALUE` — maximize purchase value/ROAS; requires a value-enabled event in Events Manager) | Website, App, Website + App, Messenger or WhatsApp if you already accept payments there (Bïrch) | Bottom-funnel purchases, catalog sales, retargeting hot audiences; replaces Conversions + Catalog Sales; the home of Advantage+ shopping | | **App Promotion** | App Installs, App Events, Value (Bïrch) | App stores / your app | Install volume or re-engagement of existing users; replaces App Installs | API enums verbatim where officially confirmed: `OUTCOME_AWARENESS`, `OUTCOME_TRAFFIC`, `OUTCOME_SALES` (official Meta sources in this KB). ## Analysis - **The objective is a targeting instruction, not a label.** Delivery finds people likely to do the optimized action: choose Traffic when you need purchases and you pay for clickers, not buyers (Bïrch, medium). Match the objective to the actual business outcome, then pick the optimization event at the ad set level — and resist switching to a cheaper event just to exit the learning phase ([[summaries/community-field-notes]]). - **Old objectives didn't disappear; they became settings.** Everything from the 11-objective era survives as a conversion location or optimization goal inside one of the six (WordStream, corroborating the official deprecation list in [[summaries/odax-migration]]). The official Marketing API table of valid `optimization_goal` values per legacy `objective` is preserved in [[concepts/budgets-bidding]]'s source (Bidding Overview), which points migrators to the ODAX mapping table. - **Funnel position drives the pick more than channel**: Awareness/Traffic for cold audiences and data gathering, Engagement for nurture and social proof, Leads/Sales for intent capture, with Sales reserved for audiences (or signals) warm enough to convert (both community guides agree). - **A brand-new pixel can't carry a Sales campaign.** With no event history, conversion campaigns deliver poorly; practitioners seed with Traffic/Engagement to build custom audiences first (Bïrch, medium). See [[syntheses/pixel-capi-setup]] for getting the signal layer right before buying conversions. ## Recommendations Pick by business goal: 1. **"Nobody knows us yet" / new market / store visits** → Awareness. For physical stores: `OUTCOME_AWARENESS` + `PLACE_PAGE_SET_ID` + `REACH` (official). 2. **"I monetize visits"** (content, affiliate, email capture) → Traffic, optimizing for Landing Page Views over Link Clicks when quality matters. 3. **"I need interaction or conversations"** → Engagement, choosing the conversion location (messaging apps for conversation-led sales). 4. **"I need contactable prospects"** → Leads. Instant Forms for volume; Website conversion location for quality (medium, attributed). 5. **"I need purchases"** → Sales. Optimize for Purchase; use `VALUE` optimization only with a configured value event. 6. **"I need installs/app events"** → App Promotion; switch to App Events/Value optimization once install volume exists (community heuristic: after ~50+ installs). **When Advantage+ shopping replaces a manual sales campaign** ([[concepts/advantage-plus-campaigns]]): - Advantage+ shopping campaigns (ASC) are **only available under `OUTCOME_SALES`** and historically were flagged with `smart_promotion_type=AUTOMATED_SHOPPING_ADS`. Official: as of **Marketing API v25.0** that field no longer creates ASC campaigns — campaigns are composed from Advantage+ audience, Advantage+ campaign budget, and Advantage+ placements with an `advantage_state` reflecting the campaign type. - Official structural constraints (verbatim from the ASC doc): **one ad set per ASC campaign** (legacy structure); targeting limited to **`geo_locations` only** (countries/regions); **`billing_event=IMPRESSIONS` is the only supported billing event**; `optimization_goal=VALUE` supports **only `PURCHASE`** as the conversion event; a **`pixel_id` is required**; optional `existing_customer_budget_percentage` (0–100) caps spend on defined existing customers. - ASC replaces "a portfolio of manual sales campaigns," testing **up to 150 creative combinations** vs ~50 manual (official). Replace your manual sales portfolio with ASC when you have roughly **50+ conversions/week, broad product appeal, several proven creatives, and clean Pixel+CAPI tracking** (community, medium). Keep manual sales campaigns when you need niche [[concepts/audiences]], strict budget separation by market, placement control ([[entities/placements-catalog]]), or transparent testing — most practitioners run ASC and manual in parallel ([[summaries/community-field-notes]]). - Note: ASC is being rebranded/expanded as "Advantage+ sales campaigns" with unlimited ad sets and a 150-ad cap (community, medium); the official API doc still describes the one-ad-set model. Flagged as a drift watch item. Special note: if your ads are in credit, employment, housing, or social/political categories, objective choice is constrained by [[concepts/special-ad-categories]] regardless of business goal. ## Pages Compared - [[summaries/odax-migration]] — the official 11→6 consolidation - [[summaries/community-field-notes]] — practitioner heuristics cited above - [[concepts/campaign-structure]] — where the objective lives - [[concepts/budgets-bidding]] — optimization goals and bid strategies per objective - [[concepts/advantage-plus-campaigns]] — ASC mechanics - [[concepts/special-ad-categories]] — restricted-category constraints - [[syntheses/pixel-capi-setup]] — signal prerequisites for conversion objectives --- title: "Pixel + CAPI Setup: The Working Measurement Recipe" type: synthesis tags: [meta-pixel, conversions-api, measurement, deduplication, attribution, how-to] created: 2026-06-11 updated: 2026-06-11 confidence: high sources: [ "raw/web_community-get-started-meta-pixel-documentation-meta-for-developers.md", "raw/web_community-conversion-tracking-meta-pixel-documentation-meta-for-develo.md", "raw/web_community-reference-meta-pixel-documentation-meta-for-developers.md", "raw/web_community-conversions-api.md", "raw/web_community-get-started.md", "raw/web_community-server-event-parameters.md", "raw/web_community-meta-attribution-in-2025-how-to-track-facebook-ads-with-meta.md", "raw/web_community-leadenforce-facebook-attribution-window-explained-how-it-imp.md", "raw/web_community-15-facebook-ads-metrics-that-maximize-roi-for-your-clients-s.md" ] --- # Pixel + CAPI Setup: The Working Measurement Recipe The measurement stack every conversion-optimized campaign depends on: **Pixel base code → standard events → Conversions API with deduplication → attribution settings**. Steps 1–4 are official Meta developer documentation (high confidence); the "when is CAPI necessary" numbers are practitioner-reported (medium, attributed). Concept background: [[concepts/meta-pixel]], [[concepts/conversions-api]], [[concepts/attribution-reporting]]. ## Comparison | Capability | Pixel only (browser) | CAPI only (server) | Pixel + CAPI with dedup (recommended) | |---|---|---|---| | Source of events | JavaScript `fbq()` calls, Facebook cookies | `POST` from your server/CRM/app to the Graph API | Both, deduplicated via `event_name` + `event_id` | | Survives ad/tracking blockers, iOS ATT | No — practitioner-reported ≈40% attribution accuracy (Swydo, medium) | Yes | Yes — reported to recover 20–30% of lost conversions (Swydo, medium) | | Event types | Website events | Website, app, offline, business messaging, CRM events | Everything | | Setup cost | Lowest (paste snippet) | Server work + access token | Both, plus dedup discipline | | Official stance | Baseline | — | Meta "recommend[s] that advertisers follow the Conversions API best practices"; same Pixel/dataset ID for browser and server events | ## Analysis - **One dataset, two channels.** Server events are "processed like events sent using the Meta Pixel" once linked to the same dataset ID — measurement, audiences ([[concepts/audiences]]), and optimization treat them identically. That's why dedup is the crux: without matching `event_id`s, every purchase counts twice. - **Dedup rules are precise (official):** for the same action, the browser event's `event`/`eventID` must match the server event's `event_name`/`event_id`. Matches within **48 hours** keep only the first event; if a server and browser event arrive within **5 minutes** of each other, **the browser/app event wins**. Use an order number/transaction ID as `event_id` where one exists; otherwise any shared random string. - **Event quality is a ranked input.** `user_data` match keys (email, phone, etc.) drive Event Match Quality (EMQ, 0–10); practitioners target **≥6.0** (Swydo/Triple Whale, medium — the EMQ scale itself is Meta's, the threshold is community). - **Attribution settings now steer both reporting and learning** (Triple Whale, medium): the window you choose changes what Ads Manager credits *and* which conversions delivery optimizes toward. Defaults reported by practitioners: **7-day click / 1-day view**; Meta's Graph API learning-stage doc still describes a "1-day view and 28-day click" default for its `attribution_windows` field — a documented inconsistency worth knowing when numbers don't reconcile. Community sources additionally report view-through windows were removed from the API in January 2026 and a 1-day "engage-through" category added (single source, low-medium — see [[summaries/community-field-notes]]). ## Recommendations ### Step 1 — Install the Pixel base code (official) 1. Get the base code from **Ads Manager → Events Manager** (it embeds your Pixel ID twice). 2. Paste it **between the `` tags on every page** (persistent header). Core calls, verbatim: - loads `https://connect.facebook.net/en_US/fbevents.js` - `fbq('init', '{your-pixel-id-goes-here}');` - `fbq('track', 'PageView');` — leave this intact; include the `