Adovo

Data & Analytics

Shopify discount codes disappear from one Airbyte stream

Two Shopify discount streams can disagree while syncs look healthy. Reconcile source IDs, cursor coverage and failed lookups before changing code.

October 27, 2026

Marketing reports say two active Shopify discounts do not exist. The discounts are present in a bulk-extracted stream but absent from a second Airbyte discount-code stream. An Airbyte issue reports exactly that disagreement. The issue does not yet prove why the records were missed, so changing a null-handling branch before comparing the source request path would be premature.

Start with the missing IDs

Capture the Shopify IDs, updated_at values, status and owning discount for each missing code. Compare them across the source API, the bulk stream and the incremental stream at the same time. Establish whether the parent discount appeared in that run's listing. If it did not, a later per-discount lookup cannot explain the absence by itself.

Follow the cursor and pagination

Review the connection's starting point, last saved cursor, pagination logs and any source filters. A discount last updated before the incremental floor may never be requested again even though it remains active. Check whether an initial snapshot included it and whether later backfills are supported by the installed Shopify source connector. A green sync indicates that the requests completed; it does not certify full business-object coverage.

Repair with a measured backfill

Choose a bounded historical window or approved reset only after the missing IDs and cursor gap are understood. Snapshot the current destination, then reconcile distinct discount and code IDs before and after the backfill. Test the effect on downstream joins and campaign attribution. Keep a scheduled comparison between Shopify's source count and the warehouse's active-discount set so future gaps surface before a promotion goes live.

Adovo’s view

Data quality begins where two supposedly equivalent views disagree. Treat that disagreement as an opportunity to define the object and its lifecycle precisely, not as an excuse to trust whichever stream is easier to query.

Continue exploring

Data & Analytics

dbtIncremental Models

A dbt incremental run replaces a production table with empty data

An unexpected initial-build path can turn an incremental model run into a table replacement. Protect row counts and rebuild authorization while retaining managed schema evolution.

Read more

Data & Analytics

SnowflakeParquet

A Snowflake Parquet load succeeds, then dates show as impossible years

A successful COPY can still leave timestamps unusable. Inspect Parquet logical types, epoch units and target conversion before reloading.

Read more

Data & Analytics

AirbyteMariaDB

Airbyte MariaDB CDC resumes inside a row event and stalls every sync

A saved CDC offset can leave a MariaDB connector unable to interpret the next binlog event. Preserve state and recover with a controlled plan.

Read more
Explore data and analytics services →