Skip to content

source-airtable-native: initial connector#3631

Merged
Alex-Bair merged 5 commits intomainfrom
bair/source-airtable-native
Dec 18, 2025
Merged

source-airtable-native: initial connector#3631
Alex-Bair merged 5 commits intomainfrom
bair/source-airtable-native

Conversation

@Alex-Bair
Copy link
Copy Markdown
Member

@Alex-Bair Alex-Bair commented Dec 16, 2025

Description:

This PR's scope includes:

  • Updating the CDK's IncrementalJSONProcessor to support passing in a validation context.
  • Updating the CDK's state coordination for connector-initiated backfills to use the minimum incremental datetime cursor among all incremental subtasks as the cutoff for the single backfill task.
    • This ensure the incremental subtasks' cursors don't skip ahead and miss data when performing connector-initiated backfills.
  • Introducing a new source-airtable-native connector. See the README.md for notable API behaviors and connector design decisions.

Workflow steps:

(How does one use this feature, and how has it changed)

Documentation links affected:

Documentation needs created for the new connector.

Notes for reviewers:

Tested on a local stack. Confirmed:

  • Tables without a valid incremental cursor field are captured as full refresh resources.
  • Tables with a valid incremental cursor field are captured as incremental resources.
  • Formula field refreshes only capture formula fields and the incremental cursor field.
  • Formula fields that contain errors are omitted from emitted documents.

I was able to create a test Airtable account, but the Free plan has a limit of 1,000 API requests per month. Our CI workflow runs frequently enough that we'd burn through those 1,000 API requests very quickly if we had discover or capture snapshot tests, then we'd be left with failing tests for the rest of the month. Instead, I opted to not have discover or capture snapshot tests.

@Alex-Bair Alex-Bair marked this pull request as ready for review December 16, 2025 21:04
@Alex-Bair Alex-Bair linked an issue Dec 16, 2025 that may be closed by this pull request
Alex-Bair added a commit to estuary/flow that referenced this pull request Dec 17, 2025
Documentation updates for estuary/connectors#3631.

Marking `source-airtable` as deprecated since `source-airtable-native`
is now the recommended way to capture data from Airtable.
Alex-Bair added a commit to estuary/flow that referenced this pull request Dec 17, 2025
Documentation updates for estuary/connectors#3631.

Marking `source-airtable` as deprecated since `source-airtable-native`
is now the recommended way to capture data from Airtable.
Copy link
Copy Markdown
Contributor

@JustinASmith JustinASmith left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Great write up throughout to explain the changes via commits, comments/docstrings, and the README.md.

@Alex-Bair Alex-Bair force-pushed the bair/source-airtable-native branch from 3d4a812 to ae5d78b Compare December 18, 2025 21:42
…tal states

Previously, connector-initiated backfills only coordinated the backfill
cutoff with the incremental cursor when state.inc was a single
ResourceState.Incremental. When state.inc was a dict (multiple
incremental tasks, e.g., REALTIME/LOOKBACK), the code would fall through
to the else branch and wipe the entire state, resetting the incremental
cursors to their initial values. This could cause the incremental cursors
to jump ahead when a connector-initiated backfill began.

If the backfill and incremental tasks always capture all fields,
skipping the incremental cursor ahead would at worst cause a slight delay
in when documents in the skipped portion were captured. However, if scheduled
backfills do not capture all fields (like with formula field refreshes),
fields for those skipped records could be permanently missed.

This commit updates the CDK to handle the case where there are multiple
incremental subtasks and single backfill task, and all incremental subtasks
are using datetime cursors. The minimum incremental cursor across all incremental
subtasks is now used as the cutoff for the single backfill task. The incremental
cursors are left untouched, meaning they do not skip ahead and prevents
the potential to skip data during a formula field refresh.
This commit introduces an initial implementation of a native Airtable
capture connector. See the README.md for notable API features and connector
design decisions.
We're still working on setting up an OAuth app in Airtable for the native connector. When that app's ready, we can uncomment the OAuth2Credentials option and allow users to authenticate via OAuth.
@Alex-Bair Alex-Bair force-pushed the bair/source-airtable-native branch from ae5d78b to d98fa1b Compare December 18, 2025 21:47
@Alex-Bair
Copy link
Copy Markdown
Member Author

I made a few changes post-approval:

  • Removed OAuth as an authentication option. We're still working on getting the Airtable OAuth app ready, so until then users won't be able to complete the OAuth flow anyway. Once we have the OAuth app ready in our Airtable account, we can re-enable OAuth by just uncommenting one line.
  • Reduced the REALTIME_LAG to 10 seconds instead of a minute.
  • Omitted more types of formula field errors from emitted documents. Turns out, formula field errors have a key of specialValue or error.

Alex-Bair added a commit to estuary/flow that referenced this pull request Dec 18, 2025
Documentation updates for estuary/connectors#3631.

Marking `source-airtable` as deprecated since `source-airtable-native`
is now the recommended way to capture data from Airtable.
@Alex-Bair Alex-Bair merged commit db425d9 into main Dec 18, 2025
105 of 118 checks passed
@Alex-Bair Alex-Bair deleted the bair/source-airtable-native branch December 18, 2025 22:00
Alex-Bair added a commit to estuary/flow that referenced this pull request Dec 18, 2025
Documentation updates for estuary/connectors#3631.

Marking `source-airtable` as deprecated since `source-airtable-native`
is now the recommended way to capture data from Airtable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

new connector: source-airtable-native

2 participants