JSON to CSV Converter

Convert JSON arrays or objects to CSV in your browser. Flattens nested keys to dot notation, handles quoting per RFC 4180. Free, private, no upload.

JSON inputpaste, type, or drop a file
CSV output
Runs 100% in your browser. Nothing is uploaded, logged, or stored, and there are no ads. Verify it yourself: open your browser's Network tab while you convert and watch that no requests leave this page.

About this tool

Paste a JSON array of objects (an API response, a database export, a log dump) and get a spreadsheet-ready CSV back instantly. Nested objects are flattened to dot-notation columns like `user.address.city`, and arrays inside rows are kept as JSON strings so no data is silently dropped.

Everything runs client-side: your JSON is parsed and re-serialized by JavaScript in this tab, which makes it safe for data you would not want to paste into a random upload form.

Common uses

  • Turn a REST API response into a CSV you can open in Excel or Google Sheets.
  • Convert a MongoDB or Firestore JSON export into a flat file for a BI tool.
  • Hand a non-technical teammate a spreadsheet instead of a JSON blob.

Automate via API

The same conversion is available as a REST endpoint for scripts, pipelines, and backends:

curl -X POST https://payloadly.com/api/v1/tools/json-to-csv \
  -H "Content-Type: text/plain" \
  -H "X-Api-Key: YOUR_API_KEY" \
  --data-binary @input.json

API documentation · Get an API key

Worked examples

Real payloads from tools people use daily, with the exact output this converter produces. Every example runs in your browser, so you can load one and adapt it to your own data.

Convert a Stripe webhook to CSV

Stripe event payloads bury the useful fields under data.object, so the flattener turns them into readable dot-notation columns like data.object.amount.

JSON input
{
  "id": "evt_1PabcXYZ",
  "type": "charge.succeeded",
  "created": 1716242622,
  "data": {
    "object": {
      "id": "ch_3PabcXYZ",
      "amount": 2000,
      "currency": "usd",
      "customer": "cus_QabcXYZ",
      "status": "succeeded"
    }
  }
}
CSV output
id,type,created,data.object.id,data.object.amount,data.object.currency,data.object.customer,data.object.status
evt_1PabcXYZ,charge.succeeded,1716242622,ch_3PabcXYZ,2000,usd,cus_QabcXYZ,succeeded

Convert a Shopify order webhook to CSV

Shopify wraps collections under a key such as orders; the tool unwraps a single top-level array automatically so you get one row per order.

JSON input
{
  "orders": [
    { "id": 4567, "name": "#1001", "email": "ada@example.com", "total_price": "49.90", "financial_status": "paid" },
    { "id": 4568, "name": "#1002", "email": "grace@example.com", "total_price": "18.00", "financial_status": "pending" }
  ]
}
CSV output
id,name,email,total_price,financial_status
4567,#1001,ada@example.com,49.90,paid
4568,#1002,grace@example.com,18.00,pending

Convert a Notion API response to CSV

Notion returns matching pages under results, each with a nested properties object that becomes properties.* columns.

JSON input
{
  "results": [
    { "id": "a1b2", "properties": { "Name": "Launch plan", "Status": "In progress" } },
    { "id": "c3d4", "properties": { "Name": "Q3 roadmap", "Status": "Done" } }
  ]
}
CSV output
id,properties.Name,properties.Status
a1b2,Launch plan,In progress
c3d4,Q3 roadmap,Done

Convert HubSpot contacts to CSV

HubSpot nests fields under a properties object; flattening produces one column per contact property.

JSON input
{
  "results": [
    { "id": "701", "properties": { "email": "grace@example.com", "firstname": "Grace", "lastname": "Hopper" } },
    { "id": "702", "properties": { "email": "ada@example.com", "firstname": "Ada", "lastname": "Lovelace" } }
  ]
}
CSV output
id,properties.email,properties.firstname,properties.lastname
701,grace@example.com,Grace,Hopper
702,ada@example.com,Ada,Lovelace

JSON notes

JSON (JavaScript Object Notation) is the standard interchange format for web APIs, config files, and log pipelines. It is strict: keys must be double-quoted, trailing commas are invalid, and comments are not allowed.

  • JSON does not support comments; they are stripped or rejected by parsers.
  • Trailing commas after the last element are invalid JSON.
  • Integers beyond 2^53 lose precision in JavaScript-based parsers.

CSV notes

CSV (comma-separated values) is the lingua franca of spreadsheets, analytics exports, and bulk imports. It is tabular and flat: every row shares one set of columns, so nested structures must be flattened.

  • Fields containing commas, quotes, or newlines must be quoted per RFC 4180.
  • CSV has no type system; numbers and booleans are inferred on import.
  • Nested objects are flattened to dot-notation columns (e.g. `user.name`).

Frequently asked questions

Is my data uploaded to a server?

No. This tool runs entirely in your browser using JavaScript, and there are no ads on the page. Nothing you paste or drop here is uploaded, logged, or stored, and you can verify that yourself: open your browser's developer tools and watch the Network tab while you convert (no requests leave the page), or disconnect from the internet after the page loads and keep working.

What should I watch out for when converting JSON to CSV?

JSON does not support comments; they are stripped or rejected by parsers. Trailing commas after the last element are invalid JSON. Fields containing commas, quotes, or newlines must be quoted per RFC 4180. CSV has no type system; numbers and booleans are inferred on import.

How are nested objects handled?

Nested objects become dot-notation columns: {"user": {"name": "Ada"}} produces a column called user.name. Arrays inside a row are serialized as JSON strings so the row stays rectangular without losing data.

Why does Excel show broken characters like é when I open a CSV?

Excel only detects UTF-8 on double-click when the file starts with a byte order mark (BOM). CSV files downloaded from this tool include the BOM automatically, so accents, emoji, and non-Latin scripts open correctly. If your regional Excel expects semicolon-separated files, set the delimiter option to semicolon before converting.

Is there a size limit or a fee?

The browser tool is free with no signup and comfortably handles files up to tens of megabytes (limited by your device's memory). For automated or bulk processing inside your own scripts and pipelines, use the paid REST API.

Related tools