LOW / CODEBlueprints
general

Cross-Functional Multi-Department Approval Chain

Build a multi-department parallel and sequential approval workflow. Routes requests through department heads on Slack, tracks approval status in Google Sheets, and sends final confirmation emails via Gmail.

Advanced~45 minn8nMake.com 670 downloads 2672 views

Setup Instructions

1. Create a Google Sheet named "Approval Requests" with columns: Request ID, Requester, Title, Description, Finance Status, Legal Status, Ops Status, Final Status, Submitted At, Completed At. 2. Set up a trigger — either a Typeform submission, a Slack slash command, or a webhook that receives approval requests with fields: requester_email, departments (array), description, and priority. 3. Add a Google Sheets node to log the incoming request with status "Pending" for each required department and generate a unique Request ID. 4. Create three parallel branches — one for each department. Each branch sends a Slack message to the department's approval channel (#finance-approvals, #legal-approvals, #ops-approvals) with Approve/Reject buttons using Slack Block Kit interactive messages. 5. For each branch, add a "Wait for Webhook" or "Respond to Slack Action" node that captures the button click response from the approver. 6. After each approval response, update the corresponding status column in Google Sheets (Finance Status, Legal Status, Ops Status). 7. Add a Merge/Convergence node that waits for all three parallel branches to complete. Then add a Code node that checks if ALL statuses are "Approved". 8. If all approved, update Final Status to "Approved" and send a Gmail confirmation to the requester. If any are rejected, set Final Status to "Rejected" and notify the requester with the rejection reason. Add a scheduled check that runs every 24 hours to escalate pending approvals older than 48 hours.
Troubleshooting
**Slack interactive buttons not responding:** Ensure your Slack app has the "interactivity" feature enabled and the Request URL is correctly pointing to your webhook endpoint. The button callback must return a 200 response within 3 seconds. Check that the Slack bot has permission to post in all department channels. **Parallel approvals causing race conditions:** If approvals arrive simultaneously, sheet updates can overwrite each other. Add a small delay (2-3 seconds) between sheet updates, or use the Request ID as a row lock by checking the current value before writing. **Escalation not firing for stale requests:** Verify the scheduled trigger is running and that the timestamp comparison logic accounts for timezone differences. Test with a shorter escalation window (e.g., 5 minutes) during setup before switching to 48 hours. **Rejected approvals not stopping other branches:** In a parallel approval model, all branches run independently. If you want early termination on rejection, switch to sequential approvals or add a check at the start of each branch that reads the current Final Status from the sheet before requesting the next approval.

Need a custom version?

We can build a tailored automation workflow for your specific needs.

New blueprints weekly

Get notified when we publish new automation workflows.