Skip to content
ChangelogBook a demoSign up

Google Retail

Ensure all of your Google Retail listings match your inventory

Google Retail lists your products across Google's shopping surfaces, including Shopping ads, free listings, and vehicle ads. Hightouch writes product listings from your model into a Google Merchant Center account through the Merchant API, keeping your catalog in sync with your warehouse.

Supported syncing

Sync TypeDescriptionSupported Sync ModesAPI Reference
ProductsSync records from your model as product listingsUpsertInsert a product ↗

For more information about sync modes, refer to the sync modes docs.

Connect to Google Retail

You need access to a Google Merchant Center account to sync listings.

Go to the Destinations overview page and click the Add destination button. Select Google Retail and click Continue.

For the Authentication method, select Log in to Google Retail and log into the Google account that has access to your Merchant Center account. Once you're redirected back to Hightouch, enter your Merchant ID to complete setup.

Migrate your Merchant Center account

The Merchant API reads and writes through data sources, and that service is only available to Merchant Center accounts migrated to single locale feeds and data target split. If your account hasn't been migrated, complete the migration in Merchant Center before syncing. See Google's data sources overview for the migration steps.

Sync configuration

Once you've set up your Google Retail destination and have a model to pull data from, you can set up your sync configuration to begin syncing data. Go to the Syncs overview page and click the Add sync button to begin. Then, select the relevant model and the Google Retail destination you want to sync to.

Products

Each sync writes product listings into one Merchant Center account. Select the Product category that your products are listed under. If your model spans several categories, map the category from a model column instead of setting one value for the whole sync.

Configure record matching

Select the model column that contains your Offer ID, the identifier that uniquely identifies each product within your Merchant Center account.

Google identifies a product by the combination of its offer ID, content language, feed label, and channel, not by offer ID alone. Map Content language and Feed label on every sync. If you map Target country instead of Feed label, Hightouch uses the target country as the feed label. Rows missing these values fail, and deletes can't locate the product to remove.

Refer to the record matching docs for more information.

Field mappings

Map model columns to Google's product attributes. Attributes you leave unmapped aren't sent. See Google's product data specification for what each attribute means and which ones your products require.

Use Custom attributes for merchant-provided attributes that the API doesn't expose as named fields. Hightouch sends every custom attribute value as a string.

Hightouch converts your mapped values into the formats the Merchant API expects, so you can map values as they're stored in your warehouse:

Mapped valueSent to Google as
Price value and currencyAn amount in micros plus a currency code
A date such as 2026-09-18A timestamp at midnight UTC
A start and end date separated by a /An interval with a start and end time
Enum spellings such as in stock, A+++, or 2 dayThe canonical value the API accepts, such as IN_STOCK, APPP, or TWO_DAY

A price that's mapped but unusable rejects the row rather than reaching Google. This covers an empty value, a value that isn't a number, and a value with no currency, each of which would otherwise list the product at the wrong price.

Values Hightouch doesn't recognize pass through unchanged, so Google's own error names the attribute.

kind, source, taxes, and taxCategory no longer exist in the Merchant API and are dropped before the request. Configure tax settings at the account level in Merchant Center instead.

Vehicle attributes

Products in the Cars, Trucks & Vans (916) category have an additional Vehicle specific options section for vehicle-only attributes such as fulfillment, mileage, and trim. This section appears only when the sync's product category is 916. Read more about vehicle ads attributes in Google's docs.

Configure delete behavior

When a row leaves your model's query results, Hightouch can Delete the product in Google Retail, which removes the product listing from Merchant Center.

Deletes are addressed by offer ID, content language, feed label, and channel. Keep those columns mapped and stable, because a row whose identifying values have changed points at a different product.

Tips and troubleshooting

Behavior and limitations

Each sync replaces the whole product. Hightouch writes products with Google's insert operation, which replaces the existing product listing rather than patching it. Any attribute you don't map is cleared in Merchant Center on the next sync. To preserve an attribute Hightouch doesn't manage, map it.

Hightouch chooses your data source automatically. The Merchant API requires every product write to name a data source. Hightouch resolves one for your account at the start of each run and never stores it on the sync:

  • If the account has the Content API data source that Google created for it, Hightouch reuses it. Products written before the Merchant API migration live there, so reusing it keeps them in place.
  • If the account has exactly one other writable data source, Hightouch uses that one.
  • If the account has no writable data source, Hightouch creates one named Hightouch.
  • If the account has more than one writable data source, the sync fails rather than guessing. Choosing the wrong one would move products out of the source that currently owns them.

Only data sources with an input type of API are eligible. File, UI, and autofeed sources are managed outside the API and are never written to.

Local-channel products need their own data source. Google keeps separate data sources for online and local products. If your model has rows with a Channel of local and the account has no single local-channel data source, those rows fail. Online-channel rows are unaffected.

For Hightouch platform error codes related to Google Retail, see Error codes: Other destinations.

Validate your setup

After a sync run, open Products > All products in Merchant Center and search for one of your offer IDs. Newly written products appear with a Pending status while Google processes them, then move to Active or surface an item-level issue. Google's processing delay means a product can take several hours to become active even though the Hightouch sync succeeded.

Common errors

If you encounter an error or question not listed below and need assistance, don't hesitate to . We're here to help.

Multiple writable data sources

Google Retail: this Merchant Center account has multiple writable data sources ("...") and Hightouch cannot safely choose one. Contact Hightouch support to set the target data source for this sync.

Cause: The Merchant Center account has more than one API data source that Hightouch could write products into. Writing through the wrong one moves products out of the data source that currently owns them, so Hightouch stops instead of choosing.

Solution: Please with the name of the data source the sync should write to. Support can set it on the sync configuration.

Failed to access Merchant Center data sources

Failed to access Merchant Center data sources: ... The Merchant API data sources service requires the Merchant Center account to be migrated to "single locale feeds and data target split".

Cause: The Merchant Center account hasn't been migrated to single locale feeds and data target split, so the Merchant API can't list its data sources.

Solution: Complete the migration in Merchant Center, then re-run the sync. See Google's data sources overview.

No local-channel data source

Google Retail (Merchant API) sync has no local-channel data source but this sync writes local-channel products.

Cause: The sync includes rows with a Channel of local, but the Merchant Center account has either no local-channel API data source or more than one.

Solution: Create a single local-channel data source in Merchant Center, or remove local-channel rows from the model. If the account already has several, to set the one this sync should use.

For error codes returned by Google, see the Merchant API's errors reference.

Live debugger

Hightouch provides complete visibility into the API calls made during each of your sync runs. We recommend reading our article on debugging tips and tricks to learn more.

Sync alerts

Hightouch can alert you of sync issues via Slack, PagerDuty, SMS, or email. For details, please visit our article on alerting.

Ready to get started?

Jump right in or a book a demo. Your first destination is always free.

Book a demoSign upBook a demo

Need help?

Our team is relentlessly focused on your success. Don't hesitate to reach out!

Feature requests?

We'd love to hear your suggestions for integrations and other features.

Privacy PolicyTerms of Service