Facebook Retargeting Ads for B2B: Build the Audience and Message Plan
Build a B2B Facebook retargeting plan from one observable action.
This guide uses Meta for the advertising system behind Facebook Ads. A campaign may also use eligible Instagram and other Meta placements.
Name the source and behavior. Choose a membership window that the account supports. Exclude people who completed the next step. Verify whether the included audience is a hard control or an Advantage+ suggestion. Then match one message, proof asset and destination to that behavior.
If any of those inputs is missing, put the plan on Hold and ask for the evidence. A blank is easier to fix than a guess that makes its way into a live campaign.
A complete plan should answer nine questions:
- Which source will Meta use?
- What exact action qualifies someone?
- What source history is available?
- What membership window will you use?
- Who must be excluded or suppressed?
- Is the included audience a control or a suggestion?
- What question should the next message answer?
- Which event and CRM outcome will measure the response?
- Who owns every missing receipt?
A review-ready plan is ready for a person to inspect. Audience creation, customer-data upload, campaign spend and launch still require separate account checks and authorization.
Here is the finished shape before you work through the details:
| Source and rule | Control | Message and destination | Measurement |
|---|---|---|---|
| Pricing-page visitors; 30 days; exclude completed review requests | Included audience enforced; expansion disabled | Explain the workflow with a product walkthrough; send to the review page | ReviewRequested → qualified_review, joined by the CRM key name |
Open the planner and start with a blank record →
Start with the source, not a “warm audience”
“Warm audience” does not tell an operator what to build. The plan needs a source and an observable action.
| Source route | Observable action | Evidence to collect |
|---|---|---|
| Website | A named Pixel event or a specific URL rule | Active Pixel, event or URL receipt, reliable history dates, audience creation date and current status |
| App | A named app event | Registered app access, SDK or measurement-partner logging, event history and current status |
| Meta engagement | A specific video-view threshold, Page action, Instagram action or another eligible engagement | Account or Page, selected asset, exact qualifying action, history and current status |
| Meta lead form | Opened, opened without submitting, or submitted a named form | Page, form, action, available history and current status |
| Customer list | Membership in a permitted, current list | Inclusion rule, update date, permission to share, opt-out process and current match state |
| Catalog | A commerce event tied to an eligible product catalog | Catalog, product feed and commerce setup evidence |
Meta documents website, app, catalog, list, offline and on-platform engagement routes for Custom Audiences. Each route has different prerequisites. Choose the route you actually have.
This guide focuses on B2B lead journeys. If you sell from a product catalog, use the current Shopify dynamic ads workflow or Meta's catalog guidance. A lead-form plan should not pretend to be a product-feed tutorial.
Collect the source evidence in six steps
- Choose one source route.
- Name the exact source with a safe account alias.
- Write the event, URL or engagement action that qualifies someone.
- Record the first and last dates covered by reliable history.
- Ask the privacy owner to approve the proposed data use and opt-out process.
- Save a dated, redacted receipt of the source and audience status.
Do not place raw customer identifiers, audience IDs or account credentials in the plan. A safe alias and a redacted receipt are enough for review.
Website visits, Pixel events and list rows are source activity. They are not the number of reachable people. Meta still needs to associate eligible activity with accounts, and some people may opt out or fail to match.
How to set up a website retargeting audience
Meta's current website-audience instructions require an active Pixel. The documented flow lets an authorized operator choose an event or URL rule, Any or All logic, a retention value and include or exclude rules.
Use this path to locate the controls:
- Open Audiences in Ads Manager.
- Select Create audience.
- Select Custom audience.
- Select Website.
- Choose the correct Pixel source.
- Choose the event or URL condition.
- Select Any or All for multiple conditions.
- Enter the proposed audience-retention value.
- Add the completed-next-step exclusion.
- Review the rule and stop before saving if creation has not been authorized.
The current Help page says a website audience starts populating when it is created and does not backfill earlier activity. Record the audience creation date because earlier website traffic does not silently become eligible history.
Meta currently documents up to five include or exclude rules for this website flow. More rules can also create a population so narrow that the distinction has no practical value. Split a segment only when the split changes the message, offer, destination, budget or measurement plan.
How the other audience routes differ
An app audience starts from an eligible event logged through Meta's SDK or a mobile measurement partner. Confirm that the app is registered, the advertiser has access and the selected event has reliable history. Meta's current app-audience instructions say an app-promotion setup may treat the Custom Audience as a suggestion unless reach is further limited. The same page describes possible pre-population from past eligible app events. That app behavior does not prove that a website audience will backfill.
An engagement audience needs the exact action, asset and account. “Engaged with us” is too vague. Meta's engagement-audience guidance separates actions such as video views, Facebook Page engagement and Instagram engagement.
A video audience also needs a view threshold and the selected videos. A lead-form audience needs the Page, named form and event, such as opened, opened without submitting or submitted. Record the submitted action as the completed-next-step exclusion when the message is for non-submitters.
A customer-list audience needs a current inclusion rule and permission review. Confirm whether the list is eligible for inclusion because Meta also describes exclusion-only customer-list audiences. Record list age, match-state evidence and the procedure that removes later opt-outs.
Choose the membership window from your evidence
The membership window is an editable planning choice. Tie it to the behavior, the buying cycle and the history the source actually has.
A recent lead-form opener may justify a shorter example window because the action occurred close to a specific offer. A pricing-page visitor may justify a different window because B2B evaluation can take longer. These are hypotheses to review, not Meta recommendations.
For every proposed window, record:
- the selected number of days;
- the buying-cycle reason;
- the reliable source-history dates;
- a receipt showing the selected value is allowed for that source and account;
- the date when the audience began populating, where the route requires it.
The public Meta sources checked for this guide did not establish one hard maximum across every source. A creator selecting 180 days in one account does not prove that every reader has the same limit. Check the value available for your route.
Audience status and audience size are also separate facts. A Custom Audience can show Ready while its estimated size remains hidden for privacy. Record a hidden estimate as Unknown, not zero.
Meta's troubleshooting guidance mentions waiting until several hundred people are in a small website audience. Treat that as troubleshooting advice. It is not a universal B2B minimum, a delivery guarantee or a reason to invent a reachable count.
Separate event exclusions from suppression
An event-level exclusion changes who remains in the source audience. Ad-set suppression controls who should not receive the message when the ad runs. Record both.
For a pricing visitor, the event-level exclusion might be a completed demo request. The ad set may also suppress current customers, open opportunities and opted-out contacts through separate approved sources.
Decide each group deliberately:
| Group | Planning question |
|---|---|
| Completed the next step | Which exact event or CRM state should stop this message? |
| Open opportunity | Should sales own the conversation while the opportunity is open? |
| Customer | Is this acquisition message irrelevant, or is there a separate renewal or expansion plan? |
| Opted out | Which current source removes the person from eligible advertising use? |
Name the suppression source, owner, last verification date, refresh rule and expiry date. “We have a customer list somewhere” is not a suppression process.
Customer-list use needs its own data review. Meta's Customer List Custom Audiences Terms require the advertiser and data provider to have the necessary rights and permissions, honor opt-outs and avoid prohibited identifiers or criteria. Hashing an email address does not establish permission to upload it.
Check whether the included audience is a control or a suggestion
This check determines what you can honestly call the campaign.
Meta says Advantage+ audience suggestions may include a Custom Audience and may deliver beyond that suggestion. Meta lists Custom Audience exclusions separately from inclusion suggestions. Some campaign setups let an operator further limit reach or turn off Use as a suggestion, but availability varies.
Save a dated, redacted ad-set receipt that shows:
- the included Custom Audience;
- whether Use as a suggestion is on or off, where that control appears;
- whether reach is further limited;
- the expansion state;
- the separate Custom Audience exclusions;
- the objective or campaign type that gives the receipt context.
Then use this decision:
| Observed state | Honest plan label |
|---|---|
| Hard included-audience control, expansion disabled and exclusions verified | Retargeting-only plan, subject to the remaining evidence |
| Custom Audience used as a suggestion or expansion enabled | Broader-delivery plan using a warm-audience signal |
| Inclusion mode or expansion state missing | Hold pending an ad-set receipt |
A suggestion can still be part of a valid broader-delivery plan. It cannot support a claim that only the retargeting audience will receive the ads.
Match the next message to the observed behavior
An action gives you context. It does not tell you why the person acted.
Treat the message as a testable answer to the question the behavior may have raised:
Observed action → likely question → proof asset → destination → measurable next action
For example:
| Observed behavior | Message job | Proof asset | Destination | Next event |
|---|---|---|---|---|
| Viewed pricing or a specific use-case page | Show how the proposed workflow would operate | Annotated workflow or relevant implementation walkthrough | The matching solution or review page | Review request |
| Opened a named lead form without submitting | Help the buyer evaluate the decision before another sales ask | Checklist or comparison guide | The asset itself, with an optional next step | Checklist view or request |
| Watched a selected product video to a verified threshold | Answer the next product or implementation question | Focused demonstration or proof page | The page that continues the same topic | Demo view or request |
Write one opening that uses the context without sounding as if the brand is watching over the reader's shoulder.
Weak:
You visited our pricing page. Book a demo now.
Stronger:
See how one onboarding request becomes an assigned plan, including the handoffs your team would need to own.
The stronger version gives the reader a reason to continue. It also requires a real workflow asset and a destination that fulfills the promise.
If you plan several message stages, make every row complete on its own. Meta does not guarantee that people will receive three ads in the order you numbered them.
Public ad creative can help you study an opening, proof format or offer. It cannot prove which audience received the ad, which exclusions were active or whether the campaign produced a CRM result. Describe public examples as creative references unless you have the underlying audience and ad-set evidence.
Define measurement before asking for approval
The plan needs one observable platform event and one downstream CRM outcome.
For a workflow-review offer, those could be:
- Measurement event:
DemoRequested - CRM outcome:
qualified_review - CRM key name:
crm_contact_id
The plan records the key name, not an actual person's identifier.
Also record three date contexts:
- The dates covered by the source evidence.
- The dates when the team will review plan readiness.
- The future window when an authorized campaign's outcomes would be assessed.
Finish with a written rule for success, revision and Hold. The rule should use the business's own qualified outcome and name what the team will do when tracking, suppression or source evidence fails.
An estimated audience is not delivered reach. A click is not a qualified sales conversation. An attributed result does not prove the campaign caused the outcome. Use the Facebook Ads reporting template when campaign activity exists and the team needs to reconcile Meta delivery with CRM outcomes.
Put the plan in one review record
Keep these fields together for every message stage:
| Part of the plan | What to record |
|---|---|
| Buyer | Business, offer, role, company type and buying situation |
| Source | Route, safe source alias, exact action and reliable history dates |
| Audience | Inclusion rule, Any/All logic, window, status and size visibility |
| Exclusions | Completed-next-step rule, suppression groups, source, freshness and overlap rule |
| Delivery control | Hard control or suggestion, expansion state and intended delivery scope |
| Data use | Approval owner, notice, consent decision where required and opt-out procedure |
| Message | Buyer question, message job, proof asset, offer, ad copy and destination |
| Measurement | Next event, CRM outcome, key name, attribution boundary and review dates |
| Decision | Review-ready or Hold, owner, reason, exact evidence request and next action |
Keep Unknown, No, Zero and Not applicable separate.
- Unknown means the evidence is missing, stale or contradictory. Add an owner, reason and exact request.
- No means the answer is known to be false. Record the evidence and the remediation needed.
- Zero is a measured number with a defined population and period. A hidden estimate is not zero.
- Not applicable needs a valid branch reason. It cannot make a required control disappear.
When you hand the plan to another person, send the readable summary and the structured record together. Confirm that every Unknown, reason and evidence request survives the handoff.
Build the source-to-message plan
Start blank, load a fictional case or import a saved record. The same evaluator drives the visible decision and downloads.
Planning tool. Review-ready means ready for human inspection. Audience creation, data upload, spend and launch require separate checks and authorization.Fictional example: pricing and use-case visitors
Northstar Workflow is a fictional software company selling workflow software to operations directors at B2B service firms. Its proposed audience combines recent visits to pricing and client-onboarding use-case pages.
All account receipts and values in this example are invented for teaching. They are not Maestro or client campaign results.
| Field | Fictional plan |
|---|---|
| Source and behavior | Active Pixel; PageView on /pricing or /use-cases/client-onboarding using an Any rule |
| Source history | Reliable events observed from 1 August through 25 September 2026 |
| Population | Audience created 1 September 2026; website membership begins at creation, with no recovered earlier visitors |
| Window | Editable 30-day choice, shown as allowed in the fictional account |
| Status and size | Ready; estimate hidden by the fictional interface, so the estimate remains Unknown rather than zero |
| Volume decision | Keep one combined pool and review actual delivery later instead of inventing a member count |
| Event exclusion | Exclude DemoRequested |
| Ad-set suppression | Completed demo requests, open opportunities, customers and opted-out contacts |
| Suppression evidence | Fictionally verified on 26 September, refreshed daily and valid through 3 October 2026 |
| Delivery control | Hard Custom Audience control; expansion disabled |
| Data use | Fictional privacy owner approved the source use, notice, required consent and opt-out process |
| Buyer question | What would onboarding routing look like for this team? |
| Message | “See how one intake becomes an assigned onboarding plan.” |
| Proof and offer | Available fictional onboarding walkthrough; offer an onboarding review |
| Destination | https://northstar.example/onboarding-review |
| Measurement | DemoRequested → qualified_review, joined by the key name crm_contact_id |
| Review dates | Plan review from 26 September through 2 October; prospective outcome window from 3 October through 2 November 2026 |
| Owner and next action | Demand Gen owner submits the plan and redacted receipts for human review |
Decision: review-ready within the fictional assumptions. Audience creation, spend and launch remain on Hold pending separate authorization.
Fictional example: lead-form opener
Harbor Finance Ops is a fictional invoice-workflow software company selling to finance leads at B2B agencies. The proposed source is a named Meta lead form opened without submission.
All account receipts, audience values and business details in this example are invented for teaching.
| Field | Fictional plan |
|---|---|
| Source and behavior | Named fictional Facebook Page and invoice-workflow form; opened_not_submitted action |
| Source history | Reliable form actions observed from 1 through 25 September 2026 |
| Window | Editable 14-day choice, shown as allowed in the fictional account |
| Status and size | Ready; a visible fictional estimate of 840 people, used only as a planning estimate |
| Volume decision | Keep one combined form-opener pool |
| Event exclusion | Exclude people who submitted the form |
| Ad-set suppression | Form submitters, open opportunities, customers and opted-out contacts |
| Suppression evidence | Fictionally verified on 26 September, refreshed daily and valid through 3 October 2026 |
| Delivery control | Hard Custom Audience control; expansion disabled |
| Data use | Fictional privacy owner approved the use and notice; consent was documented as not required for this invented case |
| Buyer question | What would this change in our invoice-approval handoff? |
| Message | “Check the handoffs that slow invoice approval.” |
| Proof and offer | Available fictional evaluation checklist covering intake, approval and billing handoffs |
| Destination | https://harbor.example/invoice-workflow-checklist |
| Measurement | ChecklistRequested → qualified_evaluation_request, joined by the key name crm_lead_id |
| Review dates | Plan review from 26 September through 2 October; prospective outcome window from 3 through 31 October 2026 |
| Owner and next action | Growth Lead submits the plan and redacted receipts for human review |
Decision: review-ready within the fictional assumptions. The estimate is not delivered reach or a performance benchmark. Audience creation, spend and launch remain on Hold pending separate authorization.
Fictional Hold: thin source and missing controls
Cedar Dispatch is a fictional scheduling-software company selling to service-team managers. It wants to retarget pricing visitors with a scheduling-handoff walkthrough.
Its Pixel recorded 12 events from 20 through 25 September 2026. Those are events, not 12 reachable people. The audience was created on 25 September and still shows Populating. The interface exposes no audience estimate.
The proposed plan uses a 30-day window, excludes completed review requests and sends people to https://cedar.example/scheduling-review. The intended event is ReviewRequested, with a fictional CRM outcome of qualified_review and key name crm_contact_id.
The plan cannot advance because the evidence is incomplete:
| Owner | Missing evidence | Exact request |
|---|---|---|
| Data owner | Allowed 30-day window | Supply a dated source-settings receipt showing that the selected 30-day window is allowed |
| Audience operator | Audience is still Populating | Supply a new audience-status receipt when the audience becomes Ready |
| CRM owner | Current suppression verification | Supply a dated CRM receipt for completed-request, open-opportunity, customer and opt-out suppression groups |
| Ad-set owner | Inclusion and expansion mode | Supply a redacted ad-set receipt showing the included audience, Use as a suggestion state where available, expansion and separate exclusions |
| Demand Gen | Thin source and Hold decision | Reassess after the status and control receipts arrive; consolidate only when the same message and destination still fit |
The team can consider combining the pricing rule with a broader, related website pool after the evidence arrives. It should not claim that 12 Pixel events prove a usable audience or that a universal minimum has failed.
Decision: Hold. No audience creation, data upload, spend or launch is authorized.
Review the plan without filling in the blanks
The complete tested prompt below takes the structured plan as its source record. It reevaluates the record, summarizes each message stage, lists every open issue with its owner and exact evidence request, and keeps audience creation, data upload, spend and launch on Hold.
Use redacted source, audience, ad-set, privacy and CRM evidence. Remove raw personal identifiers before sharing anything with an assistant. The prompt explains the plan; it does not replace account receipts, privacy approval or the required field and evidence checks.
Download the complete portable prompt. It includes the full field dictionary, blank record and receipt rules.
Inspect and copy the complete prompt
# Facebook retargeting source-to-message plan — portable prompt
Contract: `facebook-retargeting-plan.v1`. Use this prompt with a complete source record and its current deterministic evaluator receipt.
The JSON record is authoritative. Do not infer account facts, audience counts, approval, launch permission or missing values from prose.
## Canonical resources
- schema: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-plan.schema.json
- evaluator: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-evaluator.mjs
- blank_json: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-plan-blank.json
- website_json: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-website-example.json
- form_json: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-form-example.json
- hold_json: https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-hold-example.json
## Reevaluate the record with Node.js 20+
Save the current canonical record as `plan.json`, then run:
```bash
curl -fsSLo facebook-retargeting-evaluator.mjs https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-evaluator.mjs
curl -fsSLo facebook-retargeting-plan.schema.json https://maestrogtm.com/resources/facebook-retargeting-ads/facebook-retargeting-plan.schema.json
node --input-type=module -e 'import fs from "node:fs"; import {evaluate} from "./facebook-retargeting-evaluator.mjs"; const schema=JSON.parse(fs.readFileSync("facebook-retargeting-plan.schema.json","utf8")); const source=JSON.parse(fs.readFileSync("plan.json","utf8")); console.log(JSON.stringify(await evaluate(source,schema),null,2));' > evaluated-plan.json
```
The command recalculates issues, `input_sha256` and the evaluator receipt. Review `evaluated-plan.json`; do not treat the command as account approval or launch permission.
## Field dictionary (same ordered schema metadata used by builder and exports)
```json
{
"business_name": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"business_offer": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"buyer_scope": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"buyer_question": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"stage_owner": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"route": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required",
"values": [
"website",
"app",
"engagement",
"lead_form",
"customer_list",
"catalog",
"offline"
]
},
"source_name": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_access_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_observed_action": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_history_from": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_observed_through": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_history_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"source_activity_count": {
"type": "integer0",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "optional"
},
"source_activity_unit": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "conditional",
"values": [
"events",
"visits",
"engagement_actions",
"form_actions",
"list_records"
]
},
"source_activity_period": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "conditional"
},
"website_pixel_active": {
"type": "boolean",
"routes": [
"website"
],
"evidence_required": true,
"requirement": "required"
},
"website_url_or_event_rule": {
"type": "string",
"routes": [
"website"
],
"evidence_required": true,
"requirement": "required"
},
"app_registered_and_accessible": {
"type": "boolean",
"routes": [
"app"
],
"evidence_required": true,
"requirement": "required"
},
"app_logging_method": {
"type": "enum",
"routes": [
"app"
],
"evidence_required": true,
"requirement": "required",
"values": [
"sdk",
"measurement_partner"
]
},
"app_event_rule": {
"type": "string",
"routes": [
"app"
],
"evidence_required": true,
"requirement": "required"
},
"engagement_type": {
"type": "enum",
"routes": [
"engagement"
],
"evidence_required": true,
"requirement": "required",
"values": [
"video",
"facebook_page",
"instagram",
"event",
"instant_experience"
]
},
"engagement_asset_rule": {
"type": "string",
"routes": [
"engagement"
],
"evidence_required": true,
"requirement": "required"
},
"lead_form_page_and_form": {
"type": "string",
"routes": [
"lead_form"
],
"evidence_required": true,
"requirement": "required"
},
"lead_form_action": {
"type": "enum",
"routes": [
"lead_form"
],
"evidence_required": true,
"requirement": "required",
"values": [
"opened",
"opened_not_submitted",
"submitted"
]
},
"list_inclusion_eligible": {
"type": "boolean",
"routes": [
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"list_membership_rule": {
"type": "string",
"routes": [
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"list_updated_at": {
"type": "timestamp",
"routes": [
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"list_match_state": {
"type": "enum",
"routes": [
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"available",
"unavailable",
"outdated"
]
},
"inclusion_rule": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"rule_operator": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"any",
"all",
"single"
]
},
"rule_count": {
"type": "integer1",
"routes": [
"website"
],
"evidence_required": true,
"requirement": "required"
},
"membership_window_days": {
"type": "integer1",
"routes": [
"website",
"app",
"engagement",
"lead_form"
],
"evidence_required": false,
"requirement": "required"
},
"window_rationale": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form"
],
"evidence_required": false,
"requirement": "required"
},
"selected_window_allowed": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form"
],
"evidence_required": true,
"requirement": "required"
},
"documented_max_window_days": {
"type": "integer1",
"routes": [
"website",
"app",
"engagement",
"lead_form"
],
"evidence_required": true,
"requirement": "optional"
},
"audience_population_basis": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"website_from_creation",
"app_logged_history",
"engagement_history",
"list_membership"
]
},
"audience_created_at": {
"type": "timestamp",
"routes": [
"website"
],
"evidence_required": true,
"requirement": "conditional"
},
"audience_status": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"ready",
"populating",
"unavailable",
"not_created"
]
},
"audience_size_visibility": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"visible",
"hidden",
"populating"
]
},
"audience_estimated_people": {
"type": "integer0",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "conditional"
},
"volume_assessment": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required",
"values": [
"sufficient_for_proposed_plan",
"simplify",
"hold"
]
},
"volume_decision_reason": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"event_exclusion_supported": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"event_exclusion_rule": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "conditional"
},
"completed_next_step": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"suppression_groups": {
"type": "array",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required",
"values": [
"completed_next_step",
"open_opportunity",
"customer",
"opted_out"
]
},
"suppression_scope_reason": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"suppression_source": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"suppression_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"suppression_last_verified_at": {
"type": "timestamp",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"suppression_refresh_rule": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"suppression_valid_until": {
"type": "timestamp",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"ad_set_exclusions": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"overlap_rule": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"inclusion_mode": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"hard_control",
"suggestion"
]
},
"expansion_state": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required",
"values": [
"disabled",
"enabled",
"not_available"
]
},
"intended_delivery_scope": {
"type": "enum",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required",
"values": [
"retargeting_only",
"broader_delivery"
]
},
"data_use_approved": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"notice_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"consent_required": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"consent_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "conditional"
},
"opt_out_procedure": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"list_sharing_permission": {
"type": "boolean",
"routes": [
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"message_job": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"proof_asset": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"proof_asset_available": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"ad_copy_example": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"offer": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"destination": {
"type": "https_url",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"destination_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"measurement_event": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"crm_outcome": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"crm_unique_key": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"crm_mapping_verified": {
"type": "boolean",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": true,
"requirement": "required"
},
"attribution_boundary": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"review_period_start": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"review_period_end": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"outcome_window_start": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"outcome_window_end": {
"type": "date",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"success_rule": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"review_trigger": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
},
"next_action": {
"type": "string",
"routes": [
"website",
"app",
"engagement",
"lead_form",
"customer_list"
],
"evidence_required": false,
"requirement": "required"
}
}
```
## Required operation
1. Attach the entire canonical JSON record below. Reevaluate it with the linked evaluator and schema. Never accept imported issues or evaluation as proof.
2. Use the receipt only if its input_sha256 matches the canonical source (issues and evaluation omitted), evaluator version matches, and cutoff is the supplied as_of. Otherwise label output “unevaluated — Hold” and request reevaluation.
3. Give one coherent stage-by-stage summary: business/buyer; observed signal versus audience estimate; source and population dates; rules/window/exclusions; control and delivery scope; message, destination, measurement and CRM outcome; exact next action.
4. State the single evaluator plan_state and primary reason, then every open issue ID, owner, reason and exact request. Preserve all Unknown metadata and N/A codes/reasons.
5. Always state: “Review-ready means ready for human plan review. Audience creation, data upload, spend and launch require separate account checks and authorization.”
6. For fictional examples, state: “Fictional example; no real account approved.” Then repeat the evaluator plan_state exactly; never call a fictional Hold record review-ready.
## Full source record
Replace this complete blank record with the current full canonical JSON when using the prompt for a plan.
```json
{
"schema_version": "facebook-retargeting-plan.v1",
"plan_id": "blank-plan",
"record_mode": "blank",
"title": "Facebook retargeting source-to-message plan",
"as_of": "2026-09-26T12:00:00-04:00",
"stages": [
{
"stage_id": "stage-1",
"sequence_position": 1,
"active": true,
"fields": {
"business_name": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Business Name has not been verified",
"request": "Enter Business Name, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"business_offer": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Business Offer has not been verified",
"request": "Enter Business Offer, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"buyer_scope": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Buyer Scope has not been verified",
"request": "Enter Buyer Scope, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"buyer_question": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Buyer Question has not been verified",
"request": "Enter Buyer Question, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"stage_owner": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Stage Owner has not been verified",
"request": "Enter Stage Owner, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"route": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Route has not been verified",
"request": "Enter Route, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"source_name": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Name has not been verified",
"request": "Provide a dated, scoped receipt for Source Name"
},
"na_reason": null
},
"source_access_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Access Verified has not been verified",
"request": "Provide a dated, scoped receipt for Source Access Verified"
},
"na_reason": null
},
"source_observed_action": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Observed Action has not been verified",
"request": "Provide a dated, scoped receipt for Source Observed Action"
},
"na_reason": null
},
"source_history_from": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source History From has not been verified",
"request": "Provide a dated, scoped receipt for Source History From"
},
"na_reason": null
},
"source_observed_through": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Observed Through has not been verified",
"request": "Provide a dated, scoped receipt for Source Observed Through"
},
"na_reason": null
},
"source_history_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source History Verified has not been verified",
"request": "Provide a dated, scoped receipt for Source History Verified"
},
"na_reason": null
},
"source_activity_count": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Count has not been verified",
"request": "Provide a dated, scoped receipt for Source Activity Count"
},
"na_reason": null
},
"source_activity_unit": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Unit has not been verified",
"request": "Enter Source Activity Unit, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"source_activity_period": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Period has not been verified",
"request": "Enter Source Activity Period, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"website_pixel_active": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Website Pixel Active has not been verified",
"request": "Provide a dated, scoped receipt for Website Pixel Active"
},
"na_reason": null
},
"website_url_or_event_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Website Url Or Event Rule has not been verified",
"request": "Provide a dated, scoped receipt for Website Url Or Event Rule"
},
"na_reason": null
},
"app_registered_and_accessible": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "App Registered And Accessible has not been verified",
"request": "Provide a dated, scoped receipt for App Registered And Accessible"
},
"na_reason": null
},
"app_logging_method": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "App Logging Method has not been verified",
"request": "Provide a dated, scoped receipt for App Logging Method"
},
"na_reason": null
},
"app_event_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "App Event Rule has not been verified",
"request": "Provide a dated, scoped receipt for App Event Rule"
},
"na_reason": null
},
"engagement_type": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Engagement Type has not been verified",
"request": "Provide a dated, scoped receipt for Engagement Type"
},
"na_reason": null
},
"engagement_asset_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Engagement Asset Rule has not been verified",
"request": "Provide a dated, scoped receipt for Engagement Asset Rule"
},
"na_reason": null
},
"lead_form_page_and_form": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Lead Form Page And Form has not been verified",
"request": "Provide a dated, scoped receipt for Lead Form Page And Form"
},
"na_reason": null
},
"lead_form_action": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Lead Form Action has not been verified",
"request": "Provide a dated, scoped receipt for Lead Form Action"
},
"na_reason": null
},
"list_inclusion_eligible": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "List Inclusion Eligible has not been verified",
"request": "Provide a dated, scoped receipt for List Inclusion Eligible"
},
"na_reason": null
},
"list_membership_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "List Membership Rule has not been verified",
"request": "Provide a dated, scoped receipt for List Membership Rule"
},
"na_reason": null
},
"list_updated_at": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "List Updated At has not been verified",
"request": "Provide a dated, scoped receipt for List Updated At"
},
"na_reason": null
},
"list_match_state": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "List Match State has not been verified",
"request": "Provide a dated, scoped receipt for List Match State"
},
"na_reason": null
},
"inclusion_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Inclusion Rule has not been verified",
"request": "Provide a dated, scoped receipt for Inclusion Rule"
},
"na_reason": null
},
"rule_operator": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Rule Operator has not been verified",
"request": "Provide a dated, scoped receipt for Rule Operator"
},
"na_reason": null
},
"rule_count": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Rule Count has not been verified",
"request": "Provide a dated, scoped receipt for Rule Count"
},
"na_reason": null
},
"membership_window_days": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Membership Window Days has not been verified",
"request": "Enter Membership Window Days, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"window_rationale": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Window Rationale has not been verified",
"request": "Enter Window Rationale, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"selected_window_allowed": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Selected Window Allowed has not been verified",
"request": "Provide a dated, scoped receipt for Selected Window Allowed"
},
"na_reason": null
},
"documented_max_window_days": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Documented Max Window Days has not been verified",
"request": "Provide a dated, scoped receipt for Documented Max Window Days"
},
"na_reason": null
},
"audience_population_basis": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Audience Population Basis has not been verified",
"request": "Provide a dated, scoped receipt for Audience Population Basis"
},
"na_reason": null
},
"audience_created_at": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Audience Created At has not been verified",
"request": "Provide a dated, scoped receipt for Audience Created At"
},
"na_reason": null
},
"audience_status": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Audience Status has not been verified",
"request": "Provide a dated, scoped receipt for Audience Status"
},
"na_reason": null
},
"audience_size_visibility": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Audience Size Visibility has not been verified",
"request": "Provide a dated, scoped receipt for Audience Size Visibility"
},
"na_reason": null
},
"audience_estimated_people": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Audience Estimated People has not been verified",
"request": "Provide a dated, scoped receipt for Audience Estimated People"
},
"na_reason": null
},
"volume_assessment": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Volume Assessment has not been verified",
"request": "Enter Volume Assessment, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"volume_decision_reason": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Volume Decision Reason has not been verified",
"request": "Enter Volume Decision Reason, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"event_exclusion_supported": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Event Exclusion Supported has not been verified",
"request": "Provide a dated, scoped receipt for Event Exclusion Supported"
},
"na_reason": null
},
"event_exclusion_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Event Exclusion Rule has not been verified",
"request": "Enter Event Exclusion Rule, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"completed_next_step": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Completed Next Step has not been verified",
"request": "Enter Completed Next Step, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"suppression_groups": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Groups has not been verified",
"request": "Enter Suppression Groups, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"suppression_scope_reason": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Scope Reason has not been verified",
"request": "Enter Suppression Scope Reason, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"suppression_source": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Source has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Source"
},
"na_reason": null
},
"suppression_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Verified has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Verified"
},
"na_reason": null
},
"suppression_last_verified_at": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Last Verified At has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Last Verified At"
},
"na_reason": null
},
"suppression_refresh_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Refresh Rule has not been verified",
"request": "Enter Suppression Refresh Rule, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"suppression_valid_until": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Suppression Valid Until has not been verified",
"request": "Enter Suppression Valid Until, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"ad_set_exclusions": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Ad Set Exclusions has not been verified",
"request": "Provide a dated, scoped receipt for Ad Set Exclusions"
},
"na_reason": null
},
"overlap_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Overlap Rule has not been verified",
"request": "Enter Overlap Rule, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"inclusion_mode": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Inclusion Mode has not been verified",
"request": "Provide a dated, scoped receipt for Inclusion Mode"
},
"na_reason": null
},
"expansion_state": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Expansion State has not been verified",
"request": "Provide a dated, scoped receipt for Expansion State"
},
"na_reason": null
},
"intended_delivery_scope": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Intended Delivery Scope has not been verified",
"request": "Enter Intended Delivery Scope, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"data_use_approved": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Data Use Approved has not been verified",
"request": "Provide a dated, scoped receipt for Data Use Approved"
},
"na_reason": null
},
"notice_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Notice Verified has not been verified",
"request": "Provide a dated, scoped receipt for Notice Verified"
},
"na_reason": null
},
"consent_required": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Consent Required has not been verified",
"request": "Provide a dated, scoped receipt for Consent Required"
},
"na_reason": null
},
"consent_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Consent Verified has not been verified",
"request": "Provide a dated, scoped receipt for Consent Verified"
},
"na_reason": null
},
"opt_out_procedure": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Opt Out Procedure has not been verified",
"request": "Provide a dated, scoped receipt for Opt Out Procedure"
},
"na_reason": null
},
"list_sharing_permission": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "List Sharing Permission has not been verified",
"request": "Provide a dated, scoped receipt for List Sharing Permission"
},
"na_reason": null
},
"message_job": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Message Job has not been verified",
"request": "Enter Message Job, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"proof_asset": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Proof Asset has not been verified",
"request": "Enter Proof Asset, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"proof_asset_available": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Proof Asset Available has not been verified",
"request": "Provide a dated, scoped receipt for Proof Asset Available"
},
"na_reason": null
},
"ad_copy_example": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Ad Copy Example has not been verified",
"request": "Enter Ad Copy Example, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"offer": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Offer has not been verified",
"request": "Enter Offer, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"destination": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Destination has not been verified",
"request": "Enter Destination, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"destination_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Destination Verified has not been verified",
"request": "Provide a dated, scoped receipt for Destination Verified"
},
"na_reason": null
},
"measurement_event": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Measurement Event has not been verified",
"request": "Enter Measurement Event, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"crm_outcome": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Crm Outcome has not been verified",
"request": "Enter Crm Outcome, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"crm_unique_key": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Crm Unique Key has not been verified",
"request": "Enter Crm Unique Key, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"crm_mapping_verified": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Crm Mapping Verified has not been verified",
"request": "Provide a dated, scoped receipt for Crm Mapping Verified"
},
"na_reason": null
},
"attribution_boundary": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Attribution Boundary has not been verified",
"request": "Enter Attribution Boundary, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"review_period_start": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Review Period Start has not been verified",
"request": "Enter Review Period Start, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"review_period_end": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Review Period End has not been verified",
"request": "Enter Review Period End, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"outcome_window_start": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Outcome Window Start has not been verified",
"request": "Enter Outcome Window Start, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"outcome_window_end": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Outcome Window End has not been verified",
"request": "Enter Outcome Window End, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"success_rule": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Success Rule has not been verified",
"request": "Enter Success Rule, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"review_trigger": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Review Trigger has not been verified",
"request": "Enter Review Trigger, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
},
"next_action": {
"state": "unknown",
"value": null,
"evidence_ids": [],
"unknown": {
"owner": "Unassigned — assign field owner",
"reason": "Next Action has not been verified",
"request": "Enter Next Action, or record why it is Unknown, who owns it and the exact next request"
},
"na_reason": null
}
}
}
],
"evidence": [],
"issues": [
{
"issue_id": "issue:stage-1:ad_copy_example:missing_required",
"field_path": "stages.stage-1.fields.ad_copy_example",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Ad Copy Example has not been verified",
"request": "Enter Ad Copy Example, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:ad_set_exclusions:missing_required",
"field_path": "stages.stage-1.fields.ad_set_exclusions",
"source_system": "ad-set settings",
"owner": "Unassigned — assign field owner",
"reason": "Ad Set Exclusions has not been verified",
"request": "Provide a dated, scoped receipt for Ad Set Exclusions",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:app_event_rule:missing_required",
"field_path": "stages.stage-1.fields.app_event_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "App Event Rule has not been verified",
"request": "Provide a dated, scoped receipt for App Event Rule",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:app_logging_method:missing_required",
"field_path": "stages.stage-1.fields.app_logging_method",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "App Logging Method has not been verified",
"request": "Provide a dated, scoped receipt for App Logging Method",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:app_registered_and_accessible:missing_required",
"field_path": "stages.stage-1.fields.app_registered_and_accessible",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "App Registered And Accessible has not been verified",
"request": "Provide a dated, scoped receipt for App Registered And Accessible",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:attribution_boundary:missing_required",
"field_path": "stages.stage-1.fields.attribution_boundary",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Attribution Boundary has not been verified",
"request": "Enter Attribution Boundary, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:audience_created_at:missing_required",
"field_path": "stages.stage-1.fields.audience_created_at",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Audience Created At has not been verified",
"request": "Provide a dated, scoped receipt for Audience Created At",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:audience_estimated_people:missing_required",
"field_path": "stages.stage-1.fields.audience_estimated_people",
"source_system": "Audiences",
"owner": "Unassigned — assign field owner",
"reason": "Audience Estimated People has not been verified",
"request": "Provide a dated, scoped receipt for Audience Estimated People",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:audience_population_basis:missing_required",
"field_path": "stages.stage-1.fields.audience_population_basis",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Audience Population Basis has not been verified",
"request": "Provide a dated, scoped receipt for Audience Population Basis",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:audience_size_visibility:missing_required",
"field_path": "stages.stage-1.fields.audience_size_visibility",
"source_system": "Audiences",
"owner": "Unassigned — assign field owner",
"reason": "Audience Size Visibility has not been verified",
"request": "Provide a dated, scoped receipt for Audience Size Visibility",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:audience_status:missing_required",
"field_path": "stages.stage-1.fields.audience_status",
"source_system": "Audiences",
"owner": "Unassigned — assign field owner",
"reason": "Audience Status has not been verified",
"request": "Provide a dated, scoped receipt for Audience Status",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:business_name:missing_required",
"field_path": "stages.stage-1.fields.business_name",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Business Name has not been verified",
"request": "Enter Business Name, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:business_offer:missing_required",
"field_path": "stages.stage-1.fields.business_offer",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Business Offer has not been verified",
"request": "Enter Business Offer, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:buyer_question:missing_required",
"field_path": "stages.stage-1.fields.buyer_question",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Buyer Question has not been verified",
"request": "Enter Buyer Question, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:buyer_scope:missing_required",
"field_path": "stages.stage-1.fields.buyer_scope",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Buyer Scope has not been verified",
"request": "Enter Buyer Scope, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:completed_next_step:missing_required",
"field_path": "stages.stage-1.fields.completed_next_step",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Completed Next Step has not been verified",
"request": "Enter Completed Next Step, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:consent_required:missing_required",
"field_path": "stages.stage-1.fields.consent_required",
"source_system": "privacy register",
"owner": "Unassigned — assign field owner",
"reason": "Consent Required has not been verified",
"request": "Provide a dated, scoped receipt for Consent Required",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:consent_verified:missing_required",
"field_path": "stages.stage-1.fields.consent_verified",
"source_system": "privacy register",
"owner": "Unassigned — assign field owner",
"reason": "Consent Verified has not been verified",
"request": "Provide a dated, scoped receipt for Consent Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:crm_mapping_verified:missing_required",
"field_path": "stages.stage-1.fields.crm_mapping_verified",
"source_system": "CRM",
"owner": "Unassigned — assign field owner",
"reason": "Crm Mapping Verified has not been verified",
"request": "Provide a dated, scoped receipt for Crm Mapping Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:crm_outcome:missing_required",
"field_path": "stages.stage-1.fields.crm_outcome",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Crm Outcome has not been verified",
"request": "Enter Crm Outcome, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:crm_unique_key:missing_required",
"field_path": "stages.stage-1.fields.crm_unique_key",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Crm Unique Key has not been verified",
"request": "Enter Crm Unique Key, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:data_use_approved:missing_required",
"field_path": "stages.stage-1.fields.data_use_approved",
"source_system": "privacy register",
"owner": "Unassigned — assign field owner",
"reason": "Data Use Approved has not been verified",
"request": "Provide a dated, scoped receipt for Data Use Approved",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:destination_verified:missing_required",
"field_path": "stages.stage-1.fields.destination_verified",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Destination Verified has not been verified",
"request": "Provide a dated, scoped receipt for Destination Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:destination:missing_required",
"field_path": "stages.stage-1.fields.destination",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Destination has not been verified",
"request": "Enter Destination, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:documented_max_window_days:optional_unknown",
"field_path": "stages.stage-1.fields.documented_max_window_days",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Documented Max Window Days has not been verified",
"request": "Provide a dated, scoped receipt for Documented Max Window Days",
"blocking": false,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:engagement_asset_rule:missing_required",
"field_path": "stages.stage-1.fields.engagement_asset_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Engagement Asset Rule has not been verified",
"request": "Provide a dated, scoped receipt for Engagement Asset Rule",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:engagement_type:missing_required",
"field_path": "stages.stage-1.fields.engagement_type",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Engagement Type has not been verified",
"request": "Provide a dated, scoped receipt for Engagement Type",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:event_exclusion_rule:missing_required",
"field_path": "stages.stage-1.fields.event_exclusion_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Event Exclusion Rule has not been verified",
"request": "Enter Event Exclusion Rule, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:event_exclusion_supported:missing_required",
"field_path": "stages.stage-1.fields.event_exclusion_supported",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Event Exclusion Supported has not been verified",
"request": "Provide a dated, scoped receipt for Event Exclusion Supported",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:expansion_state:missing_required",
"field_path": "stages.stage-1.fields.expansion_state",
"source_system": "ad-set settings",
"owner": "Unassigned — assign field owner",
"reason": "Expansion State has not been verified",
"request": "Provide a dated, scoped receipt for Expansion State",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:inclusion_mode:missing_required",
"field_path": "stages.stage-1.fields.inclusion_mode",
"source_system": "ad-set settings",
"owner": "Unassigned — assign field owner",
"reason": "Inclusion Mode has not been verified",
"request": "Provide a dated, scoped receipt for Inclusion Mode",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:inclusion_rule:missing_required",
"field_path": "stages.stage-1.fields.inclusion_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Inclusion Rule has not been verified",
"request": "Provide a dated, scoped receipt for Inclusion Rule",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:intended_delivery_scope:missing_required",
"field_path": "stages.stage-1.fields.intended_delivery_scope",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Intended Delivery Scope has not been verified",
"request": "Enter Intended Delivery Scope, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:lead_form_action:missing_required",
"field_path": "stages.stage-1.fields.lead_form_action",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Lead Form Action has not been verified",
"request": "Provide a dated, scoped receipt for Lead Form Action",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:lead_form_page_and_form:missing_required",
"field_path": "stages.stage-1.fields.lead_form_page_and_form",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Lead Form Page And Form has not been verified",
"request": "Provide a dated, scoped receipt for Lead Form Page And Form",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:list_inclusion_eligible:missing_required",
"field_path": "stages.stage-1.fields.list_inclusion_eligible",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "List Inclusion Eligible has not been verified",
"request": "Provide a dated, scoped receipt for List Inclusion Eligible",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:list_match_state:missing_required",
"field_path": "stages.stage-1.fields.list_match_state",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "List Match State has not been verified",
"request": "Provide a dated, scoped receipt for List Match State",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:list_membership_rule:missing_required",
"field_path": "stages.stage-1.fields.list_membership_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "List Membership Rule has not been verified",
"request": "Provide a dated, scoped receipt for List Membership Rule",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:list_sharing_permission:missing_required",
"field_path": "stages.stage-1.fields.list_sharing_permission",
"source_system": "privacy register",
"owner": "Unassigned — assign field owner",
"reason": "List Sharing Permission has not been verified",
"request": "Provide a dated, scoped receipt for List Sharing Permission",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:list_updated_at:missing_required",
"field_path": "stages.stage-1.fields.list_updated_at",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "List Updated At has not been verified",
"request": "Provide a dated, scoped receipt for List Updated At",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:measurement_event:missing_required",
"field_path": "stages.stage-1.fields.measurement_event",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Measurement Event has not been verified",
"request": "Enter Measurement Event, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:membership_window_days:missing_required",
"field_path": "stages.stage-1.fields.membership_window_days",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Membership Window Days has not been verified",
"request": "Enter Membership Window Days, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:message_job:missing_required",
"field_path": "stages.stage-1.fields.message_job",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Message Job has not been verified",
"request": "Enter Message Job, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:next_action:missing_required",
"field_path": "stages.stage-1.fields.next_action",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Next Action has not been verified",
"request": "Enter Next Action, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:notice_verified:missing_required",
"field_path": "stages.stage-1.fields.notice_verified",
"source_system": "privacy register",
"owner": "Unassigned — assign field owner",
"reason": "Notice Verified has not been verified",
"request": "Provide a dated, scoped receipt for Notice Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:offer:missing_required",
"field_path": "stages.stage-1.fields.offer",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Offer has not been verified",
"request": "Enter Offer, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:opt_out_procedure:missing_required",
"field_path": "stages.stage-1.fields.opt_out_procedure",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Opt Out Procedure has not been verified",
"request": "Provide a dated, scoped receipt for Opt Out Procedure",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:outcome_window_end:missing_required",
"field_path": "stages.stage-1.fields.outcome_window_end",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Outcome Window End has not been verified",
"request": "Enter Outcome Window End, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:outcome_window_start:missing_required",
"field_path": "stages.stage-1.fields.outcome_window_start",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Outcome Window Start has not been verified",
"request": "Enter Outcome Window Start, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:overlap_rule:missing_required",
"field_path": "stages.stage-1.fields.overlap_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Overlap Rule has not been verified",
"request": "Enter Overlap Rule, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:proof_asset_available:missing_required",
"field_path": "stages.stage-1.fields.proof_asset_available",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Proof Asset Available has not been verified",
"request": "Provide a dated, scoped receipt for Proof Asset Available",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:proof_asset:missing_required",
"field_path": "stages.stage-1.fields.proof_asset",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Proof Asset has not been verified",
"request": "Enter Proof Asset, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:review_period_end:missing_required",
"field_path": "stages.stage-1.fields.review_period_end",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Review Period End has not been verified",
"request": "Enter Review Period End, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:review_period_start:missing_required",
"field_path": "stages.stage-1.fields.review_period_start",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Review Period Start has not been verified",
"request": "Enter Review Period Start, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:review_trigger:missing_required",
"field_path": "stages.stage-1.fields.review_trigger",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Review Trigger has not been verified",
"request": "Enter Review Trigger, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:route:missing_required",
"field_path": "stages.stage-1.fields.route",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Route has not been verified",
"request": "Enter Route, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:rule_count:missing_required",
"field_path": "stages.stage-1.fields.rule_count",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Rule Count has not been verified",
"request": "Provide a dated, scoped receipt for Rule Count",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:rule_operator:missing_required",
"field_path": "stages.stage-1.fields.rule_operator",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Rule Operator has not been verified",
"request": "Provide a dated, scoped receipt for Rule Operator",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:selected_window_allowed:missing_required",
"field_path": "stages.stage-1.fields.selected_window_allowed",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Selected Window Allowed has not been verified",
"request": "Provide a dated, scoped receipt for Selected Window Allowed",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_access_verified:missing_required",
"field_path": "stages.stage-1.fields.source_access_verified",
"source_system": "Events Manager",
"owner": "Unassigned — assign field owner",
"reason": "Source Access Verified has not been verified",
"request": "Provide a dated, scoped receipt for Source Access Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_activity_count:optional_unknown",
"field_path": "stages.stage-1.fields.source_activity_count",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Count has not been verified",
"request": "Provide a dated, scoped receipt for Source Activity Count",
"blocking": false,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_activity_period:missing_required",
"field_path": "stages.stage-1.fields.source_activity_period",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Period has not been verified",
"request": "Enter Source Activity Period, or record why it is Unknown, who owns it and the exact next request",
"blocking": false,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_activity_unit:missing_required",
"field_path": "stages.stage-1.fields.source_activity_unit",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Activity Unit has not been verified",
"request": "Enter Source Activity Unit, or record why it is Unknown, who owns it and the exact next request",
"blocking": false,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_history_from:missing_required",
"field_path": "stages.stage-1.fields.source_history_from",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source History From has not been verified",
"request": "Provide a dated, scoped receipt for Source History From",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_history_verified:missing_required",
"field_path": "stages.stage-1.fields.source_history_verified",
"source_system": "Events Manager",
"owner": "Unassigned — assign field owner",
"reason": "Source History Verified has not been verified",
"request": "Provide a dated, scoped receipt for Source History Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_name:missing_required",
"field_path": "stages.stage-1.fields.source_name",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Name has not been verified",
"request": "Provide a dated, scoped receipt for Source Name",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_observed_action:missing_required",
"field_path": "stages.stage-1.fields.source_observed_action",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Observed Action has not been verified",
"request": "Provide a dated, scoped receipt for Source Observed Action",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:source_observed_through:missing_required",
"field_path": "stages.stage-1.fields.source_observed_through",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Source Observed Through has not been verified",
"request": "Provide a dated, scoped receipt for Source Observed Through",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:stage_owner:missing_required",
"field_path": "stages.stage-1.fields.stage_owner",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Stage Owner has not been verified",
"request": "Enter Stage Owner, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:success_rule:missing_required",
"field_path": "stages.stage-1.fields.success_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Success Rule has not been verified",
"request": "Enter Success Rule, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_groups:missing_required",
"field_path": "stages.stage-1.fields.suppression_groups",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Groups has not been verified",
"request": "Enter Suppression Groups, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_last_verified_at:missing_required",
"field_path": "stages.stage-1.fields.suppression_last_verified_at",
"source_system": "CRM",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Last Verified At has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Last Verified At",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_refresh_rule:missing_required",
"field_path": "stages.stage-1.fields.suppression_refresh_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Refresh Rule has not been verified",
"request": "Enter Suppression Refresh Rule, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_scope_reason:missing_required",
"field_path": "stages.stage-1.fields.suppression_scope_reason",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Scope Reason has not been verified",
"request": "Enter Suppression Scope Reason, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_source:missing_required",
"field_path": "stages.stage-1.fields.suppression_source",
"source_system": "CRM",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Source has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Source",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_valid_until:missing_required",
"field_path": "stages.stage-1.fields.suppression_valid_until",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Valid Until has not been verified",
"request": "Enter Suppression Valid Until, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:suppression_verified:missing_required",
"field_path": "stages.stage-1.fields.suppression_verified",
"source_system": "CRM",
"owner": "Unassigned — assign field owner",
"reason": "Suppression Verified has not been verified",
"request": "Provide a dated, scoped receipt for Suppression Verified",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:volume_assessment:missing_required",
"field_path": "stages.stage-1.fields.volume_assessment",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Volume Assessment has not been verified",
"request": "Enter Volume Assessment, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:volume_decision_reason:missing_required",
"field_path": "stages.stage-1.fields.volume_decision_reason",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Volume Decision Reason has not been verified",
"request": "Enter Volume Decision Reason, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:website_pixel_active:missing_required",
"field_path": "stages.stage-1.fields.website_pixel_active",
"source_system": "Events Manager",
"owner": "Unassigned — assign field owner",
"reason": "Website Pixel Active has not been verified",
"request": "Provide a dated, scoped receipt for Website Pixel Active",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:website_url_or_event_rule:missing_required",
"field_path": "stages.stage-1.fields.website_url_or_event_rule",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Website Url Or Event Rule has not been verified",
"request": "Provide a dated, scoped receipt for Website Url Or Event Rule",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
},
{
"issue_id": "issue:stage-1:window_rationale:missing_required",
"field_path": "stages.stage-1.fields.window_rationale",
"source_system": "plan/source record",
"owner": "Unassigned — assign field owner",
"reason": "Window Rationale has not been verified",
"request": "Enter Window Rationale, or record why it is Unknown, who owns it and the exact next request",
"blocking": true,
"status": "open",
"detected_at": "2026-09-26T12:00:00-04:00",
"evidence_ids": []
}
],
"evaluation": {
"schema_version": "facebook-retargeting-plan.v1",
"evaluator_version": "facebook-retargeting-evaluator.v1.3",
"input_sha256": "e5a2201c69a4379f92962a06e239b287de012fcf6e1af6dfe745eb68e9348c81",
"evaluated_as_of": "2026-09-26T12:00:00-04:00",
"plan_state": "hold",
"reason_code": "missing_required",
"reason": "Route has not been verified",
"open_issue_ids": [
"issue:stage-1:ad_copy_example:missing_required",
"issue:stage-1:ad_set_exclusions:missing_required",
"issue:stage-1:app_event_rule:missing_required",
"issue:stage-1:app_logging_method:missing_required",
"issue:stage-1:app_registered_and_accessible:missing_required",
"issue:stage-1:attribution_boundary:missing_required",
"issue:stage-1:audience_created_at:missing_required",
"issue:stage-1:audience_estimated_people:missing_required",
"issue:stage-1:audience_population_basis:missing_required",
"issue:stage-1:audience_size_visibility:missing_required",
"issue:stage-1:audience_status:missing_required",
"issue:stage-1:business_name:missing_required",
"issue:stage-1:business_offer:missing_required",
"issue:stage-1:buyer_question:missing_required",
"issue:stage-1:buyer_scope:missing_required",
"issue:stage-1:completed_next_step:missing_required",
"issue:stage-1:consent_required:missing_required",
"issue:stage-1:consent_verified:missing_required",
"issue:stage-1:crm_mapping_verified:missing_required",
"issue:stage-1:crm_outcome:missing_required",
"issue:stage-1:crm_unique_key:missing_required",
"issue:stage-1:data_use_approved:missing_required",
"issue:stage-1:destination:missing_required",
"issue:stage-1:destination_verified:missing_required",
"issue:stage-1:documented_max_window_days:optional_unknown",
"issue:stage-1:engagement_asset_rule:missing_required",
"issue:stage-1:engagement_type:missing_required",
"issue:stage-1:event_exclusion_rule:missing_required",
"issue:stage-1:event_exclusion_supported:missing_required",
"issue:stage-1:expansion_state:missing_required",
"issue:stage-1:inclusion_mode:missing_required",
"issue:stage-1:inclusion_rule:missing_required",
"issue:stage-1:intended_delivery_scope:missing_required",
"issue:stage-1:lead_form_action:missing_required",
"issue:stage-1:lead_form_page_and_form:missing_required",
"issue:stage-1:list_inclusion_eligible:missing_required",
"issue:stage-1:list_match_state:missing_required",
"issue:stage-1:list_membership_rule:missing_required",
"issue:stage-1:list_sharing_permission:missing_required",
"issue:stage-1:list_updated_at:missing_required",
"issue:stage-1:measurement_event:missing_required",
"issue:stage-1:membership_window_days:missing_required",
"issue:stage-1:message_job:missing_required",
"issue:stage-1:next_action:missing_required",
"issue:stage-1:notice_verified:missing_required",
"issue:stage-1:offer:missing_required",
"issue:stage-1:opt_out_procedure:missing_required",
"issue:stage-1:outcome_window_end:missing_required",
"issue:stage-1:outcome_window_start:missing_required",
"issue:stage-1:overlap_rule:missing_required",
"issue:stage-1:proof_asset:missing_required",
"issue:stage-1:proof_asset_available:missing_required",
"issue:stage-1:review_period_end:missing_required",
"issue:stage-1:review_period_start:missing_required",
"issue:stage-1:review_trigger:missing_required",
"issue:stage-1:route:missing_required",
"issue:stage-1:rule_count:missing_required",
"issue:stage-1:rule_operator:missing_required",
"issue:stage-1:selected_window_allowed:missing_required",
"issue:stage-1:source_access_verified:missing_required",
"issue:stage-1:source_activity_count:optional_unknown",
"issue:stage-1:source_activity_period:missing_required",
"issue:stage-1:source_activity_unit:missing_required",
"issue:stage-1:source_history_from:missing_required",
"issue:stage-1:source_history_verified:missing_required",
"issue:stage-1:source_name:missing_required",
"issue:stage-1:source_observed_action:missing_required",
"issue:stage-1:source_observed_through:missing_required",
"issue:stage-1:stage_owner:missing_required",
"issue:stage-1:success_rule:missing_required",
"issue:stage-1:suppression_groups:missing_required",
"issue:stage-1:suppression_last_verified_at:missing_required",
"issue:stage-1:suppression_refresh_rule:missing_required",
"issue:stage-1:suppression_scope_reason:missing_required",
"issue:stage-1:suppression_source:missing_required",
"issue:stage-1:suppression_valid_until:missing_required",
"issue:stage-1:suppression_verified:missing_required",
"issue:stage-1:volume_assessment:missing_required",
"issue:stage-1:volume_decision_reason:missing_required",
"issue:stage-1:website_pixel_active:missing_required",
"issue:stage-1:website_url_or_event_rule:missing_required",
"issue:stage-1:window_rationale:missing_required"
],
"blocking_issue_count": 78,
"next_action": "Enter Route, or record why it is Unknown, who owns it and the exact next request",
"launch_state": "hold_separate_authorization"
},
"extensions": {}
}
```
## Current evaluator receipt
Replace with the receipt produced from exactly the supplied source record.
```json
{
"schema_version": "facebook-retargeting-plan.v1",
"evaluator_version": "facebook-retargeting-evaluator.v1.3",
"input_sha256": "e5a2201c69a4379f92962a06e239b287de012fcf6e1af6dfe745eb68e9348c81",
"evaluated_as_of": "2026-09-26T12:00:00-04:00",
"plan_state": "hold",
"reason_code": "missing_required",
"reason": "Route has not been verified",
"open_issue_ids": [
"issue:stage-1:ad_copy_example:missing_required",
"issue:stage-1:ad_set_exclusions:missing_required",
"issue:stage-1:app_event_rule:missing_required",
"issue:stage-1:app_logging_method:missing_required",
"issue:stage-1:app_registered_and_accessible:missing_required",
"issue:stage-1:attribution_boundary:missing_required",
"issue:stage-1:audience_created_at:missing_required",
"issue:stage-1:audience_estimated_people:missing_required",
"issue:stage-1:audience_population_basis:missing_required",
"issue:stage-1:audience_size_visibility:missing_required",
"issue:stage-1:audience_status:missing_required",
"issue:stage-1:business_name:missing_required",
"issue:stage-1:business_offer:missing_required",
"issue:stage-1:buyer_question:missing_required",
"issue:stage-1:buyer_scope:missing_required",
"issue:stage-1:completed_next_step:missing_required",
"issue:stage-1:consent_required:missing_required",
"issue:stage-1:consent_verified:missing_required",
"issue:stage-1:crm_mapping_verified:missing_required",
"issue:stage-1:crm_outcome:missing_required",
"issue:stage-1:crm_unique_key:missing_required",
"issue:stage-1:data_use_approved:missing_required",
"issue:stage-1:destination:missing_required",
"issue:stage-1:destination_verified:missing_required",
"issue:stage-1:documented_max_window_days:optional_unknown",
"issue:stage-1:engagement_asset_rule:missing_required",
"issue:stage-1:engagement_type:missing_required",
"issue:stage-1:event_exclusion_rule:missing_required",
"issue:stage-1:event_exclusion_supported:missing_required",
"issue:stage-1:expansion_state:missing_required",
"issue:stage-1:inclusion_mode:missing_required",
"issue:stage-1:inclusion_rule:missing_required",
"issue:stage-1:intended_delivery_scope:missing_required",
"issue:stage-1:lead_form_action:missing_required",
"issue:stage-1:lead_form_page_and_form:missing_required",
"issue:stage-1:list_inclusion_eligible:missing_required",
"issue:stage-1:list_match_state:missing_required",
"issue:stage-1:list_membership_rule:missing_required",
"issue:stage-1:list_sharing_permission:missing_required",
"issue:stage-1:list_updated_at:missing_required",
"issue:stage-1:measurement_event:missing_required",
"issue:stage-1:membership_window_days:missing_required",
"issue:stage-1:message_job:missing_required",
"issue:stage-1:next_action:missing_required",
"issue:stage-1:notice_verified:missing_required",
"issue:stage-1:offer:missing_required",
"issue:stage-1:opt_out_procedure:missing_required",
"issue:stage-1:outcome_window_end:missing_required",
"issue:stage-1:outcome_window_start:missing_required",
"issue:stage-1:overlap_rule:missing_required",
"issue:stage-1:proof_asset:missing_required",
"issue:stage-1:proof_asset_available:missing_required",
"issue:stage-1:review_period_end:missing_required",
"issue:stage-1:review_period_start:missing_required",
"issue:stage-1:review_trigger:missing_required",
"issue:stage-1:route:missing_required",
"issue:stage-1:rule_count:missing_required",
"issue:stage-1:rule_operator:missing_required",
"issue:stage-1:selected_window_allowed:missing_required",
"issue:stage-1:source_access_verified:missing_required",
"issue:stage-1:source_activity_count:optional_unknown",
"issue:stage-1:source_activity_period:missing_required",
"issue:stage-1:source_activity_unit:missing_required",
"issue:stage-1:source_history_from:missing_required",
"issue:stage-1:source_history_verified:missing_required",
"issue:stage-1:source_name:missing_required",
"issue:stage-1:source_observed_action:missing_required",
"issue:stage-1:source_observed_through:missing_required",
"issue:stage-1:stage_owner:missing_required",
"issue:stage-1:success_rule:missing_required",
"issue:stage-1:suppression_groups:missing_required",
"issue:stage-1:suppression_last_verified_at:missing_required",
"issue:stage-1:suppression_refresh_rule:missing_required",
"issue:stage-1:suppression_scope_reason:missing_required",
"issue:stage-1:suppression_source:missing_required",
"issue:stage-1:suppression_valid_until:missing_required",
"issue:stage-1:suppression_verified:missing_required",
"issue:stage-1:volume_assessment:missing_required",
"issue:stage-1:volume_decision_reason:missing_required",
"issue:stage-1:website_pixel_active:missing_required",
"issue:stage-1:website_url_or_event_rule:missing_required",
"issue:stage-1:window_rationale:missing_required"
],
"blocking_issue_count": 78,
"next_action": "Enter Route, or record why it is Unknown, who owns it and the exact next request",
"launch_state": "hold_separate_authorization"
}
```
Facebook retargeting ads FAQ
What are Facebook retargeting ads?
Facebook retargeting ads use an eligible Meta Custom Audience source to reach people connected to a prior action, such as a website event, app event, Meta engagement action or permitted customer-list membership. The plan should name the action and verify whether the included audience is a hard control or an Advantage+ suggestion.
Does a Facebook website audience include earlier visitors?
Meta's current website-audience Help says the audience starts populating when it is created and does not backfill. Record the audience creation date and do not count earlier website visits as recoverable members.
Is 180 days the maximum Facebook retargeting window?
The public sources checked for this guide did not establish one universal maximum across every source. A video walkthrough shows 180 days in one creator's website-audience flow. Verify the allowed value in the chosen account and source.
How large should a Facebook retargeting audience be?
There is no universal B2B minimum in the public Meta sources checked here. Verify the Ready state, record whether the estimate is visible or hidden, and decide whether the proposed segmentation is workable. Meta's “several hundred” language is troubleshooting advice for a small website audience, not a guaranteed delivery threshold.
Can Advantage+ show the ad outside my retargeting audience?
Yes, when the Custom Audience is used as a suggestion. Meta says suggestions may expand delivery. Check whether the account offers a further-limit control, whether Use as a suggestion is selected and which exclusions remain active.
Can I upload a customer list for retargeting?
Only after the data owner and privacy owner confirm the proposed use, notice or consent requirements, permission to share with Meta and ongoing opt-out handling. Hashing identifiers does not establish that permission. Do not place raw identifiers in the planning record.
Should every B2B retargeting campaign exclude customers?
Decide based on the message. Customers usually do not belong in an acquisition ask, but they may fit a separate renewal, education or expansion plan. Record the group, reason, source and refresh rule instead of applying one universal exclusion.
Should the ads run in a three-step sequence?
Use several message rows when different observed actions need different answers. Do not promise that Meta will deliver the rows in a strict order. Each row needs its own source rule, exclusions, message, destination and measurement event.
What should I do when the retargeting pool is small?
Check source history, audience status and estimate visibility first. Then consider combining closely related behaviors when the same message, offer and destination still make sense. Keep the plan on Hold when source, permission, suppression or delivery-control evidence is missing.
Continue the broader Facebook Ads plan
Use the Facebook Ads for B2B guide for the broader audience, offer, creative and campaign brief.
Use the Facebook Ads cost calculator for a budget and qualified-outcome scenario. A budget model does not establish that the retargeting source is ready.
Use LinkedIn Ads vs Facebook Ads when the unresolved question is channel choice.
Browse the Maestro resources for the related planning and measurement tools.
If the team disagrees about the source, message, destination or evidence needed to move off Hold, bring the redacted plan to a free Demand Gen Roast. The review can start with the decisions and receipts instead of rebuilding the campaign from memory.
Sources and method
Platform claims in this guide come from public Meta Help and terms pages checked on 26 September 2026. No Maestro or client ad account, audience, Pixel event, consent record, spend or campaign result was used as evidence for this draft.
Primary platform sources:
- About Custom Audiences
- Create a website Custom Audience
- About website Custom Audiences
- Troubleshoot Custom Audience size
- About engagement Custom Audiences
- Create a lead-form engagement Custom Audience
- Advantage+ audience controls and suggestions
- Meta Business Tools Terms
- Customer List Custom Audiences Terms
The two videos are visual demonstrations of controls in the creators' accounts. TJ Murray's website-audience walkthrough shows the source, event, exclusion and retention inputs. Ben Heath's audience-control walkthrough shows how a Custom Audience may sit inside the suggestion area and how further-limit controls can appear. Meta's official documentation governs the platform explanations.
We also reviewed current guides from Linear, LeadsBridge, Fetch & Funnel, Cropink and Shopify Help to compare the setup, examples and reader task. Competitor articles were not used as authority for Meta's current controls.