Make
Intermediate 16 min READ

Robust multi-branch webhook router with Make and Airtable

Route, transform, and log inbound webhook events into Airtable with dead-letter error queues and rate-limited retries.

Target Architecture

A multi-branch Make scenario triggered by an instant custom webhook. The scenario validates input payloads, checks for duplicate event IDs using an Airtable lookup, branches into specific business logic paths (e.g., 'Payment Succeeded' vs 'Subscription Cancelled'), writes records with relational links, and captures unhandled exceptions into a dead-letter queue table for manual replay.

INTEGRATED RUNTIMES:

Tools used

Make Airtable Webhooks
Table of Contents
8 Sections

Overview

This guide walks you through building an enterprise-grade webhook routing pipeline using Make (formerly Integromat) and Airtable. Incoming event payloads from Stripe, Shopify, or custom apps are verified, routed through custom decision branches, deduplicated, and logged into structured Airtable tables with dedicated dead-letter error handling. Every technical term is explained in the Glossary before use.

Before you begin

Budget about 25–35 minutes to set up your Make custom webhook, configure your Airtable Personal Access Token (PAT) with schema scopes, build your Airtable base, and test scenario runs. Make's free tier includes 1,000 operations/month, which is plenty for development. This guide is UNVERIFIED by Workflow Vault's automated testing suite — test against staging webhook payloads before pointing live traffic.

Glossary

Make (formerly Integromat)
A visual integration platform that connects cloud apps and APIs via modular scenarios with built-in data transformation, looping, and error execution directives.
Make Scenario
A complete automated workflow in Make consisting of interconnected modules starting with a trigger and passing data packets (bundles) downstream.
Custom Webhook Module (Make)
An instant trigger module that generates a dedicated URL capable of receiving asynchronous HTTP POST requests and parsing JSON data structures automatically.
Router (Make)
A scenario module that splits execution flow into multiple distinct parallel branches based on conditional filter rules (e.g. matching event type names).
Dead-Letter Queue (DLQ)
A storage repository or table where failed, malformed, or unprocessable webhook messages are isolated for alerting, auditing, and subsequent re-processing.
Airtable Personal Access Token (PAT)
A secret security token generated in Airtable's developer hub that provides scoped access (such as `data.records:read` and `data.records:write`) to specific Airtable bases.
Idempotency Key
A unique identifier (such as `evt_12345` from Stripe) sent with an event to guarantee that processing the webhook more than once does not result in duplicate records.

