← Back to Funnel HQ · Call funnel nurture →

Webinar nurture: email + SMS.

Registrant lifecycle for the two-day webinar. Day one builds the enemy, day two sells SOURC-E and hands over the resources, and these emails run the same arc: every pre-session email makes the enemy bigger and more specific. Sequence length follows show-up research: a confirmation plus three reminders, more than four erodes trust. Final reminder carries the join link up top and the time in two timezones. SMS: consent captured at the phone step, STOP and the sender name on every message, 8am to 9pm local.

Tokens to set per cohort before anything is turned on: [DATE] day one date, [NEXT-DATE] the following cohort, [ZOOM] the join link, [REGISTER-LINK] back to the registration page, [MOVE-LINK] the one-click seat transfer, [BOOK-LINK] the strategy call booker, [GUIDE-LINK] the toolkit and setup guide, [SKILLS-LINK] the self-serve Claude skills, [ACADEMY-LINK] Hawk Academy, [CAL-1] and [CAL-2] the day one and day two calendar invites. A live token is the most common way one of these sequences goes out broken, so check all eleven.

The angle (internal shorthand only)

The arc these emails run

"The enemy" is INTERNAL shorthand, it never appears in customer copy. What the emails actually name are the concrete problems people inquired about: rising ad costs, shrinking clicks, and getting left behind while AI engines recommend competitors. Email 1 names the problem. Email 2 shows what it already costs them. Email 3 shows who wins instead. The webinar is where they switch sides.

Segment A · Registered, session upcoming

The show-up sequence (4 sends)

Trigger: main form submission (HUBSPOT_FORM_GUID). Goal: in the room on both days. Exit: day two wraps, not day one, or the whole day-two sequence never fires.

Email 1 · Confirmation, enemy named

Instant

Subject: You're in. Here's what we're going to fix.

Your seat is locked: Own AI Search, [DATE] and the day after, 12pm ET, live on Zoom. Calendar links below, add both days now. Quick intro since we've just met: I'm Harry, co-founder of StudioHawk US. Our team runs search for QuickBooks, Weber and HelloFresh, and Samsung found us through ChatGPT. Here's why this session exists. Every year you've been paying more for traffic and getting less: that's not your campaigns, that's the ground moving. AI answer engines are quietly replacing the click economy your business was built on, and they only recommend two or three businesses per answer. Day one, I'm going to show you exactly what's eating your traffic. Day two, I'll show you the framework that puts you on the winning side of it, and hand you every resource we use. Add day one: [CAL-1] | Add day two: [CAL-2] Hit reply and tell me the one thing you want AI search to do for your business. I read these. Harry

Email 2 · What it's already costing you

T-72 hours, 3PM

Subject: AI search tip: you're paying 57% more for the same customer

Three days out. Before we're live, sit with two numbers. Cost per lead on Google Ads is up 57% in three years. And AI Overviews have cut paid clicks by 68% on the searches where they appear. Same budget, fewer buyers, and the trend only runs one direction. Here's the part that should actually bother you: none of that money built you anything. Every click you bought disappeared the moment you stopped paying. You've been renting a street that's getting more expensive and less busy at the same time, and the landlord keeps changing the rules. That's exactly what day one of [DATE] covers: how AI search actually works and where those clicks went, because you can't fix a machine you can't see. Harry

Email 3 · Who's winning instead

T-24 hours, 3PM

Subject: Tomorrow: the two or three businesses AI picks (and how it picks them)

We're live tomorrow, 12pm ET. One more number before tomorrow. When your customer asks ChatGPT or Google's AI who to use, it doesn't show ten blue links. It recommends two or three businesses, with confidence, like a friend would. Somebody in your market is becoming one of those recommendations right now. It's the difference between owning a channel and renting one, and most owners don't even know the contest is running. Tomorrow I show you how the machine chooses. Day two, I hand you the playbook and the resources to be chosen. Zoom link lands in the morning, and by text ten minutes before we start. Show up. This one compounds. Harry

Email 4 · Day-of, link up top

Day 1, 8am ET

Subject: We're live today. Your Zoom link is here.

JOIN TODAY'S SESSION: [ZOOM] 12pm ET / 9am PT. 90 minutes, live. Day one: what's actually eating your search traffic, and who it feeds instead. Day two runs tomorrow, same time, same link. That's when you get the framework and the full resource pack. Harry

Email 5 · Day two, link up top

Day 2, 8am ET

Subject: Day two: the framework and your resource pack

