Tautvydas Varnas
05/06/2026, 11:35 AMkapa.ai
05/06/2026, 11:35 AMAIRBYTE_ROLE environment variable has been removed.
None of these changes impose a connection count restriction on OSS deployments. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/07/2026, 3:50 PMkapa.ai
05/07/2026, 3:50 PMretargeting_in_app_events stream in the Airbyte AppsFlyer source connector. The message "reports are limited to 31 days per query" is actually the expected behavior enforced by the AppsFlyer API itself.
Looking at the connector source code, the InAppEvents stream (which RetargetingInAppEvents inherits from) explicitly sets a 31-day interval limit: [source-appsflyer source.py]
class InAppEvents(RawDataMixin, IncrementalAppsflyerStream):
intervals = 31
cursor_field = "event_time"
This intervals = 31 setting means the connector chunks date ranges into 31-day slices when making API requests. The RetargetingInAppEvents class inherits this behavior:
class RetargetingInAppEvents(InAppEvents):
def path(...) -> str:
return f"raw-data/export/app/{self.app_id}/in-app-events-retarget/v5"
The error you're encountering suggests the connector is sending a request with a date range wider than 31 days to the AppsFlyer API. This could happen if:
1. The stream state or stream slice is not being chunked correctly.
2. You are running an older version of the connector where this chunking may not work as expected.
What you can try:
• Ensure you are using a recent version of the source-appsflyer connector, as there have been several bug fixes and updates.
• Set a start_date that is relatively recent (within the last 31 days) to avoid large initial syncs that might trigger this issue.
• Note that the connector enforces a 90-day maximum lookback for raw data streams, so start dates older than 90 days will be automatically adjusted. [source-appsflyer source.py]
The 31-day chunking is a hard constraint imposed by the AppsFlyer API for in-app events reports, and the connector is designed to respect it by splitting requests accordingly. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/07/2026, 3:59 PMkapa.ai
05/07/2026, 3:59 PMstart_date to end_date, chunked into 31-day intervals. [source-appsflyer source.py]
2. The error is occurring during the availability check (before actual data reading), where the CDK tries to fetch the first record using a stream slice. If that initial slice spans more than 31 days, the API rejects it.
3. The connector also enforces a 90-day cap on start_date — so even if you set an older start date, it gets reset to 90 days ago. [source-appsflyer source.py] This means the initial backfill window could be up to 90 days, which needs to be chunked into ~3 slices of 31 days each.
The error in your traceback is happening at the check_availability step, not during actual data reading — meaning the connector is failing before it even starts syncing. This is a known issue with how the CDK's availability check interacts with the stream slicing logic.
Recommended actions:
• Try setting your start_date to a date within the last 31 days to reduce the initial sync window.
• Check if you're on the latest version of the source-appsflyer connector, as there have been open issues and PRs related to this connector's date range handling. [GitHub Issue #60994]
The knowledge sources do not contain enough detail to confirm whether a specific connector version fully resolves this availability check issue. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/07/2026, 4:04 PMkapa.ai
05/07/2026, 4:04 PMretargeting_in_app_events to a recent date (within the last 31 days) via the Airbyte UI under Connection → Status → Reset stream state.
2. Connector version change The knowledge sources note that the source-appsflyer connector has had several updates and known issues around date range handling. [GitHub Issue #60994] If the connector was auto-updated, behavior may have changed.
What to try: Check your connector version in the Airbyte UI and compare it to what was running before.
3. The 90-day cap being applied unexpectedly The connector globally caps start_date to 90 days ago for all streams, including raw data streams. [source-appsflyer source.py] If something reset your stream state, the connector may be trying to backfill 90 days of data, which then needs to be chunked into 31-day slices — and the availability check may be failing before that chunking kicks in.
Immediate workaround: Set your start_date in the connector configuration to a date within the last 31 days, trigger a sync, and then adjust it back once the state is re-established.
The knowledge sources don't contain enough detail to pinpoint the exact root cause of a previously-working pipeline suddenly breaking, so I'd recommend checking the Airbyte connector logs for any version changes or state resets around the time the issue started. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/07/2026, 4:10 PMkapa.ai
05/07/2026, 4:10 PMstart_date to 2026-02-05, which is approximately 90 days before the sync date. The organic_in_app_events stream then fails during the availability check because that check is sending a request spanning more than 31 days to the AppsFlyer API.
The root cause is clear from the connector code: the streams() method globally caps start_date to 90 days ago for all streams, but the availability check doesn't respect the 31-day chunking that the IncrementalAppsflyerStream applies during actual data reading. [source-appsflyer source.py]
earliest_date = pendulum.today(timezone) - timedelta(days=90)
start_date = parse_date(config.get("start_date") or pendulum.today(timezone), timezone)
config["start_date"] = self.is_start_date_before_earliest_date(start_date, earliest_date)
This 90-day window (~3 months) is wider than the 31-day API limit for in-app events, and the availability check fires before the chunking logic splits it into valid slices.
Workarounds 1. Set start_date to within the last 31 days in your connector configuration (e.g., 30 days ago). This prevents the 90-day cap from being triggered and keeps the initial request within the API's allowed range.
2. Reset the stream state for organic_in_app_events (and retargeting_in_app_events) to a recent date via Airbyte UI → Connection → Status → Reset stream state, then set start_date to a recent date before re-syncing.
3. Check for a connector update — there was an open issue and a PR (#61520) specifically addressing this 90-day cap being incorrectly applied to all streams. [GitHub Issue #60994] However, that issue was closed as stale, so it's unclear if the fix was merged.
The underlying problem is a known bug in the connector where the global 90-day cap conflicts with the 31-day per-request limit for raw data streams during the availability check phase. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/07/2026, 4:11 PMkapa.ai
05/07/2026, 4:12 PMstart_date configuration was working before and is now failing, the issue is almost certainly not your configuration. Something changed on either the connector or the state side.
Based on the knowledge sources, here are the most likely explanations:
1. Stream state was reset or corrupted If the stream state for organic_in_app_events or retargeting_in_app_events was reset (manually or due to a failed sync), the connector falls back to the configured start_date. If that start_date is older than 90 days, the connector resets it to 90 days ago — which then triggers the 31-day API limit error during the availability check. [source-appsflyer source.py]
2. Connector was auto-updated The source-appsflyer connector has had frequent dependency updates (nearly every week). [AppsFlyer Changelog] An auto-update could have changed behavior.
What to do right now 1. Check your stream state in the Airbyte UI under Connection → Status. If the cursor for organic_in_app_events or retargeting_in_app_events shows an old date or is missing, that's the cause.
2. Manually set the stream state to a date within the last 31 days via Connection → Status → Edit state, then re-run the sync.
3. Set start_date in the connector config to a date within the last 31 days as a temporary fix to get syncs running again.
The knowledge sources do not contain enough information to confirm exactly what changed between your last successful sync and now, but a state reset combined with the 90-day cap is the most consistent explanation given the logs you've shared. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/12/2026, 2:43 PM*Akshayah C.*Getting this error 📄Error in airbyte: tech.allegro.schema.json2avro.converter.AvroConversionException: Failed to convert JSON to Avro: Could not evaluate union, field group is expected to be one of these: NULL, STRING. If this is a complex type, check if offending field (path: group) adheres to schema: {id=50bafb55-a0e7-41b0-8d7c-7b0f4ca9446d} With Airbyte, the issue is almost always in how the destination connector handles Avro/Parquet schema normalization. Here’s the specific breakdown: Why S3 worked but GCS doesn’t: Airbyte’s S3 destination in Parquet mode uses JSON → Parquet direct conversion (via Jackson), which is schema-lenient. The GCS destination’s Parquet writer goes through JSON → Avro → Parquet, which is strict about union types. So the
group field being an object {"id": "50bafb55..."} slips through on S3 but explodes on GCS.
@kapa.ai i am using version 1.6 and does it get fixed on airbyte 2.0kapa.ai
05/12/2026, 2:43 PMgroup field is arriving as a JSON object {"id": "50bafb55-..."} but the Avro schema expects it to be either NULL or STRING. [GCS Parquet Docs]
This is consistent with multiple reported cases across different sources (MongoDB, MSSQL, Postgres, Pinterest) where a field's actual data type doesn't match the Avro schema's expected union type. [Forum: Failed to convert JSON to Avro]
Regarding your specific questions:
On the S3 vs GCS difference you described: The knowledge sources confirm that the GCS destination's Parquet output goes through JSON → Avro → Parquet, which is strict about union types. [GCS Parquet Docs] However, the knowledge sources do not contain enough information to confirm or deny whether S3 uses a different (more lenient) conversion path as you described.
On whether it's fixed in Airbyte 2.0: The knowledge sources do not contain information about this specific fix being addressed in Airbyte 2.0. What the GCS changelog does show is that version 0.2.11 added a fix for "Json to Avro conversion when there is field name clash from combined restrictions (anyOf, oneOf, allOf fields)" and version 0.2.16 added "handler to process null values in arrays." [GCS Changelog] The current GCS connector version is 0.4.9.
Practical workarounds based on the knowledge sources:
• Use JSON or CSV output format instead of Parquet/Avro as a temporary workaround, since the conversion issue only affects Avro/Parquet. [Forum: MSSQL CDC sync fails]
• Upgrade to the latest GCS connector version (0.4.9), as many fixes have been shipped since older versions. [GitHub Issue #64505]
The knowledge sources do not confirm whether this specific object-type-in-string-field issue is resolved in any particular Airbyte version. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/12/2026, 7:11 PMkapa.ai
05/12/2026, 7:11 PM_airbyte_meta.changes[]. This is why S3 doesn't break while GCS does — the S3 destination has more fault-tolerant conversion handling.
The GCS destination's Parquet writer still goes through the strict JSON → Avro → Parquet pipeline, which throws an exception when a field's actual type (e.g., an object {id: "50bafb55..."}) doesn't match the expected Avro union type (e.g., NULL, STRING). [GCS Output Schema]
In summary:
• S3 (v1.0.0+): Tolerates conversion failures — nulls the bad field and continues the sync.
• GCS: Strict conversion — throws an exception and breaks the sync.
The knowledge sources do not confirm whether the GCS destination has received the same fault-tolerant conversion improvements as the S3 destination. Upgrading to the latest GCS connector version (0.4.9) is recommended, as it may include some of these improvements. [GitHub Issue #64505] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/12/2026, 7:12 PMkapa.ai
05/12/2026, 7:12 PM_airbyte_meta.changes[]. [S3 Migration Guide]
• The _airbyte_meta field captures these changes with details about which field was affected, the type of change (NULLED or TRUNCATED), and the reason. [S3 Migration Guide]
For example, if an array item can't be converted to the expected type, it gets nulled:
> _"The nulled fields represent conversion failures and will appear in _airbyte_meta.changes[]."_ [S3 Array Types]
So in your case, if the group field arrives as an object {id: "50bafb55-..."} but the schema expects NULL or STRING, the S3 destination (v1.0.0+) would null the field and continue the sync, rather than throwing an exception and breaking it. This is the key behavioral difference from the GCS destination. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/12/2026, 7:12 PMkapa.ai
05/12/2026, 7:13 PM_airbyte_meta.changes[]. [S3 Migration Guide]
• Date/time types were simplified — all time types are now converted to integral logical types instead of the old union-of-types approach. [S3 Date and Time Types]
• Array handling was also improved for both Avro and Parquet formats. [S3 Array Types]
So yes, S3 uses the same JSON → Avro → Parquet pipeline as GCS, but with more resilient error handling in newer versions. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Lucas
05/13/2026, 12:06 PM422 error like:
"Cannot create connection: organization has reached the maximum limit of 100 connections. organizationId=00000000-0000-0000-0000-000000000000"Aasim ali
05/23/2026, 3:30 AMkapa.ai
05/23/2026, 3:30 AMtemporal and temporal_visibility databases to a new location. The Temporal auto-setup script is trying to run schema migrations on databases that already have the schema applied, and it's hitting duplicate key/relation errors.
Specifically:
• pq: relation "namespaces" already exists → WARN, ignored and continued
• pq: duplicate key value violates unique constraint "namespace_metadata_pkey" → ERROR, stops the process
The WARN-level duplicates are handled gracefully, but the INSERT INTO namespace_metadata statement fails because the row already exists from your restored database.
Why this happens When you restore the temporal database from a dump, the schema and seed data (including the namespace_metadata row) are already present. The Temporal auto-setup script then tries to re-run the same INSERT statement, which violates the primary key constraint. [Forum: Cannot start with empty DBs]
This is consistent with what others have experienced when moving Airbyte databases — the Temporal pod is sensitive to the state of the database it connects to. [GitHub Issue #59730]
What to try 1. Set SKIP_SCHEMA_SETUP=true for the Temporal container. Since your databases are already fully migrated from the source instance, you don't need the auto-setup to run again. This is the recommended approach when databases are pre-populated. [Forum: Cannot start with empty DBs]
2. Verify the restore was complete — ensure all three databases (airbyte, temporal, temporal_visibility) were fully restored before starting Airbyte. [GitHub Issue #49304]
3. Ensure the database user has the correct permissions — the Temporal user needs GRANT ALL on the temporal and temporal_visibility databases. [Forum: Cannot start with empty DBs]
The knowledge sources do not contain enough detail to confirm whether SKIP_SCHEMA_SETUP is exposed as a configurable environment variable in Airbyte 1.6.2's Helm chart or Docker Compose setup, so you may need to check your deployment's configuration options for that setting. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/23/2026, 3:36 AMkapa.ai
05/23/2026, 3:36 AMsql schema version compatibility check failed: version mismatch for keyspace/database: "temporal_new".
Expected version: 1.16 cannot be greater than Actual version: 0.0
This means the Temporal server is trying to connect to a database called temporal_new that has no schema applied (version 0.0), but the Temporal server expects schema version 1.16.
What went wrong When you moved your databases to the new location, it appears the temporal database was either:
• Renamed or pointed to a different database name (temporal_new instead of temporal)
• Not properly restored — the restore completed but the schema migrations were not applied (empty schema at version 0.0)
This is different from your previous error where the schema already existed. Here, the target database exists but is empty/uninitialized.
How to fix Option 1: Fix the database name Check your Helm values.yaml or environment variables for DBNAME and VISIBILITY_DBNAME. They should point to your restored databases, not a new empty one. [Forum: Cannot start with empty DBs]
DBNAME=temporal
VISIBILITY_DBNAME=temporal_visibility
If something is pointing to temporal_new, correct it back to temporal.
Option 2: Re-run schema setup on the empty database If temporal_new is intentional and is a freshly created empty database, the Temporal auto-setup needs to initialize it. Ensure SKIP_SCHEMA_SETUP=false so the schema migrations run. [Forum: Cannot start with empty DBs]
Option 3: Verify the restore Confirm the temporal database was fully restored by checking the schema version:
SELECT * FROM schema_version;
A properly restored database should show version 1.6 or higher, not 0.0. [Forum: Airbyte-temporal started failed]
The database user also needs GRANT ALL privileges on the temporal databases for schema setup to succeed. [Forum: Unable to create SQL database] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/23/2026, 3:37 AMkapa.ai
05/23/2026, 3:37 AMtemporal database schema is at version 1.16, which is exactly what the Temporal server expects. So the temporal database itself is correctly restored and initialized.
This means the issue from the previous error — version mismatch for keyspace/database: "temporal_new". Expected version: 1.16 cannot be greater than Actual version: 0.0 — is pointing to a different database named temporal_new, not your restored temporal database.
Next steps 1. Check your configuration to find where temporal_new is being referenced. Look at your Helm values.yaml or environment variables for DBNAME — it should be set to temporal, not temporal_new. [Forum: Cannot start with empty DBs]
2. Check temporal_visibility as well:
\c temporal_visibility
SELECT * FROM schema_version;
This should also show a valid version (typically 1.1). [Forum: Airbyte-temporal started failed]
3. If temporal_new is an unintended empty database that was created by a misconfigured DBNAME variable, you can either drop it or correct the configuration to point back to temporal.
Your restored temporal database is fine — the problem is a misconfiguration pointing Temporal to the wrong (empty) database. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/23/2026, 3:38 AMtemporal_new this name of DB where i restored the temporal @kapa.ai @kapa.aikapa.ai
05/23/2026, 3:39 AMtemporal_new is the actual name of the database where you restored the Temporal data, and it has the correct schema at version 1.16. The problem is that your Temporal configuration is still pointing to temporal (or some other name) instead of temporal_new.
What you need to do Update your Temporal configuration to use temporal_new as the database name. In your Helm values.yaml or environment variables, set: [Forum: Cannot start with empty DBs]
temporal:
extraEnv:
- name: DBNAME
value: 'temporal_new'
- name: VISIBILITY_DBNAME
value: 'temporal_visibility' # or whatever name you used for visibility DB
Or if using Docker Compose / environment variables directly:
DBNAME=temporal_new
VISIBILITY_DBNAME=temporal_visibility
Also verify 1. Check temporal_visibility schema version as well:
\c temporal_visibility_new -- or whatever name you used
SELECT * FROM schema_version;
It should show version 1.1 or higher. [Forum: Airbyte-temporal started failed]
2. Ensure the database user has full permissions on `temporal_new`:
GRANT ALL PRIVILEGES ON DATABASE temporal_new TO <your_airbyte_user>;
[Forum: Unable to create SQL database]
3. Since the schema is already applied, set SKIP_SCHEMA_SETUP=true (or SKIP_DB_CREATE=true) to prevent the auto-setup from trying to re-run migrations on the already-initialized database. [Forum: Cannot start with empty DBs]
Once the DBNAME variable points to temporal_new, the version mismatch error should be resolved. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/23/2026, 3:41 AMkapa.ai
05/23/2026, 3:41 AMextraEnv:
- name: DBNAME
value: temporal_new
- name: VISIBILITY_DBNAME
value: temporal_visibility_new
- name: SKIP_DB_CREATE
value: "true"
- name: SKIP_SCHEMA_SETUP
value: "true"
Do you need to restore again? No, you should not need to restore again — as long as:
1. Your temporal_new database has schema version 1.16 (which you already confirmed ✅)
2. Your temporal_visibility_new database also has a valid schema version
Check temporal_visibility_new first:
\c temporal_visibility_new
SELECT * FROM schema_version;
It should show version 1.1 or higher. [Forum: Airbyte-temporal started failed]
Regarding SKIP_SCHEMA_SETUP being added after startup Since SKIP_SCHEMA_SETUP=true was added after Airbyte had already started, the auto-setup script may have already attempted (and partially failed) to re-run migrations on your restored databases. However, since your schema is already at the correct version (1.16), and you now have both SKIP_DB_CREATE=true and SKIP_SCHEMA_SETUP=true set, a fresh restart of the Temporal pod with these settings should skip all schema operations and connect directly to your restored databases. [Forum: Cannot start with empty DBs]
Also verify the database user has full privileges on both databases:
GRANT ALL PRIVILEGES ON DATABASE temporal_new TO <your_airbyte_user>;
GRANT ALL PRIVILEGES ON DATABASE temporal_visibility_new TO <your_airbyte_user>;
[Forum: Unable to create SQL database] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
05/23/2026, 3:51 AMkapa.ai
05/23/2026, 3:51 AMairbyte database contains your sources, destinations, connections, and configuration. Restoring it means your Airbyte UI will show all your existing connectors and connections.
• Fresh temporal and temporal_visibility databases will be initialized cleanly by the Temporal auto-setup (no schema conflicts). [Forum: Unable to create SQL database]
What will be lost ❌ • Temporal workflow state — all in-progress or scheduled sync workflows stored in temporal and temporal_visibility will be gone. Your connections will exist in the UI but their Temporal workflows will need to be re-triggered.
• Job history — sync job history is stored in the airbyte database, so that should be preserved. However, any active/running jobs at the time of migration will be lost from Temporal's perspective.
Important note on fresh Temporal DBs With fresh (empty) temporal and temporal_visibility databases, you must ensure:
• SKIP_DB_CREATE=false and SKIP_SCHEMA_SETUP=false so Temporal auto-setup initializes the schema
• The database user has CREATEDB permissions or the databases are pre-created with GRANT ALL to the Airbyte user [Forum: Cannot start with empty DBs]
CREATE DATABASE temporal WITH OWNER = postgres;
CREATE DATABASE temporal_visibility WITH OWNER = postgres;
[GitHub Issue #49304]
Bottom line: This approach is simpler and avoids the schema version mismatch issues you've been facing. You'll just need to manually re-trigger your connections after startup to recreate the Temporal workflows. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
07/01/2026, 4:16 PMkapa.ai
07/01/2026, 4:16 PMP2D means a 2-day lookback window was added to handle timezone mismatches between the connector and the Snapchat API. Specifically:
• The Snapchat API uses UTC timestamps
• The connector was missing data due to timezone offset differences (e.g., records created late in the day in one timezone but attributed to the previous day in UTC)
• The 2-day lookback was added as a safety buffer to ensure no records are missed
Has anyone else reported it? Yes — there is an open GitHub issue (#54139) specifically about the end_datetime defaulting to midnight (00:00:00.000Z) instead of end of day (23:59:59.999Z), which causes records updated later in the day to be missed. [GitHub Issue #54139] The 2-day lookback in v1.5.29 was added as a mitigation for this class of issue.
What you can expect • The 2-day delay is by design in the current connector version
• Data will eventually be synced — it just arrives with a ~2 day lag
• If you need more up-to-date data, this is a known limitation of the current implementation
You may want to follow or comment on GitHub Issue #54139 to track progress on a proper fix. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
07/01/2026, 6:55 PMkapa.ai
07/01/2026, 6:55 PMP2D lookback window as a fix for the UTC timezone mismatch. [Snapchat Marketing Changelog]
Looking through all subsequent versions up to the latest 1.5.41 (2026-06-30), none of the changelog entries mention:
• Removing the 2-day lookback window
• Fixing the UTC timezone mismatch in a different way
• Any changes to the lookback_window behavior
The only related fix after v1.5.29 was in v1.5.16 (2025-08-11):
> "Fix start time for stats streams" [Snapchat Marketing Changelog]
But this predates v1.5.29 and is unrelated to the lookback window.
The knowledge sources do not contain enough information to confirm whether the 2-day delay has been removed or resolved in any version. The P2D lookback window appears to still be in place as of the latest version. I'd recommend:
• Checking the open issue #54139 for updates
• Joining the Airbyte Community Slack to ask directly 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
07/01/2026, 7:03 PMkapa.ai
07/01/2026, 7:03 PMP2D lookback actually means:
What P2D lookback window means P2D is an ISO 8601 duration meaning 2 days. In the context of DatetimeBasedCursor, the lookback window subtracts 2 days from the last cursor value before starting the next sync:
> "The Lookback window specifies a duration that is subtracted from the last cutoff date before starting to sync." [Connector Builder Docs]
So your data should NOT be delayed You are correct — with incremental append + P2D lookback:
• ✅ Your current/today's data is still synced
• ✅ The connector picks up from cursor - 2 days to now
• ✅ No 2-day delay on current data
What actually happens is:
• Last sync cursor = 2026-06-28
• Next sync starts from = 2026-06-26 (2 days back)
• Next sync ends at = now (today)
Why P2D was added The 2-day lookback was added to re-fetch the last 2 days of already-synced data to catch any records that were missed due to UTC timezone mismatches. [Snapchat Marketing Changelog]
What this means for you • You should not be seeing a 2-day delay in your data
• You will see the last 2 days re-synced on every run (duplicates handled by dedup if configured)
• If you are seeing a genuine 2-day delay in current data, it is likely a different issue unrelated to the P2D lookback window
Can you clarify what you mean by "2-day delay"? Is today's data missing, or are you seeing duplicate records from 2 days ago? 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
07/01/2026, 7:04 PMkapa.ai
07/01/2026, 7:04 PMend_date parameter is not specified for incremental syncs, the end_datetime partition defaults to midnight (00:00:00.000Z). This causes issues because any records updated on the same day (but after midnight) are excluded from the sync."_ [GitHub Issue #54139]
This means if you sync today, the connector only picks up data up to midnight of today, effectively always being behind by up to a day or more.
The fix that was proposed end_datetime:
type: MinMaxDatetime
datetime: '{{ (config.get("end_date") or now_utc().strftime("%Y-%m-%d")) + "T23:59:59.999Z" }}'
datetime_format: '%Y-%m-%dT%H:%M:%S.%fZ'
This was proposed to change end_datetime from 00:00:00.000Z to 23:59:59.999Z. [GitHub Issue #54139]
A related fix was shipped in v1.5.13 (2025-07-02):
> "Fix end datetime to include today" [Snapchat Marketing Changelog]
What you should do 1. Check your connector version — ensure you are on at least v1.5.13 or higher (latest is v1.5.41) which includes the end_datetime fix
2. Set an explicit end_date in your connector config if you are not already doing so
3. Comment on GitHub Issue #54139 describing your exact delay pattern to get more targeted help from the Airbyte team
If you are already on v1.5.13+ and still seeing a consistent 2-day delay, the knowledge sources do not contain enough information to explain why, and I'd recommend raising it directly on the GitHub issue. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Aasim ali
07/14/2026, 5:46 PMkapa.ai
07/14/2026, 5:46 PM2026-03-18T13:32:00Z). [Time Zones Docs]
Destinations • S3 / GCS (Avro/Parquet): Timestamps with timezone are stored in UTC. The is_adjusted_to_utc field in Parquet metadata is always true. [S3 Migration Guide]
• S3 Data Lake / GCS Data Lake (Iceberg): time with timezone and timestamp with timezone types are converted to UTC before writing. [S3 Data Lake]
• Avro (blob storage): Timestamps are stored as timestamp-micros — microseconds from 1970-01-01T00:00:00Z (UTC). [JSON to Avro Conversion]
Important Caveat: timestamp_without_timezone Airbyte's type system distinguishes between:
• timestamp_with_timezone → always converted to UTC
• timestamp_without_timezone → stored as-is, no timezone conversion applied [Supported Data Types]
Known Exceptions / Bugs There have been reported issues where timezone conversion was not always applied correctly:
• MySQL source: Configured server timezone (e.g., Europe/Rome) was ignored during sync, with timestamps inserted as-is without UTC conversion. [GitHub Issue #52656]
• MySQL CDC vs Full Refresh: datetime fields (without timezone) were handled differently between CDC and full refresh syncs. [GitHub Issue #54718]
• S3 `time_of_day_with_timezone`: Timezones were not respected when converting until a bugfix was shipped. [S3 Migration Guide]
Summary So while Airbyte aims to use UTC throughout, the behavior depends on whether the field is typed as with_timezone or without_timezone, and some source connectors have had known bugs with timezone handling. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elements