CSV Cleaner & Deduplication Tool avatar

CSV Cleaner & Deduplication Tool

Pricing

$1.00 / 1,000 cleaned csv rows

Go to Apify Store
CSV Cleaner & Deduplication Tool

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

naoki anzai

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

6 days ago

Last modified

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):

nameemailcity
Alicealice@example.comTokyo
Bobbob@example.comNew York
Alicealice@example.comTokyo
Charliecharlie@example.comLondon

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

WhoWhy
Data engineersClean scraper outputs before downstream processing
BI analystsStandardize CSV imports from multiple sources
Marketing opsClean analyst CSVs before downstream pipeline ingestion
Data migrationNormalize CSV files during system migrations
Apify pipelinesPost-process actor output datasets

Input

FieldTypeDefaultDescription
csvDatastringCSV text pasted directly (or use csvUrl)
csvUrlstringPublic URL of a CSV file (or use csvData)
delimiterstring,Field delimiter
dedupColumnsstring[][]Columns for dedup key
trimWhitespacebooleantrueTrim whitespace
removeEmptybooleantrueRemove empty rows
sortBystringColumn 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.

FieldTypeDescription
<column>stringOne 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 ApifyClient
client = 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 dedupColumns to the columns that identify a record (for example ["email"]); rows with the same values are kept once.
  • Use delimiter to 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.

DevOps & Tech Intel cluster — explore related Apify tools:

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.