PPCDATAFEED

Blog · Guides

Price and stock mismatches: the disapprovals you cause by updating the feed once a day

A price changes at 09:00, the feed refreshes at 06:00 - and for 21 hours the ad promises a price the page does not honour. What Google does about it, what it costs, and how hourly updates and API pushes remove the problem.

PPCDATAFEED team · 21 September 2026 · 7 min read

Price and stock mismatches: the disapprovals you cause by updating the feed once a day

Every store has a version of this day. Marketing raises a price at 09:00, or a bestseller sells out at lunch, or a weekend promotion ends on Monday morning. The product page changes immediately. The feed does not - it was generated at 06:00 and will be generated again tomorrow at 06:00. In between, the ad is a promise the page will not keep.

Shoppers notice, and so does Google. This article explains what happens on Google’s side when the feed and the page disagree, what it costs beyond the disapproval itself, and how to make the window small enough not to matter.

What Google does when the feed and the page disagree

Google crawls landing pages and compares what it finds with the feed. Two mechanisms are involved, and they are often confused:

  • Automatic item updates. If your page carries structured data, Google may simply correct the price, availability or condition in the ad to match the page. Google is explicit that this is a safety net, not a process: automations "aren’t a replacement for regular updates of your product data. They’re designed to fix temporary problems … for a small percentage of your products" - and where the extractors cannot read the page, "your products will be subject to product-level disapprovals" (Automatic item updates).
  • Mismatch disapprovals. When a mismatch between the landing page price and the feed price is found, "the product with the mismatch may be disapproved". Disapproved products stop showing in ads and free listings; Googlebot re-crawls them "over the next few hours or days", and a requested review can take up to 12 hours (How to fix: Mismatched product price). Availability works the same way - a product shown as in stock that is sold out on the page is a mismatch, and Google points out you are "paying for wasted clicks" until it is fixed (How to fix: Mismatched product availability).

Google’s recommended fix in both articles is not a trick - it is to "set up a schedule for product data uploads" or send updates through the API, so the data is right in the first place.

What a stale feed actually costs

A price changes at 09:00. With a feed updated once a day at 06:00 the ad shows the old price for 21 hours; with a feed updated every hour, for under one hour
  • Paid clicks that cannot convert. A shopper who clicks a €64.99 ad and lands on a €74.99 page leaves. You paid for the click; the page did the opposite of selling.
  • Disapprovals that outlive the mismatch. Once an item is disapproved, it stays off until the re-crawl confirms the fix - hours or days after your feed was already correct. A daily feed can keep a product in this loop for most of a week.
  • Lost ranking history. Products that go dark lose impression share and, in Performance Max, the learning attached to them; when they come back they start from further behind.
  • Account-level risk. Persistent mismatches are treated as misrepresentation. That is rare and slow to build up, but it is the one problem in this list that a single feed fix does not undo.
The arithmetic is simple: with a daily update at 06:00 a change at 09:00 stays wrong for 21 hours; with an hourly update, for at most 60 minutes. Nothing else in feed management reduces mismatches by that factor.

The three sources of mismatch - and the fix for each

  1. Timing. The most common one: the feed is simply older than the page. Fix: update the source hourly and regenerate every export from it on the same run. The image below is the schedule of a data source in PPCDATAFEED set to run every hour - the source is re-read, rules run, and every export built on it is rewritten atomically, so the feed link never serves a half-written file.
  2. Mapping. The feed sends price from a column that is not the price the page shows - a net price, a price before a customer-group discount, or a sale price with an expired sale_price_effective_date. Fix: map price to the displayed price, send sale_price with its effective dates, and use a rule to blank the sale price outside the window.
  3. Availability vocabulary. The shop says “2-3 days”, “last one”, “on request” and the feed maps all of it to in_stock. Fix: a rule that normalizes stock values to in_stock, out_of_stock, preorder or backorder, and keeps sold-out products in the feed as out_of_stock rather than deleting them - Google asks for exactly that, and warns not to use out_of_stock as a way to pause products (use the pause attribute, up to 14 days).
PPCDATAFEED data source schedule: schedule switched on, frequency Hour timer, schedule interval Every hour, time zone (UTC+02:00) Vilnius

When hourly is not fast enough: push instead of fetch

An hourly feed is only half the chain. Merchant Center fetches a scheduled file on its own timetable, so the freshest export still waits for the next fetch. For accounts where prices or stock move all day - marketplaces, electronics, flash sales - PPCDATAFEED’s API Connections send the products to Merchant Center directly on their own schedule instead of leaving a file to be collected. Each run reports how many products were updated or deleted. For most stores the fetched feed is fine; for the ones above, the API connection is the difference between a mismatch window measured in hours and one measured in minutes.

The same freshness helps everywhere the feed goes: Meta reads its data feed on the schedule you set, and ChatGPT’s advertising feed expires items that are not refreshed within two weeks. One source updated hourly keeps all of them honest at once.

A short checklist

  • Source update frequency matches how often prices and stock change - hourly for most stores, every 2-4 hours for slow catalogs.
  • price is the price the page displays, in the page’s currency; sale_price carries effective dates.
  • Availability values are normalized by rule; sold-out products stay in the feed as out_of_stock.
  • Structured data on product pages is correct - it is what automatic item updates read.
  • Merchant Center diagnostics checked weekly for “mismatched value” items; each one is a symptom with one of the three causes above.
  • Fast-moving accounts push through the API rather than waiting for a fetch.

A feed is a promise about what a shopper will find on the page. The shorter the time between the page changing and the promise being updated, the fewer clicks you pay for that could never have sold.

Sources

Try it on your own feed.

30 days free, our team sets the first feeds up with you.

No credit card · Setup included · Cancel anytime