Send Typeform leads to Systeme.io and log them in Google Sheets

Every Typeform submission becomes a tagged Systeme.io contact and a new row in your lead log. No copy-paste, no missed leads.

Deterministic Code
TypeformSysteme.ioGoogle SheetsMarketingSalesLead EnrichmentData SyncOnboarding Automation

Build a deterministic code workflow that captures new Typeform lead submissions into Systeme.io and logs them to Google Sheets. No reasoning, no drafting. Every step is structured CRUD.

Trigger: Typeform webhook for new form responses on my lead form. Use Typeform's standard new-response webhook payload. The form id and the human-readable form name should be configurable inputs so I can reuse this workflow per form.

Step 1: Parse the Typeform payload. Pull the submitter's email, first_name, last_name, the submission timestamp, the form name, and any hidden fields for utm_source, utm_medium, utm_campaign, utm_content, utm_term, and referrer. If first_name or last_name are not present as their own answers, fall back to splitting a single "full name" answer on the first space.

Step 2: Call Systeme.io Create Contact with the email. Pass first_name and last_name through the contact's fields array using the built-in slugs (first_name, last_name). If Systeme.io returns a conflict because the email already exists, look the contact up by email and use that existing contact id. Either way, end this step with a contact id.

Step 3: Resolve the tag id for the form. Call Systeme.io List Tags with a name filter equal to the configured form-name tag. If it exists, use that tag id. If it does not, call Systeme.io Create Tag with that name and use the new tag id. Then call Systeme.io Add Tag to Contact with the contact id and the tag id so any downstream Systeme.io automation tied to that tag fires.

Step 4: Call Google Sheets Append Values on the configured spreadsheet and tab (default range: the lead log tab, columns A:K). Append one row with: submission timestamp, email, first name, last name, form name, utm_source, utm_medium, utm_campaign, utm_content, utm_term, referrer. Use USER_ENTERED so the timestamp formats as a date. Leave a UTM cell blank if Typeform did not pass that field.

Inputs the user should configure: Typeform form id, form-name tag (the label used both in Systeme.io and written into the sheet), Systeme.io API credential, Google Sheets spreadsheet id, and the tab name for the lead log. Everything else flows through from the webhook payload.

Keep it strictly deterministic. No LLM steps. Run the chain end to end in one webhook firing. If Systeme.io returns a 429, retry the failing call with backoff using the Retry-After header. If Google Sheets returns a 429 or 503, retry with exponential backoff.

Additional information

What does this prompt do?
  • Listens for new responses on a Typeform lead form the moment they happen.
  • Adds the submitter to Systeme.io as a contact with their email, first name, and last name.
  • Tags the new contact with the form name so your Systeme.io automations and welcome sequences fire.
  • Appends a row to your Google Sheets lead log with the timestamp, contact details, form name, and any UTM or referrer fields.
What do I need to use this?
  • A Typeform account with the lead form you want to capture.
  • A Systeme.io account and an API key from your Systeme.io settings.
  • A Google account with edit access to the spreadsheet you want to log leads into.
  • A Systeme.io tag for each form, or the workflow will create one for you on first run.
How can I customize it?
  • Point it at a different lead form, or run separate copies for each form so each gets its own Systeme.io tag.
  • Change the tag name to match an existing Systeme.io automation, so the right welcome sequence fires.
  • Pick which fields land in the sheet, such as company, role, budget, UTM source, UTM campaign, or referrer.

Frequently asked questions

How fast does a lead show up in Systeme.io after they submit?
Within seconds. The workflow runs on the Typeform webhook, so it fires the moment a response is submitted, not on a delay or schedule.
Will my existing Systeme.io automations still fire?
Yes. Tagging a contact in Systeme.io triggers any automation tied to that tag, so your welcome email, course enrollment, or sales sequence will run exactly like it does today.
What happens if the same person fills out the form twice?
Systeme.io recognizes them by email and keeps a single contact record. The tag still gets reapplied, and the second submission still gets logged as its own row in your sheet.
Can I capture UTM parameters and the referrer URL?
Yes, as long as your Typeform passes them in as hidden fields. The workflow reads any hidden fields you map and writes them into the sheet alongside the contact info.
Do I need a paid Typeform or Systeme.io plan?
You need a Typeform plan that supports webhooks and a Systeme.io plan that lets you generate a public API key. Most paid tiers on both platforms qualify.

Stop copy-pasting form responses into your CRM.

Connect Typeform, Systeme.io, and Google Sheets once, and Geni captures every lead the second it comes in.