Both shopify.productSearch.searchProducts() and shopify.productSearch.fetchProductWithId() silently fail at the same time on certain devices, while the native Shopify POS search bar continues to work correctly for the same products.
What we observed
In a screen recording from one of our café locations:
searchProducts({ queryString: "latte" }) returns 0 results, we have 20+ products containing “latte” in their title. The same query via the native POS search bar returns results immediately.
fetchProductWithId(id) returns the product shell but with empty variants, the product’s title, id, minVariantPrice are populated correctly but variants are missing.
Both failures happen simultaneously on the same device/session.
Hypothesis
The shopify.productSearch API appears to work against a local on-device product catalog cache, while the native search bar hits the live Shopify API directly. When the device cache becomes desynced or partially corrupted for a location, all productSearch calls fail, but since the native search bypasses this cache, it continues to work.
The partial data returned by fetchProductWithId (title/price present, variants missing) supports this: it looks like some fields are indexed separately and survive a partial cache corruption, while the full variant data does not.
Workaround
Baristas report that restarting the POS app resolves the issue.
I’ve also now deployed a workaround/test-fix to “refetch” the variants with fetchProductVariantsWithProductId, if the variants.length does not match numVariants but i dont know if this explicit call will work or not as fetchProductWithId already supposed to have the variants in there.
After some investigation, we’ve discovered that it’s happening in multiple locations, but only some baristas were reporting it, so not tied to a certain location anymore.
Thanks for sharing!
We’ve investigated this on our end, and found that for your use case you would need to use fetchProductVariantsWithProductId(id) which returns all variants instead of fetchProductWithId(id) which will only return the first variant.
As I’ve written earlier I’m already using the fetchProductVariantsWithProductId(id) as a fallback if and when the fetchProductWithId(id) does not return full variants.
But the funny thing is, it does almost always. This expectation is also stated in the docs:
So, there’s some bug, somewhere, with the local caching strategy somewhere? Idk, I guess that is for you guys to figure out.
Also, the productSearch calls are also silently failing (not returning anything), when there’s an incident with the fetchProductWithId(id) only returning one variant, with products that are clearly searchable when the native search bar is used or the shopify pos app is restarted. And this productSearch API sadly does not have a fallback/alternative that I can use.
You can see that the scan data is there and scanning worked fine, but the searchProducts API returns nothing. You can immediately scan the same product afterward through the native search or in our extensions again after closing down and restarting the Shopify POS app.
I assume everyone can imagine how annoying it would be to dismiss, relaunch, and log in every time this happens.
Since that’s ruled out, we’ll keep investigating this issue. The detailed information you’re sharing here definitely helps with our investigation, thanks
@Paige-Shopify just wanted to bump this, is there any update here?
We believe this Data Synchronization => Product Search API data corruption issue has recurred starting earlier this year since we last reported it in August 2025 (and were told it was fixed).
We don’t have the specific logs, but based on merchant feedback, we believe we have experienced instances of where the price is missing a decimal (e.g., 2.5 vs. 2.50) which has caused an issue with the Shopify formatMoney helper function we use.
And in addition, similar issues around products / variants objects that @Gunes described.
As mentioned in my original post, it only randomly affects a subset of merchants and it’s difficult to reproduce; only a Reset Account in iOS Settings seems to solve it.
Hi @derrick, thanks for sharing the post and that additional context. The missing decimals issue is interesting; I’ll look into whether it has the same root cause or needs separate investigation.
I’ll provide an update here once we have more information. This is in our backlog at the moment due to current priorities.