The Problem
A multi-closer funding operator was running their highest-volume Calendly booking flow through a 36-step Zapier zap. The bill grew with every booking. Notifications routed to the wrong form-specific template, so closers got Slack pings with empty form fields. Reads of GoHighLevel custom fields fired before the writes had committed, catching empty values on the first lookup. Unknown closers triggered broken Slack mentions and skipped GoHighLevel assignment.
The Build
I rebuilt the flow as a 27-node n8n pipeline. The Calendly webhook fires into a single Code node that handles all data shaping in one place: luxon-based DST-safe date formatting, phone E.164 normalization, closer lookup, and the GoHighLevel update body. After the GoHighLevel write, the workflow waits 60 seconds, reads the contact back, and verifies that the form-specific fields have committed. If any field is still empty, it waits 30 seconds and retries, up to three attempts before giving up. The Facebook Conversions API call runs on a parallel dead-end branch so it never blocks the Slack path, and a Switch routes to one of four form-specific Slack templates with conditional warning prefixes for missing data or unknown closers.
The Outcome
The race condition that was emptying form notifications is gone. Closers get a Slack ping that matches the form they actually filled out, with all the fields populated. Unknown closers no longer break the workflow because the safe-fallback path sends the message with a plain name plus a flag for ops to update the lookup table. Facebook conversion tracking still fires on every booking but now lives on its own branch, so a CAPI outage never blocks the closer notification. The Zapier dependency is off the highest-volume booking flow.