JOIN TODAY'S SESSION: [ZOOM] 12pm ET / 9am PT. Same link as yesterday. 90 minutes, live. Yesterday you saw what's eating your search traffic. Today is the other half: SOURC-E end to end, your site measured against it, and the full resource pack handed over on the call. This is the one to be in the room for. There's no replay. Harry

SMS 1 · Confirmation

Instant

StudioHawk: You're in for Own AI Search, [DATE] + day two, 12pm ET on Zoom. Calendar links are in your email. Reply STOP to opt out.

SMS 2 · T-24h

T-24 hours

Tomorrow 12pm ET: day one of Own AI Search, what's eating your search traffic and who it feeds instead. Zoom link comes in the morning. Reply STOP to opt out.

SMS 3 · T-10 minutes, day 1

Day 1, 11:50am ET

StudioHawk: We're live in 10. Zoom: [ZOOM]. See you in there. Reply STOP to opt out.

SMS 4 · Late join rescue

Day 1, 12:20pm ET

StudioHawk: we're 20 minutes in and just getting to the meat and potatoes of day one. You're not too late: [ZOOM]. Reply STOP to opt out.

SMS 5 · Day 2 morning

Day 2, 10am ET

Day two today, 12pm ET: SOURC-E end to end, and your full resource pack gets handed over live. Same Zoom: [ZOOM]. Reply STOP to opt out.

Suppress SMS 4 for anyone already in the room. It tells people they have not missed anything, which reads as noise to someone who is watching when it arrives. Zoom fires a participant-joined webhook, so exclude joiners at 12:20. If that is not wired for the first cohort, send it anyway: reaching a no-show is worth more than mildly annoying an attendee, and it is the one send in this sequence that can still rescue the session on the day.
Segment B · Attended

Post-webinar: showed up

Trigger: contact in the attended list (Zoom export imported to HubSpot after day two, or the Zoom integration). Goal: a booked strategy call while the session is fresh.

Email 1 · Resources + the call invite

Day 2, +2 hours after wrap

Subject: Your resource pack is here

That's a wrap. You've seen the problem and you've got the framework. Your full resource pack is below, exactly as promised on the call: The SOURC-E toolkit + setup guide: [GUIDE-LINK] If you'd rather have my team run this than do it yourself, book a strategy call while everything from the session is still fresh. Book the call: [BOOK-LINK] Either way: open the toolkit this week while it's warm. Harry

Email 2 · Proof + nudge

+24 hours, 3PM

Subject: 621% more AI mentions (what moving fast looks like)

One number from a client, since you now know what it means: Sylvane, an Atlanta retailer, grew LLM brand mentions by 621%. That is a measured lift in how often the models surface their name. The gap between knowing the framework and being the recommendation is execution speed. If you're running it yourself, start with Structure this week. If you want it handled, book a strategy call: [BOOK-LINK] Harry

Email 3 · Honest nudge

+3 days

Subject: Before this gets filed away (you keep everything either way)

A few days out is where this either becomes a project or quietly gets filed away. You have every resource forever, and plenty of attendees do brilliantly solo. If you'd rather StudioHawk looked at your exact situation with you, this is the easiest moment to set that up: [BOOK-LINK] If not, genuinely, go run the toolkit, and reply any time with questions. Harry

SMS 1 · Post-wrap

Day 2, +2.5 hours, after email 1 lands

Your resource pack just landed in your email. Want us to run it for you? Book a call: [BOOK-LINK]. Reply STOP to opt out.

SMS 2 · Nudge

+3 days

Still thinking about having us run it? Book a call here: [BOOK-LINK]. Otherwise, open the toolkit and start with Structure. Reply STOP to opt out.

Segment C · Registered, did not attend

Post-webinar: no-show

Trigger: registered AND day two has passed AND the attended list is imported AND the contact is not on it. Goal: seat moved to next cohort, once. No replay: the no-recording stance holds. Gate this on the import and not on the date. Until the Zoom export is in HubSpot every real attendee looks like a no-show, and this sequence tells them we missed them and offers a refund.

Email 1 · The honest move

Day 2, +24 hours

