Every new client used to cost us about three hours of admin before any real work started: contract filing, folder setup, Slack channel, kickoff scheduling, CRM updates. Multiply that by four or five new projects a month and it's a part-time job nobody applied for.
So we did what we tell clients to do: picked the most boring, most repetitive process we own, and automated the whole thing end to end. This post is the complete build — every node, both mistakes, and the exported JSON at the bottom.
What the flow actually does
The trigger is a signed proposal webhook from our e-signature tool. From there, one flow fans out into four branches that run in parallel:
- CRM: deal moved to "Active", project record created, contact roles assigned.
- Workspace: Drive folder from template, Slack channel with client + team invited.
- Scheduling: kickoff invite sent with three slots pulled from the lead engineer's calendar.
- Billing: deposit invoice generated and queued for approval — the one step we kept human.
The goal was never to save three hours. It was to make the first day of every project feel instant.
The two dead ends
Dead end #1: creating the Slack channel first. If any later branch failed, the client was sitting in an empty channel wondering what's going on. Channel creation moved to the very last step, gated on everything else succeeding.
Dead end #2: trusting the webhook payload. Our e-signature tool occasionally fires the signed event twice. Without an idempotency check we created duplicate folders, channels, and — worse — invoices. One dedupe node fixed it:
DEDUPE.NODE
const key = $json.envelope_id;
const seen = await this.getWorkflowStaticData('global');
if (seen[key]) {
return []; // duplicate event — stop here
}
seen[key] = Date.now();
return $input.all();Rule of thumb: any webhook that can create money-adjacent records (invoices, orders, refunds) gets an idempotency gate. No exceptions, even for "reliable" providers.
Results after eight weeks
4 min
signature → kickoff invite
11 hrs
admin saved per month
0
duplicate invoices since dedupe
The flow has run 14 times in production. The only manual touch left is approving the deposit invoice — deliberately. Everything else happens before we've finished reading the "we signed!" email.
Get the workflow JSON
Free for community members — import it into n8n, swap your credentials, and it runs.
Written by Kaan
Founder of AI Builders Stack. Builds automations for clients by day, writes up what broke by night.
