Airtable Audit Trail: Track Every Record Change Automatically

TypeFlow Audit Trail monitors your Airtable base and logs every create, update, and delete to a dedicated log table - with who changed what, when, and the exact before/after values.


Overview

Airtable doesn't have a built-in change log. You can see the revision history of individual records, but there's no way to:

  • View all changes across a table in one place
  • Filter changes by user, date range, or field
  • Keep a permanent record of deleted data
  • Export or report on change history

TypeFlow Audit Trail fills this gap. It creates a dedicated Airtable table in your base that automatically receives one row per "save" - showing who changed which record, which fields were modified, and the before/after values.

[screenshot: audit trail log table in Airtable showing Date, User, Record Name, Change Type, Details columns]


How It Works

  1. Webhook listener - TypeFlow registers a webhook on your Airtable base that fires on every record change
  2. Change detection - Each webhook payload is compared against a snapshot of the record's last known state to detect real changes (ignoring no-ops like saving without editing)
  3. Batching - Changes to the same record within 3 minutes are grouped into a single log entry
  4. Flush - Every 60 seconds, pending changes that have been stable for 3 minutes are written to your Airtable log table

This architecture means:

  • Rapid edits to the same record produce one clean log entry, not 10
  • Your Airtable API rate limits are respected (changes are batched)
  • No data is lost - changes are stored in a queue until successfully written

Setting Up

Step 1: Enable Audit Trail

Go to your TypeFlow dashboard and open the Audit Trail section. Select the Airtable base you want to monitor.

[screenshot: TypeFlow dashboard showing Audit Trail toggle/setup screen]

Step 2: Select Tables to Monitor

Choose which tables in your base should be tracked. You can monitor up to 5 tables per base. For each table, you can optionally set a "Last Modified By" collaborator field to track who made changes from sync or automation sources.

[screenshot: table selection screen with checkboxes for each table]

Step 3: Automatic Log Table Creation

TypeFlow creates a table called "Audit Trail" in your base with the required columns. Each monitored table gets a linked record field so you can click through from the log entry to the source record.

[screenshot: the auto-created Audit Trail table with its columns]


What Gets Logged

Tracked field types

TypeFlow tracks all human-editable field types:

  • Single line text, long text, rich text
  • Number, currency, percent, duration, rating
  • Single select, multiple select
  • Checkbox
  • Date, date/time
  • Email, phone, URL
  • Single/multiple collaborator
  • Barcode

Excluded field types

Computed and system fields are excluded since they change automatically and would flood the log:

  • Formula, rollup, lookup, count
  • Auto-number, created time, last modified time
  • Created by, last modified by
  • Button, external sync source
  • Attachments, linked records

Change types

TypeWhen
CreateA new record is added to a monitored table
UpdateOne or more tracked fields are modified
DeleteA record is removed (last known values are logged)

Log Table Structure

Each row in the Audit Trail table represents one "save" - a group of field changes to the same record within the batching window.

ColumnDescription
DateTimestamp of the change
UserEmail of the person who made the change
Record NamePrimary field value of the modified record
Record IDAirtable record ID (for programmatic use)
Change TypeCreate, Update, or Delete
Fields ChangedNumber of fields that changed in this save
DetailsLine-by-line breakdown: Field Name : old value -> new value
SourceHow the change was made: client, automation, sync, API
[Table Name]Linked record field pointing to the source record

Details format

The Details field uses a readable format:

- First Name : Kevin -> Marvin
- City : Carquefou -> Montreal
- Status : Inactive -> Lead

For deletes, each field shows its last known value:

- First Name : Marvin -> (deleted)
- City : Montreal -> (deleted)
- Status : Lead -> (deleted)

Record Name Resolution

The "Record Name" column shows the primary field (first column) of the modified record - not the field that was changed. This lets you quickly identify which record was modified without clicking through.

TypeFlow resolves the record name using a 3-tier strategy:

  1. From the webhook - If the primary field was one of the changed fields, its value is used directly
  2. From the snapshot - If the primary field wasn't changed, TypeFlow uses the last known value from its internal snapshot
  3. Async lookup - For new records where no snapshot exists yet, TypeFlow fetches the primary field value from the Airtable API in the background and backfills the log entry before it's written

This means the Record Name is always the actual record name, even when you're editing unrelated fields like email, status, or notes.


Change Batching

When you edit multiple fields on a record, Airtable sends separate webhooks for each change. Without batching, editing 5 fields would create 5 separate audit log entries.

TypeFlow batches changes with a 3-minute quiet period:

  1. First change arrives - timer starts (3 minutes)
  2. Second change arrives 10 seconds later - timer resets (3 minutes from now)
  3. No more changes for 3 minutes - all changes are flushed as one log entry

This produces clean, readable audit logs with one row per "save session" instead of one row per field edit.

Semantic dedup

If a user changes a field from A to B, then back to A within the batching window, TypeFlow detects that the net change is zero and skips the log entry entirely. Only real, meaningful changes are recorded.


FAQ

Was this page helpful?