Browse documentation
2026-09-28AutoDataOpen in dashboard

Incremental Sync & Watermarks

Process only new rows from a connector with watermarks: how incremental reads work, supported connectors, the Sync tab and API.

What a watermark is

A watermark stores the highest value of one column (such as updated_at or an increasing id) already processed from a source. An incremental connector run reads only rows above it.

Running an incremental read

POST /api/v1/process-connector
{ "source_type": "sql", "credential_id": "cred-uuid", "table": "orders",
  "y_columns": ["churned"], "incremental": true, "watermark_column": "updated_at" }
  • The watermark is found by connector type and source key (the credential_id, or a source_key you pass).
  • First run: everything is read. Later runs: only rows above the stored value.
  • No new rows: 200 with session_id: null.
  • The new value is the highest in the rows read, saved only when the run completes, so a failed run re-reads the same rows.
  • Needs both incremental and watermark_column, and a table (a custom_query ignores watermarks).

The dashboard has no incremental option, and the Python SDK's process_from_connector(incremental=True) does not currently send a watermark column, so use the REST call. Scheduled runs always read the full table.

Supported connectors

sql, snowflake, bigquery, redshift, oracle, sap_hana, clickhouse, timescaledb, synapse, databricks, fabric, cassandra, dynamodb, elasticsearch. Others read everything.

The Sync tab

  • Manual Watermark: pick a connection (fills connector type and source key), then table, column, value and type (Timestamp, Integer or String; default Timestamp). A duplicate for the same source is refused.
  • Edit value: the next incremental run resumes after it.
  • Reset: clears the value so the next run reads everything, but keeps the watermark.

Watermarks also drive watermark-advance triggers.

Fields

KeyMeaning
connector_typeRequired.
source_keyRequired; incremental runs use the credential id.
table_name
watermark_column
watermark_valueNull reads everything.
watermark_typetimestamp, integer, number or string.
row_countRows in the last sync.
last_sync_atWhen it last advanced.

API

MethodPathNotes
GET/api/v1/sync/watermarks/listAll watermarks.
GET/api/sync/watermarks?connector_type=&source_key=One watermark.
POST/api/sync/watermarksCreate; 409 if it exists.
PUT/api/sync/watermarksCreate or update by connector_type and source_key.
DELETE/api/sync/watermarks?connector_type=&source_key=Delete.
POST/api/v1/sync/watermarks/{id}/resetClear the value.

Python SDK: list_watermarks(), reset_watermark(watermark_id).