Free CSV to JSON converter and API
Paste CSV or choose a file, and get JSON with the column names and one object per row. The form calls the same free API your code can call: one POST, no API key and no account. The JSON waits in Storage for 24 hours.
curl -s -X POST https://aisenseapi.com/services/v1/csv_to_json \
-H "Content-Type: application/json" \
-d '{"data":"customer_id;name\r\n00123;Nordlys AS\r\n00456;Fjord & Fjell\r\n","delimiter":";"}'
{
"storage_id": "c16032d8-daf3-46c9-962f-5102680da0b4",
"storage_url": "https://aisenseapi.com/services/v1/storage/c16032d8-daf3-46c9-962f-5102680da0b4",
"sha256_hash": "5ad03743756917414f83c5d119ac124896b8a20e7a8eab178c518b03baf7cfdf",
"bytes": 134,
"expire_timestamp": 1790760065,
"expire_datetime": "2026-09-30T09:21:05+00:00",
"content_type": "application/json",
"filename": "result.json",
"operation": "csv_to_json"
}Try it in the browser
This form posts to the same endpoint and shows the stored result. What you enter is sent to aisenseapi.com, and the result is kept for 24 hours at a link that anyone with the link can open.
How the conversion works
The JSON stored for the example at the top of the page, with the column names and one object per row:
{"columns":["customer_id","name"],"rows":[{"customer_id":"00123","name":"Nordlys AS"},{"customer_id":"00456","name":"Fjord & Fjell"}]}
- Every cell stays a string. Nothing is turned into a number, a boolean, a date or null, so
00123keeps its zeros. Convert types in your own code, where you know what each column means. - The first line is always the header. Column names must be unique and not empty.
- Quoting follows the common CSV rules. A quoted field can hold the separator, doubled quotes and line breaks. A UTF-8 byte order mark is removed. Lines end with LF or CRLF, and one line break at the very end is allowed.
- Broken input is refused, not guessed at. An unclosed quote, text after a closing quote, a quote inside an unquoted field, or a row with a different number of fields than the header answers 400. A blank line is a row with one empty field, so remove blank lines first.
Going from CSV to JSON and back does not always give the original JSON. CSV has no types, so the way back produces strings.
The API
POST https://aisenseapi.com/services/v1/csv_to_json with Content-Type: application/json.
| Field | Required | Meaning |
|---|---|---|
data | yes | The CSV text, UTF-8. |
delimiter | no | "," (default), ";" or "\t". |
The result is stored as result.json and served as application/json. The endpoint reads CSV text only; save a spreadsheet as CSV first.
The answer is a Storage link
The endpoint never sends the converted file in its answer. It stores the result for 24 hours and answers with the same fields the Temporary Storage API answers with, plus what the result is:
| Field | Meaning |
|---|---|
storage_id, storage_url | Where the result is. A GET on the URL returns the bytes. |
sha256_hash, bytes | The digest and size of the stored bytes. |
expire_timestamp, expire_datetime | When the result is removed, 24 hours after it was stored. |
content_type, filename | What the result is and the name to save it under. |
operation | The endpoint that made it. |
The id and the expiry in the examples on this page come from a test run and are different on every call. The hash and the size are what the example request gives every time.
Anyone with the link can read the result until it expires, so do not send personal or confidential data. Stored results count against the Storage budget of 80 MB per IP address per day.
Limits
- The request body is at most 256 KB, and the CSV text has to fit inside it.
- At most 5000 data rows and 100 columns.
- The JSON is at most 2 MB.
Errors
A refused request stores nothing and answers with error. The endpoint's own refusals also carry fix, a sentence saying what to send instead.
| Status | When |
|---|---|
400 | The body is not a JSON object, a field is missing, unknown or has the wrong type, or the input breaks the rules above. |
405 | The method is not POST. |
413 | The request, the rows or the result is over a limit. |
415 | The Content-Type is not application/json. |
429 | More than 5000 requests from one IP address in 24 hours, or the day's Storage budget is used up. |
503 | The result could not be stored. Try again later. |
Questions
Is the CSV to JSON API free?
Yes. No API key, no account and no sign up. The limit is 5000 requests per IP address per 24 hours, and stored results count against the Storage budget of 80 MB per IP address per day.
Why are numbers returned as strings?
CSV has no types. Guessing them turns an ID like 00123 into 123 and a date into a number, so every cell is returned as the text it was.
Which separators are supported?
Comma, semicolon and tab. The form guesses the separator from the first line; the API uses a comma unless you send delimiter.
Can it read Excel files?
No. Save the sheet as CSV first. The endpoint reads UTF-8 CSV text.
Related tools
- JSON to CSV converter and CSV to JSON converter
- Table matching: compare two tables on key columns
- JSON formatter and JSON validator
- Image converter and image compression for JPEG, PNG and WebP
- Temporary Storage API, where every result is kept for 24 hours