CSV and TSV Feed Formats
Delimited text formats (CSV and TSV) are the simplest way to create product feeds. Google Merchant Center supports tab-separated values (TSV) as its primary text format, while Meta Commerce Manager accepts both CSV and TSV. Each row represents one product, and the header row defines the attribute mapping.
Google Merchant Center TSV Format
Google uses tab-separated values with attribute names as the header row. The file extension should be .txt or .tsv. Column names must match Google attribute names exactly.
id title description link image_link price availability brand gtin condition SKU-12345 Nike Air Max 90 - Black/White Classic running shoe https://example.com/shoes/air-max-90 https://example.com/images/air-max-90.jpg 129.99 USD in_stock Nike 0884776536842 new SKU-67890 Adidas Ultraboost 22 - Navy Responsive running shoe https://example.com/shoes/ultraboost-22 https://example.com/images/ultraboost-22.jpg 189.99 USD in_stock Adidas 4065419842357 new
Meta Product Catalog CSV Format
Meta accepts comma-separated or tab-separated files. CSV is more common for Meta feeds. Column names use the same attribute names as the feed specification. Multi-value fields use a comma within quoted strings.
id,title,description,availability,condition,price,link,image_link,brand product_1234,"Nike Air Max 90 - Black/White","Classic running shoe with Air cushioning",in stock,new,129.99 USD,https://example.com/product/1234,https://example.com/images/product-1234.jpg,Nike product_5678,"Adidas Ultraboost 22 - Navy","Responsive Boost midsole running shoe",in stock,new,189.99 USD,https://example.com/product/5678,https://example.com/images/product-5678.jpg,Adidas
Note the availability value difference. Meta uses in stock (with space) while Google uses in_stock (with underscore). A single feed file cannot serve both platforms without transformation.
Column Specification
| Rule | TSV (Google) | CSV (Meta) |
|---|---|---|
| Delimiter | Tab character (\t) | Comma (,) |
| Encoding | UTF-8 (required, no BOM) | UTF-8 (required) |
| Header row | Required, first line | Required, first line |
| Quoting | Double-quote fields containing tabs or newlines | Double-quote fields containing commas, quotes, or newlines |
| Escaping quotes | Double the quote: "" inside quoted field | Double the quote: "" inside quoted field |
| Line endings | LF (\n) or CRLF (\r\n) | LF (\n) or CRLF (\r\n) |
| Empty fields | Leave blank (two consecutive tabs) | Leave blank or use empty quotes "" |
| Multi-value fields | Comma-separated within the field | Comma-separated within quoted field |
| Max file size | 4 GB uncompressed | 8 GB per upload |
| Compression | gzip, zip, bz2 | gzip, zip |
Common Encoding Issues
UTF-8 BOM (Byte Order Mark)
Google rejects files with a UTF-8 BOM (0xEF 0xBB 0xBF at the start of the file). Many Windows text editors add this by default. Verify with a hex editor or use file --mime-encoding feed.txt to check. Strip with sed -i '1s/^\xEF\xBB\xBF//' feed.txt.
Latin-1 / Windows-1252 Characters
Product descriptions copied from legacy databases often contain Windows-1252 characters (smart quotes, em dashes, degree symbols) that are not valid UTF-8. Convert with iconv -f WINDOWS-1252 -t UTF-8 before submitting.
Unescaped Tab Characters in TSV
Tab characters within field values (common in product descriptions) break TSV parsing. Either quote the field or replace tabs with spaces before export. Test by counting columns per line: awk -F'\t' '{print NF}' feed.tsv | sort -u should return a single number.