Take a deposit for every booking
A client books, doesn't turn up, and the hour is gone. I built this n8n workflow for salons, barbers, physios, tutors and personal trainers. Every new booking in your Google Calendar gets a Stripe deposit link by email. A paid booking turns green. An unpaid one turns red at your deadline and the client is told, so you can delete it and give the slot to someone else.
Buy the pack The pack, $19, plus local sales tax or VAT where it applies
The question
this build answers
How do I take deposits for appointments booked in Google Calendar, and flag the booking if nobody pays?
Run this n8n workflow against the Google Calendar you already book into. Every 15 minutes it finds new timed bookings, emails each client a Stripe Checkout link for the deposit you set for that service, and sends one reminder halfway to your deadline. A paid booking turns green. If nobody pays by the deadline, it closes the checkout first, then turns the booking red and tells the client. The booking stays in your calendar until you delete it to give the slot to someone else.
From the first trigger
to the finished job.
The working version, step by step.
Spot the new booking
Every 15 minutes the workflow reads your calendar. A new timed booking with a booking word or one of your service words in it is picked up. All-day events are skipped. The first run only marks when it started, so clients who booked before that are never asked.
Send the deposit link
The client gets an email with a Stripe Checkout link for the deposit you set for that service. The same booking is never asked twice.
One reminder, halfway
If the hold is 2 hours or more, one reminder goes out halfway to the deadline.
Paid turns green
A paid deposit is marked Paid in your sheet and the client gets a confirmation. With sending switched on, the calendar event turns green. Payments are checked every 15 minutes, so a confirmation can take up to 15 minutes.
Unpaid turns red
At the deadline it closes the checkout first. If nobody paid, the event turns red and the client is told. The event stays in your calendar until you delete it and give the slot to someone else. If they paid in the moment before, Stripe won't close the checkout, so the booking doesn't turn red, and the payment is recorded on the next run. In preview mode client emails come to you instead and your calendar is left alone.
Cancellations follow your rule
When you delete a paid booking from the calendar, your cancellation rule decides. An early cancellation is refunded through Stripe if you switch auto_refund on, or marked Refund due if you don't. A late cancellation keeps the deposit.
A list every morning
At 07:30 you get one email with the day's bookings, where each deposit stands, the refunds you still owe and the deposits paid in the last 7 days. A quiet day sends nothing. Errors go to an Errors tab and to your inbox, at most once every 6 hours for the same failure.
The pack, $19, plus local sales tax or VAT where it applies
Stripe deposits for Google Calendar appointments in n8n
You pay on Stripe and the receipt brings you back to a signed download. The zip holds the n8n workflow, a README with a seven-step test plan using Stripe's test card, and the two sample sheets. It starts in preview mode, so every client email comes to your own inbox until you switch sending on.
Buy the packWho this is for
Salons, barbers, nail studios, physios, tutors and personal trainers whose bookings already live in one Google Calendar. It reads the calendar, so it doesn't matter whether a booking was typed in after a phone call or added by a booking tool.
How I tested it
I ran the main paths on n8n with a Stripe test key and my own Google Calendar, sheet and Gmail: the deposit request and reminder, an unpaid booking turning red at its deadline with sending switched on, a waived booking, a booking deleted before payment, and an automatic refund that Stripe confirmed.
The paid path and the morning list ran with simulated data. Moved bookings, repeating bookings and a failed deposit email were checked offline only. It starts in preview mode, and the README has a test plan using Stripe's test card, so pay your first test booking that way before you go live.
What it costs to run
There's no AI key. Stripe takes its usual card fee on each deposit, and a refund doesn't give that fee back. The rest is whatever your n8n costs you.
Keep the deposit fair
Under UK consumer law a deposit has to be fair to the client. I'd keep it modest and state your cancellation rule plainly when people book.
Before you spend anything
The fit matters.
Who should not build this
If your booking app already takes a deposit when the client books, use that. Taking the money at the moment of booking is simpler than asking for it afterwards.
If you want to charge a no-show fee to a saved card or refund part of a deposit, this does neither.
If you take payments through anything other than Stripe, or want the link sent by text rather than email, this isn't the build for you.
If your bookings are all-day events or spread across several calendars, it won't see them. It reads timed events in one calendar.
Yours to keep
What lands
on your desk.
- One n8n workflow to import into your own n8n 2.x (I tested it on 2.38 and 2.23.4)
- A README with the credentials, the sheet tabs, every setting, the known limits and a seven-step test plan using Stripe's test card
- sample-deposits-sheet.csv and sample-errors-sheet.csv to make the two tabs
See the work
Open the proof.
Published case studies of running systems. Each links to the thing itself.
A few useful
answers.
Does it work with my booking app?
If the booking ends up as a timed event in one Google Calendar, yes, as long as the event title includes one of your booking words and the client's email is on the event. If there's no email, the link comes to you to forward. It reads the calendar, so it doesn't matter how the booking got there.
What if the client pays at the last minute?
The checkout is closed first. If they paid in the moment before, Stripe won't close it, so the booking doesn't turn red, and the payment is recorded on the next run.
Can it refund a cancellation?
Yes. An early cancellation is refunded in full through Stripe if auto_refund is on, or marked Refund due if it's off. A late cancellation keeps the deposit. It doesn't do partial refunds.
Can it charge a no-show fee?
No. It only asks for a deposit up front through Stripe Checkout.
Does it text the client?
No. Every message to the client is an email.
Does it handle repeating bookings?
They're skipped unless you set include_recurring to yes, and I've only checked repeating bookings in offline tests.
What do I need to run it?
n8n 2.x, Google Calendar, Google Sheets and Gmail credentials, and a Stripe API key. Start with your Stripe test key.
What does it cost?
$19 once, plus local sales tax or VAT where it applies, paid on Stripe. Stripe's card fee applies to each deposit you take.
Make this work for you
Your tools.
Your working version.
Want this built and handed over working? Tell me what your version needs to do. One line is enough to start.
Start a brief

