Extract CSV column
Ask for the email column of a name, email and role table and get ada@example.com and bob@example.com, in order, without the header. Pick a column by name or by position from 0, with commas, semicolons or tabs as separators. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Column
- Column index
- 1
- Values
- ada@example.com, bob@example.com
- Quantity
- 2
- Delimiter
- ,
Extracting a single CSV column is a everyday spreadsheet chore with a clear product promise: paste table text, name the field or its zero-based index, and receive an ordered list of cell values without opening Excel or writing a one-off script. Empty input, unknown headers, and out-of-range indexes fail with invalid input so callers never store hollow successes.
One column out of a whole table
Paste the table, name the column you want and get its values in order, top to bottom. With the sample of name, email and role for Ada and Bob, asking for email returns ada@example.com and bob@example.com, two values, while the header row itself is left out. You can name the column by its header or by its position, counted from 0, so email is column 1. Commas are the default separator, and semicolons or tabs work for regional exports and tab-separated dumps. A cell in double quotes may contain commas or line breaks without splitting the row.
Common reasons a column is not found
Header names must match exactly, capitals included, so Email and email count as different columns; when only the capitals differ, the message may suggest the spelling that exists. A position beyond the last column, or a negative one, is refused rather than returning an empty list. If the first row already holds data, switch off the header option and pick the column by number. An unclosed quote also stops the extraction, which usually points to a broken export. The tool takes one column out; it does not filter rows, join files or reshape the whole table.
What extracting one CSV column means and when to use it
Search intent for extract CSV column, pull column from CSV, or get values of one field from a spreadsheet export is narrower than full table transforms. People already have a delimiter-separated table and only want one vertical slice: every email, every SKU, every score. This capability defines a CSV as rows separated by CR, LF, or CRLF, and fields separated by a single-character delimiter (comma by default, with semicolon and tab supported for regional and TSV dumps).
Fields may be double-quoted; embedded quotes must be doubled per RFC 4180 so commas and newlines inside a cell do not split the row. Prefer this extract-csv-column tool when the landing intent is literally one field as a list.
What you can do with it
Mailing lists from CRM exports
Paste a contact CSV, select the email column by header name, and copy the ordered values into a mail-merge or newsletter tool.
Score columns for grade books
Teachers pull one assessment column from a class export without opening a spreadsheet, then paste values into a calculator or LMS.
FAQ
How do I extract one column from a CSV?
The response values array lists that field in row order.
Can I select a column by index instead of name?
Yes. Pass column as a number or numeric string such as 0 or "2".
Is the extract CSV column tool free?
The browser tool runs free on your device.
Does it support tabs or semicolons as separators?
Yes. Set delimiter to ";" or use "\t" for tab-separated values. The default delimiter is a comma.
Why is my column name not found?
Header names must match exactly, capitals included, so Email and email are different columns. When only the capitals differ, the message may suggest the spelling that exists. Also check that the first row really holds the headers.
Related tools
For developers — API access
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.
API endpoint
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, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/str/csv-select-column \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"csv":"name,email,role\nAda,ada@example.com,admin\nBob,bob@example.com,user","column":"email"}'const res = await fetch("https://api.kit.forhosting.com/str/csv-select-column", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"csv": "name,email,role\nAda,ada@example.com,admin\nBob,bob@example.com,user",
"column": "email"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/csv-select-column",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"csv": "name,email,role\nAda,ada@example.com,admin\nBob,bob@example.com,user",
"column": "email"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/csv-select-column", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"csv":"name,email,role\\nAda,ada@example.com,admin\\nBob,bob@example.com,user","column":"email"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"csv":"name,email,role\nAda,ada@example.com,admin\nBob,bob@example.com,user","column":"email"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/csv-select-column", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"csv": "name,email,role\nAda,ada@example.com,admin\nBob,bob@example.com,user",
"column": "email"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.csv_select_column",
"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.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What extracting one CSV column means and when to use it
When has_header is true, the first row supplies column names and is excluded from the returned values array; when it is false, every row is data and you must select by numeric index. Do not use it to filter rows by condition, join two files, rename many columns, or convert an entire table to nested JSON—those are separate product intents with their own landings.
Input contract, header versus index selection, and response fields
Optional delimiter defaults to comma; use a single character or the common "\t" spelling for tab. Header matching is case-sensitive so Email and email are different; when a case-only mismatch would uniquely resolve, the error message may suggest the available spelling. Send a JSON body with required string field csv set to the non-empty table text and required column set to either a header name string or a zero-based integer index (as a number or a pure numeric string such as "0"). Aliases text, input, data, source, content, and value are accepted for the CSV body; col, field, index, and name are accepted for the selector. Optional has_header defaults to true; set it false when the first row is already data. Missing csv, empty csv, non-string csv, missing column, unknown header names, negative or out-of-range indexes, and unclosed quoted fields all raise invalid_input with a message that names the problem, and those failures are not charged on the prepaid API. On success the response includes column as the resolved label, column_index as the zero-based position used, values as the ordered cell strings (empty string for short rows missing that cell), count equal to values length, has_header and delimiter echoing the mode, row_count as the number of data rows, method always csv_select_column, and headers as the first-row names only when has_header is true—optional fields are omitted rather than null. Use values alone when a mailing list only needs the column; use headers and column_index when building UI tables that highlight the selected field.
API usage, pricing, workflows, and practical limits
Call the free in-browser extract CSV column tool for homework tables, CRM exports, and quick field pulls without writing a CSV parser in every language. Do not expect type inference, date parsing, or automatic delimiter detection beyond the explicit delimiter parameter—those are separate problems. Authors shipping SDKs can document csv and column as required, show a success example with a named header, and show a missing-column error example so integrators see both sides of the contract. Use the prepaid KIT API when a CMS, ETL step, QA harness, tutoring app, or mobile client needs the same contract under balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. A typical workflow pastes an export, selects column email with has_header true, then feeds values into a mail or dedupe step. Pair this endpoint with filter-csv or csv-to-json when the next step is row selection or a full object array, but keep extract CSV column as its own landing so the single-field intent is not mixed with multi-column transforms. Keep payloads within ordinary document sizes suitable for a Worker isolate rather than multi-megabyte warehouse dumps.
Integration use cases
Fixture IDs for tests
CI scripts extract a stable id column by zero-based index from golden CSV fixtures so parsers and pipelines fail on column-order regressions.
Technical questions
What happens if the header name is wrong?
The request fails with invalid_input and lists available headers. Matching is case-sensitive; validation failures are not charged on the prepaid API.