Excel & CSV Merger: Consolidate, Pivot & Batch Convert avatar

Excel & CSV Merger: Consolidate, Pivot & Batch Convert

Pricing

from $20.00 / 1,000 processed files

Go to Apify Store
Excel & CSV Merger: Consolidate, Pivot & Batch Convert

Excel & CSV Merger: Consolidate, Pivot & Batch Convert

Combine, pivot, and batch convert, rename, or format many Excel and CSV files in one run.

Pricing

from $20.00 / 1,000 processed files

Rating

0.0

(0)

Developer

DWS Build

DWS Build

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Security

Limited permissions

Share

DWS Spreadsheet Premium

Combine, pivot, and batch-process Excel and CSV files in one run. Point it at up to 50 files by URL and get back download links for the results.

  • Consolidate many files or sheets into one table, either stacked (rows appended, columns lined up by header name) or merged side by side on a key column.
  • Pivot across every input sheet: group by one or more columns and get sum, count, mean, min, and max.
  • Convert, rename columns, and format every file in a batch: xlsx, csv, or json out; one rename map for all files; bold and frozen header, auto column width, and number or date formats per column.

Reads .xlsx, .xlsm, .xls, and .csv. Writes .xlsx, .csv, or .json.

How to give it files

The Actor runs in the cloud, so it cannot read files on your computer. Give it files in one of two ways:

  1. URLs (recommended). Any direct-download http(s) link: S3 or other signed links, an Apify key-value store record, a Dropbox link ending in ?dl=1, or a Google Drive direct-download link. A share page that shows the file in a browser is not a download link; the Actor will tell you if it gets a web page instead of a spreadsheet.
  2. Base64 for small API calls: {"base64": "...", "name": "jan.csv"}. A name with the file extension is required.

Limits

  • 30 MB per file and 30 MB per run in total (all files together), and up to 50 files per run. Base64 input is limited to 5 MB per file and 10 MB per run. The caps keep runs fast and cheap. For a bigger job, split the files over several runs.
  • The first row of each sheet is the header row.
  • Output keeps cell values only. Where a cell had a formula, you get its last computed value, not the formula. Original styles, merged cells and charts are not preserved.
  • CSV output adds a leading apostrophe to text that starts with =, +, -, or @ (when it is not a number), so the text cannot run as a formula when the file is opened in a spreadsheet app.

Example inputs

These examples use the sample files in eschaq/dws-spreadsheet-samples, so you can paste one into the input, click Start, and see it work. Then replace the URLs with your own files.

Consolidate: stack regional or monthly exports into one sheet

{
"operation": "consolidate",
"files": [
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/north.csv" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/south.xlsx" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/west.xls" }
],
"consolidate": { "strategy": "stack_rows", "addSourceColumn": true },
"outputFormat": "xlsx"
}

Columns are matched by name, ignoring case, extra spaces, and the difference between spaces, underscores and hyphens, so Cust ID and cust_id merge into one column. A _source column says which file and sheet each row came from. Columns that still look alike after that (CustID and Cust ID) are kept apart and listed in the warnings. To join files side by side on a key instead, use "strategy": "merge_on_key", "keyColumn": "SKU".

Pivot: revenue by region across every file

{
"operation": "pivot",
"files": [
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/sales.xlsx" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/legacy.xls" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/march.csv" }
],
"pivot": { "groupBy": ["Region"], "values": ["Revenue"], "aggregations": ["sum", "count", "mean"] },
"outputFormat": "xlsx"
}

Pivot reads every sheet of every input file by default. The optional sheets field limits it to the sheets you name in workbooks; CSV files are always included. Cells that are not numbers in a value column are skipped and counted in the warnings.

Batch: rename columns and format every file

{
"operation": "format",
"files": [
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/orders_1.csv" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/orders_2.csv" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/orders_3.csv" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/orders_4.csv" },
{ "url": "https://raw.githubusercontent.com/eschaq/dws-spreadsheet-samples/main/orders_5.csv" }
],
"renameColumns": { "Cust ID": "customer_id", "Order Date": "order_date" },
"format": {
"boldHeader": true,
"freezeHeader": true,
"autoWidth": true,
"columnFormats": { "order_date": "yyyy-mm-dd", "Amount": "#,##0.00" }
},
"outputFormat": "xlsx"
}

In convert, rename_columns, and format runs, a filled-in Rename columns map and a filled-in Format options block both apply: rename first, then format. That is still one file-processed charge per file. columnFormats uses the column names after renaming. Formatting needs xlsx output. In any xlsx output (convert, consolidate, pivot, and the batch operations), ISO dates stored as text become real date cells: 2026-01-05, with an optional time (2026-01-05 13:45:00), or the T form without a time zone (2026-01-05T13:45:00, fractional seconds allowed). Values with a time zone (Z or +02:00) stay text. Ambiguous dates such as 01/02/2026 stay text, and the warnings name the column.

Output

Each output file is saved to the run's key-value store. The run's dataset holds one short report:

{
"operation": "consolidate",
"outputFormat": "xlsx",
"filesIn": 3, "filesLoaded": 3, "sheetsIn": 3, "rowsIn": 9, "rowsOut": 9,
"outputs": [{ "key": "consolidated.xlsx", "url": "https://api.apify.com/v2/key-value-stores/.../records/consolidated.xlsx", "rows": 9 }],
"warnings": [],
"chargedEvents": { "consolidate-run": 1 },
"stoppedAtChargeLimit": false
}

The report never contains row data, only counts, up to 20 warnings, and download URLs. A file that cannot be downloaded or read is a warning; the other files are still processed.

Use it from Claude

Add Apify's hosted MCP server with this Actor as a tool:

https://mcp.apify.com?tools=dws_build/dws-spreadsheet-premium

Claude can then run it with file URLs and read the download links from the report. Files on your own computer need to be at a URL first (for example uploaded to cloud storage).

For single files on your own machine (reading, searching, filtering, writing cells), the free DWS Spreadsheet MCP runs locally and needs no upload.

Pricing

Pay per event:

EventWhen it is charged
Consolidate runOnce, after the combined file is saved
Pivot runOnce, after the pivot file is saved
File processedOnce per input file in convert, rename, or format runs, after that file's output is saved

Nothing is charged for input errors, files that fail to download or parse, or work that did not finish. If a run reaches your charge limit, it stops before downloading the next file, reports what finished, and exits normally.