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
sshaw
September 2, 2026, 3:05pm
2
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 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!
sshaw
September 6, 2026, 7:28pm
5
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