BunStackDocs

Integrations & API

Product feeds for Google and Meta

Feed addresses per storefront for Google Merchant Center and Meta Catalog, the settings, item ids when you move a storefront and how the feed is cached.

Last updated · 5 min read

Every storefront has a product feed that Google Merchant Center and Meta Catalog fetch.

Where: Storefronts › [storefront] › Feeds.

ReceiverAddress
Google Merchant Centerhttps://<storefront address>/api/feeds/google.xml
Meta Catalog (Facebook / Instagram)https://<storefront address>/api/feeds/meta.xml

The Meta address gives the same content as the Google address. Copy copies an address and Open opens the feed.

Content

The feed has one row per variant. The row has the title with the brand first, a description, a link to the product page with the row's variant selected (?variant=) and the images. It also has the price, sale price, stock status, SKU, weight and category.

  • The description is the product's description. A product without one sends Short description, and a product with neither sends the title.
  • The feed includes only visible, active products in a live storefront. A service is not included: Google Shopping and Meta take goods. Nor is a product with Sold only as an add-on on, see Add-ons.
  • The stock status is the storefront's: in stock when it sells the variant, out of stock when it does not. A variant in the stock mode Out of stock is out of stock whatever its stock. In the mode Automatic the stock above the stock threshold counts. In stock (manual) and Preorder are in stock. A product without variants is in stock. See Stock.
  • The link opens the row's variant even when it is out of stock. The page then shows the variant's price and "Out of stock" ("Slut i lager" in a Swedish storefront), and the button cannot be pressed.
  • Prices are in the storefront's default currency. Add ?currency=EUR for another enabled currency.
  • Every link also has ?currency= with the feed's currency, for example ?variant=…&currency=EUR. The product page opens in that currency, also when Merchant Center fetches it without cookies. The address bar then shows the address without ?currency=, and the currency applies on the next page.
  • This includes the default-currency feed, so Google sees the same price as in the feed. How the storefront picks a currency otherwise: Base currency and more currencies.
  • The product page's canonical address has neither ?variant= nor ?currency=.
  • Shipping is not in the feed. Set shipping in Merchant Center's account settings.

The feed states a reduction the way the storefront does. It never sends the compare-at price.

The item in the storefrontg:priceg:sale_price
Shown as reducedThe lowest price in the 30 days before the reductionThe price in the storefront
Not shown as reducedThe price in the storefrontNot sent

The storefront does not show the item as reduced when the price history does not cover the 30 days. Nor does it when the price was this low within them. See Lowest price before a reduction.

Settings

SettingWhat it doesDefault
Brand for products without a vendor (g:brand)The brand for a product without a vendor. Empty: the feed sends the row without g:brand and with identifier_exists=no. The feed never uses the storefront's name.Empty
Default Google product categoryGoogle's category path, for example "Sporting Goods > Indoor Games > Table Tennis". Meta accepts the same values.Empty
Google category per top-level categoryA Google category of its own for a top-level category, for example clothing.Empty
Low-stock thresholdStock from 1 up to the number gives the row custom_label_0 = low_stock.3
Item id (g:id)What the item id in the feed is made of. See the next section.BunStack ids
Id prefix (optional)Text before the id, for example gla_ or woocommerce_gpf_.Empty

Under the field the page counts the feed's rows: with the vendor as brand, with the brand in the field and without a brand. Enter a brand in the field only if it is the maker of every product without a vendor. A row with a brand and a SKU sends the SKU as g:mpn and identifier_exists=yes.

You set the vendor on the product under Organize › Vendor, or on many products at once with the vendor column in the CSV import.

Item ids when you move a storefront

ChoiceId in the feed
BunStack idsThe variant's id, or the product's id for a product without variants.
Imported product idThe product's source_id, its id in the old shop it was imported from, for a product with one variant. You set it with the source_id column in the CSV import. Variants of a product with several get their SKU.
SKUEach variant's SKU.

A row without the chosen id gets the BunStack id. When two rows have the same id, the second gets the BunStack id, because g:id must be unique.

The GA4 events' item_id uses the same choice and prefix, see Tracking and Google Tag Manager.

Warning: Merchant Center and Meta keep an item's history under its id. A new id makes the item new there. Compare a few rows of the old feed with the feed here before you change the address in Merchant Center. Choose the id and prefix that give the same values.

Cache and errors

  • BunStack caches the feed for 1 hour.
  • On an error the feed answers HTTP 502, never an empty file. Google then keeps the last fetch.

See also