Expenses
Track business expenses to understand your true costs and profitability. Expenses are available to admins and can be categorized, assigned to jobs, and exported.
Logging an expense
Go to Expenses in the sidebar. Click + Add Expense and fill in:
- Date: when the expense occurred
- Amount: the cost in dollars
- Category: e.g. Parts, Fuel, Software, Tools (customizable under Settings > Categories)
- Description: what the expense was for
- Account paid from: which payment account was used (e.g. Business Chase, Business Amex). Manage your accounts under Settings > Categories > Payment Accounts.
- Notes: optional free-text note
Mileage tracking
Mileage expenses are calculated from miles driven. Set your vehicle's average MPG and the current gas price under Tickets > Settings > Mileage Tracking. Servelo automatically pulls the national average gas price from the US Energy Information Administration (EIA) daily.
When logging a mileage expense, enter the distance in miles. The fuel cost is calculated automatically based on your MPG and gas price settings.
Importing expenses
Click Import CSV on the Expenses page to import expenses from a CSV file. Servelo detects the file type automatically and uses one of two flows:
Bank / credit card statement import
If your CSV has a Description column and an Amount column (typical of bank and credit card exports), Servelo shows a preview modal before importing. From there you can:
- Review each transaction and uncheck any you don't want to import
- Adjust the auto-suggested category for each row
- Mark any row as Reimbursed and link it to a ticket โ useful when importing a statement that includes job-specific purchases you'll bill back to a client
- See which rows are flagged as duplicates (already in Servelo) and skip them automatically
Servelo supports exports from American Express, Chase, and other banks that follow a similar format. Chase exports use a Transaction Date column (instead of Date) and negative amounts for charges โ Servelo handles both automatically.
Supported columns (case-insensitive, tab or comma delimited):
| Column | Notes |
|---|---|
Date / Transaction Date | Required. MM/DD/YYYY format. Chase exports use Transaction Date. |
Description | Required. Used as the expense item name. |
Amount | Required. Amex: positive = charge. Chase: negative = charge. Both are handled correctly. |
Reference | Optional. Used for exact duplicate detection across imports. |
Extended Details | Optional. Saved as the expense note. |
Auto-categorization: Servelo recognizes common vendors by name and pre-fills the category. Recognized patterns include Thumbtack, Google Ads, Facebook/Meta (marketing), AWS (cloud services), Anthropic/OpenAI/Cursor (AI software), GitHub/Twilio/Slack/Notion (software), and Amazon/AMZN non-AWS (equipment). All other rows are left uncategorized for you to assign.
Category memory: When you manually assign a category to a row during import, that choice is saved by merchant description. The next time the same description appears in a future import, the category is pre-filled automatically. This means common recurring merchants (like your internet provider or a regular supplier) get the right category without you touching them each time. Memory is stored locally in your browser and persists across imports on the same device.
Duplicate detection: If a row's Reference value already exists in Servelo, it is flagged as a duplicate and skipped. Rows without a reference are checked by date and amount. A possible duplicate warning is shown if a match is found.
Generic expense CSV import
If your CSV doesn't match the bank format above, Servelo imports all rows directly with no preview step. Use these column headers:
| Column | Required | Notes |
|---|---|---|
item or description | Yes | Expense name |
price or amount | Yes | Unit cost |
quantity | No | Defaults to 1 |
total_cost | No | Defaults to price ร quantity |
category | No | Use underscored slugs, e.g. cloud_services |
date | No | YYYY-MM-DD format |
account_paid_from | No | e.g. Business Amex, Cash |
notes | No | Free-text note |
Rows with no item name are skipped silently. A toast confirms how many rows were imported out of how many were found.
Exporting expenses
Click Export CSV to download the currently filtered expense list. The file includes: date, item, category, price, quantity, total cost, account, and notes. Apply month/year filters before exporting to get a specific period.
Expense categories
Categories help you group and analyze spending. Preset categories include common business expense types. You can add custom categories under Settings > Categories > Expense Categories.
Payment accounts
The Account paid from field tracks which card or account was used for each expense. Manage your payment accounts under Settings > Categories > Payment Accounts. Default accounts (Business Amex, Business Prime, Personal, Cash, Check, Other) are pre-loaded and can be renamed, deleted, or added to. The account field is left blank by default โ select the appropriate account when logging each expense.
Reimbursed Expenses
Some expenses are paid out-of-pocket by the technician but covered by the client โ equipment ordered for a specific job, for example. These are called reimbursed expenses. Marking an expense as reimbursed lets you link it to a ticket so it appears in that ticket's cost breakdown and P&L summary.
Marking an expense as reimbursed
From the Expenses list, click the three-dot menu on any expense row and choose Mark as Reimbursed. The edit modal opens with the Reimbursed toggle pre-checked. You can then search for and link the expense to a specific ticket using the ticket search field that appears. Save to apply.
You can also open any expense for editing and check the Reimbursed toggle manually, then search for the ticket.
Reimbursed expenses on the ticket
When one or more expenses are linked and marked reimbursed for a ticket, a Reimbursed Expenses section appears on that ticket's detail page showing each item, date, and amount with a running total. This section is read-only on the ticket; to change a link, edit the expense directly.
The total from these expenses feeds into the ticket's P&L Summary as the Equipment / Parts cost line. If the ticket has a linked accepted quote with a deposit, the deposit is shown as a credit that offsets the equipment cost, since the client pre-funded that amount.
Reimbursed expenses and dashboard totals
Reimbursed expenses are excluded from the Expenses and Net stat cards on the dashboard, and from the category totals on the Expenses page. Because the client funded these costs, they are not your business expenses. Only non-reimbursed expenses count toward your expense totals.
Who can do what
| Action | Admin | Technician | Viewer |
|---|---|---|---|
| View expenses | Yes | Yes | No |
| Add expense | Yes | Yes | No |
| Edit expense | Yes | Yes | No |
| Delete expense | Yes | No | No |
| Import CSV | Yes | No | No |
| Export CSV | Yes | No | No |