Integrations
QuickBooks
Eliminate manual expense entry. Scan a receipt and have it appear as a QuickBooks Online expense automatically — with the correct vendor, amount, date, and category.
Requirements: A ReceiptConverter API key (from your dashboard), a QuickBooks Online account, and either Make or Zapier (free tiers work).
Option A — Make (recommended)
Make has a native QuickBooks Online module that supports creating expenses directly. This is the easiest no-code path.
1
Trigger — Watch for new receipts
Options: • Google Drive – Watch Files in your /Receipts folder • Dropbox – Watch for new files • Gmail – Watch attachments with label "receipts" • HTTP – Watch for a webhook (advanced)
2
HTTP – Make a request → parse receipt
Method: POST URL: https://receiptconverter.com/api/v1/convert Headers: Authorization: Bearer sk_live_your_key Body type: multipart/form-data Field: file = [binary from step 1]
3
QuickBooks – Create Expense
Map the fields:
Payee (vendor): {{2.data.vendor}}
Amount: {{2.data.total}}
Transaction Date: {{2.data.date}}
Account: choose an expense account
Memo: Auto-imported by ReceiptConverterOption B — Zapier
Zapier's QuickBooks Online integration also supports creating expenses. Use Webhooks by Zapier to call ReceiptConverter.
1
Trigger — your preferred receipt source
Gmail, Google Drive, Dropbox, or any app with file attachments.
2
Webhooks by Zapier – POST
URL: https://receiptconverter.com/api/v1/convert Header: Authorization → Bearer sk_live_your_key Payload type: form File: receipt attachment from step 1
3
QuickBooks Online – Create Expense
Map data__vendor → Payee, data__total → Amount, data__date → Date. Note: Zapier flattens nested JSON with double underscores (__).
Option C — Direct API integration
Building a custom integration? Parse the receipt first, then use the QuickBooks Online API to create the expense. Below is a Node.js example using both APIs.
import { readFileSync } from "node:fs";
const RC_KEY = process.env.RECEIPTCONVERTER_API_KEY;
const QBO_TOKEN = process.env.QUICKBOOKS_ACCESS_TOKEN;
const QBO_COMPANY_ID = process.env.QUICKBOOKS_COMPANY_ID;
// 1. Parse receipt
async function parseReceipt(filePath) {
const file = new File([readFileSync(filePath)], "receipt.jpg");
const form = new FormData();
form.append("file", file);
const res = await fetch("https://receiptconverter.com/api/v1/convert", {
method: "POST",
headers: { Authorization: `Bearer ${RC_KEY}` },
body: form,
});
if (!res.ok) throw new Error(`RC error: ${res.status}`);
return (await res.json()).data;
}
// 2. Create QuickBooks expense
async function createQBOExpense(receipt) {
const payload = {
TotalAmt: receipt.total,
PaymentType: "Cash",
EntityRef: { name: receipt.vendor },
TxnDate: receipt.date,
Line: [{
Amount: receipt.total,
DetailType: "AccountBasedExpenseLineDetail",
AccountBasedExpenseLineDetail: {
AccountRef: { name: "Meals & Entertainment" },
},
}],
};
const res = await fetch(
`https://quickbooks.api.intuit.com/v3/company/${QBO_COMPANY_ID}/purchase`,
{
method: "POST",
headers: {
Authorization: `Bearer ${QBO_TOKEN}`,
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify(payload),
}
);
if (!res.ok) throw new Error(`QBO error: ${res.status}`);
return res.json();
}
// Run
const receipt = await parseReceipt("./lunch.jpg");
const expense = await createQBOExpense(receipt);
console.log("Created QBO expense:", expense.Purchase.Id);Next steps: More automations · Batch processing · Full API reference