Subject: We missed you (your seat isn't dead)

We ran both days and you couldn't make it. It happens. Straight up: there's no replay, the session only works live. But the problem we covered isn't waiting either, your ad costs don't pause because your calendar got busy. Your ticket moves to next cohort, [NEXT-DATE], with one click: Move my seat: [MOVE-LINK] If the timing genuinely doesn't work anymore, reply and we'll sort you out, refund included. We'd rather that than a ghost seat. Harry

Email 2 · Last move

+3 days, 3PM Tue/Fri

Subject: Next cohort is [NEXT-DATE]. In or out?

Last one about this. Next cohort runs [NEXT-DATE], and your seat transfers with one click: [MOVE-LINK] If we don't hear from you, no hard feelings, we'll leave you on the monthly notes where I share what's changing in AI search. Come back when the timing's right. Harry

SMS 1 · Day after

Day 2, +25 hours

We missed you at Own AI Search. No replay, but your seat moves to [NEXT-DATE] with one tap: [MOVE-LINK]. Reply STOP to opt out.

Segment D · Lapsed

Date passed, never attended, never moved

Trigger: Segment C completed, no [MOVE-LINK] click after 7 days. Goal: graceful downgrade into long-term nurture, door open.

Email 1 · Graceful downgrade

+7 days after session

Subject: Parking your seat (and what you can still have free)

We'll stop nudging about the session. Your registration stays on file: if a future cohort date works, reply "seat" to any email and we'll re-book you in ten seconds. Meanwhile, free and useful: - The self-serve Claude skills our attendees use: [SKILLS-LINK] - Hawk Academy, our free SEO course: [ACADEMY-LINK] You'll hear from me about once a month with what's changing in AI search. That's it. Harry

Ongoing · Monthly note

Monthly, Tue 3PM

One evergreen email a month to lapsed + long-term contacts: one AI-search shift, one practical move, one line with the next cohort date. Written fresh each month; each cohort announcement re-opens [MOVE-LINK].

Segment E · Partial fills

Typed an email, never submitted

Trigger: partial form (HUBSPOT_PARTIAL_FORM_GUID). Wait 1 hour, suppress anyone who completed. One email, then stop.

Email 1 · Finish the thought

+1 hour

Subject: You were 20 seconds from a seat

You started grabbing a seat at Own AI Search and something pulled you away. Your answers are saved, finishing takes about twenty seconds: Finish registering: [REGISTER-LINK] Two days, 90 minutes a day, live. Day one shows you exactly what's eating your search traffic. Day two hands you the framework and every resource to fix it. If a question stopped you mid-form, just reply, a human reads these. Harry

Email only here, no SMS. A partial fill never submitted the form, so no consent was captured, and the number was typed into an abandoned field. Texting it is the fastest way to get a sending number blocked. They get one email and nothing else.
Segment F · Checkout abandon

Stopped at the payment page

Trigger: fired seen:checkout and never fired seen:confirmed, after 1 hour. Goal: paid registration. Exit: reaches the confirmation page (moves to A). Distinct from Segment E: these people finished the form, so we hold their details and their consent. They stopped at the money.

Email 1 · One click short

+1 hour

Subject: you stopped one click short

You got as far as the payment page and then stopped. Everything else is done. Your details are in. The only thing left is the last click. It is [PRICE]. That is the entire distance between you and two days of seeing exactly what AI search is doing to your traffic, plus the framework and the toolkit to fix it. If it mattered enough to get that far, it matters enough to finish. Finish registering: [CHECKOUT-LINK] Harry P.S. If the payment page threw an error at you, reply and tell me what happened. I would much rather fix a broken form than lose you to one.

Email 2 · Close it off

+24 hours, 3PM

Subject: your registration is still half finished

Quick one. Your registration is sitting half finished at the payment step. Two days, 90 minutes a day, live. Day one shows you what is actually eating your search traffic. Day two hands you the framework and the full toolkit, and you keep all of it. Ten seconds to finish: [CHECKOUT-LINK] And if you have decided against it, that is a completely normal answer. Reply "not this time" and I will stop emailing you about it. Harry

SMS 1 · Same day

+3 hours

StudioHawk: you stopped at the payment page for Own AI Search. Finish in ten seconds: [CHECKOUT-LINK]. Reply STOP to opt out.

SMS is allowed here, unlike Segment E. These people completed the form, so the number was given deliberately and consent was captured at the phone step. A partial fill has neither, which is why that segment stays email only.
Wiring, and why it is not the obvious version. The obvious build is "reached /checkout, never reached /confirmed". An adversarial review killed it: there are live paths where money moves and /confirmed never loads, so that version emails people who paid. The hosted Payment Link fallback leaves the buyer on Stripe’s own receipt page, the inline flow waits 700ms before redirecting so a closed tab loses the signal, and any ad blocker drops the beacon. Accusing a paying customer of not paying, an hour after we charged them, is the worst thing this funnel can do.
What actually runs. seen:checkout fires on arrival at the payment page and pushes “Checkout reached” to HubSpot, carrying the email on the beacon itself. Completion comes from Stripe, not from a page: a webhook on payment_intent.succeeded writes sess:<sid>:paid and pushes “Checkout completed”. Stripe already stamps the session id on every PaymentIntent, so it maps straight back. The reached push refuses to fire at all if that paid key already exists, so there are two independent layers between a buyer and this email.
Status: built and bound, not yet sending.
  • Stripe webhook is live. Destination checkout-abandon-signal (we_1U0dq5J3YaOoER2vHX5gxQgJ) on the StudioHawk US account, listening to payment_intent.succeeded, pointed at https://webinar.studiohawk.com/api/stripe-hook. Signing secret is set and deployed.
  • HubSpot form is live. “Checkout events (internal, do not embed)”, GUID 48c3d5f9-5dda-4f33-8547-3a1c7e9fbaca, bound as HUBSPOT_CHECKOUT_FORM_GUID on both Pages projects.
  • Proven working: a beacon fired at the live funnel travelled through /api/track and landed as a real HubSpot submission, not flagged as spam.
  • Not yet proven: Stripe’s signed POST returning 200. There is no payment_intent.succeeded in the account yet to test with, and Workbench has no send-test-event button. The first real purchase will show 200 or 400 on the destination’s Event deliveries tab.
Blocker for whoever finishes this: it needs a SECOND form. The plan was one form differentiated by pageName (“Checkout reached” vs “Checkout completed”), both of which the code already sends. That does not work in HubSpot: on a form-submission trigger, Page name only offers is any of / is none of / is known / is unknown, and the value picker is an enumerated list of page names HubSpot has already indexed. There is no “contains” and no free-text entry, so you cannot filter enrolment down to just the reached submissions. Enrolling on the single form as it stands would enrol buyers too.
The fix, roughly 15 minutes.
  1. Create a second HubSpot form, legacy editor, one required Email field, named Checkout completed (internal, do not embed). Do not embed it anywhere.
  2. Add its GUID as a new Pages secret HUBSPOT_CHECKOUT_DONE_FORM_GUID on hawk-webinar-preview.
  3. In functions/api/stripe-hook.js, change the two references to env.HUBSPOT_CHECKOUT_FORM_GUID to the new variable. That file is the only place the completed push is sent from.
  4. Redeploy. Pages binds environment variables at deploy time, so a secret added without a redeploy is silently absent. This has already bitten this project once.
Rename the existing form to Checkout reached at the same time, so the pair reads clearly.
Then build the workflow. A draft already exists in HubSpot named Webinar - Checkout abandon chase (Segment F), contact-based, currently off, with the trigger already set to a form submission on the Checkout events form and re-enrolment already off. Finish it as:
  1. Enrol: form submission on Checkout reached. Re-enrolment stays off.
  2. Delay: 1 hour.
  3. Branch: has the contact ever submitted Checkout completed? Yes, end. No, send Segment F Email 1.
The word ever is load-bearing. “Since enrolment” is the natural way to build it and it is wrong: a past buyer who reopens /checkout months later would be accused of not paying.
Do not turn it on until one test purchase has produced BOTH a “reached” and a “completed” submission, and the Stripe destination shows a 200. Until then the plumbing runs and sends nothing, which is the correct resting state. The failure this whole design guards against is telling someone who paid that they did not.
[PRICE] is not a constant. The $7 and $97 tiers run as a split test, so this tag has to resolve to the tier that person actually reached, or the email quotes a price they were never shown.
Wiring

Workflow triggers at a glance

SegmentEnrollmentSuppression / exit
A · Show-upMain form submissionDay two wraps
B · AttendedIn attended list (Zoom export → HubSpot import after day two)Books the call, or 7 days elapse
C · No-showRegistered + day two passed + attended list imported + NOT on itClicks [MOVE-LINK] (re-enters A next cohort)
D · LapsedC finished, no move click, +7 daysReplies "seat" or registers again
E · PartialPartial form submissionMain form submission (suppress immediately)
F · Checkout abandonseen:checkout and no seen:confirmed after 1hseen:confirmed fires (moves to A)
The one manual step: the attended list. Export Zoom attendees after day two and import to a HubSpot static list, or connect the Zoom-HubSpot integration. Leave Segment C switched off until that list is in: it is the only step in this flow where being late sends the wrong message to the right people. Everything else keys off the two form GUIDs and date properties.