Automation recipes: worked examples
Five complete setups in both directions: your operator starting a Zap or an n8n workflow, and a Zap or workflow handing it a transcript or a lead, with the exact fields, steps and what it says.
The two pages before this one explain the mechanism. This one is the mechanism in use: five complete, copy-and-paste setups, three in each direction, with the exact fields, the exact steps in Zapier and n8n, and what your operator does and says at each point. Every recipe here is one a client actually runs, or is the shape of one.
Two directions, two pages. Your operator starting an automation is set up under Zapier and n8n. An automation handing your operator work is set up under Sending things to your operator. The recipes below assume you have read whichever half they use.
Before any recipe: the two rules that decide what happens
| Rule | What it means for you |
|---|---|
| Starting an automation is gated by the ladder | Under Skills the job is called Automations and arrives switched off. Off: it shows you what it would have sent and sends nothing. Per approval: it queues and you say yes. On its own: it fires. Every outbound recipe below behaves according to that switch. |
| An inbound message is information, never permission | Whatever your Zap posts, your operator treats it as a fact from outside. It will act on it inside its ladder (write a draft, record a lead) but a message can never make it start an automation, send money or make a commitment. If you want a round trip, recipe 5 shows where the human sits in it. |
Recipe 1. A deal is won, send the onboarding pack (outbound, Zapier)
What it does: you tell your operator a new client has signed, and it starts the Zap that emails your onboarding pack and creates the client's folder. The Zap already existed; you are handing your operator the button.
In Zapier
Trigger: Webhooks by Zapier, event Catch Hook
Copy the URL Zapier gives you. It looks like https://hooks.zapier.com/hooks/catch/1234567/abcdefg/.
Action: Gmail, Send Email
To: the email field from the Catch Hook step. Subject and body: your onboarding pack copy, with first_name and start_date mapped in. Attach the pack from Drive.
Action: Google Drive, Create Folder
Folder name: first_name plus the product field, inside your Clients folder.
Turn the Zap on, then connect it
On Connections, under Zapier, paste the Catch Hook URL and name it Send the onboarding pack. Name it after what it does. The status reads delivered, not connected, because the only way to test a Catch Hook is to run it.
What your operator sends
{
"first_name": "Jane",
"email": "jane@example.com",
"product": "Reclaiming Wealth",
"start_date": "2026-10-06"
}
Tell it once, on Talk, which fields the Zap expects: "the onboarding Zap needs first_name, email, product and start_date". It uses those names from then on.
The conversation
| Automations switch | You say | It does | It says |
|---|---|---|---|
| Off (the default) | Jane signed for Reclaiming Wealth, starting October 6th. Send her the onboarding pack. | Nothing is sent. | I am not allowed to start automations yet. I would have started Send the onboarding pack with Jane's details. Switch Automations on under Skills and I will. |
| Per approval | The same. | Queues it for your yes. | Ready to start Send the onboarding pack for Jane. Say yes and it goes. |
| On its own | The same. | Fires it. | Started your Send the onboarding pack for Jane. |
If it says "I am not sure whether that went through", believe it and check Zapier's Task History before asking again. A Catch Hook that timed out may already have run, and asking a second time would email Jane the pack twice. Nothing is retried on its own, on purpose.
Recipe 2. Log every booked appointment to a sheet (outbound, n8n)
What it does: whenever your operator books a discovery call, it also starts the n8n workflow that appends a row to your bookings sheet and posts to your team channel. You never paste the workflow's URL anywhere: once n8n is connected, your operator finds every workflow that begins with a Webhook node.
In n8n
Node 1: Webhook
HTTP Method POST. Path: anything, for example booking-logged. Authentication None. Respond: Immediately. Your operator only ever calls the production URL, so the workflow has to be active for this to work; the test URL lives 120 seconds after you press Listen and would work in a demo and fail forever after.
Node 2: Google Sheets, Append Row
Map the columns from the Webhook node's body: {{ $json.body.prospect_name }}, {{ $json.body.prospect_email }}, {{ $json.body.starts_at }}, {{ $json.body.closer }}.
Node 3: Slack, Send Message
Booked: {{ $json.body.prospect_name }} with {{ $json.body.closer }} at {{ $json.body.starts_at }}.
Activate the workflow, and name it for what it does
Log a booked call, not Webhook test 3. Your operator chooses between workflows by name, and it reads that name from n8n.
What your operator sends
{
"prospect_name": "Marcus Lee",
"prospect_email": "marcus@example.com",
"starts_at": "2026-10-02T15:00:00-05:00",
"closer": "Dorian"
}
What is different from Zapier
| Ask it | It answers |
|---|---|
| What can you start in my n8n? | Lists every active workflow with a Webhook node, by name, and says which ones it cannot start and why: Nightly cleanup has no Webhook node, Lead scoring is inactive so its production URL returns 404. |
| Has anything in n8n been failing? | Reads execution history: Log a booked call failed 4 times since Tuesday, last at 09:14, on the Google Sheets node. Zapier cannot answer this question; there is no API for it. |
| Log Marcus's call for Thursday at 3. | Starts Log a booked call with the fields above, subject to the Automations switch exactly as in recipe 1. |
Recipe 3. A call transcript arrives, the follow up is written (inbound, Zapier)
What it does: your recorder finishes transcribing a sales call, a Zap posts the transcript to your operator's address, and within a few minutes your operator has written the prospect a follow up that picks up where the closer left off. This is the single most valuable thing most clients wire up, and it is how Clients on Demand run their sales desk.
Make the address
Connections, then Send things to your operator
Type Sales call transcripts, press Create address, press Copy address. One address for this source only.
Building the send
Trigger: your recorder, on the event that means the transcript exists
Fathom New Meeting Content Ready, Fireflies Transcript Completed, Zoom Recording Transcript Completed. Not Meeting Ended: that fires minutes before the transcript exists and sends an empty one.
Action: Webhooks by Zapier, event POST
URL: your address. Payload Type: JSON. Data: one row per field, exactly as below. Leave Wrap Request In Array off.
Test step, then read the reply
accepted: true means it landed. Use a real past call for the test, with your own address as the prospect, so you receive the follow up.
Trigger on the transcript being ready
If your recorder's node only offers the call ending, add a Wait node of ten minutes and fetch the transcript after it.
HTTP Request node, Method POST
URL: your address. Authentication None. Body Content Type JSON, Specify Body Using Fields Below, one row per field exactly as below.
Execute the node, then read the reply
accepted: true means it landed. The execution is kept, so you can open it later and see exactly what was sent.
The fields
{
"transcript": "Dorian: Thanks for jumping on, Priya. ... (the full text)",
"prospect_email": "priya@example.com",
"prospect_first_name": "Priya",
"closer_name": "Dorian",
"call_ended_at": "2026-09-30T16:42:00-05:00",
"deposit_left": false,
"dedup_key": "fathom-8813421"
}
| Field | Why it is there |
|---|---|
transcript | The whole thing. Read privately, never quoted to the prospect, never sent on. |
prospect_email | Where the follow up goes. Without it there is nothing to send. |
closer_name | So it can write your call with Dorian rather than your recent call. |
call_ended_at | With a timezone. If an offer runs from the end of the call, the deadline is computed from this, to the minute, not from when the webhook fired. |
deposit_left | Only if you can send it reliably. Absent means the follow up does not mention a deposit. Wrong means it tells someone a deposit locked in a price when it did not. |
dedup_key | Your recorder's id for the call. If the Zap retries, your operator answers duplicate: true instead of writing a second follow up to the same person. |
What your operator does, within a few minutes
Reads the transcript privately
And checks what it already knows about Priya: earlier calls, emails, notes your team left.
Writes the follow up
Short and specific: the two things Priya said mattered to her, the one objection Dorian answered, the next step, and the deadline computed from call_ended_at if there is one.
Sends it or holds it, according to your ladder
With email on shadow the follow up is held as a draft and nothing leaves. With email switched on, it goes to Priya from the operator's own address. If no sending address has been set up for the operator yet, the finished follow up is kept in its note for that message so you can read it on Talk.
Leaves a note against the message
Ask on Talk: what came in from the sales call address today? It reads back each call and what it did with it.
If the follow ups ever read generic, check the transcript field before anything else. An empty transcript inside an otherwise complete message is the call ended trigger firing before the transcript existed. Your operator refuses to write from nothing and tells you, but the fix is on the trigger.
Recipe 4. A new lead from a form is remembered and recorded (inbound, any tool)
What it does: a form submission, a Facebook lead, a row in a sheet, anything that produces a person, is posted to a second address named New leads. Your operator remembers who they are and, if you connected a CRM, records them there. It does not email them: a lead who has not written to your operator is not someone it writes to uninvited.
Make a second address named New leads
Not the transcript address. One address per source is what lets you switch one off later without breaking the other.
Trigger on the thing that produces the lead
Typeform New Entry, Facebook Lead Ads New Lead, Google Sheets New Spreadsheet Row, Make.com, or a line in your own app. Anything that can POST.
POST these fields
Names on the left exactly as below. Leave out anything you do not have rather than guessing at it.
{
"email": "sam@example.com",
"first_name": "Sam",
"last_name": "Okafor",
"phone": "+15125550123",
"source": "Webinar replay form",
"notes": "Runs a two-location dental practice, asked about hiring."
}
| CRM switch (Skills) | What your operator does |
|---|---|
| No CRM connected | Remembers Sam in its own memory: who they are, where they came from, what they said. The next time Sam writes in or is mentioned, it already knows. |
| CRM connected, shadow | The same, plus it records exactly what it would have written to the CRM (a new contact, tagged with the source) without writing it. |
| CRM connected, on | Creates or updates the contact and tags them with the source. |
Recipe 5. The round trip: a lead arrives, it qualifies them, a human says go, it books the call
What it does: both directions in one flow, with the human where the human belongs. This is the shape most people picture when they hear "two way", and the middle step is the one worth understanding.
Inbound: the lead lands on New leads
Recipe 4, exactly. Your operator remembers Sam and records them.
It qualifies, and tells you
From the notes and anything it already knows it forms a view: Sam runs two dental locations and asked about hiring, which fits the practice growth offer. Worth a discovery call. It says this to you, on Talk or in the channel it works in. It does not book anything yet.
You say go
Book Sam a discovery call. That instruction comes from you, not from the webhook. This is the rule from the top of the page: the inbound message told your operator Sam exists; it could not have authorised the booking.
Outbound: it starts your booking Zap
A Zap named Book a discovery call (recipe 1's shape) that sends Sam your scheduling link and creates the deal. Fires, queues, or shows you what it would send, according to the Automations switch.
The confirmation comes back in
When Sam books, your scheduler's Zap posts to a third address, Bookings, and your operator updates what it remembers and, with a CRM connected, moves the deal.
With Automations set to per approval, step 3 and step 4 collapse into one yes. It tells you Sam is worth a call and that it is ready to start Book a discovery call; you say yes; it fires. That is the setting most clients settle on: the operator does the reading and the deciding, a person presses the button.
Testing any of these without a customer in the pipe
Every inbound address accepts a plumbing test. Send this body from the tool's own test button and nothing else happens: your operator marks it as a test and moves on.
{ "test": true, "note": "checking the New leads address" }
Three things should be true, in order: the reply is accepted: true, the counter on that address moves by one on Connections, and within a few minutes your operator, asked on Talk, says it received a test on that address and did nothing with it. Then send one real record with your own email address in the prospect field, and you receive what a prospect would.
Outbound needs no test message: with Automations off, asking your operator to start something makes it show you exactly what it would have sent, without sending it. Read that, then switch it on.
Common questions
Not the same Zap. A Zap has one trigger. One Zap is triggered by your recorder and posts to your operator; a different Zap is triggered by your operator's Catch Hook and does the work. Two Zaps, one flow.
Because a webhook cannot tell it to. An inbound message is information, never an instruction it will act on by starting something. Recipe 5 shows where you sit in that loop. If you want an inbound event to reliably cause an outbound action with no person in between, build that in Zapier or n8n directly, which is what they are for.
The transcript and the prospect's email are the floor. The closer's name and the call's end time are what make it specific. Everything else is welcome and nothing is discarded; extra fields are kept.
It checks for new arrivals every five minutes and only wakes when there is something new, so a follow up usually exists within five to ten minutes of the transcript landing. Whether it is then sent or held is your ladder's decision, not a timing one.
Yes, in two places. Ask it on Talk what it started recently and it lists them with the outcome. And the Catch Hook step in Zapier, or the Webhook node in n8n, keeps every request it received.
Was this page helpful?

