# Text (CSV)

A CSV feed is a plain-text file with one header row naming the attributes and one row per product, fields separated by commas. It is the most widely accepted feed format and the easiest to produce, and its weakness is that any comma, quote or newline inside a value can split a row.

- **Canonical URL:** https://www.feedlab.io/knowledge/formats/text-csv
- **Last reviewed:** 18 September 2026
- **Source:** feedlab knowledge base
- **Licence:** free to quote and cite with attribution to feedlab


## Specification

| Property | Value |
| --- | --- |
| Format | Comma-delimited text feed |
| Content type | `text/csv; charset=utf-8` |
| Compression | Gzip is accepted by most channels and required by OpenAI, which takes .csv.gz rather than a plain file. |
| One product is | One product per line. The first line is a header naming each attribute, and every subsequent line supplies values in that order, with empty fields left as consecutive commas rather than omitted. |
| Escaping | Any field containing a comma, a double quote or a line break must be wrapped in double quotes, and a literal double quote inside such a field is written twice. Encode as UTF-8 without a byte order mark, because a BOM attaches itself to the first header name and makes the id column unrecognisable. |


### File extensions

- `.csv`
- `.txt`



### Example

```
id,title,description,link,image_link,availability,price,brand,gtin,condition,item_group_id
SHIRT-BLK-M,"Northbound Oxford Shirt, Black, Medium","A long-sleeved Oxford shirt in 100% brushed cotton, with a button-down collar.",https://example.com/products/oxford-shirt?variant=101,https://cdn.example.com/oxford-black.jpg,in_stock,49.00 GBP,Northbound,05012345678900,new,SHIRT-OXFORD
SHIRT-BLK-L,"Northbound Oxford Shirt, Black, Large","A long-sleeved Oxford shirt in 100% brushed cotton, with a button-down collar.",https://example.com/products/oxford-shirt?variant=102,https://cdn.example.com/oxford-black.jpg,out_of_stock,49.00 GBP,Northbound,05012345678917,new,SHIRT-OXFORD
```


### Which channels accept it

| Channel | Support | Notes |
| --- | --- | --- |
| Google Shopping | Supported | Accepted as a text feed alongside tab-delimited files. |
| Meta | Supported | One of the primary formats for a Commerce Manager catalogue. |
| Microsoft Advertising | Not supported | Microsoft takes tab-delimited text rather than comma-delimited. |
| Pinterest | Supported | Accepted for a scheduled data source. |
| OpenAI | Supported | Accepted gzipped as .csv.gz, though Parquet is preferred. |



## What breaks this format

### Descriptions break rows

A Shopify description stripped of its HTML still contains commas, quotation marks and often a line break. Unquoted, each of those splits the row, and the failure surfaces as a column-count error on a line number rather than as anything resembling its cause. Quote every text field rather than only the ones that currently need it.

### A byte order mark hides the id column

Files written by spreadsheet software frequently begin with a UTF-8 BOM. The channel then reads the first header as a three-byte prefix followed by "id" and reports that the id attribute is missing, on a file that looks perfect in an editor.

### Spreadsheets destroy identifiers

Opening a CSV in Excel or Sheets coerces numeric-looking strings to numbers. A twelve-digit UPC starting with zero becomes eleven digits, and a long GTIN can come back in scientific notation. Generating the file directly from the catalogue avoids the round trip entirely.

### Empty is not the same as absent

A CSV has a fixed column count, so an attribute you do not want to send still occupies its comma. Some channels treat an empty value as an instruction to clear the field rather than as no data, which matters when you are supplying a partial update.








## Frequently asked questions

### What delimiter should a product feed CSV use?

A comma, with fields containing commas, quotes or line breaks wrapped in double quotes. Microsoft Advertising is the exception among the channels documented here: it takes tab-delimited text instead.

### Why does my CSV feed say the id column is missing?

Almost always a UTF-8 byte order mark at the start of the file. The channel reads it as part of the first header name, so "id" is no longer recognisable. Write the file as UTF-8 without a BOM.

### Can I edit a feed CSV in Excel?

You can open it, but saving it back is how leading zeros disappear from GTINs and long numbers turn into scientific notation. Generate the feed from the catalogue rather than editing the output.

### Should a CSV feed be gzipped?

Most channels accept gzip and OpenAI requires it. For a large catalogue it is worth doing: a product feed is highly repetitive text and compresses to a small fraction of its size.




## Primary sources

- [Google: Feed file formats](https://support.google.com/merchants/answer/7052112)
- [RFC 4180: Common format for CSV files](https://www.rfc-editor.org/rfc/rfc4180)



