Exclusive Timestamp Filters Now Exclude the Full Second in Shopify GraphQL

Shopify’s 2026‑10 API version changes how exclusive (>) timestamp filters work, dropping the entire second instead of starting at the next millisecond. Learn who’s affected, why it matters, and exactly what you need to adjust in your apps today.

Exclusive Timestamp Filters Now Exclude the Full Second in Shopify GraphQL
6 sections

If you build or maintain Shopify apps that rely on the GraphQL Admin API, the latest exclusive timestamp filter change is something you need to understand right away. Starting with API version 2026‑10, a filter using the greater‑than operator (>) no longer includes records that fall within the same second you specify. This seemingly small shift can cause missed orders, shipments, or any time‑based data if your queries aren’t updated. In this post we’ll break down what changed, who is affected, and the concrete steps you should take before moving to the new version.

What Changed in API version 2026‑10

Previously, when you wrote a filter like created_at:>'2026-09-15T12:00:02Z' the GraphQL engine compared the literal 2026‑09‑15T12:00:02.000000 against the stored timestamp. Because many resources store timestamps with fractional seconds (e.g., 2026‑09‑15T12:00:02.500Z), the query would return records created later in that same second, even though the API displayed them as 2026‑09‑15T12:00:02Z. In effect, the exclusive ‘>’ bound overlapped with the inclusive ‘<=’ bound for that second. 

With the 2026‑10 update, if the value you pass to a ‘>’ filter does not contain fractional seconds, the filter starts after the entire second (i.e., 12:00:02.999999). Consequently, a record whose visible createdAt value is 2026‑09‑15T12:00:02Z will no longer match created_at:>'2026-09-15T12:00:02Z'. This change isolates the exclusive and inclusive bounds, eliminating the overlap but also introducing a potential “gap” for records that sit in the same second.

Who Is Affected

The impact is limited to developers—specifically, any app or custom integration that builds a GraphQL query with a ‘>’ timestamp filter without fractional seconds. Typical use‑cases include:

• Sync jobs that fetch “new” orders, customers, or fulfillment events by passing the last seen createdAt as a ‘>’ bound.

• Pagination strategies that rely on the timestamp of the last node in a result set.

• Any background process that stores a timestamp string and re‑uses it verbatim in a subsequent query.

How the New Logic Affects Your Queries

Consider a sync that runs every minute. The job stores the timestamp of the newest order it processed, say 2026‑09‑15T12:00:02Z, and then queries for newer orders using created_at:>'2026-09-15T12:00:02Z'. Under the pre‑2026‑10 behavior, an order created at 12:00:02.500 would be returned, ensuring no gaps. After the update, that same order is excluded because the exclusive filter now starts after 12:00:02.999999. If you continue to use the same query pattern, you’ll miss every record that lands in the same second as the stored cursor – a subtle bug that can cascade into data inconsistency, missed fulfillment, or inaccurate analytics.

Actionable Steps for Your Apps

  • Identify all ‘>’ timestamp filters – Search your codebase for patterns like created_at:> or updated_at:> in GraphQL queries. Pay special attention to queries that use a cursor timestamp saved from a previous response.
  • Add fractional seconds or switch to ‘>=’ – If you must guarantee that no records are skipped, change the filter to a greater‑than‑or‑equal operator and keep the original timestamp:
  • graphql

    query OrdersSinceLastSync {

    orders(first: 50, sortKey: CREATED_AT, query: "created_at:>='2026-09-15T12:00:02Z'") {

    nodes {

    id

    createdAt

    }

    }

    }

    Using ‘>=’ ensures the record with exactly 12:00:02Z is included. To avoid duplicate processing, de‑duplicate on the id field after the fetch.

  • Include fractional seconds when possible – If you can capture the full precision from the previous response (e.g., 2026‑09‑15T12:00:02.250Z), keep using ‘>’ with that precise value. The engine will treat it as a strict bound without creating a gap.
  • Update tests – Add unit tests that simulate timestamps at the edge of a second (e.g., …02.000, …02.500, …02.999). Verify that your sync logic still returns the expected records under both the old and new API versions.
  • Version gating – Apps still running on API version 2026‑07 or earlier are safe; they see the legacy behavior. However, once you plan to upgrade to 2026‑10 or later, make the above adjustments before the version switch.
  • Monitor after deployment – After releasing the changes, enable logging for “missed” timestamps. A simple count of records where createdAt equals the stored cursor but the record was not returned will alert you to any lingering gaps.
  • Testing Before You Upgrade

    Set up a staging environment that runs API version 2026‑10. Run your existing sync job against a sandbox store populated with orders that have fractional‑second timestamps (you can create them via the Admin API using the created_at field with millisecond precision). Compare the result set against the same job on version 2026‑07. Any discrepancy points to a filter that needs the ‘>=’ or fractional‑second adjustment.

    If you use GraphQL Explorer, you can manually test a query like:

    graphql

    { orders(first: 5, query: "created_at:>'2026-09-15T12:00:02Z'", sortKey: CREATED_AT) { edges { node { id createdAt } } } }

    Observe whether an order with createdAt "2026-09-15T12:00:02.500Z" appears. If it doesn’t, you know the exclusive filter is behaving as documented and you need to adjust your logic.

    Conclusion & Next Steps

    The exclusive timestamp filter tweak in API version 2026‑10 is a precision‑focused improvement that protects you from accidental overlap, but it also requires a small code change for many sync‑heavy apps. By swapping ‘>’ for ‘>=’ (or by preserving fractional seconds), you eliminate the one‑second blind spot and keep your data pipelines reliable.

    Ready to update your app? Review your GraphQL queries today, run the staging tests, and push the changes before you bump to the new API version. Need a hand or have questions about edge‑case handling? Drop a comment below or reach out to the Shopify developer community – we’re all in this together!

    Tags
    Sources

    Related Articles

    Protecting Shoppers: Shopify’s New Confirmation Prompt for External Redirects

    Protecting Shoppers: Shopify’s New Confirmation Prompt for External Redirects

    Shopify now shows a confirmation modal before sending customers to untrusted external sites, helping prevent phishing and unwanted redirects. Learn what changed, who’s affected, and how to keep your store’s experience smooth.

    October 21, 20264 min
    Mastering Stock Counts: New Tools to Create, Manage, and Review Inventory in Shopify Admin

    Mastering Stock Counts: New Tools to Create, Manage, and Review Inventory in Shopify Admin

    Shopify’s latest Stock Count feature brings barcode scanning, real‑time reviews, and audit trails directly into the admin. Learn who it impacts, how to set it up, and what developers need to know.

    October 20, 20264 min
    Unlocking Analytics for Metaobjects: New Queryable Capability in the Shopify Admin API

    Unlocking Analytics for Metaobjects: New Queryable Capability in the Shopify Admin API

    Shopify’s 2027-01 GraphQL Admin API now lets you read and set the analyticsQueryable capability on metaobject definitions, aligning them with metafields. Learn what changed, who it impacts, and how to enable analytics for your custom data.

    October 20, 20263 min
    Securing Your Shopify App: New AI‑Powered Checks and Expiring Tokens

    Securing Your Shopify App: New AI‑Powered Checks and Expiring Tokens

    Shopify’s latest developer update forces app makers to adopt AI security scans, short‑lived access tokens, and tighter account protections. Learn what changed, who’s affected, and how to implement the new safeguards today.

    October 20, 20264 min