Case Studies / E-Commerce Pricing Sync
E-Commerce Google Shopping GoDataFeed Automation

Their Entire Sale Weekend Was Wiped Out by a Price Mismatch. We Made Sure It Could Never Happen Again.

When Google detects that the price shown in your ad doesn't match the price on your website, it pulls your products offline — instantly, and without warning. For this client, it happened right as they launched their biggest sale of the year. Here's what we built to fix it permanently.

100%

Policy Compliance

10 min

Sync Interval

$0

Lost Ad Revenue Since

The Problem

All 5,000+ Products Disappeared From Google Shopping — Right During a Sale

This client was running a healthy Google Shopping campaign with thousands of products. Their website runs on NetSuite, and they were using GoDataFeed — a feed management platform — to take their product data from NetSuite and send it to Google Merchant Center. For regular, everyday pricing, the setup worked fine.

The problem surfaced when they ran a sale. The website updated prices dynamically using JavaScript — meaning prices changed on-the-fly in the browser rather than being stored as a simple static number. GoDataFeed's standard mapping wasn't built to handle this. It kept pulling the original price and failed to recognise that a sale was in effect. So while the website was showing sale prices to customers, the Google Shopping feed was still advertising the full price.

Google noticed. The price in the ad said one thing. The price on the website said another. That's a policy violation, and Google's response is immediate: every affected product is disapproved and taken offline.

They launched their sale on Friday evening. By Saturday morning, their entire Google Shopping presence had vanished. No ads. No traffic. No sales through that channel — for the entire long weekend.

The root cause was clear but the fix wasn't simple: JavaScript-calculated prices can't be read by standard feed crawlers. GoDataFeed had no way to see them. Something different was needed.

"They launched their sale on Friday evening. By Saturday morning, their entire shopping campaign was offline. By the time they realised what had happened, they'd already lost the busiest part of the weekend."

Our Solution

We Built an Automated Pricing Bridge — It's Been Running Ever Since

The goal was a "set and forget" system — one that required absolutely zero involvement from the client, even during sales. We built a three-component closed loop that runs 24/7 and self-corrects when anything goes wrong.

How the system fits together

NetSuite Website
Google Apps Script Scraper
Google Sheets (Live Price CSV)
GoDataFeed Merge Import
Google Merchant Center
1

Pull the Full Product List From GoDataFeed

GoDataFeed manages the product catalogue that gets sent to Google — it holds the product IDs, URLs, names, and base pricing pulled from NetSuite. We start there. Every time our scraper runs, it fetches GoDataFeed's live product list to get the ID and web address for every item in the catalogue. This ensures the scraper always has an up-to-date list and never goes looking for a product that's been discontinued.

2

Bypass the JavaScript Price — Go Straight to the Source

This was the key technical challenge. Because prices are calculated on-the-fly by JavaScript in the browser, standard feed crawlers — including GoDataFeed's native scraper — can't see them. They read the page before the JavaScript runs, so they always get the wrong number.

We bypassed the browser entirely. The NetSuite platform exposes a behind-the-scenes data API that returns full product details in a machine-readable format — including the actual current customer price, already calculated. By querying that API directly for each product URL, we get the real live price every time, regardless of what JavaScript might be doing on the frontend.

3

Work Through the Catalogue in Batches — 24 Hours a Day

With 5,000+ products to check, we can't hit the API for all of them at once — Google's script execution environment has a 6-minute time limit per run. So we built a batching system: every 10 minutes, the script processes roughly 150 products, saves the prices to a Google Sheet, then picks up where it left off on the next run.

The full catalogue takes around 5 to 6 hours to cycle through, then it immediately starts again from the top. It never stops. It runs around the clock, every day. If a product fails for any reason, it logs the error to a separate tab in the Sheet and sends a daily summary email to the team. If the scraper ever gets into a stuck state, a reset function starts it over cleanly from the beginning.

4

GoDataFeed Picks Up the Live Prices and Merges Them Into the Feed

The Google Sheet is published as a live CSV file. GoDataFeed is configured to fetch that CSV on a regular schedule and import it as a "Supplemental Import" — a merge file that gets stitched on top of the main NetSuite product data. It uses the product ID as the matching key, so every scraped price lands on exactly the right product record.

This means GoDataFeed always has two prices for each product: the regular price from NetSuite, and the live scraped price from the website. The next step decides what to do with them.

5

A Single Rule Applies — and Removes — Sale Prices Automatically

Inside GoDataFeed, we set up one rule: if the scraped live price is lower than the regular price, and the scraped price is greater than zero, mark it as a sale price in the feed.

The moment a sale starts on the website, the scraped price drops below the regular price and the rule kicks in — Google Shopping shows the sale price with the original price crossed out, which typically improves click-through rates during promotions. When the sale ends and prices return to normal, the scraped price matches the regular price again. The rule no longer triggers. The sale price field clears. Google automatically updates the ads to show the full price. Nothing needs to be manually touched at any point.

The Results

Zero Violations. Zero Manual Work. Zero Revenue Lost.

100%

Policy Compliance

Google has never flagged a price mismatch since the system went live.

10 min

Sync Cycle

Prices across all 5,000+ products are always within 10 minutes of the live website.

$0

Lost Ad Revenue

Every sale since has run on Google Shopping without a single product going offline.

What Changed for the Client

  • They can run sales whenever they want — flash sales, weekend promotions, clearance events — without touching a single setting in Google Ads.
  • Google automatically shows the sale price in the Shopping ad, complete with the original price crossed out — which typically increases click-through rate during promotions.
  • When the sale ends, everything resets automatically. No manual cleanup, no risk of forgetting to revert a price, no leftover sale prices confusing customers.
  • The monitoring system means someone always knows if anything stops working — before it becomes a problem that costs money.

Does This Sound Like Your Business?

This solution is a good fit if your store does any of the following:

You run sales, seasonal discounts, or promotional pricing

You have hundreds or thousands of products on Google Shopping

Your website prices update automatically (dynamic pricing)

You've had products disapproved before and don't want it to happen again

You're currently updating your feed manually — and it takes too long

Google Shopping is a meaningful sales channel you can't afford to lose

You use GoDataFeed (or a similar feed management tool) and it's not handling sale prices correctly

We've implemented this kind of solution for e-commerce stores using GoDataFeed, DataFeedWatch, and custom feed setups. If your store exposes live pricing data — and most modern platforms do — we can build the bridge that keeps Google Shopping in sync automatically.

Common Questions

Had a Price Mismatch Issue? Let's Fix It Permanently.

We'll review your Google Merchant Center account, identify what's causing disapprovals, and tell you exactly what we'd build to keep your products live — no jargon, no surprises.