Decant

Decant · Documents into data

Turn a spreadsheet or PDF into JSON.

Files in. Rows out.

reads
CSV · XLSX · PDF with a text layer
limits
5 MB a file · 20,000 rows a sheet
keeps
nothing: processed in memory
costs
free within a daily allowance

Converter

What you are converting
Drop a CSV, XLSX or PDF on the console, or

Processed in memory and not stored. Up to 5 MB.

Numbers
Empty cells

As returned · Code repeats any change

As read
prices.csvExample. Convert your own file to replace it.

As read

header row → keys · 3 keys · #n is the position in rows[]

Sheet csv as read: the header row and 3 rows
Position in rowsskudescriptionunit_price
#1A-100Hex bolt M80.12
#2A-101Hex bolt M100.18
#3A-110Flat washer M80.03

JSON

{"type": "csv","sheets": [{"name": "csv","header": ["sku", "description", "unit_price"],"rows": [{ "sku": "A-100", "description": "Hex bolt M8", "unit_price": 0.12 },{ "sku": "A-101", "description": "Hex bolt M10", "unit_price": 0.18 },{ "sku": "A-110", "description": "Flat washer M8", "unit_price": 0.03 }],"row_count": 3,"truncated": false}]}

Columns

3 keys in csv, read from the 3 rows returned

KeepKeyTypeEmptyFirst value
skustring0"A-100"
descriptionstring0"Hex bolt M8"
unit_pricenumber00.12

Copy and download keep all 3 keys. Untick a key to leave it out.

The converter returns a number wherever nothing is lost (a code like 0012 stays text) and an empty CSV cell as "". Change numbers or empty cells above the panes.

The same call from code

curl

curl -s -X POST 'https://decant.forevenza.com/document-conversion/op/convert' \
  -H 'content-type: text/csv' \
  --data-binary @'prices.csv'

fetch (Node)

import { readFile } from 'node:fs/promises';

const res = await fetch("https://decant.forevenza.com/document-conversion/op/convert", {
  method: 'POST',
  headers: { 'content-type': "text/csv" },
  body: await readFile("prices.csv"),
});
const answer = await res.json();

Python

import requests

with open("prices.csv", 'rb') as f:
    answer = requests.post(
        "https://decant.forevenza.com/document-conversion/op/convert",
        data=f,
        headers={'content-type': "text/csv"},
    ).json()

The file itself is the request body, with its content type; or send JSON {"url": "…"} for a public link. Add sheet for one sheet. Free within a daily allowance.

examplecsv1 sheet3 rowsnot truncatednot stored

Decant · three offerings

Everything Decant does

  1. 01

    Spreadsheet and PDF to JSON

    CSV, XLSX or a text PDF, from an upload or a link, as rows or page text. You are using it above.

    /document-conversion/
  2. 02

    Page to structure

    One public page as title, headings, text, links and JSON-LD, robots.txt honoured.

    /web-extraction/
  3. 03

    Datasets to license

    The data you need to buy or license: domain, fields, coverage, history and refresh.

    /dataset-licensing/

Limits

What it won't do

  • size5 MB per file; up to 20,000 rows returned per sheet.
  • pdf tablesPDF tables are returned as page text, not as cell grids.
  • scansNo OCR: a scanned PDF returns no text and says so.

XLSX is read as the Office Open XML spreadsheet format, standardized as ECMA-376; formulas come back as the value the file last saved, not recalculated. Each file is processed in memory and not stored.

Who runs Decant

Decant. Operated by Tempered Technologies LLC, 8 The Green STE B, Dover, DE 19901. Privacy questions and deletion requests: privacy@forevenza.com.

Privacy notice · For software and agents

Something conversion does not cover

Need something it doesn't do?

A scanned PDF, a Word file, tables out of PDFs, or a folder of files every month: say what you have and the fields you need out of it.

What happens next. You get a reference number. Decant looks at every requirement and replies to the email you leave; a requirement is not an order and nothing is charged.