Expense Management
Record business expenses with receipts and AI support.
Overview
Expense management offers:
- Receipt Capture: Upload photos of receipts
- AI Text Recognition: Automatic data extraction
- Categorization: Organize expenses by category
- Multi-Currency: Expenses in different currencies
- Project Assignment: Assign expenses to projects
- Rebilling: Charge project expenses on to the client as an invoice line
- Approval Workflow: Optional approval process
Permissions
| Role | Own Expenses | All Expenses | Approve |
|---|---|---|---|
| Employee | ✅ | ❌ | ❌ |
| Accountant | ✅ | ✅ | ✅ |
| Administrator | ✅ | ✅ | ✅ |
Recording an Expense
Manually
- Navigate to Expenses
- Click on New Expense
- Fill in:
| Field | Description | Required |
|---|---|---|
| Description | What was purchased? | ✅ |
| Amount | Expense amount | ✅ |
| Currency | CHF, EUR, USD, etc. | ✅ |
| Date | Purchase date | ✅ |
| Category | Expense category | ❌ |
| Project | Project reference (optional) | ❌ |
| Vendor | Seller/Provider | ❌ |
| Notes | Additional info | ❌ |
- Optional: Upload receipt
- Click Save
With AI Receipt Capture
- Click on Capture Receipt (📷)
- Photograph the receipt or upload an image
- The AI automatically extracts:
- Amount and currency
- Date
- Vendor
- VAT (if recognizable)
- Booking suggestions (expense account, VAT code, payment account)
- Review and correct the data
- Save the expense
Besides photos, PDF receipts are read as well: a digital PDF is evaluated from its text, a scanned one from its first page as an image.
Note: AI features require the Standard or AI Pro plan.
Several Receipts at Once
For a whole stack of supplier invoices, the expenses page offers Scan batch: up to 20 images or PDFs at once, followed by a review page with one card per receipt that you book, discard or rescan with a keystroke.
Booking there creates the expense and posts it to the journal. Details, limits and quota: Bulk Scan.
Direct Booking
When capturing receipts, the Direct Booking option is enabled by default. The AI suggests based on the receipt:
- Expense Account: e.g., "Office Supplies", "Travel Expenses", "Entertainment"
- VAT Code: e.g., V77 (7.7%), V81 (8.1%) or no VAT
- Payment Account: If an IBAN is recognized, the matching bank account is suggested
You can accept the suggestions or adjust them manually.
Privacy: Sensitive data such as emails, phone numbers, IBANs, and social security numbers are automatically anonymized before AI analysis.
Expense Types
| Type | Description | Example |
|---|---|---|
| GENERAL | General expenses | Office supplies |
| MATERIAL | Project materials | Building materials, hardware |
| TRAVEL | Travel costs | Train tickets, hotel |
| SERVICE | Services | Consulting, maintenance |
Material Expenses
For material expenses, you can additionally record:
- Quantity
- Unit price
- Unit (pcs, kg, m, etc.)
Expense Status
| Status | Meaning |
|---|---|
| pending | Submitted, awaiting review |
| approved | Approved |
| rejected | Rejected |
| reimbursed | Reimbursed |
Approval Workflow
If enabled:
- Employee submits expense (status: pending)
- Accountant/Admin reviews and approves
- Status changes to "approved"
- After reimbursement: "reimbursed"
Categories
Default Categories
Default categories are created during setup:
- Office supplies
- Travel expenses
- Software & IT
- Marketing
- Entertainment
- Other
Custom Categories
As administrator:
- Go to Settings > Categories (or on the expenses page)
- Create new categories with:
- Name
- Icon
- Color
Multi-Currency
Foreign Currencies
Expenses can be recorded in different currencies:
- CHF (Swiss Franc)
- EUR (Euro)
- USD (US Dollar)
- GBP (British Pound)
Conversion
For expenses in foreign currencies:
- The CHF equivalent is calculated
- The exchange rate is saved
- Reports aggregate everything in CHF
Exchange Rates
For saved expenses, the rate from the booking date is used. If none is stored, Slonge Billing automatically fetches the daily rate from the Frankfurter API (free, ECB-based) and persists it as soon as the expense is booked.
A stored conversion belongs to exactly one combination of amount, currency and date. If you later change any of those three fields, the previous CHF equivalent is discarded rather than left in place at a rate that no longer matches the receipt. For a rebillable expense that figure is what the client pays, so record the rate again before rebilling it.
Direct from Smart Inbox
Foreign-currency receipts can also be booked directly from the Smart Inbox:
- The Smart Inbox shows the approximate CHF amount (e.g.,
EUR 45.00 ≈ CHF 48.50). - If no rate is stored yet, a note indicates that the rate will be fetched at booking time.
- Once booked, the conversion is permanently stored on the expense.
Receipts
Uploading
- Open the expense
- Click on Add Receipt
- Choose a file or take a photo
- Supported formats: JPG, PNG, PDF
With the phone camera
On mobile devices, a Take photo action sits next to the file picker. It opens your device camera directly; the photo is attached as a receipt and — if your plan includes the AI features — read immediately, so amount, vendor and date are already filled in.
The action does not appear on desktop, where it would only open the same file dialog.
Viewing
Receipts can be viewed and downloaded in the expense detail view.
OCR (Text Recognition)
AI text recognition (OCR):
- Extracts text from receipts
- Recognizes amounts and dates
- Suggests categories
Project Assignment
Assign expenses to projects:
- Select a project when creating
- The expense appears on the project detail page under Expenses
- It can be considered when creating invoices
Rebilling expenses to the client
An expense incurred for a project can be charged straight on to the client. You do not record it a second time as a material cost: the same expense is both the receipt you paid and the invoice line. Receipt, category, approval and booking therefore stay on a single record and cannot drift apart.
Prerequisites
- The expense is assigned to a project. Without a project there is no client to bill — the toggle only appears once a project is selected.
- If the expense currency differs from the project currency, the CHF equivalent must exist (see Conversion). Until it does, the toggle stays disabled with an explanatory note. Billing a EUR figure as CHF would be worse than refusing to bill it.
Marking an expense as billable
- Open the expense (Expenses → Edit) — or record it directly in the project under Expenses
- Select the project
- Turn on Rebill to client
- Optionally set a billable amount (see below)
- Save
In the expense list every billable expense carries a colour-coded status pill, and the tile above the list shows how many billable expenses are still open.
Billable amount (override)
Left empty, the expense is billed at cost — the recorded amount, or the CHF equivalent for a foreign currency. The billable amount overrides that figure:
| Use case | Example |
|---|---|
| Rounding | Hotel bill 187.40 → 190.00 |
| Markup | 120.00 → 132.00 |
| Deliberately absorbed | 0.00 — the expense stays a cost but appears at 0 on the invoice |
There is no separate markup or margin concept; the billable amount is the only lever.
The receipt
Photograph the receipt straight from your phone (Take photo, see Receipts). A billable expense with no receipt is flagged explicitly: it is being charged to the client, and the client may ask for evidence.
What appears on the invoice
A project's open billable expenses show up in the project's billing overview and are picked up as their own invoice line:
| Field on the invoice | Source |
|---|---|
| Line description | Expense description |
| Quantity / unit | 1 × Lump sum |
| Amount | Billable amount, otherwise the cost |
The line appears identically on the PDF, the print view, the client email and the electronic invoice (UBL).
Notes never appear on the invoice. The Notes field is your internal remark on your own supplier bill — the client never sees it. All the client reads is the Description.
Currency: An expense is always rebilled in the project's currency. An expense already booked in that currency is billed at the amount recorded; the CHF equivalent is used only when the project actually invoices in CHF. An expense in a third currency — for which no amount in the project's currency exists at all — cannot be rebilled.
Rejected expenses are not rebilled: if an expense is rejected in the approval workflow, rebilling is switched off and it disappears from the project's open positions.
VAT: expenses inherit the invoice's VAT rate; a per-line rate is not supported.
Receipts are not attached to the invoice. They stay with the expense and can be sent to the client separately if needed.
Status and lock
Once the expense sits on an invoice, its substance is frozen:
| Status | Meaning | Editable |
|---|---|---|
| Open | billable, not yet on any invoice | ✅ |
| Send scheduled | on an invoice whose send is scheduled | ❌ |
| Billed | on an issued invoice | ❌ |
| Paid | the invoice has been paid | ❌ |
Frozen are description, amount, currency, CHF equivalent, billable amount, date and project assignment — exactly the fields printed on the invoice. Deletion is blocked too. Correct a wrong expense with a credit note on the invoice.
How it books (important)
A rebilled expense shows up twice in your figures, and that is correct:
- as a cost, because you paid it (the expense),
- as revenue, because you charge it to the client (the invoice line).
That is correct double entry, not double counting. Your result is not distorted: the two amounts cancel out, leaving exactly the markup if you set a billable amount above cost. But revenue and costs both go up — so do not expect a rebilled expense to "disappear" from the income statement.
CLI and MCP
The same fields are available from the CLI and the MCP tools:
slonge expense create --description "Train Zurich–Bern" --amount 92 --date 2026-08-04 \
--project-id <id> --billable --billable-amount 95
slonge expense list --billable --billing-status unbilled
See API & MCP.
Related Features
- Bulk Scan – up to 20 receipts at once
- Accounting – Book expenses
- Projects – Project-related expenses
- Reports – Expense analytics
Frequently Asked Questions
How do I delete an expense?
Open the expense and click Delete. Already booked expenses should be reversed, not deleted. An expense that has already been billed cannot be deleted — it belongs to an issued invoice.
Why does a rebilled expense appear as both a cost and revenue?
Because it is both: you paid it (cost) and you charge it to the client (revenue). That is correct double entry, not double counting — see How it books.
Why can't I turn on Rebill to client?
Either the expense has no project assigned, or it is in a different currency from the project and the CHF equivalent is missing. Add the conversion, then the toggle becomes available.
Can I add receipts later?
Yes, open the expense and upload a receipt.
Why doesn't AI recognition work?
Check:
- Image quality (sharp, well-lit)
- Your subscription (AI features from Standard plan)
- Monthly AI quota
How do I export expenses?
Use the export function under Reports or Accounting > Export.