Query on Created_AT greater than date/time is still returning those equal to the date time

Hi

I am working with Codeless BPA’s Shopify GraphSQL connector.

My freehand query has

query GetNewOrders {
orders(
first: 100
sortKey: CREATED_AT
reverse: false
query: "created_at:>‘$$CreatedDate$$’ "
) {
edges {

I’m passing in

2026-09-02T10:15:13Z

which is returning - an order with created_At at

2026-09-02T10:15:13Z

which is equal to the date/time I am passing in

If I change the query to

2026-09-02T10:15:14Z

If excludes this order and returns all those after it which is what I need.

What is wrong with my query?

I’m not sending >= I’m just sending >

Regards

Karen

I can confirm this. And there’s no extras property with warnings, as one can often get with query-related issues like this:

/tmp >cat $TMPDIR/scratch.gql
query GetNewOrders($query: String!) {
  orders(
    first: 100
    sortKey: CREATED_AT
    reverse: false
    query: $query
  ) {
    edges {
      node {
        createdAt
      }
    }
  }
}

/tmp >sdt gql -x -v query="created_at:>'2026-08-25T19:28:01Z'" $TMPDIR/scratch.gql
{
 "data": {
  "orders": {
   "edges": [
    {
     "node": {
      "createdAt": "2026-08-25T19:28:01Z"
     }
    },
    {
     "node": {
      "createdAt": "2026-08-26T01:46:14Z"
     }
    },
    {
     "node": {
      "createdAt": "2026-08-31T23:42:04Z"
     }
    }
   ]
  }
 },
 "extensions": {
  "cost": {
   "actualQueryCost": 3,
   "fields": [
    {
     "definedCost": 0,
     "path": [
      "orders",
      "edges",
      "node",
      "createdAt"
     ],
     "requestedChildrenCost": 0,
     "requestedTotalCost": 0
    },
    {
     "definedCost": 1,
     "path": [
      "orders",
      "edges",
      "node"
     ],
     "requestedChildrenCost": 0,
     "requestedTotalCost": 1
    },
    {
     "definedCost": 0,
     "path": [
      "orders",
      "edges"
     ],
     "requestedChildrenCost": 1,
     "requestedTotalCost": 1
    },
    {
     "definedCost": null,
     "path": [
      "orders"
     ],
     "requestedChildrenCost": 1,
     "requestedTotalCost": 11
    }
   ],
   "requestedQueryCost": 11,
   "throttleStatus": {
    "currentlyAvailable": 1997,
    "maximumAvailable": 2000,
    "restoreRate": 100
   }
  }
 }
}

It also fails when including a time zone

Hey @Karen_Gibbons and @sshaw :waving_hand: thanks for flagging this and sharing that detail.

I did some digging here, and the created_at filter compares against the full stored timestamp, including fractional seconds, while createdAt is returned to whole-second precision. This means a timestamp stored as 10:15:13.341254Z is greater than 10:15:13Z, even though the response displays both as 10:15:13Z.

The filter accepts six fractional digits, which provides a workaround for setting a whole-second boundary. For example, if you want results beginning at 2026-09-02T10:15:13Z, you can use:

created_at:>'2026-09-02T10:15:12.999999Z'

This matches the behaviour discussed in this earlier updated_at thread: Orders query update_at comparison bug?

Hope this helps!

That all makes sense technically but I think the problem here is: where is sub-second updated or created at time exposed? I don’t think it is returned by any API call, GraphQL or REST. So really this is just confusing functionality and should be abstracted away by the API

Thanks that solutions works

When I download the orders, I take createdAt

2026-09-03T11:02:37.0000000Z

There is no option to take created_at.

This is what I’m storing as the date of the last order created.

When I quey I’m using created_at

Replacing the 000000Z with 9999999Z works.

However, if two orders were placed within a few seconds of each other, this could potentially skip orders.

Is there a way of getting the full created_at datetime on the order download?

Regards

Karen