CSV Cleaner & Deduplication Tool
Pricing
$1.00 / 1,000 cleaned csv rows
CSV Cleaner & Deduplication Tool
Clean CSV data. No API key / no login. Open Input → leave defaults → Start (3 CSV rows cleaned ≈ USD 0.01/run): https://console.apify.com/actors/Rrl9isk1pUMDbShKc/input From USD 0.
Pricing
$1.00 / 1,000 cleaned csv rows
Rating
0.0
(0)
Developer
naoki anzai
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
🧹 CSV Data Cleaner
What you get: your CSV back as clean dataset rows — whitespace trimmed, empty rows dropped, duplicates removed by the columns you choose, and sorted — ready to export as CSV, JSON or Excel.
Sample output from a real run (2026-10-18, default input: 5 CSV rows including one empty row and one repeated row, 4 rows out):
| name | city | |
|---|---|---|
| Alice | alice@example.com | Tokyo |
| Bob | bob@example.com | New York |
| Alice | alice@example.com | Tokyo |
| Charlie | charlie@example.com | London |
The empty row was removed. The repeated Alice row stays because the default input sets no dedupColumns; add "dedupColumns": ["email"] to drop it. That run was 4 rows × $0.001 = $0.004 (there is no separate start fee).
Open Input (leave defaults → Start)
Paid first-run JSON ≈ USD 0.002 (2 cleaned rows × USD 0.001). Open Console Input (deep link above) and run this JSON.
{"csvData": "name,age\nAlice,30\nBob,25","trimWhitespace": true,"removeEmpty": true,"dedupColumns": ["name"],"sortBy": "name","delivery": "dataset","dryRun": false}
Store Quickstart
Run the bounded paid first-run JSON above first; keep report/export options off unless needed.
{"csvData": "name,age\nAlice,30\nBob,25","trimWhitespace": true,"removeEmpty": true,"dedupColumns": ["name"],"sortBy": "name","delivery": "dataset","dryRun": false}
Paste your CSV into csvData (or give a public csvUrl), choose dedupColumns, and Start.
Use with Apify MCP
Exact actor: taroyamada/csv-data-cleaner
Sample input JSON:
{"csvData": "name,age\nAlice,30\nBob,25\nAlice,30","trimWhitespace": true,"removeEmpty": true,"dedupColumns": ["name"],"sortBy": "name","delivery": "dataset"}
Data engineers and operations teams can clean user-supplied CSV tables without sending the contents to a third-party enrichment API. The actor trims whitespace, removes empty rows, deduplicates selected columns, sorts records, and returns both structured rows and normalized CSV.
Research teams and analytics pipelines depend on this automated data cleaner to prepare CSV datasets for downstream analysis. Instead of fighting with complex spreadsheet formulas to identify redundant entries, you can pass your raw CSV URL directly to this utility. It systematically scans the file to deduplicate rows based on specific columns—like usernames, email addresses, or phone numbers—ensuring you never analyse duplicate rows as separate records.
Beyond basic deduplication, the tool actively sanitizes the content. It trims invisible whitespace from text fields, drops blank lines generated during interrupted scraping runs, and sorts the final list for easy review. By automating this cleanup phase, you ensure that every exported spreadsheet contains perfectly formatted data. Your final files will have clean website URLs, properly structured bios, and deduplicated social media posts, ready to fuel your next marketing campaign.
Key Features
- 🧹 Trim whitespace — Remove leading/trailing spaces from all cells
- 🗑️ Remove empty rows — Drop rows where all columns are empty
- 🔁 Deduplicate by columns — Remove duplicate rows by specified key columns
- 📊 Sort by column — Output sorted by any column
- 🔗 Dataset or URL input — Apify dataset ID or direct CSV URL
- 🔑 No API key needed — Pure JS, zero dependencies
Use Cases
| Who | Why |
|---|---|
| Data engineers | Clean scraper outputs before downstream processing |
| BI analysts | Standardize CSV imports from multiple sources |
| Marketing ops | Clean analyst CSVs before downstream pipeline ingestion |
| Data migration | Normalize CSV files during system migrations |
| Apify pipelines | Post-process actor output datasets |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| csvData | string | CSV text pasted directly (or use csvUrl) | |
| csvUrl | string | Public URL of a CSV file (or use csvData) | |
| delimiter | string | , | Field delimiter |
| dedupColumns | string[] | [] | Columns for dedup key |
| trimWhitespace | boolean | true | Trim whitespace |
| removeEmpty | boolean | true | Remove empty rows |
| sortBy | string | Column to sort by |
Input Example
{"csvData": "email,name,created_at\nb@example.com,Bob,2026-01-02\na@example.com,Alice,2026-01-01\nb@example.com,Bob,2026-01-02","dedupColumns": ["email"],"trimWhitespace": true,"removeEmpty": true,"sortBy": "created_at"}
Input Examples
Example: Deduplicate by email
{"csvData": "name,email,city\nAlice,alice@example.com,Tokyo\nBob,bob@example.com,New York\nAlice,alice@example.com,Tokyo\n,,\nCharlie,charlie@example.com,London","dedupColumns": ["email"]}
Example: Semicolon-separated file
{"csvData": "sku;price\nA-1; 9.90\nA-2;12.00\nA-1;9.90","delimiter": ";","dedupColumns": ["sku"],"sortBy": "price","sortOrder": "desc"}
Example: Sort only (keep duplicates)
{"csvData": "name,age\nCarol,41\nAlice,30\nBob,25","sortBy": "name"}
Output
One dataset row per cleaned CSV row. The field names are your CSV header columns.
| Field | Type | Description |
|---|---|---|
<column> | string | One field per CSV header column, with the cleaned value |
Output Example
Rows from a real run of the Input Example above (2026-10-18): see the sample table at the top of this page for the default input.
[{"email": "a@example.com","name": "Alice","created_at": "2026-01-01"},{"email": "b@example.com","name": "Bob","created_at": "2026-01-02"}]
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~csv-data-cleaner/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"csvData": "email,name,created_at\nb@example.com,Bob,2026-01-02\na@example.com,Alice,2026-01-01\nb@example.com,Bob,2026-01-02", "dedupColumns": ["email"], "trimWhitespace": true, "removeEmpty": true, "sortBy": "created_at"}'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/csv-data-cleaner").call(run_input={"csvData": "email,name,created_at\nb@example.com,Bob,2026-01-02\na@example.com,Alice,2026-01-01\nb@example.com,Bob,2026-01-02","dedupColumns": ["email"],"trimWhitespace": true,"removeEmpty": true,"sortBy": "created_at"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/csv-data-cleaner').call({"csvData": "email,name,created_at\nb@example.com,Bob,2026-01-02\na@example.com,Alice,2026-01-01\nb@example.com,Bob,2026-01-02","dedupColumns": ["email"],"trimWhitespace": true,"removeEmpty": true,"sortBy": "created_at"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Set
dedupColumnsto the columns that identify a record (for example["email"]); rows with the same values are kept once. - Use
delimiterto handle TSV (\t) or semicolon-separated files. - Combine with Phone Validator and Email Checker for full lead-data cleansing.
- Output dataset is ready for direct import into CRMs or databases.
FAQ
What CSV dialects are supported?
Standard RFC 4180 CSV: comma-delimited, quoted fields, CRLF line endings. TSV not supported directly.
Max CSV file size?
In-memory processing. Works well up to ~100 MB / 1M rows. Larger files need chunking.
Does it validate data types?
No — cleaning operations only. For type validation, combine with validation libraries.
Can I use this in Apify pipelines?
Yes — provide datasetId from a prior actor run to clean that dataset directly.
What's the max file size?
Limited by actor memory (1024 MB by default). Tested up to 100k rows.
Can I upload a local CSV?
Provide a public URL via csvUrl. Use a service like file.io or S3 presigned URLs for private files.
Related Actors
DevOps & Tech Intel cluster — explore related Apify tools:
- 🌐 DNS Propagation Checker — Check DNS propagation across 8 global resolvers (Google, Cloudflare, Quad9, OpenDNS).
- 🔍 Subdomain Finder — Discover subdomains for any domain using Certificate Transparency logs (crt.
- 📦 NPM Package Analyzer — Analyze npm packages: download stats, dependencies, licenses, deprecation status.
- 💬 Reddit Scraper — Scrape Reddit posts and comments from any subreddit via official JSON API.
- GitHub Release & Changelog Monitor API — Track GitHub releases, tags, release notes, and changelog drift over time with one summary-first repository row per repo.
- Docs & Changelog Drift Monitor API — Monitor release notes, changelog pages, migration guides, and key docs pages with one summary-first target row per monitored repo, SDK, or product.
- Tech Events Calendar API | Conferences + CFP — Aggregate tech conferences and CFPs across multiple sources into a deduplicated event calendar for DevRel and recruiting workflows.
- 🔒 OSS Vulnerability Monitor — Monitor open-source packages for known security vulnerabilities using OSV and GitHub Security Advisories.
Cost
Pay Per Event (current Store prices):
- Result row: $0.001 per row written to the default dataset (no separate start fee)
Example: 1,000 rows = 1,000 × $0.001 = $1.00
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.