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 agent

What it does

OperationWhat you get
profileColumn types, empty cells, unique counts, format problems and likely key columns. Changes nothing
cleansnake_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
dedupeDuplicates removed by key columns, ignoring case, spaces and punctuation. Keep the first, the last, or merge them (blanks filled from the duplicates)
join2–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
reconcileTwo 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

EventPrice
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

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.