Typeform + Google Sheets: event follow-ups handled
Event registrations come in, payments happen… and then the messy part starts. People miss confirmation emails, reminders go out late, and you end up double-checking a spreadsheet at night because you don’t trust it.
Event organizers feel this first. A community manager running monthly workshops knows it too. Even a small marketing team doing webinars gets dragged into it. This Typeform follow-ups automation keeps your list clean, your emails timely, and your “did they pay?” questions answered.
You’ll see how the workflow captures Typeform signups into Google Sheets, charges via Stripe, sends the right emails through Gmail, and keeps reminders and post-event follow-ups running automatically.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Typeform + Google Sheets: event follow-ups handled
flowchart LR
subgraph sg0["Typeform Registration Form Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/typeform.dark.svg' width='40' height='40' /></div><br/>Typeform Registration Form"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Workflow Configuration", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Add to Participant List", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/stripe.svg' width='40' height='40' /></div><br/>Process Payment"]
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Payment Status", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Send Confirmation Email", pos: "b", h: 48 }
n6@{ icon: "mdi:location-exit", form: "rounded", label: "Add to Calendar", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify Organizer"]
n6 --> n7
n3 --> n4
n4 --> n5
n1 --> n2
n2 --> n3
n5 --> n6
n0 --> n1
end
subgraph sg1["Daily Follow-up Check Flow"]
direction LR
n13@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Follow-up Check", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Get Past Events", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Calculate Follow-up Date", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Follow-up Needed", pos: "b", h: 48 }
n17@{ icon: "mdi:message-outline", form: "rounded", label: "Send Thank You & Survey", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Update Follow-up Status", pos: "b", h: 48 }
n14 --> n15
n13 --> n14
n17 --> n18
n15 --> n16
n16 --> n17
end
subgraph sg2["Daily Reminder Check Flow"]
direction LR
n8@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Reminder Check", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Get Upcoming Events", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Calculate Reminder Date", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Reminder Needed", pos: "b", h: 48 }
n12@{ icon: "mdi:message-outline", form: "rounded", label: "Send Reminder Email", pos: "b", h: 48 }
n9 --> n10
n8 --> n9
n10 --> n11
n11 --> n12
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n13,n8 trigger
class n4,n16,n11 decision
class n2,n14,n18,n9 database
classDef customIcon fill:none,stroke:none
class n0,n3,n7 customIcon
The Problem: Event follow-ups slip through the cracks
Managing event participants sounds simple until you do it more than once. A signup arrives in Typeform, someone asks if their payment went through, another person wants the calendar invite re-sent, and you’re stuck hunting across tools that don’t talk to each other. The real cost isn’t just time. It’s the mental overhead of remembering who needs what, plus the awkward “sorry, we missed your email” moments that make your event feel less professional. After the event, it gets worse because follow-ups compete with the next thing on your calendar.
The friction compounds, especially when you try to scale from “one-off workshop” to “recurring events with a real process.”
- Payments and attendee details live in separate places, so you end up reconciling Stripe with a spreadsheet by hand.
- Reminder emails are easy to forget until the day before, which means more no-shows and more “where’s the link?” messages.
- Follow-up surveys go out inconsistently, so you lose feedback right when it’s most valuable.
- One missed step forces you into cleanup mode, and cleanup always takes longer than doing it right the first time.
The Solution: Typeform signups to paid, confirmed, and followed up
This workflow turns your registration process into a reliable system. It starts the moment someone submits your Typeform. Their details get mapped to your event settings (name, date, time, location, fee) and then saved into a Google Sheet that becomes your source of truth. Next, Stripe charges the registration fee and the workflow checks if the payment actually succeeded. If it did, the attendee receives a confirmation email via Gmail, the event is added to their Google Calendar, and you get a Slack notification so you always know what’s happening. After that, two scheduled checks run daily: one sends reminders a few days before the event, and the other sends a thank-you email with your survey link a couple days after. The sheet updates too, so you can see who has been followed up with at a glance.
The workflow starts with Typeform intake and a clean write to Google Sheets. Then Stripe and Gmail handle the “paid + confirmed” path, including the calendar invite and organizer alert. Finally, scheduled scans keep reminders and post-event follow-ups running without you babysitting it.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you run a paid workshop with 40 attendees. Manually, you might spend about 5 minutes per person to copy details into a sheet, confirm payment, send a confirmation, and answer follow-up questions, which is roughly 3 hours. Then add reminders and post-event emails, another hour or two across the week. With this workflow, you spend maybe 10 minutes setting up the event values once, and the rest runs in the background. You get the time back, and the experience is smoother for attendees.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Typeform to collect registration details.
- Google Sheets to store participants and status flags.
- Stripe API credentials (get it from Stripe Developers → API keys).
Skill level: Intermediate. You’ll connect accounts (OAuth), replace a few placeholder IDs, and test with a real signup.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A Typeform submission triggers everything. As soon as someone registers, n8n pulls their name, email, and any other fields you included in the form.
Event settings get applied and saved. The workflow merges the participant data with your event details (date, time, location, fee), then appends a new row in Google Sheets so you can track each person from start to finish.
Payment and onboarding happen immediately. Stripe processes the charge, an “If” check confirms it worked, and Gmail sends a confirmation email. Right after that, Google Calendar adds the event for the attendee and Slack pings your channel so you’re not guessing who joined.
Daily scans handle reminders and follow-ups. On a schedule, n8n checks the sheet for upcoming events that are within your reminder window, then sends the reminder email. A separate scheduled scan looks for past events that are due for follow-up and sends a thank-you + survey link, then marks “Follow-up Sent” in the sheet.
You can easily modify the reminder timing to match your event cadence based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Typeform Trigger
Set up the Typeform intake so registrations start the workflow and feed into your event settings.
- Add the Typeform Intake Trigger node as your workflow trigger.
- Set Form ID to
<__PLACEHOLDER_VALUE__Typeform Form ID__>. - Verify the trigger connects to Event Settings Map as shown in the execution flow.
Step 2: Connect Google Sheets
Configure the participant database so registrations, reminders, and follow-ups can be read and updated.
- Open Append Participant Sheet and set Document ID to
<__PLACEHOLDER_VALUE__Google Sheets Document ID__>and Sheet Name to<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>. - Map columns in Append Participant Sheet to the provided expressions, including
{{ $json.name }},{{ $json.email }}, and{{ $now.toISO() }}. - Configure Retrieve Upcoming Rows with the same Document ID and Sheet Name, and keep the filter on Payment Status =
succeeded. - Configure Retrieve Past Rows with the same Document ID and Sheet Name, and keep the filters on Payment Status =
succeededand Follow-up Sent empty. - In Update Follow-up Flag, set Operation to
updateand keep column valuesFollow-up Sent=YesandFollow-up Date={{ $now.toISO() }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Participant Sheet, Retrieve Upcoming Rows, Retrieve Past Rows, and Update Follow-up Flag.
Step 3: Set Up Processing and Event Settings
Define the event metadata used across billing, emails, calendar entries, and notifications.
- Open Event Settings Map and set placeholders like eventName, eventDate, eventTime, eventLocation, and participationFee to real values.
- Keep reminderDaysBefore at
3and followupDaysAfter at2or adjust to your timing needs. - Confirm that Event Settings Map connects directly to Append Participant Sheet as shown in the execution flow.
Step 4: Configure Payment, Confirmation, Calendar, and Organizer Alerts
This sequence charges the participant, verifies payment success, sends confirmation, adds a calendar event, and notifies the organizer.
- In Charge Registration Fee, set Amount to
{{ $('Event Settings Map').first().json.participationFee * 100 }}, Currency tojpy, and fill Source ID and Customer ID placeholders. - Ensure Validate Charge Result checks status equals
succeededusing{{ $json.status }}. - In Dispatch Confirmation Email, keep Send To as
{{ $('Typeform Intake Trigger').first().json.email }}and Subject as{{ 'イベント参加確認: ' + $('Event Settings Map').first().json.eventName }}. - Configure Create Calendar Entry with Start
{{ $('Event Settings Map').first().json.eventDate + 'T' + $('Event Settings Map').first().json.eventTime }}and End{{ DateTime.fromISO($('Event Settings Map').first().json.eventDate + 'T' + $('Event Settings Map').first().json.eventTime).plus({ hours: 2 }).toISO() }}. - In Post Organizer Alert, confirm the Channel ID uses
{{ $('Event Settings Map').first().json.organizerSlackChannel }}and the message template includes name, email, and event name. - Credential Required: Connect your gmailOAuth2 credentials in Dispatch Confirmation Email.
- Credential Required: Connect your googleCalendarOAuth2Api credentials in Create Calendar Entry.
- Credential Required: Connect your slackOAuth2Api credentials in Post Organizer Alert.
Step 5: Configure Reminders and Follow-ups
These scheduled scans send reminder emails before the event and follow-up surveys after the event date.
- In Scheduled Reminder Scan, set the schedule to run daily at
09:00using the rule withtriggerAtHour=9. - Configure Compute Reminder Date with Operation =
subtractFromDate, Duration ={{ $('Event Settings Map').first().json.reminderDaysBefore }}, and Magnitude ={{ $json['Event Date'] }}. - Ensure Evaluate Reminder Window compares
{{ $now.toFormat('yyyy-MM-dd') }}to{{ $json.output }}and routes to Send Reminder Notice. - In Send Reminder Notice, keep Send To as
{{ $json.Email }}and Subject as{{ 'リマインダー: ' + $json['Event Name'] + ' が間もなく開催されます' }}. - In Scheduled Follow-up Scan, set the schedule to run daily at
10:00using the rule withtriggerAtHour=10. - Configure Compute Follow-up Date with Operation =
addToDate, Duration ={{ $('Event Settings Map').first().json.followupDaysAfter }}, and Magnitude ={{ $json['Event Date'] }}. - Ensure Evaluate Follow-up Window checks
{{ $now.toFormat('yyyy-MM-dd') }}gte{{ $json.output }}and routes to Send Thanks & Survey, then to Update Follow-up Flag. - Credential Required: Connect your gmailOAuth2 credentials in Send Reminder Notice and Send Thanks & Survey.
Step 6: Test and Activate Your Workflow
Validate the full flow with a sample registration and then enable the scheduled scans.
- Use Typeform Intake Trigger to submit a test registration and run the workflow manually.
- Confirm that Append Participant Sheet writes a new row and Charge Registration Fee returns a successful charge.
- Verify that Dispatch Confirmation Email, Create Calendar Entry, and Post Organizer Alert all execute in sequence.
- Run Scheduled Reminder Scan and Scheduled Follow-up Scan once manually to verify reminder and follow-up emails.
- Activate the workflow by toggling the Active switch so scheduled scans run automatically.
Common Gotchas
- Google Sheets OAuth permissions can be picky. If rows stop appending, check the connected Google account in n8n credentials and re-auth if needed.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Gmail email content defaults are bland, frankly. Update the HTML in the confirmation, reminder, and thank-you nodes early so you’re not “fixing tone” for every event.
Frequently Asked Questions
About 45 minutes if your accounts and sheet are ready.
No. You’ll mostly connect accounts and replace placeholder IDs. The only “technical” part is testing the workflow with a real submission to make sure your columns match.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Stripe fees (your normal processing rate) and your email provider limits.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll remove the Stripe branch. In n8n, disable or delete the “Charge Registration Fee” and “Validate Charge Result” nodes, then route “Append Participant Sheet” straight into your confirmation email and calendar nodes. Common customizations include changing the reminder and follow-up timing, swapping Gmail for another email service, and adding extra columns like ticket type or dietary requirements.
Most of the time it’s expired OAuth credentials or the wrong Google account. Reconnect Google Sheets in n8n credentials, then confirm the Sheet ID and tab name match what’s in your nodes. Also check the header row: if your columns don’t exist (like “Payment Status” or “Follow-up Sent”), appends and updates can fail silently. If you’re running a lot of events, Google API limits can show up too, so spacing executions out helps.
For most small events, it’s effectively unlimited. On n8n Cloud Starter, you’re capped by monthly executions; if you self-host, there’s no platform execution limit, just whatever your server can handle. In practice, this workflow is light: a registration is one execution, and each daily scan processes rows quickly as long as your sheet is organized.
Often, yes. This workflow has branching logic (payment success vs. failure), scheduled scans, and row updates that can get pricey or awkward in Zapier. n8n also gives you the self-hosting option, which matters when you’re running frequent reminders. But if you only need “Typeform submission → send one email,” Zapier or Make may be faster to set up. The deciding factor is complexity. Talk to an automation expert if you want someone to sanity-check your exact flow.
Once this is running, your event operations stop living in your head. The workflow does the repetitive follow-ups, and you get to focus on filling seats and running a great session.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.