People ask chat assistants to translate whole spreadsheets: a Shopify export before opening a German store, a supplier catalog, a sheet of help-center articles. We wanted to know where that works and where it stops, so on 20 October 2026 we gave one model one long CSV and checked every cell that came back.
The test
The file was a made-up Shopify product export with 400 rows and 20 columns. Five columns needed translating: Title, Body (HTML), Image Alt Text, SEO Title and SEO Description. The other fifteen, including Handle, Variant SKU, prices and image links, had to stay exactly as they were. Most rows were variants with an empty title, which is how Shopify exports look and exactly the kind of row a model might drop.
We pasted it into GPT-6.1 Sol through the API with a two-sentence instruction, the way a person would, and ran the same file through our own CSV and Excel translator.
What came back
| GPT-6.1 Sol, one prompt | NoCutoff | |
|---|---|---|
| Rows in place | 400 of 400 | 400 of 400 |
| Changes in the 15 protected columns | 0 | 0 |
| Descriptions with changed HTML tags | 0 | 0 |
| Text cells translated | 800 of 800 | 790 of 800 |
| Time | 9 minutes, one reply | 14 blocks |
| Cost | $0.55 | $0.17 |
The chat model was exact. It kept every empty variant row, every handle and every tag. Our tool left ten cells as they were because the model judged them to be product names, such as "Field Merino Beanie", which is a fair call in German.
Where it stops
The reply needed 45,326 output tokens, about 113 per row. The whole translated file has to come back in the answer, untouched columns included, so the answer grows with the file. At that rate:
- 400 rows: about 45,000 tokens. Fits.
- 560 rows: about 64,000 tokens, the ceiling we set.
- 2,000 rows: about 225,000 tokens. No single reply holds it.
That is arithmetic, not a second measurement. In our earlier study of four long jobs, two of three models stopped mid-message when a 2,000-message chat translation hit the same ceiling, without saying so. Chat apps usually cap replies lower than the API does.
Why splitting the file helps
A translation tool does not need the model to write the file. It can read the CSV into cells, send only the text of the chosen columns in small blocks, check what comes back, and write the translations into a copy of the original. The handles and prices never leave your file, so they cannot change, and there is no reply long enough to hit a ceiling. Our tool also swaps HTML tags for markers before translation and checks that each one returns, and lists any cell where a placeholder or a brand name did not survive.
How to check a translated CSV yourself
- Compare the row count with the original, and the last row's ID or handle.
- Open both files side by side and check that ID, SKU and price columns are identical.
- Search the HTML column for a few tags, such as
<li>, and compare the counts. - Import into a test store or a copy of your sheet before the real one.
What to use instead
For a few hundred rows, a strong chat model can do it, as this test shows; check the result. For a full catalog, the CSV and Excel translator translates the first rows free and the whole file for $5, one payment. For app string files, the localization file translator does the same for JSON, PO and strings files.
Method & data
Date: 20 October 2026. Access: OpenRouter chat completions API, not the ChatGPT app.
Input: a fictional Shopify product export written by a script for this test: 160 products, 400 rows (one per variant, most with an empty title and description), 20 columns, descriptions in HTML with paragraphs, lists, bold text and a few emoji. 127,637 bytes.
Chat model: openai/gpt-6.1-sol, one user message with a two-sentence instruction and the whole file, no system prompt, default temperature, reply ceiling (max_tokens) 64,000. One run, so another run can differ.
Tool: NoCutoff Translate CSV & Excel with the same five columns and target language, google/gemini-3.8-flash, blocks of up to 60 cells.
Measured by script: rows returned and matched by handle and SKU, column counts, every cell in the 15 protected columns, the sequence of HTML tags in each description, cells changed or left as they were. Cost: $0.73 for both runs.
Sources