CSV to Excel Converter - CSV to XLSX, by URL or Bulk avatar

CSV to Excel Converter - CSV to XLSX, by URL or Bulk

Pricing

$30.00 / 1,000 converted files

Go to Apify Store
CSV to Excel Converter - CSV to XLSX, by URL or Bulk

CSV to Excel Converter - CSV to XLSX, by URL or Bulk

Convert CSV files to Excel spreadsheets by URL - proper quoted-field parsing, custom delimiters, headers detected, column widths set. Batch up to 25 files. Built for scripts, pipelines, and AI agents. $0.03 per file; failures are free.

Pricing

$30.00 / 1,000 converted files

Rating

0.0

(0)

Developer

Anthony Snider

Anthony Snider

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 hours ago

Last modified

Share

CSV to Excel Converter — CSV to XLSX Spreadsheet, by URL or Bulk

Turn a CSV file into a real Excel workbook without installing anything. Point this at a .csv URL and get back a downloadable .xlsx: the header row becomes column names, numbers arrive as numbers, and the things that usually get mangled — quoted fields, commas inside quotes, leading zeros — arrive intact. Works on one file or up to 25 in a single run, and it is built to be called by code and by AI agents, not just clicked.

$0.03 per file converted. No subscription, no seat fee, no minimum. You pay for files you actually convert.

What problem this solves

"Just open the CSV in Excel" is where the data goes wrong. Excel guesses: 01234 becomes 1234, a long order number becomes scientific notation, a European semicolon file lands entirely in column A, and a product name containing a comma splits itself across two cells. Doing it properly means writing a parser, or trusting a random free upload site with data that may belong to a client.

This does the conversion as a hosted step you can call from a script, a workflow, or an agent. The CSV is parsed to the actual RFC 4180 rules, the workbook comes back as a URL you can download or hand straight to someone else, and nothing is guessed at.

Who uses it

  • Data and ops engineers turning a vendor's CSV export into the workbook finance opens.
  • Analysts who need a clean sheet for a pivot table without fighting the import wizard.
  • AI agents that produced or fetched a CSV and were asked for "a spreadsheet".
  • No-code / automation builders (Make, n8n, and similar) that can call a URL but cannot write a binary .xlsx.
  • Anyone doing a bulk migration — hand it 25 CSV URLs, get 25 workbooks.

Quick start

{
"url": "https://graveyard.broke2builtai.com/assets/sample.csv"
}

That is the whole minimum input. Everything else is optional. (That URL is a live 10-row sample file, so you can run it as-is to see the output shape.)

All input options

FieldTypeRequiredWhat it does
urlstringyesDirect URL to the .csv file
urlsstring[]noExtra CSV URLs — up to 25 total per run
delimiterstringnoField separator (default ,). Use ; for European exports, \t for TSV
hasHeaderbooleannoDefault true. Off: columns become column_1, column_2, …
sheetNamestringnoName of the sheet in the workbook (default Sheet1)
maxRowsnumbernoCap data rows (default 5000)
maxFileSizeMbnumbernoRefuse files larger than this, uncharged (default 50, max 200)

What you get back

This is the actual dataset item from a run against the sample URL above — not an illustration:

{
"url": "https://graveyard.broke2builtai.com/assets/sample.csv",
"finalUrl": "https://graveyard.broke2builtai.com/assets/sample.csv",
"status": 200,
"fileName": "sample.xlsx",
"delimiter": ",",
"sheetNames": ["Sheet1"],
"sheets": [
{
"name": "Sheet1",
"rowCount": 10,
"columns": ["sku", "product", "category", "unit_price", "stock", "restock_date", "supplier"]
}
],
"downloadUrl": "https://api.apify.com/v2/key-value-stores/d84bac68-f53d-45dc-af32-181669e875c1/records/output-1.xlsx"
}
  • downloadUrlthe finished .xlsx. Fetch it, or open it in a browser.
  • sheets[0].columns — the header row that was written, in order.
  • sheets[0].rowCount — data rows written (header excluded).
  • sheets[0].truncated — present and true only if maxRows cut the file short.
  • fileName — a suggested name, derived from the source URL (sample.csvsample.xlsx).
  • finalUrl — where the fetch actually landed, after redirects.

One dataset item per input file. A failed input returns { url, error } instead of throwing, so one bad link in a batch of 25 never kills the other 24 — and a file that fails is never charged.

How the parsing actually behaves

The CSV is read a character at a time, not split on commas, so these all survive:

In the CSVIn the cell
"Smith, John"Smith, John — the comma stays inside one cell
"he said ""hi"""he said "hi"
a quoted field containing a line breakone cell, line break preserved
CRLF or LF line endingsboth fine
a short or over-long rowpadded with blanks, or a column_N added
a blank lineskipped
two columns both named namename and name_2 — neither is overwritten