Prerequisites

  • [You'll need this already] A Make account (free tier or higher) at make.com.
  • [You'll need this already] An Airtable account with permission to create a new base and generate a Personal Access Token from airtable.com/create/tokens.
  • [You'll need this already] A tool or source that can dispatch test webhook payloads (such as curl, Postman, or Stripe CLI).
  • [You'll need this already] Familiarity with basic JSON data structures (keys, strings, numbers, arrays).
  • [Optional, not required] A Slack or Discord incoming webhook URL to receive instant dead-letter failure alerts.

Where to Run This Automation

Where should you run this automation?

Don't have 24/7 hardware at home? Choose the setup that fits your budget and technical comfort.

Hardware & Cloud Guide

Best for Freelancers, Agencies, and 24/7 Client Pipelines

If you don't have a dedicated server running at home, a Virtual Private Server (VPS) gives you a dedicated Linux server in the cloud that stays online 24/7 even when your personal laptop is closed.

  • Cost: ~$4 to $6 / month (predictable flat fee, no per-execution surprises).
  • Providers: Hetzner Cloud, DigitalOcean, Linode / Akamai, Railway, or OVH.
  • Key advantage: You get a permanent public IP address and free SSL certificates, which are essential for receiving incoming Stripe, Airtable, or GitHub webhooks reliably.
Quick 1-liner to install Docker on any Ubuntu/Debian VPS: curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER
RECOMMENDED SPECS
RAM: 1GB – 2GB
vCPU: 1 Core
Storage: 20GB SSD
Uptime: 99.9%

Best for Hobbyists, Testing & Zero-Cost Experimentation

You can run this automation completely free on your everyday computer (Mac, Windows, or Linux) or on low-cost home hardware like a Raspberry Pi 4/5 or repurposed mini PC.

  • Cost: $0 / month (100% free).
  • Software needed: Docker Desktop (free for personal use) or native Node.js / Python.
  • Consideration: Automations will only execute while your computer is powered on and awake. To receive incoming webhooks locally, use tools like ngrok or Cloudflare Tunnels for secure local tunneling.
LOCAL CHECKLIST
Docker Desktop: Installed
RAM Overhead: ~400MB
Webhooks: Tunnel required

Best for Zero-Maintenance 1-Click Operations

If you don't want to manage Docker containers or terminal commands, you can run automations directly on managed serverless platforms or official SaaS plans:

  • Cloudflare Workers: Free tier includes 100,000 requests per day with 0ms cold starts.
  • n8n Cloud / Make / Zapier: Fully managed hosted platforms with automated backups and visual scenario builders.
  • Railway / Render: 1-click Git container deploys with auto-healing and managed PostgreSQL databases.
SERVERLESS TIERS
Cloudflare: 100k req/day free
GitHub CI: 2,000 min/mo free
Maintenance: Zero OS updates

Step-by-step implementation

Click the numbered phase buttons as you complete each step to track your live progress.

Phase Progress 0/5 completed (0%)
PHASE 1

Create the Airtable base schema with an Error Log table

Create a new Airtable base named 'Webhook Operations'. Set up two tables: 1) 'Events' (fields: `Event ID` [Single line text, primary], `Event Type` [Single select], `Payload` [Long text], `Status` [Single select: Processed, Failed], `Created Time` [Created time]). 2) 'Dead-Letter Queue' (fields: `Error ID` [Autonumber], `Raw Body` [Long text], `Error Message` [Long text], `Timestamp` [Created time], `Resolved` [Checkbox]).

Why this matters

Having dedicated tables for successful operations and isolated error payloads guarantees you never lose webhook data when an external schema changes unexpectedly.

Expected Output

Your Airtable base contains both tables with exact field names ready to receive records from Make.

PHASE 2

Configure the Make Custom Webhook trigger

In Make, create a new scenario. Add a 'Webhooks' -> 'Custom webhook' module as the starting trigger. Click 'Create a webhook', name it 'Airtable Inbound Router', and copy the unique URL provided by Make. Click 'Redetermine data structure' and send a sample POST request from your terminal using curl to let Make automatically infer the JSON schema.

bash
curl -X POST https://hook.eu2.make.com/YOUR_MAKE_WEBHOOK_ID \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "evt_test_98765",
    "eventType": "payment.success",
    "customerEmail": "alex@example.com",
    "amount": 4900,
    "currency": "usd",
    "timestamp": "2024-09-23T15:00:00Z"
  }'
Why this matters

Sending a real sample payload allows Make to parse and map all nested fields visually in downstream modules without manual typing.

Expected Output

Make shows 'Successfully determined data structure' and displays your sample fields in the module mapping drawer.

PHASE 3

Add an Idempotency lookup in Airtable

Add an 'Airtable' -> 'Search Records' module directly after the Webhook. Connect your Airtable account via Personal Access Token. Set Base to 'Webhook Operations', Table to 'Events', and add a formula filter: `{Event ID} = '{{1.eventId}}'`. Set 'Max records' to 1.

Why this matters

Payment gateways and webhook providers frequently retry events on network hiccups. Checking whether `eventId` has already been recorded prevents duplicate invoice creation or billing discrepancies.

Expected Output

When executed, the module outputs 0 bundles for new events or 1 bundle if the event was already processed.

PHASE 4

Attach a Router with conditional filters

Add a 'Flow Control' -> 'Router' module. Create Branch 1 for new events with the filter condition: `Total number of bundles from Search Records Equal to 0`. Create Branch 2 for duplicate warnings (`Total number of bundles Greater than 0`). On Branch 1, add an 'Airtable' -> 'Create a Record' module mapping `Event ID`, `Event Type`, `Payload` (using `toJSON(1)`), and setting `Status` to 'Processed'.

Why this matters

Routers isolate separate business pathways so that duplicate events are gracefully acknowledged without re-triggering expensive actions.

Expected Output

New payloads travel down Branch 1 and insert a record into Airtable, while duplicate payloads bypass insertion.

PHASE 5

Attach an Error Handler Directive (Dead-Letter Queue)

Right-click the 'Airtable Create a Record' module and select 'Add error handler'. Choose 'Airtable' -> 'Create a Record', point it to the 'Dead-Letter Queue' table, map `Raw Body` to `{{1}}` and `Error Message` to `{{[Error].message}}`. Connect a 'Commit' or 'Resume' directive at the end of the error branch.

Why this matters

Without an explicit error handler, an API outage or schema mismatch causes Make to pause the entire scenario. Adding an error handler captures the problematic event safely and lets the scenario continue processing subsequent events.

Expected Output

If Airtable returns an API rate-limit or validation error, Make routes the payload into the Dead-Letter Queue table and completes the execution run successfully.

Workflow architecture

External service sends HTTP POST webhook -> Make Custom Webhook receives request -> Airtable Search module checks for eventId -> Router filters duplicate vs new packets -> Primary branch records event into Airtable -> Error handler captures exceptions into Dead-Letter Queue table.

Final result

A fault-tolerant webhook processing engine capable of handling high-volume data streams with built-in deduplication and automated dead-letter error logging in Airtable. As with all Workflow Vault guides, this guide is UNVERIFIED — test thoroughly in sandbox before production.

Recommended Extensions & Scaling

  • Add an automated Slack or Discord webhook alert on the error handler branch for instant incident notification.
  • Build a secondary Make scenario with a webhook trigger that iterates through resolved Dead-Letter Queue rows to replay them.
  • Add signature verification using a Make Crypto/HMAC module for Stripe or Shopify webhook payloads.

Troubleshooting

⚠ Make webhook returns 200 OK but scenario does not run
Root Cause

The scenario is toggled 'OFF' in the Make dashboard, or the scenario is waiting in manual queue mode.

Solution

Toggle the scenario switch to 'ON' at the bottom left of the Make scenario editor.

⚠ Airtable module returns 401 Unauthorized or 403 Forbidden
Root Cause

Personal Access Token is missing required scopes (`data.records:read`, `data.records:write`) or base access.

Solution

Regenerate your PAT at airtable.com/create/tokens with full data.records permissions for the target base.

⚠ Airtable Create Record fails with 'INVALID_VALUE_FOR_COLUMN'
Root Cause

A single-select field received a value string that does not exist in Airtable's pre-configured options list.

Solution

In Airtable, enable 'Typecast' in the Make module settings or add the expected option to the Single Select field.