How to Convert an XML Product Feed to a Spreadsheet
A product feed looks hard to read at first. It is full of tags and codes. But the data inside is simple. It is just a list of products. Each product has a name, a price, and a photo link.
This guide shows how to turn that feed into a clean sheet. You will learn the steps for an xml product feed to csv job, how to check the result, and how to save time next week. You do not need to write code.
What Is a Product Feed?
A product feed is a file a shop sends to other sites. Those sites list the products for sale. Google Shopping uses feeds. Meta uses feeds. Large marketplaces use feeds too.
Think of a feed like a stock list. A stock list is a full list of goods in a store. The feed is that list in a form a computer can read.
Each product gets its own block in the file. The block holds the title, the price, the stock state, and links to photos. Feeds change a lot. Prices change. Stock goes up and down. New products come in, and old ones go out. So shops send a fresh feed each day or each week.
A spreadsheet makes the feed easy to work with. A spreadsheet is a table with rows and columns. Each product sits on its own row. Each fact sits in its own column. You can sort, filter, and find one product in seconds.
XML is not like that. XML uses tags to mark each fact. Tags are words inside angle brackets, like <price>. Tags are great for computers. They are slow for people to read. So the goal is simple: keep all the facts, lose the hard format.
What a Real Feed Looks Like
Most Google feeds use tags that start with g:. The g: prefix means the tag belongs to Google's own set of names. A prefix is a short code placed before a name. It keeps names from two sets apart.
Here is a small feed with three products. A real feed may have thousands. The shape is the same.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Blue Peak Store</title>
<item>
<g:id>BP-1001</g:id>
<g:title>Trail Shoes - Blue</g:title>
<g:price>59.99 USD</g:price>
<g:availability>in stock</g:availability>
<g:link>https://example.com/shoes-blue</g:link>
<g:image_link>https://example.com/img/shoes-blue-main.jpg</g:image_link>
<g:image_link>https://example.com/img/shoes-blue-side.jpg</g:image_link>
<g:brand>Blue Peak</g:brand>
<g:gtin>9780201379624</g:gtin>
</item>
<item>
<g:id>BP-1002</g:id>
<g:title>Rain Jacket - Red</g:title>
<g:price>89.50 USD</g:price>
<g:availability>in stock</g:availability>
<g:link>https://example.com/jacket-red</g:link>
<g:image_link>https://example.com/img/jacket-red-main.jpg</g:image_link>
<g:brand>Blue Peak</g:brand>
<g:gtin>9780132350884</g:gtin>
</item>
<item>
<g:id>BP-1003</g:id>
<g:title>Wool Hat - Grey</g:title>
<g:price>24.00 USD</g:price>
<g:availability>out of stock</g:availability>
<g:link>https://example.com/hat-grey</g:link>
<g:image_link>https://example.com/img/hat-grey-main.jpg</g:image_link>
<g:brand>Blue Peak</g:brand>
<g:gtin>9780321125217</g:gtin>
</item>
</channel>
</rss>
Look at the first product. It has two image links. The other two have one each. That small detail matters, and a step below deals with it.
The <channel> tag wraps the whole list. The <item> tag wraps one product. Inside each item, the g: tags hold the facts. Some feeds use <product> instead of <item>. The idea is the same: one repeating tag means one product.
Some feeds put facts in attributes. An attribute is a small fact placed inside the opening tag itself, like <product id="BP-1001">. The ID is then part of the tag, not a child tag. Good tools keep that fact too. On XmlToCsv, attributes often carry the product ID — keep them as columns, with a column name like product@id.
The CSV result
CSV is a plain text table. CSV stands for comma-separated values. Each line is one row. A comma splits one column from the next. Here is the feed above as CSV, with the two image links for the first product joined in one cell.
g:id,g:title,g:price,g:availability,g:link,g:image_link,g:brand,g:gtin
BP-1001,Trail Shoes - Blue,59.99 USD,in stock,https://example.com/shoes-blue,https://example.com/img/shoes-blue-main.jpg; https://example.com/img/shoes-blue-side.jpg,Blue Peak,9780201379624
BP-1002,Rain Jacket - Red,89.50 USD,in stock,https://example.com/jacket-red,https://example.com/img/jacket-red-main.jpg,Blue Peak,9780132350884
BP-1003,Wool Hat - Grey,24.00 USD,out of stock,https://example.com/hat-grey,https://example.com/img/hat-grey-main.jpg,Blue Peak,9780321125217
Now you can read it: three products, three rows, each fact in its own column. Open it in Excel or Google Sheets, or send it to a boss or client. You can also export as XLSX, the Excel file format. Use CSV for simple sharing. Use XLSX when you want a ready Excel file.
Common Feed Fields and What They Mean
Most feeds share a core set of fields. Learn this set and you can read most feeds fast.
| Field | What it means | Why it matters |
|---|---|---|
| id | A unique code for one product | It links the row to the shop's stock system |
| title | The product name people see | A clear title helps buyers find the product |
| price | The cost, often with a currency code | A wrong or missing price can block the listing |
| availability | In stock or out of stock | Sites hide or mark items that are out of stock |
| link | The web page for that product | It is where a click sends the buyer |
| image_link | The main photo link | Good photos drive clicks and sales |
| brand | The maker or brand name | Some sites group and filter by brand |
| gtin | A global barcode number | It helps sites match the product to a known item |
The ID must stay the same over time. If it changes each week, the site thinks old products are gone and new ones have come. That breaks reports.
GTIN stands for Global Trade Item Number. It comes from the product barcode. If a product has no barcode, the field may be blank. That is normal for handmade goods.
Check price with care too: some feeds put currency in the same field, like 59.99 USD, and some put it in an attribute.
Step by Step: From Feed to Sheet
Step 1: Check the file size
Size tells you which plan you need. On XmlToCsv, large files are processed with streaming. Streaming means the tool reads the file in parts, not all at once. That keeps large jobs fast and stable.
Free covers files up to 2 MB. Starter covers files up to 25 MB. Pro covers files up to 100 MB.
If the XML is broken, you get a clear error with line and column numbers. A line is one row of text in the file. A column is the spot across that line. Those numbers point to the exact place to fix.
Step 2: Pick the row element
The row element is the repeating record tag, the tag that wraps one full record. For this feed it is item. For other feeds it may be product.
XmlToCsv auto-detects the row element. Auto-detect means the tool finds it on its own. Check its choice in the preview: one row should equal one product. If the choice is wrong, pick another tag, or type a path yourself. A path is the chain of tags that leads to the record, like channel/item.
This choice shapes the whole table. If rows look mixed or split, the row element is wrong. The basic XML to CSV steps use the same idea for other kinds of files.
Step 3: Check the preview and keep every field
The preview shows the first rows before download. Use it to catch problems early. Does each row hold one product? Is there a column for ID and for price? Do photo links look whole? Are attribute columns there, like product@id?
Do not drop fields too soon. Keep every field in the first export. You can hide columns later in your sheet. You cannot get back a field you left out unless you run the job again.
Step 4: Deal with repeated image links
Many products have more than one photo. Categories can repeat too. These are repeated values: one field holds more than one value.
Choice one is to join them. The tool puts all values in one cell, split with "; ". One product stays on one row. This is best for a quick check or a simple export.
Choice two is to expand them. The tool makes one row per value. The first product above would take two rows. All other facts repeat on both rows. Only the image link changes. Expand when you need to count or filter by each value.
There is a full guide on one row per value when a product has many images. Pick one rule and stay with it for the whole file.
Step 5: Rename columns
Feed names are not always the names you need. One site may want image_link. Your boss may want Main Image. A new marketplace may want image-url.
Rename columns in the mapping step. A mapping is a plan that says which XML field goes to which column, and what that column should be called. Use short, clear names, and the exact names the next site asks for. Caps, hyphens, and underscores count as different names for some tools, so check them with care.
Step 6: Save the mapping as a template
If you convert the same feed each week, do not set it up each time. Save the mapping as a template. A template is a saved set of choices. It stores the row element, the column names, and the join or expand rule.
Paid plans on XmlToCsv can save field mapping templates. Next week, load the template, drop in the new feed, and export. The table comes out in the same shape each time, with fewer errors. And weekly feeds are where saved templates pay off — see plans for plan details.
Step 7: Export and check the counts
Export as CSV or XLSX. Then count. This is the most important check of all.
Count the products in the feed. Count the rows in your sheet. If you joined repeats, the numbers should match. Three items in the sample feed gave three rows out.
If you expanded repeats, rows out will be higher. The first product had two images, and the others had one each. With expand on image links, you get four rows, not three. That is correct, not a bug.
Also scan for gaps. How many rows have no price? How many have no image link? How many say out of stock? A marketplace may reject the whole feed for a few bad rows, so find them first.
Batch Conversion for Stores With Several Feeds
Some stores have more than one feed: a feed per country, per language, or per sales channel. A channel here means one place you sell, like your own shop or one marketplace.
Batch conversion means the tool converts many files in one job. On XmlToCsv, Starter allows batch conversion of 10 files. Pro allows 50 files. Use the same template for all files in the batch if they share the same shape. Name each output file with its country or channel, so the folder stays clear next week.
Usual Feed Problems and How to Fix Them
Missing prices
A row with no price is a broken row. The product cannot be listed. Find blank price cells after export, then fix the price in the source system, not just in the sheet. If you fix only the sheet, next week's feed will have the same hole.
Sometimes the price sits in an attribute, or in a sale price tag. Look at the raw XML for one such product, then adjust your mapping.
HTML inside descriptions
Descriptions often hold HTML tags. HTML is the code used to build web pages. In a sheet you may see text like <p>Soft and warm.</p>. For a quick check this is fine. For a clean export it is not.
Do not fix hundreds of rows by hand. First, see if the next site accepts HTML in descriptions. Many do. If it does not, clean the text in your sheet tool, or ask the feed owner to send plain text. Plain text means words with no code tags.
Very long text
Some descriptions are very long. Some feeds pack a full guide into one field, and that cell is hard to read in a sheet.
Open long text only for the few products you need to fix. If a field is long in every row, it may be the wrong field.
Broken XML
If a feed file is cut off or has a bad tag, conversion stops. That is a good thing. Half a table would be worse than no table.
XmlToCsv gives a clear error with line and column numbers. Open the file in a text editor, go to that line, and look for a missing closing tag, a stray < sign in text, or a bad character. Fix it, or ask the feed source to send a fresh file.
Which Plan Fits a Feed Job?
Free gives 10 conversions per month, export up to 5,000 rows, and files up to 2 MB. This fits a small shop that checks a feed now and then.
Starter costs $9 per month. Files can be up to 25 MB, batch conversion covers 10 files, and you can save mapping templates. This fits a shop with a weekly feed routine.
Pro costs $19 per month. Files can be up to 100 MB, batch conversion covers 50 files, and you can save mapping templates. This fits large catalogs or many feeds at once.
A Short Weekly Routine
- Get the fresh feed file.
- Load your saved template.
- Check the row element in the preview.
- Look at the first rows for price and photo links.
- Export as CSV or XLSX.
- Count rows and compare with the product count.
- Scan for blank prices and blank images.
- Fix problems at the source, then export again if needed.
- Send the clean file on to your team or site.
After a few weeks, this routine will feel fast, and you will spot problems in the counts.
That is the real value of an xml product feed to csv workflow done the right way. You get a table you can read, check, and trust, and you get it the same way every time.
References
- https://support.google.com/merchants/answer/7052112 — Google Merchant Center product data specification — the field list real feeds follow.
- https://www.w3.org/TR/xml/ — W3C XML specification, the base rules for XML files.