Excel XLSX to JSON and CSV Converter
Pricing
$0.50 / 1,000 results
Excel XLSX to JSON and CSV Converter
Convert Excel .xlsx workbooks to JSON rows keyed by the header row, plus a CSV per sheet. Use when you need spreadsheet data as JSON or CSV for code or an API.
Pricing
$0.50 / 1,000 results
Rating
0.0
(0)
Developer
Plain Pipe
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Convert Excel .xlsx workbooks to JSON: one row per spreadsheet row keyed by the header row, with sheet and row numbers, plus a CSV file of every sheet.
Use this when: you have an .xlsx file (link or upload) and need its rows as JSON objects or CSV, one record per spreadsheet row.
Why this one
- $0.50 per 1,000 results, one result per spreadsheet row; the CSV files and the run summary are free.
- Every row includes
_file,_sheetand_rowNumber, so each value traces back to its exact cell row in the workbook. - Dates come out as ISO 8601 text (or raw serial numbers on request) and formulas return their calculated value; header row, sheet filter and empty-row skipping are configurable.
- No browser, no proxy, no Excel install. The prefilled example (17 rows) finishes in under 4 seconds in our test runs, and 7 edge-case inputs are checked before each release.
What it does
Give it links to Excel workbooks or upload one. It opens each .xlsx file with the open-source exceljs library and returns one dataset result for every spreadsheet row. Column names come from the header row you choose, and each result also carries _file (the file name), _sheet (the sheet name) and _rowNumber (the row number as Excel shows it), so you can trace every value back to its cell. Formulas return their last calculated result, dates come out as ISO 8601 text or Excel serial numbers, and rich text and hyperlinks come out as plain text.
As a free extra, every converted sheet is also saved as a CSV file in the run's key-value store, and the OUTPUT record lists each file, sheet, column list, row count and CSV link.
Use cases
- Load a spreadsheet that colleagues keep in Excel into a database, an API or a script as clean JSON.
- Turn every sheet of a workbook into a separate CSV file without opening Excel.
- Feed price lists, inventories or survey exports into no-code tools and LLM pipelines on a schedule.
- Convert one chosen sheet (for example
Orders) from many workbooks into one dataset with the source file and row number on each row.
How to use it
- Paste .xlsx links into Excel file URLs, or upload a workbook in Upload an Excel file.
- Optional: list the Sheets to convert and set the Header row if the column names are not on row 1.
- Optional: choose the Date format and whether to Keep value types.
- Set Max results and run the Actor.
- Export the dataset as JSON, CSV or Excel, or read it through the Apify API. Per-sheet CSV files are in the key-value store, linked from the
OUTPUTrecord.
Input
| Field | What it does | Default | Example |
|---|---|---|---|
fileUrls | Direct links to .xlsx workbooks | none | ["https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1.xlsx"] |
excelFile | One uploaded .xlsx workbook, instead of or in addition to links | none | an uploaded sales-report.xlsx |
sheets | Names of the sheets to convert, not case sensitive; empty means every sheet | [] | ["Orders"] |
headerRow | Row number with the column names; rows above it are ignored; 0 means no header (columns column_A, column_B, ...) | 1 | 3 |
skipEmptyRows | Leave out rows where every cell is empty (not charged) | true | false |
dateFormat | iso for ISO 8601 text, raw for Excel serial numbers | iso | raw |
rawValues | Keep numbers and booleans typed; off returns every value as text | true | false |
maxItems | Stop after this many rows in total across all files and sheets | 100 | 50000 |
Blank header cells become column_<letter>. Repeated header names get _2, _3 and so on, so no value is lost.
Output
One result per spreadsheet row. Example from the prefilled input (a public test workbook from the pandas project):
{"_file": "test1.xlsx","_sheet": "Sheet1","_rowNumber": 2,"column_A": "2000-01-03","A": 0.980268513777,"B": 3.68573087906,"C": -0.364216805298,"D": -1.15973806169}
| Field | Meaning |
|---|---|
_file | File name of the workbook |
_sheet | Sheet name |
_rowNumber | Row number as Excel shows it |
| your columns | One field per column, named from the header row |
The OUTPUT record in the key-value store (not charged) looks like this:
{"files": [{"source": "https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1.xlsx","sheets": [{ "name": "Sheet1", "columns": ["column_A", "A", "B", "C", "D"], "rows": 7, "rowsReturned": 7,"csvKey": "file1-Sheet1.csv", "csvUrl": "https://api.apify.com/v2/key-value-stores/.../records/file1-Sheet1.csv" }]}],"totalRows": 17,"maxItemsReached": false}
Pricing
Pay per result: $0.50 per 1,000 results ($0.0005 per result). One result is one spreadsheet row. You only pay for rows the Actor returns; the CSV files and the OUTPUT summary are free. Set a maximum total charge on the run to cap your spend.
Limits
- Only .xlsx (Excel 2007 and newer). Old binary .xls, .ods, .csv and encrypted (protected) workbooks are skipped and not charged; save them as .xlsx first.
- Files up to 50 MB. Links must point straight at the file. Very large sheets need more memory; raise the run memory if a big workbook fails.
- Number formats are not applied: a cell shown as
12%or$1,200.00in Excel comes out as0.12or1200. WithrawValuesoff you get the same values as text. - Formulas are not recalculated; the result saved in the file is returned. Files written by tools that do not store results give
nullfor formula cells. - Merged cells repeat the top-left value in each covered cell. Charts, images, comments and styles are not extracted.
- The CSV files hold every data row of each converted sheet; the dataset stops at
maxItems.
FAQ
How much does it cost to convert a workbook?
You pay per returned row: a sheet with 2,000 rows costs $1.00. Empty rows, the CSV files and the summary are free, and maxItems caps the total.
Why was my file skipped? The run log gives the reason per file: the link returned a web page instead of the file, the file is an old .xls or a CSV, it is encrypted, or none of the requested sheet names exist (the log lists the sheet names it found).
My column names are on row 3. What do I do?
Set headerRow to 3. Rows above it are ignored. Set it to 0 when the sheet has no header row at all.
Can I merge the converted sheets or remove duplicates?
Yes. Pass the per-sheet CSV links from OUTPUT to the Plain Pipe Actor Merge CSV Files and Remove Duplicates, or reshape the JSON rows with JSON Transformer with jq Filters.
Can I run it on a schedule or from my own code? Yes. Use Apify Schedules to convert a workbook that is updated at the same link, or start runs and read the dataset through the Apify API, webhooks or integrations such as Make and Zapier.
Legal and data
This Actor processes only what you give it or public, non-personal technical data. It does not log in anywhere, does not collect personal data, and does not bypass paywalls, CAPTCHAs or access controls. You are responsible for having the right to process the inputs you provide.
Support
Open an issue on the Issues tab. Issues are answered within 14 days.
Built and maintained by Plain Pipe.