Comparison

Google Shopping XML vs CSV

Merchant Center accepts two file shapes: delimited text, which is what spreadsheets export and most people call CSV, and XML in RSS 2.0 or Atom 1.0. Google processes both the same way once the attributes are right. The choice is about who produces the file and who has to read it. This page lays out Google's own guidance, shows one product in each format, and says which one a feed tool should give you.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Google's file guide names .txt, .tsv and .xml files, up to 4 GB each; compressed .gz, .zip and .bz2 are accepted when they hold a .txt or .xml.
  • Google's FAQ positions tab-delimited files for small-to-medium inventories and beginners, XML for large catalogs and automated systems.
  • In text files the first row holds the attribute names; in XML every attribute carries the g: prefix under xmlns:g="http://base.google.com/ns/1.0".
  • Textfinity publishes a delimited CSV (or TSV) on a URL that Merchant Center fetches on a schedule, and Merchant Center reads that comma CSV in production; it does not emit XML.

XML vs CSV for Google Shopping: the comparison

Every row below is drawn from Google Merchant Center help pages fetched on the date in the footnote: 'Create a product file for Merchant Center', 'Create a tab-delimited product data source', the 'RSS 2.0 specification' and the 'Product data specification'. Where the help does not state a fact, the cell says so.

What Google says about delimited text

Google's tab-delimited guide is blunt: the file must be tab-delimited plain text, the first line is the header and must contain attribute names separated by tabs, and each product is one line with each attribute separated by a tab. A cell may be empty when an attribute has no value. The product file guide tells Google Sheets users to download as .tsv and Excel users to save as tab-delimited .txt, and warns that missing tab separators, extra tabs or line breaks inside a field, and non-UTF-8 or UTF-16 encodings are the common processing errors. Multi-value attributes can be comma-separated in one cell or split into one column per value.

Note the wording: Google's current help describes the text option as tab-separated and does not name .csv. In practice 'CSV' is what every spreadsheet and most platform exports call a delimited file, which is why the query is phrased XML vs CSV. If your tool exports comma-separated and Merchant Center reports delimiter errors, export tab-separated instead; the attribute names and values do not change.

What Google says about XML

The RSS 2.0 specification page sets the structure: a channel with title, link and description, then one item per product, and the Merchant Center namespace declared as xmlns:g="http://base.google.com/ns/1.0". Every Merchant Center attribute tag needs the g: prefix; attributes without it are ignored, and elements from other RSS modules or custom namespaces are not processed. Item-level title, link and description are optional in RSS itself but required for product data, alongside price, id and condition. The file must include all products you want in Merchant Center, not only changes; removing a product from the file removes it from the account. Many namespace attributes may be repeated within one item, which is how multiple images or shipping entries are expressed. Atom 1.0 has its own page with the same ideas.

XML earns its 'large catalogs and automated systems' label because it is self-describing: nested and repeated values do not fight with a delimiter, and platform plugins have emitted it for years. It is also harder for a person to open, diff or fix in a spreadsheet, and a single unclosed tag stops the whole file.

The same product in both formats

Attribute names and values are identical; only the container changes. The 150-character title limit, the 5,000-character description limit and the '15.00 USD' price format from the product data specification apply equally.

Tab-delimited text (.tsv) and RSS 2.0 XML

id	title	price	availability	link
SKU-204	Patagonia Nano Puff Jacket Men's, Navy, L	239.00 USD	in_stock	https://store.example/p/nano-puff

<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
 <channel>
  <item>
   <g:id>SKU-204</g:id>
   <g:title>Patagonia Nano Puff Jacket Men's, Navy, L</g:title>
   <g:price>239.00 USD</g:price>
   <g:availability>in_stock</g:availability>
   <g:link>https://store.example/p/nano-puff</g:link>
  </item>
 </channel>
</rss>

Which format a feed tool should produce

If a tool sits between your store and Merchant Center, the format question moves to the tool. Textfinity reads CSV and TSV exports and XML in Google Shopping's RSS or Atom shape (so a platform's Google feed plugin output is a fine input; a custom XML schema has to be exported as CSV), applies mapping and filter rules, and publishes a delimited CSV or TSV file on a stable URL. We register that URL with you in Merchant Center as a scheduled-fetch file source, and Google fetches hosted files every 24 hours. Textfinity does not write XML, so merchants who need an XML file for a non-Google destination that only reads RSS should keep their platform's XML export for that destination. For Merchant Center itself, the delimited file carries the same attributes and is easier to open, diff and profile.

The one place XML still wins is when you are hand-writing a feed from a system that produces nested data and have no tool in between. Everyone else benefits more from a flat file they can inspect.

Examples

Worked examples, by situation

Three situations where the format decision was really a tooling decision, each with the rule that resolved it.

Magento electronics · Google Shopping · 12,000 SKUs · Germany

Platform XML in, delimited file out

Before

Magento extension emits RSS XML with HTML inside <g:description> and 400 items missing <g:gtin>

After

CSV with description stripped of tags and gtin filled from a supplier sheet; 11,600 rows after filtering

How we set it up

We set up the XML URL as the source, map description with remove from regexp <[^>]+>, join the supplier GTIN sheet as a merged source on sku, and add an exclude filter: gtin is empty AND supplier_gtin is empty AND brand is in list (brands requiring GTIN). Filters run on the source row before mapping, so they check the XML's gtin and the sheet's column, not the mapped output.

Shopify stationery · Google Shopping + Pinterest · 350 products · US

Multi-value attributes without delimiter fights

Before

additional_image_link: 'a.jpg,b.jpg,c.jpg' in one comma-separated cell, rejected by a spreadsheet tool

