← All insights
Insights

The Magento product feed: how to get one out of Magento 2 and Adobe Commerce, and what to fix before it reaches an ad network

You need a product feed URL. Google Merchant Center wants one, Meta wants one, and the agency asked for it yesterday. You open the Magento admin and look for the export. There isn’t one. Magento 2 and Adobe Commerce have never shipped a product feed, and the Google Shopping channel Adobe once bundled was switched off in 2020.

Here is the route every Magento store takes instead, the four settings that decide whether the feed is any good, and the fixes to make before the first ad network reads it.

A feed extension builds the file. Magento just serves it

Every Magento feed comes from an extension. It reads your catalog, writes a file in the Google Shopping format, saves it under your store’s media folder and gives you a fixed address for it. Mirasvit and Amasty sell established ones, and the Adobe Commerce Marketplace lists a dozen more under “product feed”. They all do the same job. If a developer runs your store, this is an afternoon for them.

Start the feed from the extension’s Google Shopping template. One feed in that format is read by Google, Meta, Microsoft, Pinterest and most other networks as it is, so you build it once. Then check four settings before you copy the URL.

  • The schedule. The extension rebuilds the file on Magento’s cron. Set it to run at least once a day, and more often if prices or stock move during the day. A feed that rebuilds weekly advertises last week’s stock, and a feed that was built once by hand advertises the day you set it up, forever.
  • Which products. Export the simple products, not just the configurable parents. A configurable product in Magento is a shell. The sizes and colours people buy are its simple children, each with its own price and stock. Most extensions let you export the children and write the parent’s ID into item_group_id. That is the setting you want. The networks then know the 12 sizes are one shoe, and each size carries its own availability.
  • The price pair. Map the regular price to price and the special price to sale_price, and make sure the special price only appears while its date range is active. Many stores export the special price as the price. The ad then shows the sale price with no saving next to it, or keeps showing it after the sale ends.
  • Stock, not status. Bind availability to the quantity, not to the product’s enabled flag. A product can be enabled in Magento and have nothing left to sell.

Open the feed URL in a browser. You should see product data, with a title, a price, an image link and an ID on every product. If you see an empty file, the cron has not run yet.

The feed runs. The ads still look wrong

A Magento feed that validates is not the same as a Magento feed that sells. Three problems show up on almost every store, and none of them is a bug in the extension.

  • Titles written for the catalog, not the ad. Magento product names are short because the product page shows everything else. “Oslo Chair” works on a product page. In a Shopping ad it loses to “Oslo Dining Chair, Solid Oak, Set of 2” every time. The brand, the material and the size belong in the title.
  • Barcodes that live in a custom attribute. Magento has no built-in GTIN field. Stores keep it in an attribute called ean, barcode orupc, and the feed template does not know that. Products arrive at Google with no gtin, and Google limits where they show. Map the attribute, and read GTIN, MPN and brand: the product identifiers your feed needs, and what to send when a product has none for the products that have none.
  • Images straight from the product page. The feed sends the base image. On many Magento stores that is a lifestyle shot, a photo with a badge on it, or a 400-pixel thumbnail. Google wants the product on white, Meta wants something worth stopping for, and neither wants a badge baked into the pixels.

You could fix all of this in Magento. That means a developer, an attribute set change and a re-export for every network that wants something different. The faster route is to fix it in the feed, after Magento and before the networks.

One Magento feed in. A feed per network out

Renable imports the feed URL your extension serves and re-reads it every hour, so the store stays the source of truth. Then it publishes a feed for each network from that one import. Nobody touches Magento again.

  • Rules fix the data. Build the title from brand, name, material and size. Map ean to gtin. Set availability to out of stock at zero. Exclude the products a network should never see. Each rule is a preview on your real products before it is published.
  • Images get processed. Backgrounds come off, the product gets its clean white shot for Google, and your ad templates put the price, the review stars and the sale badge on top for Meta. The original stays as the fallback.
  • Each network gets its own columns. The Google channel writes Google’s fields, the Meta channel writes Meta’s, the Criteo channel writes its inverted price pair. The Fields tab shows the fill rate for each required field from the last run, so a missing barcode is a number on a screen, not a disapproval email three days later.

Or hand the URL to Aimée, the AI agent inside Renable.

Aimée

Here is our Magento feed: pinecrafthome.com/media/feeds/google.xml

Imported: Pinecraft catalog

1,208 products, Google Shopping XML, re-read every hour

Variants grouped by item_group_id: 312 families

Three things I would fix before this goes to Google. 214 products have no gtin, but there is an attribute called ean on 190 of them, so I drafted a rule that maps it across. 41 products show a sale price with no end date. And the titles are short, so I drafted one that adds the material and the size. Want to see them on real products?

Show meLater

The extension steps are in the help center: Getting a product feed from Magento. For the other platforms, read How to export a product feed from Shopify, WooCommerce, Magento and BigCommerce.

Got a Magento feed URL? That is the whole setup

Paste it in and Aimée drafts the fixes and the channels for every network you run. Every account starts with a 30-day free trial.