More Features
Expenses
Record what your business spends, keep the receipt with it, and bill costs back to clients with an optional markup on their next invoice.
Coming April 2027
This feature ships in April 2027. This page describes how it will work; details can change before release.
Expenses let you keep a record of what your business spends, with the receipt attached, so you know your real costs. When an expense was for a client, for example materials, travel or a software licence bought for their project, mark it billable, add a markup if you charge one, and it goes onto that client's next invoice. With AI, a photo or PDF of a receipt can fill in the details for you.
What an expense records
| Field | Meaning |
|---|---|
| Date | When you spent the money. |
| Vendor | Who you paid. |
| Category | The kind of cost, from a list that fits your business's country. |
| Amount and currency | What you paid, in the currency you paid it in. |
| Tax | The tax included, if any, with its tax rate. |
| Receipt | A photo or PDF of the receipt, stored privately. |
| Billable | Whether to bill it to a client. A billable expense needs a client. |
| Markup | An optional percentage added when the expense is billed. |
| Notes | Anything you want to remember. |
Categories
Categories come from a list that adapts to your business's country, so the names make sense locally. The starting list covers advertising, bank fees, equipment, meals, office supplies, professional fees, rent, software, travel, utilities and other. Each business uses the category set for its country by default.
Receipts
A receipt can be a photo or a PDF. It is stored privately: only members who can see the expense can open it, through a short-lived link. Uploads have size and type limits, and images are re-encoded when they are stored.
Billable expenses and markup
A billable expense waits for the client's next invoice. When you invoice unbilled time or create the client's next invoice, it can be added as a line, with the markup applied. Once billed, the expense is linked to that invoice, so it is never billed twice. The markup default can be set per business or per client; it starts at 0.
Record an expense in the web app
Open Expenses
Expenses is in the app sidebar, under Work.
Add the expense
Enter the date, vendor, category, amount, currency and tax. Attach the receipt photo or PDF.
Bill it to a client (optional)
Turn on billable, choose the client and add a markup if you charge one.
Save
The expense is saved. If it is billable, it appears with the client's unbilled work until it goes on an invoice.
Read a receipt with AI
Instead of typing, upload the receipt and ask AI to read it. The date, vendor, amounts and other fields are filled in for you to check before you save; nothing is saved without you.
- Reading a receipt costs 2 AI credits on our AI. With your own AI key, it uses your key and no credits.
- Team includes 1,000 credits a month. On Free, use your welcome credits, a credit pack or your own key. Without credits or a key, the feature is shown locked.
See Read receipts and Credits and costs.
Through the API and MCP
| Action | Endpoint | MCP tool |
|---|---|---|
| Record an expense | Record an expense | record_expense |
| List and read | List expenses, Get an expense | |
| Change or delete | Update an expense, Delete an expense | |
| Read a receipt with AI | Read a receipt | |
| Bill to the client | Invoice unbilled time | invoice_unbilled |
Upload the receipt file first, then pass its id as the receipt. Money is a string of integer minor units, so "4599" with "currency": "EUR" is 45.99 EUR.
curl -X POST "https://api.freeinvoiceautomation.com/v1/expenses" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: expense-2027-04-08-fonts" \
-d '{
"business_id": "0193f2a1-7c4e-7b9a-9f10-3c2d1e0a4b51",
"expense_date": "2027-04-08",
"vendor": "Type foundry",
"category_key": "software",
"amount_minor": "4599",
"currency": "EUR",
"tax_minor": "766",
"receipt_attachment_id": "0193f2d0-3a4b-7c5d-8e6f-7a8b9c0d1e2f",
"billable": true,
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"markup_percent": "10"
}'Over MCP, your assistant can record an expense from what you tell it ("I spent 45.99 EUR on fonts for Acme today, bill it with 10% markup"). Webhooks send expense.created when an expense is saved.
Where expenses go next
- Invoices: billable expenses become lines on the client's invoice.
- QuickBooks Online and Xero: billable expenses are pushed with your invoices once accounting sync is connected.
- Accounting ledger: expenses post journal entries automatically in the ledger.
Rules and edge cases
- Billable needs a client. A billable expense without a client is refused.
- Billed expenses are linked. Once an expense is on an invoice, it stays linked to that invoice and is not offered again.
- No mileage or payroll. Expenses record money spent; mileage tracking and payroll are not part of the product.
- AI reads, you confirm. AI only fills in the form; a person always checks and saves.
- Deleted, not destroyed. Deleting an expense removes it from your lists, but it is kept in the background like other business records.
Errors
| Code | When |
|---|---|
validation_failed | A required field is missing, the amount is not a whole number of minor units, or a billable expense has no client. |
ai_credits_exhausted | No AI credits left to read a receipt. Buy a credit pack, upgrade to Team or add your own key. |
feature_locked | AI receipt reading is not available on your account without credits or an own key. |
plan_limit_reached | Your storage fair-use limit is reached. |
permission_denied | Your role lacks expenses.manage or ai.use. |
Permissions
| Action | Permission key | Default roles |
|---|---|---|
| View expenses and receipts | expenses.view | Owner, Admin, Editor, Viewer, Accountant |
| Record, change, delete expenses and upload receipts | expenses.manage | Owner, Admin, Editor |
| Read a receipt with AI | ai.use | Owner, Admin, Editor |
| Bill expenses on an invoice | documents.create | Owner, Admin, Editor |