After

Three columns additional_image_link, additional_image_link, additional_image_link, one URL each

How we set it up

We add three output columns named additional_image_link, each a rename from image_2, image_3 and image_4. Google's multi-value help allows either one comma-separated cell or one column per value; separate columns avoid Excel mangling.

WooCommerce food · Google Shopping · 800 SKUs · UK

Delimiter errors from a comma-separated export

Before

Merchant Center: 'different number of delimiters' on 140 lines where descriptions contain commas

After

Clean processing after the description column is quoted and shortened

How we set it up

We map description with replace from regexp to collapse line breaks (\r?\n to a space) and add an exclude filter "description is longer than 5000". Feed hygiene's length check flags the over-limit rows before upload.

Copy this plan

Get a Merchant Center-ready file from either input

Whatever your platform exports, the output is one delimited file Google fetches on a schedule.

  1. 01

    Start from the export you already have

    Google Shopping XML from a feed plugin, CSV from an admin export (over HTTPS or SFTP) or a Google Sheet all work as the source. Shopify connects directly.

    What we set up: We set up your CSV or XML URL, Google Sheet or Shopify store as the source in Textfinity.
  2. 02

    Start from the Google Shopping template

    The template names every column with Google's spelling so the header row is right by construction.

    What we set up: We start the feed from Textfinity's Google Shopping template.
  3. 03

    Map and clean the text fields

    Strip HTML, collapse line breaks and cap lengths so a comma or newline inside a description never breaks a row.

    What we set up: We map description with remove from regexp and add an "is longer than" filter for over-limit rows.
  4. 04

    Profile the file

    Feed hygiene reports completeness per column, values over Google's limits, mixed languages and malformed URLs.

    What we set up: We run feed hygiene on the output and fix what it flags before the first fetch.
  5. 05

    Register the feed URL in Merchant Center

    Add the URL as a file data source with a scheduled fetch. Google fetches hosted files every 24 hours. This step is in Merchant Center.

    What we set up: We register the URL with you: you give us access to Merchant Center, or we walk you through it.

Customization tips

Make it yours

Keep one id across formats

If you switch from an XML plugin feed to a delimited file, send the same id values. A new id is a new product to Google and resets history.

Prefer one column per repeated attribute

Comma-separated multi-values in one cell are allowed but Google warns they do not work well in Excel. Separate columns cost nothing in a generated file.

Send the whole catalog every time

Google's RSS guide says a product removed from the file is removed from Merchant Center. The same applies to text files: never publish a delta.

Watch encoding on exports from older platforms

Google lists non-UTF-8/UTF-16 encodings as a common error. A feed tool re-emits UTF-8; a raw platform export may not.

Side by side

What we could verify

Delimited text (.txt / .tsv, 'CSV')XML (RSS 2.0 / Atom 1.0)
Named in Google's file guide.txt (tab-delimited), .tsv.xml (RSS 2.0 or Atom 1.0)
Google's suggested fitSmall-to-medium inventories; beginnersLarge catalogs; automated systems
Where attribute names goFirst row, one per columnTags with the g: prefix inside <item>
Namespace requiredxmlns:g="http://base.google.com/ns/1.0"
Multi-value attributesComma-separated in one cell or one column per valueRepeat the tag inside the item
Common processing errors (Google)Missing tab separators; extra tabs or line breaks in a field; wrong encodingUnclosed tags; attributes without the g: prefix are ignored
Max file size4 GB4 GB
Compression.gz, .zip, .bz2 containing a .txt.gz, .zip, .bz2 containing an .xml
Easy to open in a spreadsheet
Partial updates allowednot stated; file replaces the product setNo: the file must contain all products; removal deletes
Title / description limits150 / 5,000 characters150 / 5,000 characters
What Textfinity producesYes: CSV or TSV on a stable URLNo (reads XML as a source)

Checked 2026-10-27. Criteria from Google Merchant Center help: 'Create a product file for Merchant Center', 'Create a tab-delimited product data source', 'RSS 2.0 specification', 'Product data specification'.

FAQ

Questions about google shopping xml vs csv

Does Google Merchant Center accept CSV files?

Google's file guide names .txt (tab-delimited), .tsv and .xml. 'CSV' in everyday use means any delimited spreadsheet export; if a comma-separated file produces delimiter errors, export it tab-separated with the same header row and values. A properly quoted comma CSV does work in practice: Merchant Center fetches Textfinity's comma-delimited feeds in production.

Is XML better than CSV for Google Shopping?

Google processes the attributes the same way. Its FAQ suggests tab-delimited files for small-to-medium inventories and beginners, and XML for large catalogs and automated systems. XML handles repeated values natively; text files are easier to open, diff and fix.

What is the maximum feed file size for Merchant Center?

Google's product file guide says a single product file can be up to 4 GB. Compressed .gz, .zip and .bz2 files are accepted when they contain a .txt or .xml file.

Can I convert a Google Shopping XML feed to CSV?

Yes. A feed tool such as Textfinity reads the Google Shopping XML URL (RSS or Atom) as a source and publishes a delimited CSV with the same attribute names, with mapping and filter rules applied in between; we set those rules up in Textfinity for you.

Does the title limit differ between XML and text feeds?

No. The product data specification sets title at a maximum of 150 characters and description at 5,000 in either format; price is numeric with an ISO 4217 code, for example 15.00 USD.

Set up for you

Have us turn your platform's export into a Merchant Center-ready file.

Send us your Google Shopping XML, CSV or Google Sheet URL. We set up the mapping in Textfinity, profile the delimited feed before Google sees it, and register its URL with you in Merchant Center.

Get your feed set upOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.