When nothing looked wrong but nothing worked either

When nothing looked wrong but nothing worked either

Let me just say this upfront: automation can break your heart. One day, your invoices are sending themselves, your leads flow into Airtable like magic, and you’re thinking about buying a second monitor just to admire it all. The next day? Nothing triggers, webhooks ghost you, and you’re manually copying emails out of Gmail again like a clown 🙃

This post is for small business owners who don’t write code, haven’t touched a JSON file in their lives, and mostly want things to Just Work. But also, people like me — half-way in, too deep to quit, always half-suspicious of every little settings toggle because one time Zapier reset my timezone and I didn’t realize until a month later. Yeah. That kinda stuff.

Here are the automations that mostly work — until they sort of don’t — with notes on what to watch out for.

1. Automatically send invoices after new bookings

If you’re using Calendly plus QuickBooks or Wave, there’s a very tidy experience hiding in the background. Book a call, and boom — invoice out. Except when it isn’t.

Here’s what I used:
– Calendly Pro connected to Zapier
– QuickBooks Online (ugh, their API limits tho)

The Zap was supposed to:
1. Trigger when a Calendly event was scheduled (e.g., 1-hour consult)
2. Look up the client’s email
3. Create an invoice in QuickBooks with pre-filled line items

Worked great for two clients. Then a third booked a call and… nothing. Dug into Zap History — it failed silently because the guest had used a different capitalization in their email before 🤦

Stuff like this will drive you up a wall. If you’re going to automate post-booking invoices:

– Force lowercase email matching with a formatter step.
– Set up a fallback: if the email is not found, trigger a notification to you (email, Slack, whatever).
– Be aware QuickBooks limits how often you can ping their API. I hit that during a group coaching signup window and had to delay invoice sends.

Honestly, if you forget to double-check the incoming time zone settings in Calendly (which sometimes reset when you duplicate an event 🤷‍♀️), the invoice time will be off. Clients kept asking why their invoices were saying 2am appointments. Good times.

2. New lead emails added to your CRM automatically

If someone fills out your website form, you probably want their info to go somewhere structured. Whether you use Airtable, Notion, or even Google Sheets, nothing feels better (or more fragile) than a solid lead intake flow.

I had one that went:
– Form submitted in Tally (easier than Typeform IMO)
– Zap triggered → added new row to Airtable
– Sent a welcome email via Gmail

This worked beautifully until Tally introduced a small change in their webhook payload structure — and Zapier didn’t catch it. Suddenly some new leads came in with missing fields (like name being “undefined”) and the welcome email said “Hi ,” 😬

Also — Airtable bases with a lot of linked records sometimes reject new rows if there’s a weird data mismatch (like special characters or extra spaces). If your CRM has a “Company” field linked to another table, but the incoming string doesn’t match exactly (like “Acme Inc” vs “ACME Inc.”), the record gets lost in the ether. To fix:

– Add a formatter step to clean up whitespace and capitalization.
– Use a catch hook in Zapier that flags entries missing required data.

The absolute kicker? Tally forms have an “Edit form” button that can silently unpublish your webhook. So your Zaps just stop firing. No error. No email. Nothing. It’s like the leads vanished. Took me three weeks to realize.

3. Send Slack alerts for new online orders

A professional at a desk in a modern office checking Slack, with a notification on the screen about a new online order. The workspace is busy, conveying a sense of productivity.

Small ecomm owners, this one is dopamine on tap. Every time a new Shopify (or Squarespace) order comes in, your Slack goes *ping*. Unless it doesn’t. Or fires twice.

I had a Zap that:
– Triggered when a new order was placed in Shopify
– Parsed the order items
– Sent a message to a private Slack channel

What could go wrong? Apparently, a lot.

There’s a dumb Shopify quirk where test orders (even if marked as such) can still trigger live Zaps unless blocked explicitly by a filter step. So I woke up one day to what looked like 20 orders overnight. Mini heart attack. None were real 👎

Also, if you use custom order types or discounts, Shopify doesn’t always include the correct line item variant info in the webhook. Sometimes “T-Shirt – Blue – Medium” just shows up as “T-Shirt.” Even with Zapier’s newer Shopify integration, this gotcha still happens with weird nesting in the JSON object.

Tips if you try this:
– Use a Zapier Code step (JS) to parse out specific item fields if you need SKU-level detail.
– Add a filter step: only notify if payment status is “paid”.
– If using multiple channels, duplicate Zaps instead of using branches — branches often misfire when webhooks include multiple items.

Slack also loves to eat message formatting. If you add line breaks using \n, test them thoroughly. Sometimes previews look fine in Zapier but break on send.

4. Automatically follow up when clients ghost

An office desk showing a computer with an email notification of a silent client. The room is quiet, with reminders to follow up, evoking the scenario of clients not responding.

This one always felt a bit manipulative but… hey, we’re all tired. If someone emails you, you reply in good faith, and then they vanish — you can set something to remind *you* or even nudge them.

I built it with:
– Gmail trigger (new email thread)
– Delay Until → 3 business days later
– Filter: if no reply from same thread
– Then → send follow-up email template from Drafts

The problem? Gmail’s Zapier integration only checks for *new* messages. It doesn’t re-evaluate whether a thread got updated — unless you set up a look-up step manually, store the thread ID, and then cross-check later.

And the Delay step silently resets if the original trigger fails once. I learned this during a site migration. Because my Gmail Zap temporarily didn’t fire, the Delay resumed counting from the rebuild point — not the original message time. All the follow-ups went out a week late. Not tragic, but… sketchy.

If you want to use follow-up automations:
– ALWAYS store original thread ID in a separate table (Airtable or Sheets).
– Use a Scheduler function (rather than Delay) when possible.
– Build a sanity check Zap that flags you if reply is received after delay is scheduled. It makes the system way more human.

Bonus tip: Use YAMM (Yet Another Mail Merge) for cold follow-ups. It weirdly behaves better than fully-automated Zaps when Gmail rate limits kick in.

5. Save new receipts or attachments to Google Drive

This one is small but mighty. Client sends a receipt = PDF. You want it saved in a neat little folder so your accountant doesn’t send you 40 angry texts. Easy, right?

I built this with:
– Trigger: New email in Gmail with attachment, from specific addresses
– Filter: attachment is PDF or image
– Action: upload file to Google Drive folder with today’s date

Here’s the twist: Gmail’s Zapier trigger only fires when the *first* email in a thread arrives. So, if your client replies later with an updated invoice as an attachment? No trigger. You’ll miss it entirely unless you reset the threading behavior (which is undocumented).

Also! Google Drive upload step sometimes throws an error if the file name already exists — especially for “Invoice.pdf” type files. If you need unique names:
– Use Gmail’s internal message ID or timestamp in the file name
– Add a Formatter → Date/Time step to format with YYYY-MM-DD prefix
– If your Zap fails once due to Drive rate limits, it will retry — but not always with the right file

I once found ten invoices saved as “Invoice.pdf (1)” to “Invoice.pdf (10)” with totally different contents. All mixed up 😐