Docs/Notion
Integrations

Notion

Build an auto-populated expense tracker in Notion. Every receipt you scan creates a new row in your database — with vendor, amount, date, category, and line items.

Step 1 — Set up your Notion database

Create a new database in Notion with these properties:

Property nameTypeMaps to
VendorTitledata.vendor
AmountNumberdata.total
DateDatedata.date
CurrencySelectdata.currency
CategorySelectdata.category
Payment MethodRich Textdata.payment_method
TaxNumberdata.taxes[0].amount
TipNumberdata.tip

Option A — Make (no-code)

1
Trigger — Google Drive or email
Watch a /Receipts folder in Google Drive, or a Gmail label for receipt emails.
2
HTTP – POST to ReceiptConverter
URL: https://receiptconverter.com/api/v1/convert
Headers: Authorization: Bearer sk_live_your_key
Body: multipart/form-data, field: file
3
Notion – Create a database item
Vendor:   {{2.data.vendor}}
Amount:   {{2.data.total}}
Date:     {{2.data.date}}
Category: {{2.data.category}}

Option B — Direct API (Node.js)

For programmatic use, combine ReceiptConverter with the Notion API:

import { readFileSync } from "node:fs";
import { Client as NotionClient } from "@notionhq/client";

const RC_KEY     = process.env.RECEIPTCONVERTER_API_KEY;
const notion     = new NotionClient({ auth: process.env.NOTION_TOKEN });
const DB_ID      = process.env.NOTION_DATABASE_ID;

async function parseAndSave(filePath) {
  // 1. Parse receipt
  const file = new File([readFileSync(filePath)], "receipt.jpg");
  const form = new FormData();
  form.append("file", file);

  const rcRes = await fetch("https://receiptconverter.com/api/v1/convert", {
    method: "POST",
    headers: { Authorization: `Bearer ${RC_KEY}` },
    body: form,
  });
  if (!rcRes.ok) throw new Error("Receipt parse failed");
  const { data } = await rcRes.json();

  // 2. Add to Notion
  await notion.pages.create({
    parent: { database_id: DB_ID },
    properties: {
      Vendor:          { title:  [{ text: { content: data.vendor ?? "Unknown" } }] },
      Amount:          { number: data.total },
      Date:            { date:   { start: data.date ?? new Date().toISOString().slice(0, 10) } },
      Currency:        { select: { name: data.currency ?? "USD" } },
      Category:        { select: { name: data.category ?? "Other" } },
      "Payment Method":{ rich_text: [{ text: { content: data.payment_method ?? "" } }] },
    },
  });

  console.log(`Saved ${data.vendor} ($${data.total}) to Notion`);
}

await parseAndSave("./lunch.jpg");
npm install @notionhq/client