Keep the Zap when the workflow is simple and a mistake is cheap to fix. Move to a custom API integration when the connection starts holding your business rules, running at high volume, carrying sensitive customer data or needing a verified webhook, because a no-code step guards those jobs badly. For most Indiana businesses the answer is both: Zaps for alerts and convenience, and a small piece of code for the one connection that decides money or customer records.
When is a Zap the right tool?
A Zap is right when a mistake is easy to spot and cheap to fix. A new form entry becomes a spreadsheet row, or a big job posts a message to your team chat. Nobody loses money if one of those runs twice or late.
Zapier's pricing suits that kind of work. Its help center explains that each action step that runs successfully counts as a task, while triggers and some built-in steps don't count. A two-step Zap that fires a few times a day costs very little and anyone on your team can change it.
If your tools already connect through built-in connectors, start there. Our inquiry automation page covers setting up routing rules and human handoffs inside the tools you already pay for.
What are the signs you've outgrown the Zap?
Four things push a connection from a Zap into code. You only need one of them.
- It's holding your business rules. Filter and path steps start deciding who gets which lead or which price applies. Those rules are hard to test inside a Zap, and a small edit can change them without anyone noticing.
- It runs at volume. Every successful action step is a task, so a busy workflow with several steps adds up. Code steps inside Zapier also have limits: Zapier documents rate limits and runtime limits for Code by Zapier, and runs that hit a rate limit are held until it resets.
- It carries sensitive data. Customer details pass through another company's service and its logs. If personal information is exposed, Indiana's breach notification law expects notice to affected residents without unreasonable delay and within 45 days of discovery, and the Attorney General has to be told too, according to Davis Wright Tremaine's summary of the statute. Fewer places holding that data means fewer places to worry about.
- It needs a verified webhook. Payment and email services sign the notices they send so you can prove they're real. A codehooks.io write-up on securing automation webhooks points out that Zapier doesn't verify inbound webhooks, so the only protection is keeping the URL secret. Adding that check means putting a code step or a gateway in front of the Zap, and at that point you're writing security code on a platform built so you wouldn't have to.
What does a verified webhook check actually do?
Stripe signs every event it sends to your endpoint. Its webhook documentation has you compute an HMAC-SHA256 of the timestamp and the raw body with your endpoint's secret, compare it with the Stripe-Signature header, and reject old timestamps, five minutes by default, so a captured message can't be replayed later. Resend signs its webhooks the same way through Svix headers, and its verification guide says to use the raw body, because parsing and re-encoding the JSON breaks the signature.
Skip that check and anyone who finds the URL can send a fake "payment succeeded" or a fake "unsubscribe" to your system.
What does a custom integration look like in real code?
Here are three from our own systems, described in plain words. None of them is long, and none of them would be safe as a Zap.
- A phone call report. Our voice assistant runs on Vapi and reports qualified calls to an endpoint we wrote. It rejects any request without the right token and compares tokens in constant time, so response timing can't leak the secret. It refuses bodies over 16 KB or that take longer than 5 seconds to arrive, accepts only the fields it expects, and then asks Vapi's own API whether the call really happened before any alert goes out.
- Email unsubscribes. Our Resend webhook checks the HMAC-SHA256 signature over the message ID, timestamp and body, and rejects timestamps more than five minutes off, before it records an unsubscribe or a bounce.
- Paid scans. Our website scanner's Stripe webhook checks Stripe's signature before it starts a paid audit, and a unique database index means one payment pays for one scan.
Each of those needs a place to run and tests that prove it works. That's the part a custom build gives you. You can run a free scan on our website scanner to see the app those checks protect.
Is there a middle path?
Often, yes. Put a small endpoint of your own in front of the part that matters. It checks the signature and applies your rules before it writes the record to your database. Then it hands a clean, checked event to a Zap for the convenience steps, like the team chat message or the spreadsheet row. You keep the easy part easy, and the part that touches money or customer data lives in code you can test.
How do you decide for your own workflow?
Walk through these questions in order and stop at the first yes.
- Does a built-in connector already do it? Use the connector.
- Would a mistake cost you money or a customer? Build that connection in code.
- Does it decide something with your rules, like a price or who gets the lead? Build the rule in code and keep the alerts in the Zap.
- Does it need to check a signature or keep its own records? Build it.
- None of the above? Keep the Zap.
If you landed on keeping it in your tools, see how we set up inquiry automation, and if the connection routes leads, our lead triage handoff guide covers the rules themselves. If you landed on building it, tell us about the connection and we'll scope it on a free call. Still unsure whether you need a developer at all? Read web designer or full stack developer first.
Questions, answered.
Is Zapier safe for customer data?
It depends on the data and the job. A Zap passes customer details through Zapier's service, which is fine for many workflows. When the data is sensitive, fewer places holding it is safer, and Indiana's breach law expects notice within 45 days if personal information is exposed, so keep that kind of connection in code you control.
Can a Zap verify a Stripe webhook signature?
Not with the Catch Hook trigger on its own, because Zapier doesn't verify inbound webhooks. You'd need a code step or a verifying gateway in front of it. Stripe's documentation expects you to check an HMAC-SHA256 signature and reject old timestamps, and that check belongs in code you can test.
When does Zapier get expensive?
Zapier counts each action step that runs successfully as a task, while triggers and some built-in steps don't count. A busy workflow with several action steps adds up fast, and code steps have their own rate and runtime limits.
Does a custom integration replace all of our Zaps?
No. Keep the Zaps that handle alerts and convenience. Move only the connection that decides money or customer records into code, and let it hand a checked event to a Zap for the rest.
Sources & further reading
- Zapier Help Center: How is task usage measured in Zapier?
- Zapier Help Center: Code by Zapier rate limits
- codehooks.io: Secure your automation webhooks with signature verification
- Stripe docs: Receive Stripe events in your webhook endpoint
- Resend docs: Verify webhook requests
- Davis Wright Tremaine: Indiana data breach notification summary


