CSV Profiler & Data Quality Checker: Types, Nulls, Stats
Pricing
from $2.40 / 1,000 profiled csv files
CSV Profiler & Data Quality Checker: Types, Nulls, Stats
Profiles a CSV file by URL or pasted text, up to 200,000 rows. Returns per-column type, null %, unique count, top values and numeric stats, plus warnings for null-heavy, mixed, constant and ID-like columns; files that fail to load are free. For analysts, data engineers and ML engineers.
Pricing
from $2.40 / 1,000 profiled csv files
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Features
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)."]}
Example
A real run on 2026-10-31 with the input this page's form is prefilled with:
{"url": "https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv","csv": "name,age,city\nAda,36,London\nAlan,41,Wilmslow\nGrace,85,Arlington","urls": ["https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv"]}
It finished in 2 seconds and returned 2 results. It was charged for 2 file-profiled events ($0.006 on the Free plan). The first result (long text and lists cut for display):
{"source": "https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv","ok": true,"rowCount": 891,"columnCount": 12,"columns": [{"name": "PassengerId","type": "integer","nullPct": 0,"unique": 891,"stats": {"min": 1,"max": 891,"mean": 446,"median": 446,"stddev": 257.209383},"topValues": [{"value": "1","count": 1},{"value": "2","count": 1},{"value": "3","count": 1},"… 2 more"]},{"name": "Survived","type": "integer","nullPct": 0,"unique": 2,"stats": {"min": 0,"max": 1,"mean": 0.383838,"median": 0,"stddev": 0.486319},"topValues": [{"value": "0","count": 549},{"value": "1","count": 342}]},{"name": "Pclass","type": "integer","nullPct": 0,"unique": 3,"stats": {"min": 1,"max": 3,"mean": 2.308642,"median": 3,"stddev": 0.835602},"topValues": [{"value": "3","count": 491},{"value": "1","count": 216},{"value": "2","count": 184}]},"… 9 more"],"warnings": ["Column \"PassengerId\" has all-unique values (possible identifier).","Column \"Name\" has all-unique values (possible identifier).","Column \"Age\" has mixed data types.","… 4 more"]}
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/2024classifies 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/urlsorcsv - Returns: one profile record per file;
columns+warningssummarize data quality - Bounded:
maxRowscaps rows read; failures isolate per file - Side effects: none
Who uses it
- Data analysts checking null rates and column types before importing a CSV
- ML engineers spotting constant or ID-like columns before training
- Finance ops teams finding numeric columns that contain text before a reconciliation
- Data engineers profiling a vendor's CSV feed before building a pipeline for it
- Consultants getting a quick quality report on a client dataset in the first meeting
Changelog
- 2026-11-01: Page text only: an Example section from a real run. Code, output and price are unchanged.