Yuki Kakegawa
05/27/2026, 4:58 PMkapa.ai
05/27/2026, 4:59 PM_airbyte_extracted_at: Timestamp for when Airbyte pulled the event from the data source. This reflects when a record change was captured, not when a scan/sync occurred.
• _airbyte_meta: Contains a sync_id field that monotonically increases across syncs. This is the most relevant field for your use case — even if no records changed, the sync_id within _airbyte_meta increments with each sync run. [Airbyte metadata fields]
Using sync_id to detect scans The sync_id inside _airbyte_meta increases monotonically across syncs, regardless of whether records were updated. You could query the maximum sync_id across your destination table to determine the last sync that touched those records:
SELECT MAX((_airbyte_meta->>'sync_id')::int) AS latest_sync_id
FROM your_table;
However, this only tells you the latest sync that wrote records. If a CDC sync ran but found no changes, no new records would be written, so sync_id in the destination wouldn't advance for that table.
Important caveat The knowledge sources do not explicitly describe a field that is updated on every sync scan regardless of whether records changed. The _airbyte_loaded_at field exists in raw tables (for destinations using typing and deduping), but:
• It reflects when records were loaded into the destination, not when a scan occurred.
• It is not guaranteed to be present in all destinations or in final tables. [Airbyte metadata fields]
Recommendation For your use case of detecting "un-refreshed sources," the knowledge sources don't confirm a built-in field that tracks every sync attempt (including no-op scans). You may need to rely on Airbyte's sync logs or job history via the Airbyte API rather than destination table metadata, as the destination only reflects records that were actually written. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.