What this workflow does
- Webinar ended receives the webinar ID, topic, optional deck notes and planned duration.
- Wait for Zoom reports pauses 30 minutes, then Check recording asks Zoom for the recording.
- Recording ready? continues once Zoom returns it, waits another 30 minutes up to eight times, then gives up and alerts.
- Get registrants, Get attendance report and Get Q&A report page through Zoom’s webinar and report endpoints.
- Segment registrants sums each person’s minutes across rejoins and labels them attended, left early (under half the session) or no-show. Walk-ins who did not register are included. It also collects questions left unanswered during the session.
- Draft recap and answers asks Claude for a three-line recap and short answers based only on your deck notes. Pricing, contract and roadmap questions are deferred to sales. The output follows a strict JSON schema.
- Presenter approval in Slack shows segment counts, the recap and every answer. Approve includes them in the emails. Reject sends the recording only. If the AI step failed, the message says so.
- Build segment emails writes one email per person. Attendees get the recording and answers to their own questions, early leavers get the recap and recording, and no-shows get the recording with the recap. Missing text blocks, refusals and truncated replies are reported.
- Update contact in HubSpot creates or updates each contact with the webinar name, status and minutes.
- Send follow-up email sends each email from Gmail.
- Alert: webinar follow-up needs attention catches timeouts and failures.
Before you import
- A current n8n version with a public URL for the webhook.
- A Zoom plan with webinars and reporting, plus an OAuth app with scopes to read webinars, registrants, reports and recordings.
- A HubSpot private app token with contact read and write access.
- A Gmail account for sending, an Anthropic API key and a Slack app that can post to your approval and alert channels. By default the approval buttons open an n8n confirmation page, so Slack interactivity is not required.
Setup
- In HubSpot, create three contact properties:
last_webinar_name,last_webinar_statusandlast_webinar_minutes. - Import the JSON and attach credentials: Zoom OAuth2 on the four Zoom nodes, Anthropic on the Claude node, Slack on both Slack nodes, HubSpot Service Key on the HubSpot node, Gmail OAuth2 on the send node.
- Replace
REPLACE_WITH_APPROVAL_CHANNELandREPLACE_WITH_ALERTS_CHANNEL. - Replace
REPLACE_WITH_SENDER_NAME(two places) andREPLACE_WITH_COMPANY_POSTAL_ADDRESS. - Call the production webhook URL when a webinar ends, from your calendar tool, a Zoom event subscription relay, or by hand, with the JSON body shown in the template’s note.
Test it
Run a short internal webinar with three colleagues: one stays, one leaves after a few minutes, one registers and does not join. Ask a question in Q&A without answering it. After the session, call the webhook with the webinar ID and a few lines of notes. Shorten the wait to two minutes for the test. You should get a Slack preview, three different emails and three updated HubSpot contacts.
Make it production-ready
- Volume. Gmail has daily sending limits. Above a few hundred registrants, send through your marketing platform.
- Sales alerts. Add a step that creates a HubSpot task for attendees who asked about pricing or stayed the whole session.
- Unmatched contacts. If you prefer not to create contacts automatically, write unmatched registrants to a sheet for review.
- Error workflow. Add an n8n error workflow, and keep the alert channel watched on webinar days.
- Rate limits. Zoom report endpoints have stricter rate limits; avoid rerunning many webinars at once.
The webinar follow-up guide covers scoring rules and timing. For help with your stack, get in touch.