I have a sample query that I used to try and extrapolate the cost for my usage (your usage will vary)
FROM inventory_adjustment_history
SHOW inventory_adjustment_change
WHERE product_variant_sku = âXXXXXâ
AND inventory_location_name = âXXXXXâ
AND inventory_change_reason = âpurchaseâ
AND inventory_state = âcommittedâ
GROUP BY day WITH TOTALS
HAVING inventory_adjustment_change != 0
SINCE startOfDay(-XXd) UNTIL today
ORDER BY day ASC
LIMIT 1000
My results:
Days(XX) Status ShopifyQL Cost Max Allowed Elapsed
1 SUCCESS 405 1000 0.49s
2 SUCCESS 405 1000 0.44s
3 SUCCESS 405 1000 0.58s
4 SUCCESS 405 1000 0.57s
5 SUCCESS 405 1000 0.63s
6 SUCCESS 405 1000 0.70s
7 SUCCESS 405 1000 0.51s
8 SUCCESS 405 1000 0.56s
9 SUCCESS 405 1000 0.58s
10 SUCCESS 405 1000 0.59s
11 SUCCESS 405 1000 0.81s
12 SUCCESS 405 1000 0.66s
13 SUCCESS 405 1000 0.55s
14 SUCCESS 405 1000 0.58s
15 SUCCESS 405 1000 0.55s
16 SUCCESS 405 1000 0.59s
17 SUCCESS 405 1000 0.67s
18 SUCCESS 405 1000 0.68s
19 SUCCESS 405 1000 0.61s
20 SUCCESS 405 1000 0.70s
21 SUCCESS 405 1000 0.64s
22 SUCCESS 405 1000 0.77s
23 SUCCESS 405 1000 0.82s
24 SUCCESS 405 1000 0.66s
25 SUCCESS 405 1000 0.74s
26 SUCCESS 405 1000 1.15s
27 SUCCESS 405 1000 0.68s
28 SUCCESS 405 1000 0.68s
29 SUCCESS 405 1000 0.77s
30 SUCCESS 405 1000 0.69s
31 SUCCESS 810 1000 0.66s
32 SUCCESS 810 1000 0.76s
33 SUCCESS 810 1000 0.98s
34 SUCCESS 810 1000 0.65s
35 SUCCESS 810 1000 0.70s
36 SUCCESS 810 1000 0.75s
37 SUCCESS 810 1000 0.69s
38 SUCCESS 810 1000 0.62s
39 SUCCESS 810 1000 0.57s
40 SUCCESS 810 1000 0.76s
41 SUCCESS 810 1000 0.72s
42 SUCCESS 810 1000 0.64s
43 SUCCESS 810 1000 0.95s
44 SUCCESS 810 1000 0.66s
45 SUCCESS 810 1000 0.63s
46 SUCCESS 810 1000 0.73s
47 SUCCESS 810 1000 0.71s
48 SUCCESS 810 1000 0.67s
49 SUCCESS 810 1000 0.76s
50 SUCCESS 810 1000 0.68s
51 SUCCESS 810 1000 0.71s
52 SUCCESS 810 1000 0.67s
53 SUCCESS 810 1000 0.72s
54 SUCCESS 810 1000 0.74s
55 SUCCESS 810 1000 0.84s
56 SUCCESS 810 1000 0.73s
57 SUCCESS 810 1000 0.67s
58 SUCCESS 810 1000 0.74s
59 SUCCESS 810 1000 0.67s
60 SUCCESS 810 1000 0.70s
61 FAILED 1215 1000 0.25s
62 FAILED 1215 1000 0.21s
63 FAILED 1215 1000 0.21s
64 FAILED 1215 1000 0.26s
65 FAILED 1215 1000 0.19s
66 FAILED 1215 1000 0.23s
67 FAILED 1215 1000 0.29s
68 FAILED 1215 1000 0.22s
69 FAILED 1215 1000 0.21s
70 FAILED 1215 1000 0.28s
71 FAILED 1215 1000 0.31s
72 FAILED 1215 1000 0.25s
73 FAILED 1215 1000 0.22s
74 FAILED 1215 1000 0.20s
75 FAILED 1215 1000 0.22s
76 FAILED 1215 1000 0.26s
77 FAILED 1215 1000 0.29s
78 FAILED 1215 1000 0.19s
79 FAILED 1215 1000 0.22s
80 FAILED 1215 1000 0.24s
81 FAILED 1215 1000 0.26s
82 FAILED 1215 1000 0.25s
83 FAILED 1215 1000 0.36s
84 FAILED 1215 1000 0.24s
85 FAILED 1215 1000 0.25s
86 FAILED 1215 1000 0.25s
87 FAILED 1215 1000 0.24s
88 FAILED 1215 1000 0.27s
89 FAILED 1215 1000 0.28s
90 FAILED 1215 1000 0.20s
91 FAILED 1620 1000 0.24s
92 FAILED 1620 1000 0.24s
93 FAILED 1620 1000 0.35s
94 FAILED 1620 1000 0.20s
95 FAILED 1620 1000 0.19s
96 FAILED 1620 1000 0.28s
97 FAILED 1620 1000 0.25s
98 FAILED 1620 1000 0.32s
99 FAILED 1620 1000 0.29s
100 FAILED 1620 1000 0.30s
...
Whatâs frustrating here, is once you hit 1000 or even try a query that is > 1000, thereâs no drip rate (restore rate, etc) â itâs just a minute delay. Even when it fails fast â why this this the case?
If I try to do a query that costs 1500 ShopifyQL bux, and it fails instantly, then I need to wait a minute.
So, on a fresh start, I get a response that looks like:
{
âerrorsâ: [
{
âmessageâ: âRate limited. Please retry later.â,
âlocationsâ: [
{
âlineâ: 3,
âcolumnâ: 7
}
],
âextensionsâ: {
âcodeâ: âTHROTTLEDâ,
ârequestIdâ: â41868552-61c8-4b2b-85a5-8d0411e77e2b-1771353585â,
âcostâ: {
ârequestedQueryCostâ: 1215,
âmaximumAvailableâ: 1000,
âcurrentlyAvailableâ: 0,
âwindowResetAtâ: â2026-02-17T18:40:45.302089901+00:00â
}
},
âpathâ: [
âshopifyqlQueryâ
]
}
],
âdataâ: {
âshopifyqlQueryâ: null
},
âextensionsâ: {
âcostâ: {
ârequestedQueryCostâ: 3,
âactualQueryCostâ: 1,
âthrottleStatusâ: {
âmaximumAvailableâ: 20000.0,
âcurrentlyAvailableâ: 19999,
ârestoreRateâ: 1000.0
}
}
}
}
ERROR FOUND:
Code: THROTTLED
Message: Rate limited. Please retry later.
Request ID: 41868552-61c8-4b2b-85a5-8d0411e77e2b-1771353585
PER-REQUEST SHOPIFYQL COST:
Requested Cost: 1215
Maximum Allowed: 1000
Currently Avail: 0
Window Resets: 2026-02-17T18:40:45.302089901+00:00
Drip Rate: 16.7 pts/sec (60.0s until full)
OUTER GRAPHQL BUCKET COST:
Requested Cost: 3
Actual Cost: 1
Available: 19999/20000.0
Restore Rate: 1000.0/sec
I should be able to do a threshold regression in my own code without having to wait a minute to test a new value.