ForHosting KIT · Data & Files

CSV statistics

Before you clean, filter or load a dataset, you need to know what is actually in it — which columns are riddled with nulls, which numeric field has an outlier ten times the median, which supposedly categorical column has 400 distinct values instead of five. This endpoint profiles a CSV column by column and returns exactly that picture, without you having to eyeball a spreadsheet or write throwaway analysis code.

● StableFree · in your browser
Use it from WebAPIEmailApp soonTelegram soon

Runs in your browser. Free, unlimited — your data never leaves this page.

Why you profile before you trust a dataset

Every data professional has learned this lesson the hard way at least once: you load a file, build something on top of it, and only later discover that a key column was 30% empty, or a date field had three different formats mixed together, or an amount column had a handful of negative values nobody expected. Profiling a dataset first is not extra work, it is the step that prevents building on a foundation you have not actually inspected, and it is the difference between finding a data quality problem in five seconds versus finding it in production.

What a profile actually reports

Call POST /data/csv-stats with your file and the task returns, for every column, its inferred type, the count and percentage of null or empty values, and type-appropriate statistics: minimum, maximum, mean and median for numeric columns; the distinct value count and the most frequent values for categorical or text columns; earliest and latest dates for date columns. It is the same census a careful analyst would run manually with a pivot table, condensed into one automated pass over the whole file.

Distributions tell a different story than averages

A mean on its own can hide exactly the problem you are looking for — an average order value of $85 looks unremarkable until the distribution shows most orders cluster near $20 and a handful of outliers near $2,000 are dragging the mean upward. Reporting distribution shape and value frequency alongside the summary statistics, rather than a bare average, is what turns a profile from a vague summary into something that actually flags where a dataset deserves a closer look.

A discipline older than the tools that automate it

Exploratory data analysis as a formal discipline dates back to the statistician John Tukey's work in the 1970s, built on the idea that you should understand a dataset's shape before you model or draw conclusions from it. What used to require manually computing summary statistics or building histograms by hand is now something a single automated call can produce, but the underlying principle has not changed: look before you leap into analysis, cleaning, or a production import.

Its place in a data pipeline

Because profiling runs asynchronously and returns a task_id right away, it fits naturally as a first step before anything else touches a new dataset — run it on an incoming partner file to catch quality issues before a transform or merge step, or run it periodically on a table export to monitor how its shape drifts over time. Results arrive by signed webhook or a 24-hour signed link, ready to drive an automated quality gate or simply inform a human deciding whether a file is trustworthy enough to load.

Incoming file quality gate

Profile every partner CSV on arrival and automatically flag files where a required column exceeds an acceptable null percentage before it reaches an import job.

Exploratory analysis before modeling

Get column-level distributions and outlier ranges on a new dataset in seconds, instead of manually building pivot tables to understand its shape.

Schema drift monitoring

Run statistics on a recurring export over time to catch when a column's distinct value count or null rate quietly shifts, signaling an upstream change.

Data cleanup prioritization

Identify which columns actually need attention, ranked by null percentage and outlier presence, instead of cleaning every column equally.

What statistics does this CSV statistics API return per column?

For each column it returns inferred type, null count and percentage, plus type-appropriate stats: min, max, mean and median for numbers, distinct and most frequent values for text, and earliest/latest for dates.

Does it detect outliers?

It surfaces the value distribution and range for numeric columns, including minimum and maximum, which is what makes outliers visible alongside the mean and median rather than hidden behind a single average.

Is there a free tier to try the csv-stats endpoint?

The tool above runs free in your browser. The API is paid — each call draws from your prepaid ForHosting KIT balance: top up from $10.00 (it never expires), pay each request's published price, and a call with no balance returns HTTP 402. No subscription, no tokens, and a failed task is never charged.

Can I profile a very large CSV file?

Yes, submit it as an async request and it returns a task_id immediately, so the profile is computed in the background regardless of file size.

Does this modify or clean my data?

No, csv-stats only analyzes and reports; it never alters the source file, so it is safe to run on production exports before deciding what to clean.

How is this different from just opening the file in a spreadsheet?

A spreadsheet requires manually building pivot tables or formulas per column and struggles past a few hundred thousand rows; this endpoint profiles every column automatically regardless of file size.

How do I receive the statistics report?

Through a signed webhook, recommended for automated pipelines, or a signed link valid for 24 hours for manual review.

How much does the CSV statistics API cost?

$0.002 per request, charged only when the profiling task completes successfully.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/data/csv-stats

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/data/csv-stats \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"…"}'
{
  "text": "…"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.csv_stats",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

max_mb25
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →