HIGH · lost leads
One failed step switched the whole scenario off
"Allow storing of incomplete executions" was off. If Google Sheets, Slack or Gmail hiccuped, the run stopped with an error and there was nothing to retry: the website never resends a form. Worse, with the default error settings Make deactivates a webhook-triggered scenario right after its first error, so every quote request after that was missed until someone noticed.
Fix: incomplete executions on, plus Break handlers with automatic retry on the Sheets, Slack and Gmail steps. A failed step now waits and retries instead of stopping everything.
HIGH · blank fields
API errors were treated as answers
The ZIP lookup (legacy HTTP module) had "Evaluate all states as errors" switched off. When the API returned 401 or 500, Make carried on with the error body as if it were the service area, and "Area:" in the alerts came out blank.
Fix: moved to the current HTTP "Make a request" module with "Return error if HTTP request fails" on, and a Resume handler that fills "area lookup failed, check ZIP", so the lead still reaches sales with a clear note.
HIGH · security
A live API key sat inside the module URL
Anyone who got the exported blueprint (a freelancer, a shared template) got the key with it.
Fix: key moved into a Make keychain (API key authentication in the HTTP module), so it never appears in an export, and the old key rotated.
HIGH · blank fields
Two fields pulled data from steps that never ran
The Slack alert showed "Quote #" from the Gmail module on the other route, and the sales email used a field from a module that had been deleted. Both always came out empty.
Fix: both now use the Google Sheets row number from the "Log request" step, which runs before the router on every path.
MEDIUM · noise and a gap
Sales got one email per service, or none at all
An iterator over "services" fed Gmail directly. A customer who ticked three services produced three near-identical emails. Found in manual review: a customer who ticked none produced no email at all, because an empty list gives the iterator nothing to pass on.
Fix: no iterator. The email lists the services with join() and says "not specified" when the list is empty: one request, always one email.
HIGH · found in manual review
"Urgent" didn't match "urgent"
The router filters used exact, case-sensitive matches for "urgent" and "standard". A form that sends "Urgent", or an empty value, matched neither route. The row was already in the sheet, but with no fallback route nobody was told about the lead.
Fix: case-insensitive match for "urgent", and the sales route became the fallback route: anything not urgent reaches sales.
LOW · housekeeping
Smaller settings
Sheets rows were written as plain text, so dates and numbers didn't sort or filter.
Fix: valueInputOption: USER_ENTERED.