Receipt Parsing
Extract store information, line items, totals, and payment details from receipts. Parse works with printed receipts, digital receipts, and photographed thermal paper.
Receipt Schema
Define a schema that captures the key fields from a receipt:
{"name": "receipt","description": "Extract data from receipts","fields": [{ "name": "store_name", "type": "string", "description": "Name of the store or business" },{ "name": "store_address", "type": "string", "description": "Store location or address" },{ "name": "date", "type": "date", "description": "Date of purchase" },{ "name": "items", "type": "array", "description": "List of purchased items", "items": {"type": "object","fields": [{ "name": "name", "type": "string" },{ "name": "quantity", "type": "number" },{ "name": "price", "type": "number" }]}},{ "name": "subtotal", "type": "number", "description": "Subtotal before tax" },{ "name": "tax", "type": "number", "description": "Tax amount" },{ "name": "total", "type": "number", "description": "Total amount paid" },{ "name": "payment_method", "type": "string", "description": "Payment method used (e.g. Cash, Visa, Mastercard)" }]}
Code Examples
cURL
curl -X POST https://api-parse.conversiontools.io/v1/extract \-H "Authorization: Bearer YOUR_API_KEY" \-F "file=@receipt.jpg" \-F "schema_id=YOUR_RECEIPT_SCHEMA_ID"
Python
import requestsAPI_KEY = "YOUR_API_KEY"headers = {"Authorization": f"Bearer {API_KEY}"}with open("receipt.jpg", "rb") as f:response = requests.post("https://api-parse.conversiontools.io/v1/extract",headers=headers,files={"file": f},data={"schema_id": "YOUR_RECEIPT_SCHEMA_ID"},)data = response.json()print(f"Store: {data['data']['store_name']}")print(f"Total: {data['data']['total']}")print(f"Paid with: {data['data']['payment_method']}")for item in data["data"]["items"]:print(f" - {item['name']}: {item['price']}")
Node.js
const fs = require("fs");const API_KEY = "YOUR_API_KEY";const headers = { Authorization: `Bearer ${API_KEY}` };const form = new FormData();form.append("file", fs.createReadStream("receipt.jpg"));form.append("schema_id", "YOUR_RECEIPT_SCHEMA_ID");const response = await fetch("https://api-parse.conversiontools.io/v1/extract", {method: "POST",headers,body: form,});const data = await response.json();console.log(`Store: ${data.data.store_name}`);console.log(`Total: ${data.data.total}`);console.log(`Paid with: ${data.data.payment_method}`);data.data.items.forEach((item) => {console.log(` - ${item.name}: ${item.price}`);});
Sample Output
{"success": true,"id": "ext_rcp_001","data": {"store_name": "Fresh Market Grocery","store_address": "456 Oak Street, Portland, OR 97201","date": "2024-01-20","items": [{"name": "Organic Bananas","quantity": 1,"price": 2.49},{"name": "Whole Wheat Bread","quantity": 1,"price": 4.99},{"name": "Almond Milk 64oz","quantity": 2,"price": 7.98},{"name": "Free Range Eggs (12ct)","quantity": 1,"price": 5.49}],"subtotal": 20.95,"tax": 1.68,"total": 22.63,"payment_method": "Visa ending in 4242"},"pages_used": 1,"confidence": 0.94}
Tips for Receipt Parsing
- Thermal paper receipts fade over time — scan or photograph them promptly for best results
- For photographed receipts, ensure even lighting and avoid shadows for best accuracy
- Handwritten receipts are supported but may have lower confidence scores
- JPEG and PNG image formats are both supported — use PNG for higher quality scans