A single-step Zap — trigger fires, one action runs — covers a narrow slice of real-world automation needs. Most workflows that are actually worth automating involve conditions (only proceed if this value meets some criteria), data reshaping (take this messy date string and turn it into something another app can read), and timing (wait before sending a follow-up email so it does not land in someone's inbox three seconds after they signed up).
These three capabilities — filtering, formatting, and delaying — are what separate Zapier from a simple webhook relay. They are built-in steps you add to the Zap editor just like any action, and they require no code. But they do require understanding what they actually do under the hood, because the documentation undersells the complexity and that leads to Zaps that break in non-obvious ways.
This article works through a real multi-step Zap: a new Typeform submission triggers a sequence that filters out incomplete responses, reformats several data fields, waits 24 hours, and then sends a personalized follow-up email. The same principles apply to any trigger-action combination. The Typeform-to-Gmail example just makes the data concrete enough to explain each concept properly.
The Workflow We Are Building
Here is the full sequence before diving into each step:
- Trigger: New submission in Typeform
- Filter: Only continue if the respondent answered the required questions
- Formatter: Clean up the name field (capitalize properly, trim whitespace)
- Formatter: Convert the submission date to a readable format
- Delay: Wait 24 hours
- Action: Send a follow-up email via Gmail
Six steps. Each one depends on what came before it. This is the architecture of a real multi-step Zap, and the order of steps is not arbitrary — filters should come early to avoid wasting tasks on records that would fail later, formatters should run before any step that uses the formatted data, and delays should come immediately before the action they are meant to postpone.
Step 1: The Trigger
In the Zap editor, click the trigger block and select Typeform. Choose "New Entry" as the trigger event and connect your Typeform account. Select the specific form you want to watch.
Test the trigger to pull in sample data. Zapier will retrieve your three most recent form submissions. Pick the one with the most complete data — this becomes the template that shows you all available fields for every subsequent step. The field names come from your Typeform question labels, so a question labeled "What is your full name?" becomes something like "What is your full name" in Zapier's field picker.
One thing to verify during the trigger test: confirm that all the fields you expect to use downstream actually appear in the sample data. If your form has conditional questions that only appear for some respondents, the sample data may not include them. Zapier only shows fields that are present in the selected sample submission. You may need to submit a test response that answers every question to get the full field set.
Step 2: Filter — Stopping Incomplete or Unwanted Records
The Filter step is where most people make their first conceptual mistake. A Filter does not select records — it decides whether to continue or stop the current Zap run. If the filter condition is met, the Zap proceeds. If not, the run ends there, the record is not processed, and the task is not counted against your Zapier quota.
Add a "Filter by Zapier" step directly after the trigger. You will see a condition builder with three parts: the field to evaluate, the condition operator, and the comparison value.
Single-Condition Filters
The simplest filter checks one field against one value. For example, to only proceed when the respondent provided their email:
Field: Email Address Condition: (Text) Is not empty Value: (leave blank — 'is not empty' needs no comparison value)
This passes every record that has a non-empty email field and stops any that do not.
Multi-Condition Filters
Zapier's filter supports multiple conditions within a single filter step. You can combine them two ways:
- (AND) All conditions must be true: Every condition in the list must pass. One failure stops the Zap. Use this when you need the record to meet several requirements simultaneously.
- (OR) At least one condition must be true: Any single passing condition is enough to continue. Use this when multiple different values are acceptable for the same field.
For our workflow, the filter checks two things: the email is not empty AND the name field is not empty:
Condition 1: Email Address (Text) Is not empty Condition 2: Full Name (Text) Is not empty Logic: AND (both must pass)
Filter Operators You Will Actually Use
| Operator | When to Use It |
|---|---|
| (Text) Is | Exact match. Case-sensitive. 'Completed' will not match 'completed'. |
| (Text) Contains | Partial match. 'invoice' matches 'Q1 invoice final.pdf'. |
| (Text) Is not empty | Field exists and has a non-blank value. |
| (Number) Greater than | Numeric comparison. Works on prices, quantities, scores. |
| (Number) Less than | Useful for filtering out $0 orders or negative values. |
| (Date/Time) After | Filters records from a specific date forward. |
| (Boolean) Is true | For yes/no fields or checkbox values. |
A common trap: Zapier's text matching is case-sensitive by default. "Completed" and "completed" are different values. If your data could come in either casing, use "Contains" instead of "Is," or add two OR conditions covering both cases.
Step 3: Formatter — Cleaning Up the Name Field
Formatter by Zapier is a utility step that transforms a single value. It does not connect to any external service — it takes data from a previous step, processes it, and makes the result available to subsequent steps. You can add as many Formatter steps as you need; each one handles one transformation.
Add a Formatter step after the filter. Choose "Text" as the transform type. This gives you access to every text transformation Zapier supports. For the name field, we want two things: proper title case (so "JOHN SMITH" or "john smith" both become "John Smith") and whitespace trimmed.
Capitalize / Title Case Transform
Transform: Capitalize Input: [Full Name field from Typeform trigger] Output: Converts 'JOHN SMITH' → 'John Smith'
"Capitalize" in Zapier applies title case to every word in the string — first letter uppercase, rest lowercase. It handles multi-word names correctly. Note that it will also capitalize particles like "van" or "de" (as in "Van Der Berg" instead of "van der Berg") — for most business use cases this is acceptable.
Whitespace Trim
For trimming extra spaces, add a second Formatter step. Use the same "Text" transform type but choose "Remove Whitespace":
Transform: Remove Whitespace Input: [Output from the previous Capitalize Formatter step] Output: Strips leading/trailing spaces and collapses internal double-spaces
Map the output of the Capitalize step as the input to the whitespace step, not the original Typeform field. Steps in Zapier chain — each step can use the output of any previous step.
Step 4: Formatter — Reformatting the Submission Date
Typeform sends submission timestamps in ISO 8601 format: something like 2024-03-15T14:32:07.000Z. That is machine-readable but not suitable for an email.
Add another Formatter step. This time choose "Date / Time" as the transform type, and "Format" as the transform:
Input: [Submitted At field from Typeform trigger] From Format: Leave blank — Zapier auto-detects ISO 8601 To Format: MMMM D, YYYY Output: March 15, 2024
Common Date Tokens
| Token | Output | Example |
|---|---|---|
| YYYY | Four-digit year | 2024 |
| YY | Two-digit year | 24 |
| MMMM | Full month name | March |
| MMM | Abbreviated month | Mar |
| MM | Zero-padded month number | 03 |
| dddd | Full weekday name | Friday |
| h:mm A | 12-hour time with AM/PM | 2:32 PM |
Timezone handling is the part that catches people off guard. Zapier processes dates in UTC unless you configure otherwise. If your Typeform is set to collect in a local timezone and your respondents are in, say, EST (UTC-5), a submission at 10:00 PM EST will arrive in Zapier as 03:00 AM UTC the next day. To fix this, specify the timezone in the Formatter step's "To Timezone" field.
Step 5: Delay — Waiting Before Sending the Email
Delay by Zapier pauses the Zap run at that point and resumes it after a specified amount of time. Add a Delay step after the two Formatter steps. Choose "Delay For" as the delay type and configure:
Delay For: 1 Time Period: Days
Delay Types
| Delay Type | What It Does | Best Used For |
|---|---|---|
| Delay For | Waits a fixed duration from when the step runs | Follow-up emails, reminder sequences |
| Delay Until | Waits until a specific datetime value from trigger data | Sending emails on a scheduled date provided in a form |
| Delay Until (Day of Week) | Waits until the next occurrence of a specified day | Monday morning summary emails |
Important Limits on Delays: Zapier enforces a maximum delay of 30 days on most plans. If your Delay would exceed 30 days, Zapier will not schedule the resume correctly. Also note that delayed Zap runs count against your task quota at the time they complete, not when they are created.
Step 6: Action — Sending the Follow-Up Email
Add a Gmail action step. Choose "Send Email" as the event. Connect your Gmail account and configure the fields:
To: [Email Address field from Typeform trigger] Subject: Following up on your submission Body: Hi [Cleaned Name from Capitalize Formatter], Thanks for filling out our form on [Formatted Date from Date Formatter].
Notice the field mapping: the name in the email body comes from the Capitalize Formatter output, not the raw Typeform field. Every step in the Zap contributes to the final action.
How Tasks Are Counted in Multi-Step Zaps
Each action step that runs successfully counts as one Zapier task. Triggers and Filter steps do not count. But every Formatter step, every Delay step, and every action step counts. For our six-step Zap, that is four tasks per form submission that passes the filter.
Testing and Debugging the Full Zap
Zapier lets you test each step individually. After building all six steps, go back to step one, select your sample data, and click "Test step" on each one in sequence.
Common Failures:
- "We could not find a value for [field name]": The field you mapped does not exist in the sample data. pick a different sample submission that has all fields populated.
- Formatter returns empty output: The input field is empty in your sample data. Fix by choosing a sample submission with that field filled in.
- Delay step shows 'Scheduled' and never resumes during testing: This is expected behavior. Delays do not execute in test mode; Zapier skips them to let you test the action step immediately.
Closing Notes
Error handling is the part of Make that separates a scenario you can trust from one you need to babysit. The tools are all there — Break, Retry, Commit, Rollback, Ignore, fallback routes, email alerts, filters — and none of them require programming knowledge. What they require is thinking through the failure modes before they happen.
The 30 minutes you spend setting up proper error handling on a scenario is paid back the first time an API goes down at 2 AM, your error handler catches the failure, stores the data safely, and you wake up to an email telling you exactly what happened.