Google Merchant Center

Push your catalog to Google Merchant Center through the Google app, with one install per store and one Merchant Center account per sales channel.

Google Merchant Center is one capability of the Google app (slug google-youtube). There is no app named "Google Merchant Center" in the marketplace, and the same install also covers Google Ads campaigns (Performance Max, Shopping, and Search) and GA4 conversion tracking. It pushes your Brainerce product catalog to Google Shopping so it appears across Google Search, YouTube, and Discover.

A plain Search campaign (text ads, no product feed) does not need this Merchant Center connection at all — only Performance Max and Shopping campaigns pull from the catalog this page describes. In the dashboard's campaign wizard those two campaign types advertise either every synced product or a chosen set of up to 200 products or variants. A product can only be chosen once it is published to the sales channel, enabled for Google and synced to Merchant Center under the feed ids prod_<productId> (simple product) or var_<variantId> (each variant). A campaign's product selection is made at creation and is not editable from Brainerce afterwards. Creation is asynchronous and idempotent: the dashboard sends a clientRequestId, repeats of the same request return the same request record, and a request whose outcome Google did not confirm is never retried automatically. See Run Google Ads campaigns.

Per-storefront connections

Google is a CHANNEL-scoped app, so you install it once per store, then from inside the app's settings page you connect each storefront to its own Google Merchant Center account:

  1. Open the Marketplace → Google → Install. One AppInstallation row is created.
  2. Open the installed app from your Apps page. Scroll to the Connected sales channels panel.
  3. Click Connect channel → pick the storefront → a new pending channel connection is created.
  4. Click Set up Google on that channel to open the five-step wizard (Connect, Requirements, Detect, Verify, Confirm). It runs the OAuth handshake (Merchant Center scope only; Ads and Analytics ask for their own scope later), lets you link or enter a Merchant Center account, claims the storefront, and saves the target country and content language. The tokens land on the channel connection row, not the install itself. Merchant-facing walkthrough: Set up Google and connect Merchant Center.
  5. Click Sync now on the Merchant Center tab to push the products published to the channel (the channel must be LIVE).
  6. Repeat for each additional storefront. A merchant running shop-il.com and shop-us.com ends up with one Google install holding two channel connections, each connected to its own Merchant Center account with the right currency, language, and tax policies.

Once a channel is connected, the connector only pushes products that are published to that channel (via Sales Channel publishing). Products published to channel A only won't show up in channel B's Google feed.

Product URLs

Each pushed product carries a link attribute that points back to the bound storefront, and Brainerce builds this from the channel's domain + productUrlTemplate. To make sure the link is correct:

  1. Open the Sales Channel's settings.
  2. Set Domain to the public https URL of the storefront (e.g. https://shop-il.com).
  3. Set Channel mode to LIVE. This is a Brainerce-side gate, not a Google one: the sync short-circuits on a non-LIVE channel and returns skipped: 'test-mode' without contacting Google at all. Nothing is pushed, nothing is rejected, and there is nothing to find in Merchant Center diagnostics. If a feed is empty, check the channel mode first.
  4. Set Product URL template to the path your storefront uses for product detail pages (default: /products/{slug}).

The connector substitutes {slug}, {id}, {handle}, and {domain} tokens automatically. Slugs with non-ASCII characters (Hebrew, Arabic, …) are percent-encoded to satisfy Google's RFC 3986 requirement.

Product feed URLs (scheduled fetch, no OAuth)

Separately from the push above, every sales channel serves two public, read-only feed files that program servers fetch on a schedule. In the dashboard they are listed with copy buttons under Apps → Google → Merchant Center → Product feeds, and you do not need a Google account to get them.

URLFormatConsumers
GET /api/feeds/{connectionId}/google-shopping.xmlGoogle Shopping RSS 2.0 (g: namespace)Google Merchant Center (scheduled fetch), Microsoft Merchant Center, Perplexity's merchant program
GET /api/feeds/{connectionId}/openai-products.jsonlOne JSON object per lineOpenAI's ChatGPT shopping feed

{connectionId} is the channel's public vc_... id. What a feed contains:

  • Only products that are active and published to that channel (the same publish gate as the storefront API). A channel that is disabled, a suspended store, or a channel with no domain answers 404, because an item link is mandatory in both specs.
  • A variable product is one item per active variant, grouped by item_group_id. A kit is left out of both feeds for now, because its price and stock come from its components.
  • Sale prices follow the same windows as the cart. Item links are built from the channel's domain and Product URL template, exactly as in the push. condition is always new, and an item with neither a GTIN nor an MPN is sent with identifier_exists = no.
  • The XML omits review ratings (Merchant Center takes ratings through its own program). The JSONL adds review_count, star_rating and up to 8 q_and_a pairs from the product's FAQ.
  • At most 5,000 products per feed, newest updated first. Responses are cached for 15 minutes and throttled to 30 requests per minute per client, so a price change can take up to 15 minutes to show in a feed.

Each fetch is counted by the requesting agent (Google, Microsoft, Perplexity, OpenAI and others) and shown as "AI reads" in the SEO Autopilot AI visibility tab. The feed does not require the channel to be LIVE: that gate applies to the push only.

Domain verification

Google requires you to claim your storefront before a feed is approved. The connector exposes a /merchant/claim-homepage endpoint that automates this. It pulls the bound channel's domain from the install and submits the verification request to Google. (/sync/claim-homepage belongs to the retired standalone google-merchant-connector service and is not routed.)

If you ever change a channel's domain, re-run Claim homepage from the app's settings page.

Disconnecting and uninstalling

  • Disconnect one channel from the Connected sales channels panel inside the app. The channel's encrypted OAuth tokens are dropped; other connected channels keep running.
  • Uninstall the whole app (from the marketplace card or the danger zone in the app's settings) removes the AppInstallation and cascades-deletes every channel connection under it. It also cascades away every ExternalResourceMapping row, which is the Brainerce-product-to-Merchant-Center-offer map. A reinstall therefore starts with no knowledge of what was already pushed and will re-create offers rather than update them, so clear the Merchant Center account (or expect duplicates) before reconnecting.
  • Deleting a Sales Channel that has an attached connection cascades the connection row away. The Google account tokens are gone with it, so re-add the channel and reconnect to get back.