> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Airtable

> Automatically create and update Airtable records from Rootly incidents using workflow actions to track incidents, follow-ups, and metrics in your bases.

## Overview

Rootly's Airtable integration lets you push incident data directly into Airtable tables using workflow actions. When an incident is declared — or updated — Rootly can create or update a record in any base and table you choose, with full control over field mapping via Liquid variables.

<CardGroup cols={2}>
  <Card title="Create Records" icon="plus">
    Automatically create a new Airtable record when an incident is declared, capturing key fields like title, summary, severity, and more.
  </Card>

  <Card title="Update Records" icon="pen-to-square">
    Update an existing Airtable record as the incident progresses — reflect status changes, resolution notes, or any custom field.
  </Card>

  <Card title="Custom Field Mapping" icon="sliders">
    Map any Rootly incident field to any Airtable column using JSON and [Liquid variables](/liquid/incident-variables).
  </Card>

  <Card title="Any Base & Table" icon="table">
    Target any base and table in your Airtable workspace — not limited to a single sheet.
  </Card>
</CardGroup>

## Before You Begin

* You must be a Rootly admin to set up the integration
* You need an Airtable account with permission to create OAuth applications
* The Airtable base and table you want to write to must already exist

## Installation

Setting up the Airtable integration requires creating an OAuth application in Airtable and connecting it to Rootly.

