If Google Merchant Center reports “offer not found” (or “no offers found” / “offer does not exist”) when you upload your local inventory feed, the feed itself is fine — the problem is that the items it describes have no matching product to attach to. This guide explains the relationship between a primary product feed and a local inventory feed, why the error happens, and exactly how to fix it in CTX Feed so your in-store availability data links up correctly.
Why this error happens
A Local Inventory Ads setup in Google Merchant Center uses two feeds that work together:
- The primary product feed describes each product — title, description, price, images, and the all-important product
id. This is your normal Google Shopping feed. - The local inventory feed describes store-level data only — for each
store_code, the item’s local price and quantity. It does not re-describe the product. Instead, it links back to the primary feed by matching theid.
“Offer not found” means Google received a local inventory row for an id that has no matching offer in a processed primary feed for the same country and language. The local feed is pointing at a product Google does not (yet) have on file.
The usual causes
- The primary feed was not uploaded or processed first. The local feed was submitted before the product feed existed or finished processing.
- The
idvalues do not match between the two feeds. Out of the box both CTX Feed templates send the WooCommerce product ID asid, so they match. They stop matching if you remappedidin one feed only (for example to the SKU) or added a prefix or suffix to one of them. - The two feeds export variations differently. If one feed uses All Variations (each variation’s own ID) and the other Variable Products (Parent) (the parent’s ID), the variation IDs exist in only one of them.
- Country or language mismatch. The primary feed targets one country/language and the local feed targets another, so Google looks for the offer in the wrong catalog.
- The products are disapproved or expired in the primary feed, so there is no active offer to attach to.
store_codedoes not match the store codes registered in your Google Business Profile / Merchant Center store list.
How to fix it in CTX Feed
Work through these in order.
- Create and upload the primary Google Shopping feed first. In CTX Feed, build a Google Shopping feed on the Make Feed screen, generate it, and submit its feed URL to Merchant Center. Let Merchant Center fully process it before you touch the local feed. (See How to upload WooCommerce product feed to Google Merchant Center.)
- Build the local inventory feed with the Google Local Product Inventory template. Pick Google Local Product Inventory in the Template dropdown — not Google Local Inventory Ads, which is a different, product-level feed without a
store_coderow. The template pre-mapsstore_code,id,quantity,price,sale_price,availabilityand the pickup fields; the required ones areid,store_code,quantity, andprice. - Make the
idmatch the primary feed exactly. This is the fix for most “offer not found” cases. Both templates start withidmapped to Product Id, so if you haven’t changed either, they already match. If you changed the primary feed’sid(for example to the SKU) or added a prefix, make the local feed’sidrow identical. Also set Include variations to the same option in both feeds. - Set
store_codeto your real store codes. Thestore_coderow starts empty, so fill it in. The values must match the store codes you registered for your physical stores in Merchant Center / Google Business Profile. - Match country and language. Configure the local feed for the same country and language as the primary feed so Google looks for the offers in the right catalog.
- Confirm products are approved. In Merchant Center, make sure the products in your primary feed are approved (not disapproved or expired). A row can only link to an active offer.
- Re-upload the local inventory feed and re-check the diagnostics. Give Merchant Center time to re-process; the “offer not found” items should resolve once the ids match approved offers.
Tips and troubleshooting
- Match on
id, not title. Google links the two feeds strictly byid. Identical product names are not enough — theidstrings must be character-for-character identical. - Regenerate after any change. After you adjust the
idmapping orstore_code, regenerate the feed in CTX Feed so the file Google fetches reflects the change, then re-submit. - Only some items fail? The mismatch is item-specific — usually those products are missing from the primary feed, disapproved, or have a different
id. Compare the failingidvalues across both feeds. - Local inventory is a program you enable. “Offer not found” can also appear if the Local Inventory Ads / free local listings program is not set up for your account. Confirm the program and your store list are configured in Merchant Center.
Related guides
- How to upload WooCommerce product feed to Google Merchant Center
- How to map store category with merchant category
- Add GTIN, EAN, MPN, UPC, ISBN to products and make feed
- How to solve microdata error for Google Merchant
