Approval chains are one of the most common things teams try to automate once they outgrow “just ask in the #general channel.” Purchase requests, PTO, content sign-off, expense reports — they all follow the same shape: someone submits a request, a designated approver gets pinged, and the outcome routes somewhere (a spreadsheet, a database, another Slack message). Make.com (formerly Integromat) is the most flexible no-code tool for building this without writing a Slack app from scratch. Here’s how the pattern actually works and where it breaks.
Why Make over Slack’s own Workflow Builder
Slack’s native Workflow Builder can do simple approvals now, but it’s limited to Slack’s own data — you can’t easily branch based on a value looked up in Airtable, apply conditional routing (route requests over around $500 to a VP, everything else to a manager), or write the final decision back into a Google Sheet or a database with full field mapping. Make’s Slack modules cover the same triggers (slash commands, button clicks, form submissions) but let you insert any number of steps in between: HTTP requests, Airtable/Notion/Google Sheets modules, conditional routers, and delay modules — all visually, without code.
The standard build
A typical Make approval bot has four stages. First, a trigger: usually a Slack slash command (like /request) or a Typeform/Tally form submission that kicks off the scenario via webhook. Second, a formatting step that builds a Slack Block Kit message with Approve/Reject buttons, using Make’s Slack “Create a Message” module with interactive components. Third, a wait step — Make’s scenario pauses (using a webhook response module) until the approver clicks a button, which fires a new webhook back into the same scenario. Fourth, a routing step: a Make Router splits the flow based on the button clicked, updating a record in Airtable or Google Sheets and posting a confirmation message back to the requester.
Handling the wait-for-approval step
The trickiest part for builders new to Make is that scenarios don’t naturally “pause” waiting for a human. The common pattern is to split it into two linked scenarios: Scenario A posts the Slack message and ends. Scenario B is triggered by Slack’s interactivity webhook (configured in your Slack app’s settings) when someone clicks a button, and it looks up the original request record (matched by a hidden ID passed in the button’s value field) to know what to update. This two-scenario pattern is more reliable than trying to keep one scenario open and waiting, which can time out on Make’s execution limits depending on your plan.
Real cost and limits
You’ll need a Slack app with the chat:write, commands, and interactivity scopes enabled — Slack’s App Directory approval isn’t required for internal-only bots, just an internal workspace app. Make’s free tier gives 1,000 operations a month, which sounds like a lot but each approval flow easily burns 4-6 operations per request (trigger, message, webhook callback, database write, confirmation message), so a team processing around 40 approvals a day will need a paid Make plan (Core plan starts around $9/month for 10,000 operations, billed based on usage tier).
Comparison: Make vs. alternatives
| Tool | Best for | Limitation |
|---|---|---|
| Make | Multi-step approvals with conditional logic and external data | Requires understanding two-scenario webhook pattern |
| Slack Workflow Builder | Simple single-approver requests, no external lookups | Can’t branch on data outside Slack easily |
| Zapier | Similar approval builds, simpler UI | Fewer operations per plan tier at the same price |
| n8n (self-hosted) | High-volume approvals, no per-operation billing | Requires hosting and more setup time |
FAQ
Can non-technical team members build this? The trigger-to-message part is genuinely drag-and-drop. The two-scenario webhook linking step has a learning curve — budget an afternoon the first time, then it’s a template you reuse.
What happens if the approver never responds? Add a Make scheduler scenario that checks for records still marked “pending” after a set time (say 24 hours) and sends a Slack reminder or escalates to a backup approver — this needs to be built explicitly, it doesn’t happen automatically.
Does this work in Slack Connect (cross-company) channels? Interactive buttons work in Slack Connect channels the same way, but make sure your Slack app’s interactivity request URL is reachable and that both workspaces have the app installed if it’s not org-wide.
Verdict
For any approval flow that needs to touch data outside Slack — a budget check in Airtable, a status update in a CRM, conditional routing by amount or department — Make is the more capable no-code option, at the cost of a slightly steeper first build using the two-scenario webhook pattern. If the approval is genuinely just “one person clicks yes or no in Slack,” Slack’s own Workflow Builder is faster to set up and has one less system to maintain.










