CSV Profiler - Instant Data Quality Report for Any CSV avatar

CSV Profiler - Instant Data Quality Report for Any CSV

Pricing

from $2.40 / 1,000 profiled csv files

Go to Apify Store
CSV Profiler - Instant Data Quality Report for Any CSV

CSV Profiler - Instant Data Quality Report for Any CSV

Profile any CSV by URL or paste: per-column types, null rates, unique counts, min/max/mean/median/stddev, top values, quality warnings (mostly-null, mixed-type, constants, identifiers). Up to 200k rows. $0.003 per file whatever its size, no start fee — vs $0.015+ measured incumbents.

Pricing

from $2.40 / 1,000 profiled csv files

Rating

0.0

(0)

Developer

Broke to Built

Broke to Built

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

CSV Profiler — Instant Data Quality Report for Any CSV

Point it at a CSV URL or paste raw CSV — get a full data profile back in seconds: per-column types, null rates, unique counts, min/max/mean/median/stddev, top values, and plain-English quality warnings. Up to 200,000 rows per file, online, by API, or as an agent tool via Apify MCP.

Before you import, join, train on, or bill against a dataset, you want to know: which columns are secretly half-empty, which "numeric" column has strings in it, which field is a constant, which is really an ID. That is exactly what this profile answers — the first 10 minutes of every data-cleaning session, automated.

What you get

  • rowCount / columnCount
  • columns — for each column: inferred type (integer/float/string/date/boolean), nullPct, unique, numeric stats (min/max/mean/median/stddev) or string length range, and the top 5 values with counts
  • warnings — mostly-null columns, mixed-type columns, constants, possible identifiers, parse errors
  • Fail-soft: an unfetchable or empty file never fails the run — it returns {ok: false, error} and is never charged.

Input

{ "url": "https://example.com/data.csv", "maxRows": 5000 }

Also: urls (bulk array, one profile each) and csv (paste raw text). Headerless files get col_1, col_2, … automatically.

Output (real run — the classic Titanic dataset)

{
"ok": true,
"rowCount": 891,
"columnCount": 12,
"columns": [
{
"name": "Age",
"type": "float",
"nullPct": 19.87,
"unique": 88,
"stats": { "min": 0.42, "max": 80, "mean": 29.7, "median": 28, "stddev": 14.52 },
"topValues": [{ "value": "24", "count": 30 }]
}
],
"warnings": ["Column \"Cabin\" is 77.1% null.", "Column \"PassengerId\" has all-unique values (possible identifier)."]
}

Pricing

$0.003 per file profiled — however many rows and columns it has (up to the 200k-row cap). No start fee. Unfetchable and empty files are never charged.

Measured against store incumbents (2026-08-07): q_services/csv-json-data-quality-profiler charges $0.01 start + $0.005 per item, perryay/data-validator-profiler $0.02 start + $0.01 per batch-profile. One file here costs $0.003 vs $0.015–$0.03 there.

Honest limits

  • Types are inferred from values, majority-rules per column; a column of ZIP codes reads as integer (leading zeros stripped by whatever wrote the CSV, not by us — we treat values as text until classified).
  • maxRows (default 5,000, max 200,000) caps profiling depth; rows beyond it are not read. Stats describe the profiled slice.
  • Delimiter/quoting handled by Papa Parse 5.5 (pinned); exotic fixed-width or multi-table sheets are out of scope.
  • Dates are detected for ISO-like formats (2024-01-15, with optional time); 01/15/2024 classifies as string — deliberate, since its meaning is locale-ambiguous.

FAQ

How do I use this for data validation in a pipeline? Profile the incoming file, then assert on the record: reject when warnings is non-empty, when a required column's nullPct exceeds your threshold, or when a column's type changed since the last delivery.

What does "possible identifier" mean? Every non-null value in the column is unique — a strong signal it is a key, not a feature. Useful for spotting columns to exclude from ML training.

Can it handle files without headers? Yes — when no header row is detected, columns become col_1, col_2, … and everything else works the same.

How are booleans detected? true/false, yes/no, y/n, t/f, 1/0 (case-insensitive) — majority-rules with the other candidates per column.

Why did some rows come back ok: false? The URL 404'd, timed out, or returned empty content. Recorded with the exact error, never charged.

Use from code or AI agents

curl -s "https://api.apify.com/v2/acts/EliAI~csv-profiler/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-X POST -H 'Content-Type: application/json' \
-d '{"url": "https://example.com/export.csv"}'

Agents: connect Apify MCP and call the EliAI/csv-profiler tool.

  • Capability: profile one or many CSV files — column types, null rates, stats, top values, quality warnings
  • Required input: url/urls or csv
  • Returns: one profile record per file; columns + warnings summarize data quality
  • Bounded: maxRows caps rows read; failures isolate per file
  • Side effects: none