Facebook webinar ads: from first invitation to event follow-up
Choose where registration happens before you write the ad. If the webinar platform needs to create a registration ID, issue a calendar invitation and later report attendance, an owned website registration page is usually the clearest route. Use a Meta Instant Form when the native form can collect the approved fields and a tested handoff can turn each submission into a confirmed event registration. A submitted Instant Form alone does not prove that the person has a seat or knows how to join.
The route decision is part of a larger handoff. The event owner supplies the teaching promise and event facts. The media buyer turns those facts into a dated sequence. RevOps proves when someone registered and attended. The follow-up owner sends the appropriate message only after the relevant state is known.
Build a webinar campaign handoff
Build the webinar campaign handoff
Start with the completed fictional fixture or a blank record. Draft readiness covers the facts needed for honest copy. Launch readiness still waits for real account, route, suppression and delivery receipts.
Route and event facts
Campaign and tracking
Creative phases
Suppression and attendance evidence
Follow-up branches
Canonical JSON record
Choose the registration route
| Route | Choose it when | Check before launch |
|---|---|---|
| Website registration | The event platform's form, calendar step, qualification or confirmation journey is part of the promised experience. | Click the final ad URL on mobile, submit a test, find the event-platform registration ID and confirm that the join instructions arrive. |
| Meta Instant Form | The requested details fit the native form and a permitted integration creates or reconciles the event-platform registration. | Test form delivery, privacy treatment, CRM mapping, event registration, confirmation and the join key. Hold launch if any link is missing. |
| Separate paths | You have a reason to offer both routes and can prove each route end to end. | Keep route-specific IDs, confirmation checks and reporting separate until the records can be joined. |
This is a campaign planning decision, not a Meta rule that one route always wins. If the native form's destination, privacy approval or event-platform join is missing, you can draft creative, but you cannot call the acquisition path launch ready. Our Facebook Lead Ads guide covers the generic form fields, privacy, CRM mapping and test delivery in detail. This page concentrates on the webinar handoff those form tests must support.
Do not choose an objective from a copied webinar template. Define the action you need first, then check the available objective and conversion options in the account you will use. The current public source captured for this page did not establish a webinar-specific objective rule. Keep the account selection and test result in the launch record.
Write the event facts before writing the ads
Start with the audience's job and the problem the session will help them solve. A title such as “Revenue webinar” gives a media buyer almost nothing to work with. “How a demand generation lead can reconcile webinar registrations with attendance before sales follow-up” gives the reader a task and gives the speaker a lesson to deliver.
Record the exact event name, date, time zone, registration cutoff, speaker name and verified role, format, three takeaways, destination, confirmation action and replay decision. If a takeaway or credential is still awaiting approval, leave it out of the ad. Say “registration closes at 1 p.m.” only if that is the real cutoff. “Limited seats” requires an actual capacity limit.
The value of the session should be visible before the click. The ad can name one problem, one concrete thing the attendee will learn and the action required to attend. The landing page or form should repeat the same promise. A different offer after the click breaks the handoff before measurement begins.
In Matthew Larsen's paid-ads training, the passage at 04:24–04:37 presents a webinar funnel as a fit when a specific training, case study or presentation helps a prospect evaluate an offer. That is his practitioner view, not a Meta platform rule. For this plan, the practical test is simpler: can the event owner name the lesson and show what the registrant receives?
Six real examples, with their source limits
The first four images are webinar or workshop captures published by GetHookd, which labels them “Source: Meta” but gives no direct Ad Library record. The last two come from direct public Meta Ad Library records and show adjacent scheduled events, not one-session webinars. These creatives show visible copy and design choices. They do not establish targeting, the hidden form, the clicked destination, current delivery or results.
Global Travel: put the live reason next to the date
The GetHookd capture shows a live webinar, a virtual event happening that week, a $100 Hotel Savers Card offered for attending and a Book Now button. The creative also says seats are limited. These are visible advertiser statements, not verified capacity or performance claims.
The lesson for a B2B webinar is to put the date, attendance reason and action together. Replace the travel bonus with a real working asset or live-only exercise if the event owner has approved one. State scarcity only when the capacity or registration cutoff exists in the event record. The capture does not show where Book Now led.
Yorkshire College Planning: let the host explain one problem
The GetHookd capture opens with a FAFSA-related problem, uses a vertical talking-head video cover and labels the event a live workshop. Its button says Learn more. The screenshot does not show the spoken video or destination. Its financial assertion is advertiser copy, not independently established evidence.
For a B2B adaptation, give the speaker one checked operating problem to explain on camera, then name one takeaway and the event action. The speaker's actual words and credentials need approval before the video becomes an ad.
Shumard Workshops: lead with the recognizable situation
The GetHookd capture opens with blood sugar swings, then offers a free workshop under a video cover with Learn more as the button. The visible first line supplies the reason to pay attention before asking for registration. The medical claims are the advertiser's claims and are not a basis for this guide's recommendations.
For a B2B session, name the role's real problem in the opening line, then say what the session will teach. The screenshot does not establish an event date or the arrival page, so it cannot show whether the invitation stayed consistent after the click.
Padi Goodspeed: separate questions across carousel cards
The GetHookd capture frames a monthly mortgage webinar around rates and housing decisions. The visible carousel cards introduce the host, mortgage trends and buyer, seller and realtor audiences. The button says Learn more. Only part of the carousel is visible.
A B2B carousel can give one card to the problem, one to the speaker and one to the takeaways. Keep the same webinar promise across the cards and verify the destination for any card that can have a separate link. This capture does not establish its destinations or results.
Small Business Expo: qualify the commercial role
The Meta Ad Library record shows an exhibitor offer for in-person business events. Its creative asks Sell B2B services?, offers exhibitor rates and pairs that role cue with a dated, multi-city schedule. The button says Learn more. This is an adjacent event acquisition example, not webinar registration.
For a webinar, the role cue can become “Own demand generation for a B2B team?” and the schedule can become one confirmed date and time zone. A role label helps the right reader recognize the invitation. The saved archive does not establish whether the old dates remain current, where the button led or how the ad performed. Related records with repeated copy count as one creative family.
ELVTR: make the agenda tangible
The Meta Ad Library record identifies architects, names an instructor and lists eight classes plus additional lessons under Live Online AI for Architects Course. The button says Learn more. This is a live online course rather than a one-session webinar, and related archive records repeat substantially the same creative family.
For one B2B webinar, shrink that curriculum idea to three approved takeaways a person can learn in the scheduled time. Include a speaker title only after the event owner verifies it. The archived creative does not establish the arrival page, registrations or results.
Match the creative to the remaining decision
Use the same event facts through the campaign. Change the question each ad answers, not the underlying promise.
| Phase | Eligible audience and message job | Creative and action | Stop or change when |
|---|---|---|---|
| Cold invitation | Permitted prospect audience that has not confirmed registration. Name the role, problem and learning promise. | Problem-first image or speaker clip. Send to the chosen registration route. | The person registers, the event facts change or registration closes. |
| Warm invitation | Permitted visitors, video viewers or form engagers whose registration remains unconfirmed. Answer a specific reason they have not committed. | Speaker explanation, one agenda item or a simple carousel. Send to the same verified route. | Registration is confirmed or the audience source becomes stale. |
| Final call | Still-eligible non-registrants while registration is genuinely open. Make the real cutoff and time zone visible. | Direct date, takeaway and CTA. Avoid invented seat pressure. | The actual cutoff passes, the event begins or registration is confirmed. |
| Replay or recap | Only the audience whose permission, replay availability and event state support the message. | Offer the verified recording or a separate written recap with a new action. | Replay access fails, permission is absent or the message conflicts with the person's follow-up branch. |
Pick phase dates from the actual event schedule. There is no source-backed universal number of days, ads or dollars for every webinar. Write the start, change and stop conditions in the handoff so a media buyer knows when to rotate or pause each message.
Larsen's second relevant passage, at 21:40–21:58, connects webinar signup and a thank-you page with later content, retargeting and email follow-up on the way to a sales conversation. The saved transcript uses automatic captions, so this is a paraphrase of his sequence. His passage does not supply the event-state rules below; those rules must be defined by the campaign team.
Stop acquisition ads for confirmed registrants
First define the source of truth for confirmed registration. A web form submission may be a pending handoff. A Meta Instant Form submission may be a lead awaiting event-platform creation. Suppress from acquisition when the chosen source has a current, permitted record that the person is registered for this event. Record the event ID, update cadence, audience source, permission basis, owner and last successful sync.
Meta says Custom Audiences can use advertiser data or Meta engagement. Its lead-form audience guide includes form engagement such as opening or submitting a form. Those engagement events can help build a warm audience, but they do not themselves prove an external event registration or attendance.
In Meta's current Advantage+ audience guidance, Custom Audience exclusions are audience controls. Included Custom Audiences may be suggestions unless the setup further limits them. Check the exact control in the account preview and test the final audience against the registration source. The plan is not complete just because a custom audience name appears in the ad set.
Keep reminder eligibility separate from acquisition eligibility. A registrant should stop seeing “Register now,” but can receive permitted join instructions through the agreed reminder channel. If reminders use ads, they need their own audience, message and privacy check. A person who merely opened a form is still unconfirmed; a person with a verified event registration is not a cold prospect for this event.
Define the registration-to-attendance contract
Track the transition as separate records. A click is an ad interaction. A submitted form is a capture event. A confirmed registration needs the event platform or an approved registration system to return the event ID and registration ID. Attendance needs an event-platform record linked to that registration. A sales action belongs to the CRM and should keep its own timestamp and owner.
| State | Evidence required | What it does not prove |
|---|---|---|
| Clicked | Campaign, ad and click or tagged landing session, with capture time. | Form submission or registration. |
| Submitted | Native or website form receipt, source ID and submission time. | Event-platform registration or join instructions. |
| Registered | Event ID plus accepted registration ID or equivalent confirmed event-platform record, linked to the person. | Attendance. |
| Attended | Attendance row for the event, linked by the approved join key, within a declared export window. | A later buying action. |
| Verified no-show | Confirmed registration, complete attendance source for the declared event and cutoff, valid join key, and no matching attendance row. | Lack of interest or permission for every follow-up channel. |
| Unknown attendance | Missing, incomplete, delayed or unjoinable attendance evidence. | A no-show. |
Write down the event ID, campaign and ad IDs, landing URL and UTMs, form or lead ID, event-platform registration ID, CRM contact ID, join key, source timestamps and reconciliation cutoff. For an Instant Form, include the Meta form ID and the integration receipt that turns a submission into an event registration. Do not use a matching email address by itself as proof when it could connect the wrong event or an old registration.
The event owner must state when the attendance export is complete and which rows it covers. RevOps must check for test rows, late arrivals, duplicates, unrelated events and records after the cutoff before labeling no-shows. If export completeness or linkage is unknown, attendance stays Unknown. Zero matched rows in an incomplete file is not a no-show count.
Send follow-up from the state you can prove
An attendee can receive the promised working asset, a short recap of the live exercise and the agreed next step. If a sales conversation is appropriate, tie it to the topic they attended and the consent you have; attendance alone is not a request for a sales call.
A verified no-show can receive a recording if the recording exists and access is approved. Say what they missed and how to watch it. If the replay was never produced, offer a written recap or a future session only if those are real and permitted.
A non-registrant can receive a later invitation or recap only through an eligible audience and channel. Do not send join instructions or no-show language to someone who never registered. If their registration status is still pending because the integration failed, hold this branch until the handoff is reconciled.
People with Unknown attendance need a reconciliation queue, not an automated no-show email. Name the RevOps owner, the missing source and the next check time. Once the event platform supplies complete, linked evidence, move each person into the right branch.
Worked example: a fictional B2B webinar
Everything about Northstar Ops in this section is fictional. The event facts below are an illustrative planning fixture, not a Maestro client campaign, a live event, a measured result or a claim that an ad has been approved.
| Fictional fact supplied to the fixture | Value |
|---|---|
| Company and audience | Northstar Ops; US demand generation leads at B2B software companies. |
| Event and teaching promise | “Reconcile webinar registrations and attendance before sales follow-up.” Attendees will map a registration ID to an attendance export, identify Unknown attendance and choose a follow-up branch. |
| Speaker | Maya Chen, Northstar Ops' fictional RevOps lead. This is a fixture role, not a real credential. |
| Event time | October 22, 2026, 2 p.m. Eastern; 45 minutes. Registration closes October 22 at 1 p.m. Eastern. No seat limit is supplied. |
| Route | An owned website page, https://northstar-ops.example/webinar, connects to the fictional event platform. The example route is chosen because the platform supplies a registration ID and attendance export. The URL is illustrative and has no live test receipt. |
| Event and measurement fields | Fictional event ID NSO-WEB-2026-10-22; proposed UTM campaign nso_registration_attendance_20261022; registration ID and attendance export share an approved event-specific join key. |
| Evidence and permission | The fictional team has permission to use its registered-contact list for this event's acquisition suppression. The event platform can produce an attendance export. A complete export and any actual attendance rows do not exist yet in this pre-launch fixture. |
| Replay | A recording is planned, but the replay URL and delivery approval remain Unknown until the event owner confirms them. |
| Owners | Event owner: Maya Chen. Media buyer: Alex Rivera. RevOps owner: Jordan Lee. Follow-up owner: Sam Patel. These are fictional role assignments. |
The route decision is website registration, conditional on a live test of the illustrative page and event-platform confirmation. An Instant Form draft could use the same topic, but it would stay on launch hold until privacy approval, CRM destination and the event-platform join key were supplied and tested. The native form's submission receipt would still be separate from the event registration ID.
The cold ad could say: “If you run B2B webinars, can you tell who registered, who attended and whose status is still unknown? Join Maya Chen on October 22 at 2 p.m. Eastern to map the registration ID to the attendance export and choose the right follow-up branch.” Its button leads to the fictional website route. The claim is about what the session will teach, not a result Northstar Ops has achieved.
The warm ad could show Maya explaining one example of an incomplete attendance export. It would say: “A missing attendance row can mean the export is incomplete. See how to keep that person in Unknown until you can reconcile the record.” This uses the supplied lesson and asks the still-eligible viewer to register for the same session.
The final-call ad could say: “Registration closes at 1 p.m. Eastern on October 22. Join the 2 p.m. session to build a registration-to-attendance map.” It does not say “last seats,” because the fixture supplies no capacity limit. Alex would stop acquisition ads at the real cutoff and exclude current confirmed registrants from every acquisition phase once the source and permission check pass.
The proposed calendar is October 6 for the cold invitation, October 15 for a warm explanation, October 22 before 1 p.m. Eastern for the final call, and after the event for any approved replay or recap. These dates are fixture choices, not a recommended universal cadence. Maya verifies the event facts; Alex verifies ads, eligibility, destinations and cutoff; Jordan verifies registration IDs, list sync and later export completeness; Sam prepares the branch copy but sends only after status and permission checks.
At this pre-launch point, the fixture has no real clicks, submissions, registrations, attendance rows or sales actions. Even after a test registration, attendance would remain Unknown until Jordan receives a complete event-specific export at the declared reconciliation cutoff. A registered person with no matching row in an incomplete export would stay Unknown. The worked plan does not invent a no-show or a performance result.
Download the campaign kit
The Markdown and JSON files carry the same campaign state. The two prompts work without this article.
Copy the full build prompt
FACEBOOK WEBINAR AD BUILD PROMPT — standalone v1
Use only the campaign record and facts pasted below. Do not assume the article, Meta account, event platform, CRM or landing page is accessible. Do not invent a date, speaker credential, customer result, capacity limit, privacy approval, route test, recording or performance result. Public examples show creative choices, not proof of their outcomes.
Return one complete canonical JSON record with schema_version `maestro.facebook-webinar-campaign.v1` in a JSON code fence. Preserve every supplied identifier, owner, source reference, pending value and useful open request. The JSON must be the record itself, not a wrapper. Use the blank shape below for every key:
```json
{
"schema_version": "maestro.facebook-webinar-campaign.v1",
"record_id": null,
"fixture_status": "blank",
"route": {
"choice": null,
"reason": null,
"website": {
"final_url": null,
"landing_promise": null
},
"instant_form": {
"page_id": null,
"form_id": null,
"privacy_url": null,
"privacy_approval_state": "unknown",
"crm_destination": null,
"event_registration_join_key": null
}
},
"event": {
"organizer": null,
"event_id": null,
"title": null,
"audience": null,
"teaching_promise": null,
"takeaways": [
null,
null,
null
],
"speaker_name": null,
"speaker_role": null,
"speaker_approval_state": "unknown",
"start_local": null,
"end_local": null,
"timezone": null,
"registration_cutoff_local": null,
"capacity_limit": null,
"replay_decision": "unknown",
"replay_url": null,
"replay_approval_state": "unknown"
},
"campaign": {
"meta_page_id": null,
"ad_account_id": null,
"objective": null,
"campaign_id": null,
"ad_set_id": null,
"ad_id": null,
"utm_source": "facebook",
"utm_medium": "paid_social",
"utm_campaign": null,
"utm_content_rule": null,
"start_utc": null,
"end_utc": null,
"budget": null,
"measured_results": null
},
"creative_phases": {
"cold": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"warm": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"final_call": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"replay_or_recap": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
}
},
"audiences": {
"cold": {
"source": null,
"permission_basis": null
},
"warm": {
"source": null,
"permission_basis": null
},
"final_call": {
"source": null,
"permission_basis": null
},
"replay_or_recap": {
"source": null,
"permission_basis": null
},
"confirmed_registrant_suppression": {
"source_system": null,
"event_id": null,
"permission_basis": null,
"update_cadence": null,
"last_successful_sync": null,
"owner_role": "revops_owner",
"account_control_readback": null
},
"reminder_eligibility": {
"source": null,
"channel": null,
"permission_basis": null
}
},
"measurement": {
"join_key_rule": null,
"reconciliation_cutoff": null,
"attendance_export": {
"source": null,
"event_id": null,
"complete": null,
"declared_window": null,
"checked_at": null,
"evidence_ref": null
},
"states": {
"clicked": {
"campaign_id": null,
"ad_id": null,
"captured_at": null,
"evidence_ref": null
},
"submitted": {
"source_id": null,
"submitted_at": null,
"evidence_ref": null
},
"registered": {
"event_id": null,
"registration_id": null,
"person_key": null,
"confirmed_at": null,
"evidence_ref": null
},
"attended": {
"attendance_row_id": null,
"joined_at": null,
"evidence_ref": null
},
"verified_no_show": {
"classification_at": null,
"evidence_ref": null
},
"attendance_unknown": {
"reason": "Attendance source is not complete and linked, or classification proof is absent.",
"next_check_at": null,
"owner_role": "revops_owner"
},
"crm_next_action": {
"contact_id": null,
"action": null,
"at": null,
"owner_role": null,
"evidence_ref": null
}
}
},
"follow_up": {
"attended": {
"trigger": "Verified attended state",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner"
},
"verified_no_show": {
"trigger": "Verified no-show state only",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner",
"send_state": "hold"
},
"non_registrant": {
"trigger": "No confirmed registration after source reconciliation",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner"
},
"attendance_unknown": {
"trigger": "Registered but attendance unresolved",
"action": "Hold attendance-based messages; reconcile source.",
"permission_check": "Do not send no-show message",
"owner_role": "revops_owner",
"send_state": "hold_for_reconciliation"
}
},
"owners": {
"event_owner": null,
"media_buyer": null,
"revops_owner": null,
"follow_up_owner": null
},
"checks": {
"destination_mobile_and_confirmation": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "event_owner",
"notes": null
},
"instant_form_privacy_and_delivery": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "event_owner",
"notes": null
},
"event_registration_join": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"suppression_permission_and_sync": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"account_objective_and_audience_preview": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "media_buyer",
"notes": null
},
"tracking_readback": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"creative_and_final_call_review": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "media_buyer",
"notes": null
}
},
"judgments": {
"route_fit": {
"state": "unknown",
"reason": "Choose website or Instant Form."
},
"draft_readiness": {
"state": "hold",
"reason": "Resolve the listed draft facts before writing final copy."
},
"launch_readiness": {
"state": "hold",
"reason": "Complete the listed account, route, suppression and delivery checks."
},
"measured_outcome": {
"state": "unknown",
"reason": "A plan or test cannot establish actual campaign results."
},
"attendance_classification": {
"state": "unknown",
"reason": "Attendance source is not complete and linked, or classification proof is absent."
}
},
"missing_inputs": [
{
"field": "route.choice",
"owner_role": "event_owner",
"closing_evidence": "Choose website or instant_form registration."
},
{
"field": "event.audience",
"owner_role": "event_owner",
"closing_evidence": "Name the exact B2B attendee audience."
},
{
"field": "event.teaching_promise",
"owner_role": "event_owner",
"closing_evidence": "Approve a concrete teaching promise."
},
{
"field": "event.speaker_name",
"owner_role": "event_owner",
"closing_evidence": "Verify the named speaker."
},
{
"field": "event.speaker_role",
"owner_role": "event_owner",
"closing_evidence": "Verify the speaker role before using it in an ad."
},
{
"field": "event.speaker_approval_state",
"owner_role": "event_owner",
"closing_evidence": "Set explicit speaker approval state to approved."
},
{
"field": "event.start_local",
"owner_role": "event_owner",
"closing_evidence": "Confirm calendar-valid local event start."
},
{
"field": "event.end_local",
"owner_role": "event_owner",
"closing_evidence": "Confirm calendar-valid local end after start."
},
{
"field": "event.timezone",
"owner_role": "event_owner",
"closing_evidence": "Confirm a real IANA time zone."
},
{
"field": "event.takeaways.0",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
},
{
"field": "event.takeaways.1",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
},
{
"field": "event.takeaways.2",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
}
],
"next_move": "Choose website or instant_form registration.",
"source_refs": [
{
"url": "https://www.facebook.com/business/help/744354708981227",
"observed_at": "2026-09-29",
"supports": "Custom Audience source families"
},
{
"url": "https://www.facebook.com/business/help/900802126698360",
"observed_at": "2026-09-29",
"supports": "Lead-form engagement audiences; not external registration"
},
{
"url": "https://www.facebook.com/business/help/938372127764391",
"observed_at": "2026-09-29",
"supports": "Advantage+ audience controls; check actual account preview"
}
],
"evidence_boundary": {
"fictional": false,
"actual_campaign_delivery": false,
"actual_event_outcomes": false,
"note": "A planning record or preflight test is not a campaign result or person-level attendance."
}
}
```
Choose `website` when the event platform registration, calendar and attendance path belongs on the owned page; choose `instant_form` only when native fields, approved privacy, CRM delivery, event-platform registration and join instructions can be tested. A Meta form submission is a lead, not an event registration. Do not merge click, submitted, registered, attended, verified no-show, attendance Unknown or CRM action. Keep event ID, Meta campaign/ad IDs, UTM values, source/form/lead ID, event registration ID, CRM ID, join key, timestamps and reconciliation cutoff separately. Suppress confirmed registrants from acquisition only after current permitted event-specific source and actual account-control readback. A form opener is not a confirmed registrant. Keep reminder eligibility separate.
Draft readiness is `provisional_draft_ready` only if route, audience, concrete teaching promise, three approved takeaways, approved named speaker and role, valid local event start/end and real IANA zone are present. Otherwise hold and ask for exact draft fields. Launch readiness remains `hold` until the selected route, actual mobile destination or Instant Form privacy/CRM/event join, confirmed-registration suppression, available objective, budget, tracking, phase/owner plan and applicable checks have real read-back receipts. A fictional URL or written plan is not a passed check. When draft is hold, request draft and immediate route facts first; defer account-stage asks. Preserve a still-open request's valid owner, exact closing evidence and context; drop only resolved or inapplicable requests.
Write cold, warm and final-call ad copy using the same verified promise. State urgency only from the actual cutoff; never invent a seat limit. Replay copy is conditional on a produced, accessible and approved recording, or a separately approved real recap. If replay is pending, keep replay_or_recap copy and destination null, but retain the conditional phase and its owner/stop rule. Keep measured_results null and measured_outcome unknown until actual delivery results exist. Never copy a preflight or report-capability receipt into person-level outcomes.
For a registered person, label attendance `verified_no_show` only after an event-specific complete export for a declared window and UTC cutoff, an export check at or after that cutoff, approved join key, and explicit no-match evidence classified at or after cutoff. If the export is incomplete, early, delayed, unrelated, test-only, contains only post-cutoff rows or cannot be joined, attendance is `unknown`, verified_no_show evidence is null and its send_state is hold. An absent row is not a no-show. Leave actual attendance refs null before the event.
Return: (1) route and separate Draft, Launch, measured-outcome and attendance judgments; (2) a table for all four phases with audience, copy, destination, stop condition and owner; (3) registration, suppression and attendance handoff; (4) exact missing_inputs with owner and closing evidence; (5) the canonical JSON record; (6) one next move. Do not claim any check passed merely because a fixture describes how it should work.
PASTE THE WEBINAR FACTS OR CANONICAL RECORD BELOW:
Copy the full review prompt
FACEBOOK WEBINAR AD REVIEW PROMPT — standalone v1
Independently review the pasted campaign record and candidate ads. Use only the supplied facts and actual receipts. Do not assume article, Meta account, event platform, CRM, destination or campaign delivery access. Keep the record's exact schema and identifiers. Return a corrected canonical JSON record in one JSON code fence, never a wrapper. The blank canonical shape is:
```json
{
"schema_version": "maestro.facebook-webinar-campaign.v1",
"record_id": null,
"fixture_status": "blank",
"route": {
"choice": null,
"reason": null,
"website": {
"final_url": null,
"landing_promise": null
},
"instant_form": {
"page_id": null,
"form_id": null,
"privacy_url": null,
"privacy_approval_state": "unknown",
"crm_destination": null,
"event_registration_join_key": null
}
},
"event": {
"organizer": null,
"event_id": null,
"title": null,
"audience": null,
"teaching_promise": null,
"takeaways": [
null,
null,
null
],
"speaker_name": null,
"speaker_role": null,
"speaker_approval_state": "unknown",
"start_local": null,
"end_local": null,
"timezone": null,
"registration_cutoff_local": null,
"capacity_limit": null,
"replay_decision": "unknown",
"replay_url": null,
"replay_approval_state": "unknown"
},
"campaign": {
"meta_page_id": null,
"ad_account_id": null,
"objective": null,
"campaign_id": null,
"ad_set_id": null,
"ad_id": null,
"utm_source": "facebook",
"utm_medium": "paid_social",
"utm_campaign": null,
"utm_content_rule": null,
"start_utc": null,
"end_utc": null,
"budget": null,
"measured_results": null
},
"creative_phases": {
"cold": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"warm": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"final_call": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
},
"replay_or_recap": {
"date": null,
"eligible_audience": null,
"message_job": null,
"copy": null,
"asset_ref": null,
"cta": null,
"destination": null,
"stop_condition": null,
"owner_role": "media_buyer"
}
},
"audiences": {
"cold": {
"source": null,
"permission_basis": null
},
"warm": {
"source": null,
"permission_basis": null
},
"final_call": {
"source": null,
"permission_basis": null
},
"replay_or_recap": {
"source": null,
"permission_basis": null
},
"confirmed_registrant_suppression": {
"source_system": null,
"event_id": null,
"permission_basis": null,
"update_cadence": null,
"last_successful_sync": null,
"owner_role": "revops_owner",
"account_control_readback": null
},
"reminder_eligibility": {
"source": null,
"channel": null,
"permission_basis": null
}
},
"measurement": {
"join_key_rule": null,
"reconciliation_cutoff": null,
"attendance_export": {
"source": null,
"event_id": null,
"complete": null,
"declared_window": null,
"checked_at": null,
"evidence_ref": null
},
"states": {
"clicked": {
"campaign_id": null,
"ad_id": null,
"captured_at": null,
"evidence_ref": null
},
"submitted": {
"source_id": null,
"submitted_at": null,
"evidence_ref": null
},
"registered": {
"event_id": null,
"registration_id": null,
"person_key": null,
"confirmed_at": null,
"evidence_ref": null
},
"attended": {
"attendance_row_id": null,
"joined_at": null,
"evidence_ref": null
},
"verified_no_show": {
"classification_at": null,
"evidence_ref": null
},
"attendance_unknown": {
"reason": "Attendance source is not complete and linked, or classification proof is absent.",
"next_check_at": null,
"owner_role": "revops_owner"
},
"crm_next_action": {
"contact_id": null,
"action": null,
"at": null,
"owner_role": null,
"evidence_ref": null
}
}
},
"follow_up": {
"attended": {
"trigger": "Verified attended state",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner"
},
"verified_no_show": {
"trigger": "Verified no-show state only",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner",
"send_state": "hold"
},
"non_registrant": {
"trigger": "No confirmed registration after source reconciliation",
"action": null,
"permission_check": null,
"owner_role": "follow_up_owner"
},
"attendance_unknown": {
"trigger": "Registered but attendance unresolved",
"action": "Hold attendance-based messages; reconcile source.",
"permission_check": "Do not send no-show message",
"owner_role": "revops_owner",
"send_state": "hold_for_reconciliation"
}
},
"owners": {
"event_owner": null,
"media_buyer": null,
"revops_owner": null,
"follow_up_owner": null
},
"checks": {
"destination_mobile_and_confirmation": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "event_owner",
"notes": null
},
"instant_form_privacy_and_delivery": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "event_owner",
"notes": null
},
"event_registration_join": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"suppression_permission_and_sync": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"account_objective_and_audience_preview": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "media_buyer",
"notes": null
},
"tracking_readback": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "revops_owner",
"notes": null
},
"creative_and_final_call_review": {
"state": "not_checked",
"evidence_ref": null,
"checked_at": null,
"owner_role": "media_buyer",
"notes": null
}
},
"judgments": {
"route_fit": {
"state": "unknown",
"reason": "Choose website or Instant Form."
},
"draft_readiness": {
"state": "hold",
"reason": "Resolve the listed draft facts before writing final copy."
},
"launch_readiness": {
"state": "hold",
"reason": "Complete the listed account, route, suppression and delivery checks."
},
"measured_outcome": {
"state": "unknown",
"reason": "A plan or test cannot establish actual campaign results."
},
"attendance_classification": {
"state": "unknown",
"reason": "Attendance source is not complete and linked, or classification proof is absent."
}
},
"missing_inputs": [
{
"field": "route.choice",
"owner_role": "event_owner",
"closing_evidence": "Choose website or instant_form registration."
},
{
"field": "event.audience",
"owner_role": "event_owner",
"closing_evidence": "Name the exact B2B attendee audience."
},
{
"field": "event.teaching_promise",
"owner_role": "event_owner",
"closing_evidence": "Approve a concrete teaching promise."
},
{
"field": "event.speaker_name",
"owner_role": "event_owner",
"closing_evidence": "Verify the named speaker."
},
{
"field": "event.speaker_role",
"owner_role": "event_owner",
"closing_evidence": "Verify the speaker role before using it in an ad."
},
{
"field": "event.speaker_approval_state",
"owner_role": "event_owner",
"closing_evidence": "Set explicit speaker approval state to approved."
},
{
"field": "event.start_local",
"owner_role": "event_owner",
"closing_evidence": "Confirm calendar-valid local event start."
},
{
"field": "event.end_local",
"owner_role": "event_owner",
"closing_evidence": "Confirm calendar-valid local end after start."
},
{
"field": "event.timezone",
"owner_role": "event_owner",
"closing_evidence": "Confirm a real IANA time zone."
},
{
"field": "event.takeaways.0",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
},
{
"field": "event.takeaways.1",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
},
{
"field": "event.takeaways.2",
"owner_role": "event_owner",
"closing_evidence": "Approve this concrete takeaway."
}
],
"next_move": "Choose website or instant_form registration.",
"source_refs": [
{
"url": "https://www.facebook.com/business/help/744354708981227",
"observed_at": "2026-09-29",
"supports": "Custom Audience source families"
},
{
"url": "https://www.facebook.com/business/help/900802126698360",
"observed_at": "2026-09-29",
"supports": "Lead-form engagement audiences; not external registration"
},
{
"url": "https://www.facebook.com/business/help/938372127764391",
"observed_at": "2026-09-29",
"supports": "Advantage+ audience controls; check actual account preview"
}
],
"evidence_boundary": {
"fictional": false,
"actual_campaign_delivery": false,
"actual_event_outcomes": false,
"note": "A planning record or preflight test is not a campaign result or person-level attendance."
}
}
```
Check the website versus Instant Form route against the actual registration journey. A native form submission does not establish event-platform registration, confirmation or join instructions. Test mobile destination and promised landing copy for a website route; test privacy approval, form delivery, CRM destination, event-platform join key and confirmation for an Instant Form route. Keep route-specific fields and checks distinct. Require current permitted confirmed-registrant suppression source, event ID, sync cadence, last successful sync and actual audience-control readback. A form opener can be warm audience but cannot be treated as a confirmed registrant. Reminder eligibility is separate.
Trace each cold, warm, final-call and conditional replay claim to approved event facts. Reject invented scarcity, speaker credentials, results and recording availability. The current Meta objective and audience options require account readback; a template cannot prove them. Draft can be provisionally ready while Launch stays hold. Keep future performance unknown. Keep campaign/ad IDs, UTMs, source/form/lead ID, event registration ID, CRM contact ID, join key, timestamps and cutoff separate. A click does not prove submission; submission does not prove registration; registration does not prove attendance or permission for sales outreach.
Attendance is `attended` only with a linked row in a complete event-specific source checked at or after the declared UTC cutoff. `verified_no_show` requires confirmed registration, complete export for declared window and cutoff, valid join key, no linked row and explicit verification receipt classified at or after cutoff. An incomplete, early, delayed, unrelated, test-only, post-cutoff-only or unjoinable export keeps attendance `unknown`; clear any no-show evidence and hold that message. Preserve an Unknown reconciliation owner and next check. A blank result is Unknown, never zero. Do not infer performance from example ads or preflight tests.
Recompute missing_inputs from current values and route. Preserve valid owner, exact closing evidence and context for still-open requests; remove resolved or inapplicable ones. While Draft is hold, limit asks to draft and immediate route facts, deferring account-stage work. A passed check needs a non-placeholder reference, valid UTC checked time and named owner. Do not fabricate test receipts to make a fixture pass.
Return: (1) separate route, Draft, Launch, measured outcome and attendance verdicts with reasons; (2) a claim-by-claim discrepancy table; (3) phase and audience/suppression review; (4) exact open requests with owner and closing evidence; (5) corrected canonical JSON; (6) one next move.
PASTE THE RECORD, CANDIDATE ADS AND ACTUAL TEST RECEIPTS BELOW:
Make the handoff portable
The campaign builder turns the route, event facts, creative phases, audience transitions, registrant suppression, state evidence, follow-up branches, owners and missing inputs into one record. Its Draft judgment tells you whether there is enough information to write honest creative. Its Launch judgment waits for the account, destination, registration, permission and delivery checks that a browser tool cannot perform by itself.
Open the completed fictional handoff to see how the Northstar Ops fixture keeps future performance and attendance Unknown. Download its JSON record when another tool needs the same fields.
Start with the blank Markdown handoff if several owners will review the plan in a document. Use the blank JSON record for a programmatic workflow. Both versions should carry the same identifiers and unresolved inputs.
Use the build prompt with your completed record to draft the cold, warm, final-call and conditional replay messages. It should request missing facts instead of inventing a date, credential, scarcity claim or conversion result. Use the separate review prompt to check the resulting ads and handoff against the supplied facts, source limits, route test and state rules. Keep the prompt's Draft and Launch judgments separate.
The owner handoff is specific. The media buyer receives approved creative, phase dates, audience sources, exclusions and final links. The event owner receives the registration and join test. RevOps receives the IDs, sync receipt, attendance export contract and reconciliation cutoff. The follow-up owner receives the three message branches, Unknown queue and permission rules. Each owner records the actual check they performed before launch; a filled template is a plan, not a test receipt.
If you are promoting a native LinkedIn event as well, use the separate LinkedIn Event Ads guide for that platform's event routes and ad format. Keep its response or registration evidence distinct from this Meta campaign's records.
Questions to settle before launch
Can a Meta Instant Form count as webinar registration?
Only after the approved handoff creates or confirms the matching event-platform registration and the person receives the promised confirmation. Keep the native submission receipt and registration receipt as separate events. Follow the Facebook Lead Ads form test for the generic delivery checks, then verify the webinar-specific event ID and join instructions.
Should a form opener see a reminder ad?
A form opener is a possible warm prospect, not a confirmed registrant. Meta's lead-form audience documentation supports engagement audiences, but the reminder message must match what the person actually did. Join instructions require a confirmed event registration and an eligible reminder channel.
When is someone a no-show?
Only after you have a confirmed registration, a complete attendance export for that event and cutoff, a valid join key, and no matching attendance record. If any part is missing, mark attendance Unknown and assign the reconciliation check.
Does a good-looking public ad prove the approach worked?
No. The six examples above show visible creative choices and their source depth. None supplies campaign results, audience setup, the hidden registration path or attendance. Use them to improve the invitation; judge your own campaign with the event and CRM records you can verify.