Airtable Source
Connect Airtable as a source to sync bases, tables, and records from your Airtable workspace into your data warehouse.
For an overview of capabilities and use cases, see the Airtable connector page. To run pipelines natively inside Snowflake, see Snowflake Native ETL.
Prerequisites
Before you begin, ensure you have:
- ✅ An active Airtable account
- ✅ For OAuth: an Airtable account with access to the bases or workspaces you want to sync (specific bases or workspaces are granted during authorization)
- ✅ For Personal Access Token: Ability to create tokens at airtable.com/create/tokens
- ✅ Required scopes: data.records:read, schema.bases:read
What Gets Synced
Supaflow discovers all bases and tables that the authenticated user (or token) has access to. Each Airtable table becomes a table in your destination.
Sync mode is per-table and depends on whether the Airtable table has a Last modified time field. Tables with one sync incrementally on that field; tables without run full refresh on every sync. See Incremental Sync for how to enable it.
Field Type Mapping
Airtable field types are mapped to destination column types automatically:
| Airtable Field Type | Destination Type | Notes |
|---|---|---|
| Single line text, Long text, URL, Email, Phone | STRING | |
| Number, Currency, Percent | DOUBLE or BIGDECIMAL | Based on precision |
| Checkbox | BOOLEAN | |
| Date, Date and time | TIMESTAMP | |
| Single select | STRING | Option name as text |
| Multiple select | JSON ARRAY | Array of option names |
| Linked records | JSON ARRAY | Array of linked record IDs |
| Attachments | JSON ARRAY | Array of attachment objects (URL, filename, size) |
| Formula, Rollup, Count, Lookup | Varies | Mapped based on the formula's result type |
| Auto number | LONG | |
| Created time, Last modified time | TIMESTAMP | |
| Created by, Last modified by | JSON | User object with email and name |
Rate Limiting
Airtable applies API rate limits per base. Supaflow handles transient rate limiting automatically with retry and backoff, but very large syncs may take longer. See Airtable's rate limit docs and the call-limit support article for current limits and plan details.
Incremental Sync
Airtable's API does not expose a generic modification filter, so incremental sync is opt-in per table. Add a Last modified time field to any table you want to sync incrementally, and the connector will use it as the cursor -- subsequent runs fetch only records modified since the last sync. Tables that don't have a Last modified time field run full refresh.
Add a Last Modified Time field to a table
- Open the table in Airtable
- Click + to add a field (or right-click an existing field to edit it)
- Search for and select Last modified time
- Choose which fields the timestamp should watch:
- All editable fields (default) -- the cursor advances when any user-editable field changes
- Specific fields -- toggle on individual fields if only certain edits should drive the cursor
- Click Create field
After adding the field, refresh the schema in Supaflow: set Schema Refresh Interval to 0 (or deselect and reselect the table in the pipeline wizard). The table will appear as incremental on the next run.
Last modified time does not react to changes in computed fields (formulas, rollups, lookups, Created time). If a formula depends on a column you want the cursor to track, use Specific fields and select the underlying editable columns.
If a column watched by Last modified time is deleted in Airtable, its timestamps are removed from the calculation. For some records the value can revert to an earlier timestamp, which triggers a larger-than-usual incremental sync on the next run.
Configuration
Step 1: Choose Authentication Method
Authentication Method*Select your authentication method
Options:
- oauth (Recommended) - Easy browser-based authentication
- personal_access_token - Server-to-server authentication with static token
Default: oauth
Option A: OAuth Authentication (Recommended)
Click Authorize to connect to your Airtable account using OAuth. This method:
- Provides easy browser-based authentication
- Automatically manages token refresh
- Requires no manual token creation
Steps:
- Click the Authorize button
- Log in to your Airtable account
- Grant Supaflow access to your bases
- You'll be redirected back to Supaflow
OAuth automatically requests the required scopes:
- data.records:read - Read records from tables
- schema.bases:read - Read base and table metadata
Option B: Personal Access Token
Personal Access Token*Airtable Personal Access Token from airtable.com/create/tokens
Required scopes: data.records:read, schema.bases:read
Stored encrypted
How to create a Personal Access Token:
- Go to airtable.com/create/tokens
- Click Create new token
- Give it a descriptive name (e.g., "Supaflow Integration")
- Add scopes:
- data.records:read
- schema.bases:read
- Add access to specific bases you want to sync
- Click Create token
- Copy the token (starts with "pat...")
- Paste it into the Personal Access Token field
Personal Access Tokens are stored encrypted in Supaflow and never exposed in logs or UI.
Step 2: Advanced Settings (Optional)
Schema Refresh IntervalInterval in minutes for schema metadata refresh
Default: 60
Range: -1 to 10080
Options:
- 0 = Refresh before every pipeline execution (most accurate, slower)
- 60 = Refresh every hour (recommended)
- -1 = Disable schema refresh (use with caution)
- Set to 0 if you frequently add/remove fields in Airtable
- Set to higher values (e.g., 1440 for daily) if your schema is stable
- Setting to -1 will use cached schema indefinitely - only use if schema never changes
Step 3: Test & Save
After configuring your authentication method, click Test & Save to verify your connection and save the source.
Troubleshooting
Common issues and their solutions:
OAuth authorization failed
Problem:
- Cannot complete OAuth flow
- "Access denied" error
- Redirect fails after clicking Authorize
Solutions:
- Check browser settings:
- Disable popup blockers for Supaflow
- Allow third-party cookies
- Try in incognito/private mode
- Verify account access:
- Ensure you have access to at least one Airtable base
- Check if your organization allows OAuth apps
- Clear cache and retry:
- Clear browser cookies and cache
- Try different browser (Chrome, Firefox, Edge)
- Reconnect:
- Delete the source and create a new one
- Complete OAuth flow again
Personal Access Token authentication failed
Problem:
- "Invalid credentials" error
- "Authentication failed" message
- Connection test fails
Solutions:
- Verify token is valid:
- Check token hasn't expired or been revoked
- Go to airtable.com/create/tokens to verify
- Check token scopes:
- Token must have data.records:read
- Token must have schema.bases:read
- Edit token in Airtable to add missing scopes
- Verify base access:
- Token must have access to at least one base
- Add specific bases in token configuration
- Copy token correctly:
- Token should start with "pat..."
- No extra spaces before/after
- Copy the entire token
No bases appearing
Problem:
- Successfully connected but no bases show up
- Schema is empty
- "No Airtable bases found" warning
Solutions:
- For OAuth:
- Reconnect and ensure you grant access during authorization
- Check if your account has access to any bases
- Verify you're logged into the correct Airtable account
- For Personal Access Token:
- Verify token has schema.bases:read scope
- Add specific bases to token access list at airtable.com/create/tokens
- Check if bases exist in your workspace
- Check permissions:
- Ensure you have at least read access to bases
- Verify bases haven't been deleted or moved
- Refresh schema:
- Set Schema Refresh Interval to 0
- Save and test connection again
Missing tables or fields
Problem:
- Some tables don't appear in schema
- Fields are missing from tables
- Recently added fields not visible
Solutions:
- Refresh schema:
- Set Schema Refresh Interval to 0 (force refresh)
- Save and test connection
- Wait a few minutes for schema to sync
- Check permissions:
- Verify you have read access to the table
- Check field-level permissions
- Ensure fields aren't hidden in Airtable
- Verify table exists:
- Confirm table hasn't been deleted or renamed
- Check if table is in a different base
- For new fields:
- Schema refresh needed after adding fields
- Set Schema Refresh Interval to 0 temporarily
- Or wait for next scheduled refresh
Rate limit exceeded
Problem:
- "Rate limit exceeded" error
- "429 Too Many Requests" error
- Sync stops mid-process
Solutions:
- Supaflow retries automatically with backoff, so transient rate-limit responses should self-recover on the next attempt
- Reduce sync frequency by scheduling during off-peak hours, or by syncing fewer tables simultaneously
- If other integrations share the same base, their traffic counts against the same per-base limit -- coordinate sync schedules across tools if needed
- See Airtable's rate limit docs for current per-base limits and the call-limit support article for plan-level monthly call caps
Full refresh keeps happening for a table
Problem:
- A table runs full refresh every sync, even though you expect incremental
Solutions:
- Confirm the table has a Last modified time field. Without one, Airtable's API cannot filter by modification date and the connector falls back to full refresh. See Incremental Sync for how to add the field.
- After adding the field in Airtable, set Schema Refresh Interval to 0 and re-run the pipeline so Supaflow re-discovers the schema.
Connection timeout
Problem:
- Connection times out during setup
- Slow response from Airtable
- Test connection takes too long
Solutions:
- Check Airtable status:
- Visit: Airtable Status Page
- Verify if Airtable is experiencing issues
- Network connectivity:
- Verify internet connection is stable
- Check if corporate firewall blocks Airtable
- Retry later:
- Airtable may be experiencing high load
- Try during off-peak hours
- Reduce base size:
- Large bases with many tables take longer
- Consider breaking into smaller bases if possible
OAuth token expired
Problem:
- Sync worked before but now fails
- "Invalid OAuth credentials" error
- Token expiration warnings
Solutions:
- Automatic refresh:
- OAuth tokens automatically refresh (1 hour expiry)
- Framework handles token refresh transparently
- If auto-refresh fails:
- Reconnect via OAuth
- Delete source and create new one
- Complete OAuth authorization again
- Check refresh token:
- Refresh token must be valid
- If revoked, full re-authorization needed
- Verify integration still allowed:
- Check if Airtable integration was disabled
- Ensure Supaflow app is still authorized
Support
Need help? Contact us at support@supa-flow.io