Turn packing lists into structured JSON. Packing list and order numbers, shipper and consignee, every carton with its weight and dimensions, and every SKU with quantity and country of origin - typed and ready for receiving, inventory, or a customs filing.
Send the packing list and a schema. Carton weights and dimensions come back in one array, item lines in another, tied together by package ID so you can see what is in which box.
curl -X POST \
https://api-parse.conversiontools.io/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@packing-list.pdf" \
-F 'schema={
"packing_list_number": "string",
"order_reference": "string",
"shipper": "string",
"consignee": "string",
"ship_date": "string",
"packages": [{
"package_id": "string",
"type": "string",
"gross_weight_kg": "number",
"net_weight_kg": "number",
"dimensions_cm": "string"
}],
"items": [{
"sku": "string",
"description": "string",
"quantity": "number",
"unit": "string",
"package_id": "string",
"country_of_origin": "string"
}],
"total_packages": "number",
"total_gross_weight_kg": "number"
}'{
"status": "completed",
"pages": 2,
"data": {
"packing_list_number": "PL-2026-0731",
"order_reference": "PO-88450",
"shipper": "Kestrel Manufacturing",
"consignee": "Alder Bay Distribution",
"ship_date": "2026-07-31",
"packages": [
{
"package_id": "CTN-001",
"type": "Carton",
"gross_weight_kg": 18.4,
"net_weight_kg": 16.9,
"dimensions_cm": "60 x 40 x 35"
},
{
"package_id": "CTN-002",
"type": "Carton",
"gross_weight_kg": 22.1,
"net_weight_kg": 20.3,
"dimensions_cm": "60 x 40 x 45"
}
],
"items": [
{
"sku": "KM-4417-BLK",
"description": "Hinge assembly, black",
"quantity": 240,
"unit": "pcs",
"package_id": "CTN-001",
"country_of_origin": "VN"
},
{
"sku": "KM-4420-SLV",
"description": "Hinge assembly, silver",
"quantity": 180,
"unit": "pcs",
"package_id": "CTN-002",
"country_of_origin": "VN"
}
],
"total_packages": 2,
"total_gross_weight_kg": 40.5
}
}A packing list is two lists at once: what is inside the boxes, and what the boxes weigh. Receiving needs both.
Every item line comes back with its SKU, description, quantity, and unit, so a receiving system can check the shipment against the purchase order line by line instead of by carton count.
Packages are extracted as their own array with gross weight, net weight, and dimensions - the numbers a freight audit or a dimensional-weight check actually runs on.
Customs work turns on origin at the item level. Where the document states it, it comes back attached to the right SKU instead of sitting in a footnote at the bottom of the page.
Yes. Keep package_id in both the packages array and the items array and the two come back linked, so on a mixed pallet you can see exactly which SKUs are in which box.
Tables that continue over page breaks are returned as one continuous array. A twelve-page packing list gives you a single items list, not twelve fragments to stitch together.
Yes. Many shippers issue one document carrying both. Put the fields you want from each part into a single schema and they all come back in one response, with no need to split the file first.
Yes. Declare them as numbers in your schema and you get numbers, not strings, so totals can be summed and cross-checked against total_gross_weight_kg without any cleanup. The unit stays in its own field.
Uploaded documents are deleted automatically within 24 hours. Extracted data is encrypted in transit and at rest and is never used to train models.
The same schema-driven API works across every document type. Define a schema once, extract from thousands of files.
Extract structured JSON from any document with custom schemas.
Parse any PDF into structured JSON, scanned or digital.
Vendor, line items, totals, tax, and dates from invoices.
Store, items, totals, and payment method from receipts.
PO number, vendor, buyer, and SKU-level line items.
Transactions, running balances, and dates for reconciliation.
Box-level data from W-2, 1099, and other tax forms.
Parties, dates, governing law, and key clauses.
Carrier, parties, ports, containers, and cargo.
Credit amounts matched back to the original invoice.
Payments split across invoices for cash application.
Meter readings, charges, and totals from any provider.
Line items and periods from balance sheets and reports.
Vendor quotes in one shape so you can compare them.
Earnings, deductions, taxes, and year-to-date totals.
Experience, education, and skills from any CV layout.
Fields and MRZ from passports and ID cards.
Rent, term, deposits, and renewal deadlines.
Claim and policy numbers, dates, and claimed amounts.
Ordered versus delivered quantities and sign-off.
Free tier covers your first 100 pages a month. No credit card to start.