<Steps>
  <Step title="Open the integration in Rootly">
    In Rootly, go to **Configuration → Integrations** and find **Airtable**. Click **Connect**.

    <Frame>
      <img alt="Airtable integration in Rootly" src="https://mintcdn.com/rootly/d2dmochhUzziYtkZ/images/integrations/airtable/images-1.webp?fit=max&auto=format&n=d2dmochhUzziYtkZ&q=85&s=f604bef5dc8ed24221c59b4168dc5ae6" width="899" height="749" data-path="images/integrations/airtable/images-1.webp" />
    </Frame>
  </Step>

  <Step title="Create an OAuth application in Airtable">
    In a new tab, go to [airtable.com/create/oauth](https://airtable.com/create/oauth) and create a new OAuth application.

    <Frame>
      <img alt="Create OAuth application in Airtable" src="https://mintcdn.com/rootly/d2dmochhUzziYtkZ/images/integrations/airtable/images-2.webp?fit=max&auto=format&n=d2dmochhUzziYtkZ&q=85&s=0087c2ef98913772d6d60c7597861546" width="893" height="351" data-path="images/integrations/airtable/images-2.webp" />
    </Frame>

    Set the **Redirect URL** (callback URL) to:

    ```
    https://rootly.com/auth/airtable/callback
    ```

    <Frame>
      <img alt="Setting the callback URL in Airtable" src="https://mintcdn.com/rootly/d2dmochhUzziYtkZ/images/integrations/airtable/images-3.webp?fit=max&auto=format&n=d2dmochhUzziYtkZ&q=85&s=ae439ee52d906743ea239e2619067dcc" width="894" height="411" data-path="images/integrations/airtable/images-3.webp" />
    </Frame>
  </Step>

  <Step title="Configure required scopes">
    In the OAuth app settings, enable the required scopes:

    <Frame>
      <img alt="Airtable OAuth scopes" src="https://mintcdn.com/rootly/d2dmochhUzziYtkZ/images/integrations/airtable/images-4.webp?fit=max&auto=format&n=d2dmochhUzziYtkZ&q=85&s=26a1186c1398932efe97e5af2aedb335" width="894" height="452" data-path="images/integrations/airtable/images-4.webp" />
    </Frame>
  </Step>

  <Step title="Copy credentials into Rootly">
    Copy the **Client ID** and **Client Secret** from your Airtable OAuth app into Rootly and save.

    <Frame>
      <img alt="Entering Airtable credentials in Rootly" src="https://mintcdn.com/rootly/d2dmochhUzziYtkZ/images/integrations/airtable/images-5.webp?fit=max&auto=format&n=d2dmochhUzziYtkZ&q=85&s=23745bf59a37a145d69c863bbae8273e" width="899" height="780" data-path="images/integrations/airtable/images-5.webp" />
    </Frame>
  </Step>

  <Step title="Authorize">
    Click **Authorize** in Rootly. You'll be redirected to Airtable to grant access. Once approved, you'll return to Rootly with the integration connected.
  </Step>
</Steps>

<Note>
  When you connect Airtable, Rootly automatically creates a default **Create Airtable Record** workflow to get you started quickly.
</Note>

## Workflow Actions

### Create Airtable Record

Creates a new record in the specified Airtable base and table when the workflow triggers.

<ParamField body="Base" type="string" required>
  The Airtable base to write the record to. Select from the dropdown populated from your connected account.
</ParamField>

<ParamField body="Table" type="string" required>
  The table within the selected base. Populated dynamically based on the selected base.
</ParamField>

<ParamField body="Custom Fields Mapping" type="json">
  A JSON object mapping Airtable column names to values. Supports [Liquid variables](/liquid/incident-variables).

  ```json theme={null}
  {
    "Name": "{{ incident.title }}",
    "Notes": "{{ incident.summary }}",
    "Started At": "{{ incident.started_at | date: '%FT%T%:z' }}",
    "Severity": "{{ incident.severity }}",
    "Link": "{{ incident.url }}"
  }
  ```
</ParamField>

### Update Airtable Record

Updates an existing record in Airtable. Use this after a record has been created to reflect incident updates.

<ParamField body="Base Key" type="string" required>
  The Airtable base ID (e.g. `appXXXXXXXXXXXXXX`). Supports Liquid variables.
</ParamField>

<ParamField body="Table Name" type="string" required>
  The name of the table containing the record to update. Supports Liquid variables.
</ParamField>

<ParamField body="Record ID" type="string" required>
  The ID of the Airtable record to update (e.g. `recXXXXXXXXXXXXXX`). Supports Liquid variables.
</ParamField>

<ParamField body="Custom Fields Mapping" type="json">
  A JSON object of fields to update. Same syntax as the Create action.
</ParamField>

## Uninstall

To remove the Airtable integration:

1. Go to **Configuration → Integrations** and find **Airtable**
2. Click **Connected** to reveal the disconnect option
3. Click **Disconnect**

<Frame>
  <img src="https://mintcdn.com/rootly/QMD-dNqeYW4BA9dg/images/integrations/common/uninstall-connected.png?fit=max&auto=format&n=QMD-dNqeYW4BA9dg&q=85&s=dbb790e2576c8969bba96bc26c95265f" alt="Click Connected to reveal the Disconnect option" width="319" height="188" data-path="images/integrations/common/uninstall-connected.png" />
</Frame>

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="How do I find my Base Key and Record ID for the Update action?" icon="circle-question">
    The **Base Key** is visible in the URL when you open a base in Airtable: `airtable.com/appXXXXXXXXXXXXXX/...`. The **Record ID** (format: `recXXXXXXXXXXXXXX`) can be retrieved via the Airtable API or by expanding a record and copying the ID from the URL.
  </Accordion>

  <Accordion title="Can I map custom Rootly fields to Airtable columns?" icon="circle-question">
    Yes. Use the `incident.custom_fields` Liquid variable to access custom field values. For example: `{{ incident.custom_fields | find: 'custom_field.slug', 'your-slug' | get: 'selected_options' | map: 'value' }}`.
  </Accordion>

  <Accordion title="What happens if a mapped column doesn't exist in Airtable?" icon="circle-question">
    Airtable will return an error and the workflow action will fail. Make sure all column names in the mapping exactly match your Airtable table's field names (case-sensitive).
  </Accordion>

  <Accordion title="Can I create records in multiple tables from one incident?" icon="circle-question">
    Yes. Add multiple **Create Airtable Record** actions to the same workflow, each targeting a different base or table.
  </Accordion>
</AccordionGroup>
