Shopify API rate limits and building back-end data transmission apps ?

I have a question about Shopify API rate limits. These may represent a sort of hard limit on performance for our application.

But I’m not sure how their rate limiting algorithm works. Is it designed to split traffic up among all the Shopify shops ? Do the rate limits represent rate limits per seller ?

We are building an API interface for multiple shops, and we will be eventually hope to be making several million called a day to list products, update products inventory and pricing and retrieve orders.

Bu we are concerned about how rate limits will affect the performance and viability of our applications ?

The Inventory price process works well, but it a bit slower than I’d like.

This is entirely due to the speed of the web service calls to Shopify API calls over the network. It can update all exported products (to our test account) in under a minute, but that’s not lightning fast. Is there any way that this can this go any faster ? Because it’s hard to see how several million API calls daily will work at this speed ?

So how can we support an application through the Shopify API with such low rate limits ? https://shopify.dev/concepts/about-apis/rate-limits

What do you recommendation as the best method to design back-end processes that push product, update inventory and pricing and get orders on large numbers of products for multiple sellers that will have effective performance ?

https://shopify.dev/concepts/about-apis/rate-limits#avoiding-rate-limit-errors

https://shopify.dev/concepts/about-apis/rate-limits#rate-limiting-methods

Thanks,

drichter@sourceofgoods.com

I have a few apps in the app store and haven’t ran into rate limit issues. Every once awhile something will popup but then a refactor to a better algorithm or setting a slight delay solves the problem.

If you’re concerned with rate limits, check out the GraphQL API. You can optimize your requests by only grabbing the data you need - they base it off of “points” rather than requests.

Thanks,

I run a stand alone PHP script updating 49 product variants, inventory and pricing. It takes about two and a half minutes to complete the following loop of 49 products, which were previously import into my test Store. Which is pretty slow. Suppose there are 30,000 product variants to update, in one seller account. That would take ~24 hours to complete ! Absolutely unworkable.

// Variants.
foreach($variantsArray as $variant) {

$shopifyVariantId = $product[‘variants’][0][‘id’];
$shopifyInventoryItemId = $product[‘variants’][0][‘inventory_item_id’];
$shopifyVariantPrice = number_format($product[‘variants’][0][‘price’], 2);
$shopifyVariantQty = number_format($product[‘variants’][0][‘inventory_quantity’]);

if($this->logVerbose) {
$this->log(“sogProductQty [” . $sogProductQty . “] – shopifyVariantQty[” . $shopifyVariantQty . “]”);
$this->log(“sogProductPrice [” . $sogProductPrice . “] – shopifyVariantPrice [” . $shopifyVariantPrice . “]”);
}

// If either price or quantity has changed.
if($sogProductQty != $shopifyVariantQty || $sogProductPrice != $shopifyVariantPrice || $this->doAll) {

// Modify an existing Product Variant, price.
// PUT /admin/api/2020-07/variants/{variant_id}.json
// https://shopify.dev/docs/admin-api/rest/reference/products/product-variant#update-2020-07
$updateData = array(
‘variant’ => array (
‘id’ => $shopifyVariantId,
// Not supported
//‘inventory_quantity’ => $sogProductQty,
‘price’ => $sogProductPrice,
‘compare_at_price’ => $sogProductPrice + 1,
‘title’ => $sogProductName,
‘taxable’ => 0 ));

if($this->logVerbose) {
$this->log(“PUT product Variant [” . $k . “], Sku [” . $shopifySku . “], data [” . print_r($updateData, true) . “]”);
}
$request = $authUrl . ‘variants/’ . $shopifyVariantId . ‘.json’;
$this->log(“authUrl [” . $request . “]”);
$resp = $this->shopifyCurlP($curlPut, $request, $updateData);
$this->log(“resp [” . var_dump($resp, true) . “]”);

// Now do the inventory
// POST /admin/api/2020-07/inventory_levels/set.json
// https://shopify.dev/docs/admin-api/rest/reference/inventory/inventorylevel#set-2020-07
$updateData = array(
‘location_id’ => $locationId,
‘inventory_item_id’ => $shopifyInventoryItemId,
‘available’ => $sogProductQty );

if($this->logVerbose) {
$this->log(“POST Inventory Levels [” . $k . “], Sku [” . $shopifySku . “], data [” . print_r($updateData, true) . “]”);
}
$request = $authUrl . ‘inventory_levels/set.json’;
$this->log(“authUrl [” . $request . “]”);
$resp = $this->shopifyCurlP($curlPost, $request, $updateData);
$this->log(“resp [” . var_dump($resp, true) . “]”);

}

Does anyone know if, and if so how, I can use GraphSQL to do bulk updates on Inventory and Pricing for large numbers of products in a reasonable time frame ? And if it would even be guaranteed to be a serious solution to the problem. I’ve tried doing these product updates using the regular Shopify API, and while this does work (it does update the data) the performance is unworkably slow, requiring over two minutes to perform the curl operations to update Pricing and Inventory on a mere 49 product variants. When that product portfolio reaches into the tens of thousands that’s going to take many days to complete ! I need an actual workable solution. I’m not even sure that if I invested the time to try this in GraphSQL that it would solve this problem.

Can Anyone advise me, and perhaps provide some useful detail, on what the usual method / mechanism is for large scale and regular automated product Inventory and pricing updates to an entire large product portfolio is in Shopify ? Because it can’t be by using the regular Shopify API if it’s going to work this slowly ?

Please Advise, Thanks !

Hey drichter,

Did you ever figure out the solution to this issue? I’ve been wondering the same exact thing as you. Right now I am using the Shopify API for a single client and end up pushing updated inventory data to their store via the REST API. On a daily basis I’d say there are approx 2.5k updates needing to be made and we get those completed in 30-40 minutes. In addition to this, knowing that we can push 2 requests per second using the REST API then we can aim to push approx 172,800 updates into Shopify in a 24 hour period. These numbers will definitely work for our business in the short-term as we build our client base, but it does concern me since if we were to be performing price updates along with this then we’d need to perform a separate API call for each. All it takes is a few clients with a large number of products and I’d be hitting those limits pretty easily every day. Let me know if you came upon a solution to this!

We would also like the Shopfiy Team to shed some light on this; we have over 12,500 SKUs to update inventory levels on, ideally absolute values and not deltas too

i am having an issue with the Shopify Connector Orders, Shopify is releasing the last completed day until 19:59, I am not sure why, when I check each order on the report I see every single order until yesterday at 19:59

any one having the same issue?