Send a Webhook to Airtable: Transform & Forward Any Payload

Send any webhook to Airtable. Step-by-step guide to forward incoming webhooks into an Airtable base, transforming the payload into the Airtable API format in flight.

Send a Webhook to Airtable: Transform & Forward Any Payload

You have a service that fires webhooks — a signup form, a payment provider, an e-commerce platform, a monitoring tool — and you want each event to land as a record in an Airtable base. The problem: the Airtable API won't accept the raw webhook. It expects a bearer token and a fields object whose keys match your table exactly, and the payload your source sends never looks like that.

Webhook Relay sits in the middle. It receives the incoming webhook at a stable public URL, transforms the payload into the Airtable "create records" format, and delivers it to the Airtable API — no glue server, no Zapier task limits, no maintenance.

How it works

  1. Your source service POSTs its webhook to a Webhook Relay endpoint.
  2. A transformation function parses the payload and builds an Airtable API request body.
  3. Webhook Relay forwards that to the Airtable API with your token, and a new record appears in your table.

Step 1: Create an Airtable token and find your IDs

  1. Go to airtable.com/create/tokens and create a personal access token with the data.records:write scope and access to your base.
  2. Find your base ID (app...) and table name from the base's API docs page.

Step 2: Create a Webhook Relay output to the Airtable API

Create a bucket with a public input, then add an output pointing at the Airtable API:

  • Output destination: https://api.airtable.com/v0/<BASE_ID>/<TABLE_NAME>
  • Headers:
    • Authorization: Bearer <your-personal-access-token>
    • Content-Type: application/json

Step 3: Add a transformation function

Attach a function to the output that reshapes the incoming webhook into an Airtable record. Map the fields you care about to your table's column names:

-- incoming payload is in r.RequestBody
local body = json.decode(r.RequestBody)

local payload = {
  records = {
    {
      fields = {
        Name = body.name or "New event",
        Email = body.email or "",
        Amount = body.amount or 0
      }
    }
  }
}

r:SetRequestBody(json.encode(payload))

Each key under fields must match a column in your Airtable table and use a compatible value type.

Step 4: Point your source at the URL and test

Configure your source service's webhook to point at your Webhook Relay public URL. Trigger an event — or replay one from the Webhook Bin — and a new record appears in Airtable within seconds. If Airtable rejects the request, the Webhook Relay logs show the exact error so you can fix the field mapping.

Going further

Get started

Create a free Webhook Relay account and turn any webhook into Airtable records — no servers to run. New to webhooks? Start with what is a webhook and how to transform webhooks.