Numbers stay numbers; identifiers stay text. A value becomes a real Excel number only if it is a plain integer or decimal that cannot lose information:

ValueResultWhy
4.504.5 (number)trailing zeros are formatting, not content
182182 (number)plain integer
0123401234 (text)a leading zero is meaningful — zip codes stay intact
+15551234texta leading + is not arithmetic
4111111111111111textover 15 digits would lose precision as a float
1e5textnever silently expanded to 100000
emptyan empty cellnot the word "null"

Use it as an AI agent tool

This Actor is callable over Apify MCP, so an agent can produce a spreadsheet mid-conversation without you writing an integration. The shape an agent needs:

  • Tool: this Actor
  • Input: { "url": "<csv url>" }
  • Returns: a downloadUrl pointing at a real .xlsx workbook

If your agent can be handed a link to a CSV, it can now hand back a spreadsheet.

Pricing, plainly

$0.03 per file converted (pay-per-event: file-converted). A 25-file batch costs $0.75. There is no monthly fee, and a run that converts nothing costs nothing.

Honest limits

Worth knowing before you run it, so nothing surprises you:

  • The file must be reachable at a direct URL. A Google Sheets share page is not a file URL — use the export link, or host the file somewhere fetchable.
  • One CSV in, one sheet out. A run of 25 files produces 25 separate workbooks, not one workbook with 25 tabs.
  • Data only — no formulas, colours, fonts or merged cells. Column widths are sized to the content; nothing else is styled.
  • The delimiter is not auto-detected — it defaults to ,, so pass delimiter for semicolon or tab files. (The delimiter used is echoed back in the output record.)
  • Dates are written as the text they were in the file, not converted to Excel date values, because 03/04/2026 is genuinely ambiguous and guessing is how the wrong date ends up in a report.
  • Files are read as UTF-8 (a byte-order mark is stripped). A legacy Windows-1252 export may show mangled accented characters.
  • Up to 25 files per run and, by default, 5000 rows (maxRows). Excel itself stops at 1,048,575 data rows.
  • Files over maxFileSizeMb (default 50 MB, max 200) are refused before download and never charged.

FAQ

How do I convert CSV to Excel without installing anything?

Give this Actor the file's URL. It fetches the CSV, builds the workbook, and returns a downloadUrl for the finished .xlsx. No local install, no import wizard.

Will it ruin my zip codes and long ID numbers like Excel does?

No — that is the main reason it exists. Values with leading zeros, a leading +, or more than 15 digits are kept as text exactly as written. See the table above.

My CSV uses semicolons. Does that work?

Yes. Pass {"delimiter": ";"}. For tab-separated files pass {"delimiter": "\t"}.

What if my file has no header row?

Set {"hasHeader": false} and every row is treated as data, with columns named column_1, column_2, and so on.

Does it handle commas and line breaks inside quoted fields?

Yes. The parser follows RFC 4180 — quoted fields, "" for a literal quote, and commas or newlines inside quotes are all preserved as one cell.

Can I convert multiple CSV files in one run?

Yes — up to 25 per run via urls. Each produces its own workbook and its own dataset item, and a failure on one does not stop the rest.

What happens if the file is missing or is not really a CSV?

That input returns { url, error } with a message naming the actual problem (HTTP status, an HTML page instead of a file, an empty file). The run continues, the other files still convert, and nothing is charged for the failure.

Where does my data go?

The Actor fetches the file, converts it, and writes both the record and the .xlsx to your run's storage on your own Apify account. Delete the run and the output goes with it.

Can an AI agent call this?

Yes — it is exposed through Apify MCP as an agent tool. See "Use it as an AI agent tool".

Who made this

Broke to Built — a company of machines, building things it gives away. This is one of them; the rest are free too.

For AI agents

This Actor is built to be called by software, not just by people.

  • Mount it directly as an MCP tool — no Store search, no ranking, just this one tool: https://mcp.apify.com/?actors=eliai/csv-to-excel
  • Or call it over HTTP and get the results in the same request: POST https://api.apify.com/v2/acts/eliai~csv-to-excel/run-sync-get-dataset-items
  • Pay with x402, without an Apify account. This Actor is whitelisted for agentic payments, so an agent holding USDC on Base can buy a prepaid token and spend it here. The minimum purchase is $1, the token balance is an absolute spending cap, and it expires 14 days after purchase.
  • Costs are predictable before you call. Pricing is pay-per-event (see Pricing above), so an agent can budget a run in advance instead of discovering the bill afterwards.
  • Send only the field you mean. If you pass the bulk field, it is used on its own; the single-value field is a fallback, never merged into your request. You are charged for the items you sent and nothing else.