Documentation
Plugins
Sources
Airtable
Overview

Airtable Source Plugin

Latest: v1.1.2

The CloudQuery Airtable plugin pulls data from Airtable (opens in a new tab) and loads it into any supported CloudQuery destination (e.g. PostgreSQL, BigQuery, Snowflake, and more).

The plugin discover all bases and tables in your account and syncs them to the destination.

Example Configuration

This example syncs from Airtable to a Postgres destination. The (top level) source spec section is described in the Source Spec Reference.

kind: source
# Common source-plugin configuration
spec:
  name: airtable
  registry: docker
  path: ghcr.io/cloudquery/cq-source-airtable:v1.1.2
  tables: ["*"]
  destinations: ["postgresql"]
  # airtable-specific configuration
  spec:
    access_token: "${AIRTABLE_ACCESS_TOKEN}" # required
    # endpoint_url: "https://api.airtable.com" # Optional, defaults to `https://api.airtable.com`
    # concurrency: 10000 # Optional, defaults to `10000`

This example uses environment variable expansion to read the token from an AIRTABLE_ACCESS_TOKEN environment variable. You can also hardcode the value in the configuration file, but this is not advised for production settings.

Authentication

In order to fetch information from Airtable, cloudquery needs to authenticate using a personal access token for Airtable's API (opens in a new tab). Follow the instructions on the Airtable website and create a read-only token with data.records:read and schema.bases:read scopes.

Tables naming convention

In Airtable base names are not unique, and table names are unique within a base. The plugin uses the following naming convention for tables: <lowercase_base_id>__<snake_case_base_name>__<snake_case_table_name>. This ensures table names are unique across all bases (note the separator between name parts is __).

To sync only specific base(s) or table(s) you can use wildcard matching for the tables option, for example:

kind: source
spec:
  name: airtable
  registry: docker
  path: ghcr.io/cloudquery/cq-source-airtable:v1.1.2
  tables:
    # Sync all tables under bases matching the name `base_name_to_sync`
    - "*__<base_name_to_sync>__*"
    # Sync all tables matching the name `table_name_to_sync`
    - "*__*__<table_name_to_sync>"
    # Sync all tables matching the name `table_name_to_sync` under bases matching the name `base_name_to_sync`
    - "*__<base_name_to_sync>__<table_name_to_sync>"
  ...

Configuration Reference

This is the (nested) spec used by the Airtable source plugin:

  • access_token (string, required):

    Your Airtable API personal access token (opens in a new tab).

  • endpoint_url (string, optional. Default: https://api.airtable.com):

    The endpoint URL to fetch data from.

  • concurrency (integer, optional. Default: 10000):

    Best effort maximum number of tables to sync concurrently.