Shopping Feed to Excel

Turn a Google Merchant Center product feed into a spreadsheet — upload the XML, paste it, or give the feed URL. One row per product, Merchant Center attributes as columns, plus a feed check for missing IDs, images, prices and duplicate SKUs. Converted in your browser, no signup.

…or drop it here. Accepts .xml, .rss, .atom and gzipped .xml.gz — RSS 2.0 with the g: namespace, Atom 1.0, or any product XML.

Tried in your browser first; if the shop blocks cross-origin requests the file is fetched through insighthackerz.com once — nothing is stored or logged. Feeds behind a login or an IP allowlist have to be uploaded.

How it works

1. Get the feed: file, pasted XML, or a URL — fetched by your browser, and only through insighthackerz.com when the shop blocks cross-origin requests
2. Unpack gzip (.xml.gz) and decode the charset the XML declaration asks for, locally
3. Detect the product element: <item> for RSS 2.0, <entry> for Atom 1.0, <product> for platform exports
4. Drop the namespace prefix, so <g:image_link> becomes the column image_link
5. Flatten nested attributes into dotted columns: shipping.country, shipping.price, tax.rate, product_detail.attribute_value
6. Join repeated values with ' | ' — several additional_image_link or shipping blocks stay on one row
7. Order columns by the Google product data specification, then write .xlsx (frozen bold header, autofilter) or UTF-8 CSV

About Google product feeds

A Merchant Center feed is XML built for a crawler, not for a person: every product is an <item> holding 20–60 namespaced elements, some of them nested. Opening it in Excel gives you either a collapsed XML tree or a schema-mapping dialog, and opening it in a browser gives you a wall of tags. This converter does the flattening a spreadsheet needs — one row per product, one column per attribute, in the order the Google specification lists them — so you can sort, filter and pivot the feed the way you would any product export.

Nested and repeated attributes are where naive XML-to-Excel converters produce unusable output: they either duplicate the product across several rows or drop everything after the first value. Here nested blocks become dotted columns (shipping.country, shipping.service, shipping.price) and repeated values are joined with ' | ', so a product with three images and two shipping rules is still exactly one row — which is what makes VLOOKUP against your own product export work.

The feed check next to the download is the part that usually pays for the trip: it counts products missing id, title, description, link, image_link, availability or price, flags duplicate IDs (Merchant Center keeps one and silently ignores the rest), titles over the 150-character limit, products with no brand/GTIN/MPN identifier, and how much of the feed carries google_product_category. Those are the disapproval reasons you would otherwise discover a day later in the Diagnostics tab.

The conversion itself always runs on your own device: the XML is read with the browser's own parser and the .xlsx is assembled in JavaScript, so a 50 MB feed converts as fast as your laptop can read it, with no queue and no file-size tier. A file you upload or paste never leaves the tab at all. A feed URL is first requested straight from your browser — and when the shop blocks cross-origin requests, which most do, the file is streamed once through insighthackerz.com and kept only in memory: nothing is written to disk, cached or logged, and the page tells you which of the two paths it used.

Frequently asked questions

Which feed formats does it accept?
The two formats Merchant Center accepts — RSS 2.0 with the g: namespace and Atom 1.0 — plus the generic <products><product> XML that Shopify apps, WooCommerce plugins, T-Soft, Ticimax, Magento and most feed generators export. Files ending in .gz are unpacked in the browser, so you can use the compressed feed URL download directly.
Can I use a feed URL instead of a file?
Yes — paste the URL of the XML your shop generates (the same address you gave Merchant Center) and press Fetch. Your browser tries it first; if the host does not allow cross-origin requests the file is fetched once through insighthackerz.com, kept in memory for that single request and never stored or logged. Feeds behind a login, a token-less IP allowlist or basic auth have to be downloaded and uploaded instead, and the URL path is capped at 40 MB.
Is the feed URL or its content saved anywhere?
No. The fetch endpoint writes nothing to disk, sets no-store on the response, keeps no request log of URLs, and only answers requests coming from insighthackerz.com. Parsing and the spreadsheet happen in your browser either way, so the product data itself is never persisted on a server.
What happens to nested attributes like shipping and tax?
They become dotted columns — shipping.country, shipping.service, shipping.price, tax.rate — and when a product has several shipping blocks the values line up in the same order, joined with ' | '. Nothing is dropped, so the sheet is a lossless view of the feed.
Is there a size limit?
The practical ceiling is your browser's memory; files up to about 150 MB are accepted and a 20–50 MB feed with 100k products is routine on a normal laptop. Feeds over Excel's 1,048,576-row limit are split across several sheets in the same workbook.
Does the .xlsx keep leading zeros in GTINs and IDs?
Yes — every cell is written as text, so 0123456789012 stays intact instead of becoming a number. That is also why prices arrive as '18.90 EUR': the value is exactly what the feed contains, ready to split if you need a numeric column.
Can I convert the spreadsheet back into a feed?
Not here. This is a read-and-audit tool: use it to review the feed, hand a product list to someone who does not work in Merchant Center, or diff two exports. Feed generation belongs in the platform that owns your product data.