Use the Airtable integration to create, read, update, and delete records in your Airtable bases.

Coming soon: subscribing to changes in your Airtable bases using triggers.

Getting started

If you have not yet set up in your project, go to the quick start guide.


To get started with the Airtable integration on, you need to install the package. You can do this using npm, pnpm, or yarn:

npm install


To use the Airtable API with, you can either use OAuth or a Personal Access Token.


import { Airtable } from "";

//this will use OAuth
const airtable = new Airtable({
  id: "airtable",

Personal Access Token

You can create an Airtable Personal Access Token here on their developer site.

import { Airtable } from "";

//this will use the passed in token (defined in your environment variables)
const airtable = new Airtable({
  id: "airtable",
  token: process.env["AIRTABLE_TOKEN"],


Include the Airtable integration in your job.

You can optionally add the types for your Table – this gives you nice type inference and errors when writing your code.

//this is the type definition for my Table
type LaunchGoalsAndOkRs = {
  "Launch goals"?: string;
  DRI?: Collaborator;
  Team?: string;
  Status?: "On track" | "In progress" | "At risk";
  "Key results"?: Array<string>;
  "Features (from 💻 Features table)"?: Array<string>;
  "Status (from 💻 Features)": Array<
    "Live" | "Complete" | "In progress" | "Planning" | "In reviews"

  id: "airtable-example-1",
  name: "Airtable Example 1: getRecords",
  version: "0.1.0",
  trigger: eventTrigger({
    name: "airtable.example",
  integrations: {
    //make sure to add the integration here
  run: async (payload, io, ctx) => {
    //adding the type to table<YourTableType>("<your table name>") gives you nice type inference and errors
    //you can leave it out as well table("<your table name>")
    const table = io.airtable.base("<your base id>").table<LaunchGoalsAndOkRs>("<your table name>");

    //gets multiple records from the table. Here we only get the Status fields (columns)
    const records = await table.getRecords("muliple records", { fields: ["Status"] });
    await io.logger.log(records[0].fields.Status ?? "no status");

    //Get a single record
    const aRecord = await table.getRecord("single", records[0].id);

    //create a new record
    const newRecords = await table.createRecords("create records", [
        fields: { "Launch goals": "Created from", Status: "In progress" },

    //update the record we just created
    const updatedRecords = await table.updateRecords(
      "update records", => ({
        fields: { Status: "At risk" },

    //wait 5 seconds
    await io.wait("5 secs", 5);

    //delete the record we just created + updated
    const deletedRecords = await table.deleteRecords(
      "delete records", =>


Function NameDescription
base.table.getRecordsGets multiple records for a table. You can filter
base.table.getRecordGets a single record (using the id) for a table.
base.table.createRecordsCreate one or more records in a table.
base.table.updateRecordsUpdate one or more records in a table.
base.table.deleteRecordsDelete one or more records in a table (using ids).
runTaskDo anything that’s possible with the official Airtable Node SDK