Spreadsheet Doctor
Clean, dedupe, join and reconcile messy CSV and Excel files. Your agent sends the file; it gets back clean tables and a report of what changed.
Run it on ApifyUse it from an agentWhat it does
| Operation | What you get |
|---|---|
profile | Column types, empty cells, unique counts, format problems and likely key columns. Changes nothing |
clean | snake_case headers; N/A/null/- become empty; emails lowercased; phones as E.164 (+19015550142); dates as ISO 8601; $1,200.50 as 1200.5; ZIP codes with their leading zeros back |
dedupe | Duplicates removed by key columns, ignoring case, spaces and punctuation. Keep the first, the last, or merge them (blanks filled from the duplicates) |
join | 2–10 files joined on a key, even when the key column has a different name in each file. Matched and unmatched counts with example keys |
reconcile | Two files compared by key: a differences table (key, column, left value, right value), plus rows found in only one file |
Example
Dedupe a contact list by email. Input:
{"operation": "dedupe",
"inlineFiles": [{"name": "contacts.csv",
"text": "Name,E-mail,Phone\n ALICE SMITH ,Alice@Example.com,(901) 555-0142\nalice smith,alice@example.com ,901.555.0142\n"}],
"keys": ["email"]}
Result (shortened): one row, {"name": "Alice Smith", "email": "alice@example.com", "phone": "+19015550142"}, and a report saying 2 rows went in, 1 came out, 1 duplicate group.
If a join finds no matching keys, the run fails with NO_MATCHES and shows example keys from both files, so the agent can fix the key and try again.
Use it
In the Apify Console
Open the Actor page on Apify, fill in the input form and click Start. Results land in the run's dataset (JSON, CSV or Excel download).
From an AI agent (MCP)
Apify's hosted MCP server exposes the Actor as a tool to Claude, Cursor, VS Code and other MCP clients. Server URL:
https://mcp.apify.com/?tools=errandkit/spreadsheet-doctor
For example, in Claude Code (sign in to Apify when asked, or add --header "Authorization: Bearer YOUR_APIFY_TOKEN"):
claude mcp add --transport http errandkit "https://mcp.apify.com/?tools=errandkit/spreadsheet-doctor"
Copy-paste config for Claude Desktop, Cursor, VS Code, Windsurf and ChatGPT →
From code (Apify API)
curl -X POST "https://api.apify.com/v2/acts/errandkit~spreadsheet-doctor/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"operation":"clean","inlineFiles":[{"name":"a.csv","text":"Email,Phone\nA@X.COM,(901) 555-0142\n"}]}'
Errandkit doesn't run its own hosted API yet. Every way of using this tool goes through your Apify account.
Pricing
| Event | Price |
|---|---|
| 100 input rows processed | $0.002 |
Data-quality or reconciliation report (profile, reconcile) | $0.02 |
| Actor start (Apify standard) | $0.00005 |
Examples: clean 1,000 rows = $0.02; dedupe 50,000 rows = $1.00. A run that fails on bad input or a limit pays only the start event.
Launch prices. The price shown on the Apify Store page is the one you are charged, and Apify shows it before every run.
Limits
- 10 files per run, 10 MB each, 25 MB total; 200,000 rows and 300 columns per file.
.csv,.tsvand.xlsx. Not.xls,.xlsmor.ods(re-save them as .xlsx).- One sheet per workbook. European number formats (
1.234,50) are flagged but not converted. No fuzzy matching yet. - Excel formulas are never run. CSV output escapes cells starting with
=,+,-or@.
Your data
Files are processed in memory during your Apify run. Results are stored only in your own Apify run storage, under your account's retention settings. The tool doesn't send your data anywhere else. Details: privacy.