Receipts in.
Structured spend out.
Spendyard is a small, stateless API. Send it a receipt, an invoice or a forwarded email, and get back the vendor, the amount, and whether it's a subscription or a one-time cost.
FIGMA, INC. Invoice F-20481 3 Oct 2026 Professional plan 1 editor · billed monthly TOTAL USD 15.00
{
"vendor": "Figma",
"amount": {
"value": "15.00",
"currency": "USD"
},
"date": "2026-10-03",
"kind": "subscription",
"interval": "monthly",
"category": "software",
"confidence": 0.97
}From: feedback@slack.com Subject: Your Slack receipt Workspace: moowork-labs Pro plan · annual 12 members × USD 87.00 Renews 12 Oct 2027 Amount paid USD 1,044.00
{
"vendor": "Slack",
"amount": {
"value": "1044.00",
"currency": "USD"
},
"date": "2026-10-12",
"kind": "subscription",
"interval": "yearly",
"category": "collaboration",
"confidence": 0.96
}{
"vendor": "Linear",
"amount": {
"value": "1344.00",
"currency": "USD"
},
"date": "2026-10-09",
"kind": "subscription",
"interval": "yearly",
"category": "project management",
"confidence": 0.94
}One shape for every kind of spend
Whatever you send in, the response has the same fields. Your code can stay simple, whether the input was a seat-based PDF invoice, a forwarded renewal email or a usage-based cloud bill.
| Field | Type | Meaning |
|---|---|---|
| vendor | string | Who you paid, normalised (“Figma”, not “FIGMA, INC.”) |
| amount | Money | Value as a decimal string plus ISO 4217 currency |
| date | plainDate | Date of purchase or invoice |
| kind | "subscription" | "one_time" | Recurring cost or a single purchase |
| interval | "monthly" | "yearly"? | Billing interval, set only for subscriptions |
| category | string | Spend category such as design tools, collaboration or infrastructure |
| confidence | float32 | 0–1. Use it to route unsure results to a human. |
The yard is empty when you leave
Spendyard reads what you send, returns the result and keeps nothing. There are no stored documents, no accounts of your vendors and no history to export or delete.
Your receipts stay in your systems. That makes Spendyard easy to approve for security reviews, and easy to place inside the tools you already run.
Call it from code or a terminal
The REST API is the product. The CLI is a thin client on top of it, so it always returns the same result.
REST API
One endpoint. Send a file, raw text or a full email (.eml).
curl https://api.spendyard.com/v1/extract \ -H "Authorization: Bearer $SPENDYARD_KEY" \ -F file=@receipt.pdf
CLI
For scripts, folders of PDFs and quick checks.
spendyard extract receipt.pdf spendyard extract ./inbox/*.eml --json
A building block, not another expense app
- Inbox forwarding. Forward receipts to an address and post the result to your ledger.
- SaaS spend tracking. Find every subscription and its interval across a year of invoices.
- Accounting sync. Pre-fill vendor, amount and category before a bookkeeper sees it.
- Agents. Let an assistant read the receipt folder and answer “what do we pay for monthly?”
Try it on your own receipts
We're opening the API to a small group of teams first. Send a short note about what you'd build and roughly how many receipts a month, and we'll send you a key.