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.
Searching and filtering
The Filter all columnsโฆ search box matches item, category, account, notes, price, and total by default. To search one field specifically, prefix the query with the field name and a colon, e.g. category: software or reimbursed: yes. As you type, a dropdown suggests matching field names, and once a field is chosen it suggests the real values seen for that field so you don't have to guess spelling. Combine multiple fields with &, e.g. category: software & reimbursed: no. To leave things out instead, see Excluding results below.
| Field | Aliases |
|---|---|
| Item | item, description, desc |
| Category | category |
| Account | account, account paid from, paid from |
| Notes | notes, note |
| Price | price, unit price |
| Quantity | quantity, qty |
| Total | total, total cost, cost, amount |
| Date | date |
| Ticket # | ticket, ticket #, ticket number |
| Reimbursed | reimbursed (value yes or no) |
Field names are case-insensitive. If the text before a colon isn't a recognized field, it's searched as plain text instead of returning no results. Searching for text that itself contains an &, like Smith & Sons or AT&T, still works: & only joins clauses when it has a space on each side and at least one side is a field or an exclusion.
Excluding results ("does not contain")
Sometimes it's easier to say what you don't want to see. Both the search box and the dropdown filters can leave rows out instead of narrowing to them.
In the search box
Put a - or ! in front of a word to hide every row that contains it. To exclude on a single field, use != instead of the colon. These three all mean the same thing:
category != lead feescategory: !lead fees-category: lead fees
Join several with & (a space on each side) and a row has to pass every one of them. Exclusions, field searches, and plain words can all be mixed. The suggestions dropdown keeps working too: type category != and it lists the real values in use.
| Type this | To see |
|---|---|
-lead fees | Every expense that doesn't mention "lead fees" anywhere (item, category, account, notes, price, or total). |
category != lead fees | Every expense except the ones in the Lead Fees category. |
-lead fees & -software | Everything except lead fees and software. |
category != lead fees & reimbursed: no | Unreimbursed expenses, leaving out lead fees. |
category != lead fees & office | Expenses that mention "office", leaving out lead fees. |
-lead also hides anything containing leader. Use a field and more of the word to be precise, e.g. category != lead fees.
In the dropdown filters
The All Categories dropdown is a checklist: tick as many values as you want. With Is (the small button on its left) you see every expense matching any ticked value. Click it and it turns red and reads Not: the list now shows every expense except the ticked values. You can click it before or after ticking. Click it again to go back to Is.
For example, tick Lead Fees, then click Is so it reads Not, to see all your expenses except lead fees. Tick a second category to leave that out too.
Your ticked values and the Not setting are remembered along with your other filters. It switches back to Is when you click Clear inside the dropdown or Clear ร, or click one of the category summary cards.
Choosing and reordering columns
Click โ Columns above the Expenses list to show or hide Category, Price, Qty, and Account. Date, Item, and Total are always shown. Drag any column header left or right to put the columns in the order you want; open โ Columns and click โบ Reset column order to go back to the default. Both the order and the visible columns are remembered in your browser. The picker is available on desktop only.
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/PDF on the Expenses page to import expenses from a bank/credit card export. Servelo detects the file type automatically and uses one of four flows:
Bank / credit card statement import (CSV)
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. Amex exports show charges as a positive amount and payments/credits as negative โ Servelo detects Amex specifically (via its Extended Details / Appears On Your Statement As columns) and reads the sign accordingly. Every other export (Chase checking or credit card, and generic bank "Date, Description, Amount..." activity exports) is read using the standard bank convention instead: negative = money out (a charge), positive = money in (a credit/deposit).
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. Negative = charge, positive = credit โ except Amex exports, which are inverted and handled automatically. |
Reference | Optional. Used for exact duplicate detection across imports. |
Extended Details | Optional. Saved as the expense note. |
U.S. Bank statement import (PDF)
U.S. Bank's online banking doesn't offer a CSV export for card activity โ only a PDF. Servelo reads this directly: select the PDF from Account Activity > Download > PDF (labeled "Recent Activity List") and it's parsed into the same review modal described above, with the same duplicate detection, category suggestions, and reimbursement/ticket linking. Because the PDF export has no reference number, duplicate detection for these rows relies on matching date and amount.
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 (including all PDF imports) are checked by date and amount. A possible duplicate warning is shown if a match is found.
Transfer detection: If you import a checking/bank account statement, it will typically include the payment you make each month to pay off a credit card balance (e.g. "CHASE CREDIT CRD AUTOPAY", "AMEX EPAYMENT"). That payment isn't a new expense โ it's money moving between your own accounts โ and if you also import that card's own statement, the itemized purchases already account for it. Servelo recognizes common autopay/transfer wording and leaves those rows unchecked by default (tagged TRANSFER) so you don't double-count. You can still check the box to import one if it doesn't apply to your setup.
Thumbtack Contacts CSV import
Thumbtack's Contacts export (one lead per row, with job details and lead-cost billing columns) is detected automatically and imported through the same preview modal as a bank statement. Each row becomes a Lead Fees expense using the lead's net cost, with the job status, response time, location, and phone number folded into the expense note. Since a lead fee is a cost you're absorbing rather than one a customer reimburses, these rows skip the Reimbursed checkbox and go straight to + link ticket: pick the ticket that lead turned into and the fee is counted in that job's P&L.
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.
Filling in Amazon purchases
Card statements only say "Amazon," not what you bought. An Amazon Business order report fills that in.
- In Amazon Business, go to Reports โ Orders (or Business Analytics), pick the dates, and download the CSV.
- On the Expenses page, click Import CSV/PDF and choose that file. Servelo recognizes it as an Amazon report.
- Review the list and click Apply.
Import the two files in either order. Every card charge in the report is remembered. Charges whose card statement is already imported are filled in right away; the rest wait, and fill in by themselves when you import that statement later.
Each card charge in the report is matched to its "Amazon" expense: the same amount, posted up to a week after Amazon's payment date. The expense is renamed to what you bought (for example "Amazon: Craftsman CMCF800 Impact Driver," or "Amazon: Caulk Gun Kit + 1 more" for several items in one order), and the order number and full item names go in its notes. The category and amount aren't changed. Items of $100 or more get a Track as a company asset option.
- Only card charges are matched. Payments made with Amazon rewards points or Business Credit never appear on your card statement, so they're listed but not imported.
- Cancelled and not-yet-charged orders are skipped.
- Waiting for the card statement: leave these unticked; they fill in when the statement is imported. Tick one only to add it as a new expense now, for a charge that will never be on an imported statement, or it would be counted twice.
- Unticking a match tells Servelo to leave that expense alone, including on later imports.
- More than one business? In Amazon Business, create a group per business and pick it under "Buying for" at checkout. The report records each order's group. When a report has more than one group, the review screen lets you tick which groups belong to this workspace; only those orders are imported here, and the choice is remembered. Import the same full report into each workspace and tick that business's group in each.
- Running the same report again is safe: expenses already filled in from an order are shown as done and left alone.
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. The Fuel Cost (Est.) category is the mileage-derived estimate described in Mileage tracking, not a logged fuel receipt โ keep actual gas purchases in a separate category if you track them too.
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.
The quicker way, if you're already on the ticket: add the cost as a Job Cost row and check Bill separately next to it. This creates the same kind of reimbursed, ticket-linked expense in one step โ no need to visit the Expenses page first. See Job costs.
This is different from a job cost's Add to expense ledger checkbox (see Job costs): Bill separately is for a cost you plan to pass through to the client on its own invoice line, while Add to expense ledger is for a real cost of your own โ like paying a contractor cash or Zelle โ that just needs to land in your books instead of the customer's invoice.
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, amount, and the expense's notes (if any), with a running total. Admins can delete an entry directly from this list (the ร next to its amount); to edit or unlink one instead, edit the expense directly from the Expenses page.
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.
A ticket's unbilled reimbursed expenses can also be pulled directly into an invoice as line items from the invoice builder โ see Line items.
Reimbursed expenses and dashboard totals
Reimbursed expenses are excluded from the Expenses and Net stat cards and from category totals on the Expenses page โ as long as the reimbursement is handled informally, outside Servelo. Once a reimbursed expense is added as a line item on an invoice, the reimbursement becomes recognized revenue: Servelo starts counting the expense as a real cost in Expenses, Revenue, and the ticket's Est. P&L, and the two net out correctly. Expenses that are reimbursed but never invoiced stay excluded, since the client hasn't paid you back for them through Servelo.
Tracking equipment as a company asset
When an expense is equipment your business keeps (a work laptop, a drill, a spare switch), tick Track as a company asset in the expense form, or choose Make company asset from the row's โฎ menu. Servelo adds it to Company Assets as your company's, using the expense's name, price, and date. A quantity of 3 adds three assets, one per item (up to 25).
The expense then shows an Asset badge (or "3 assets") that opens them. The expense is still the only place the cost is counted, so totals don't change. Doing it twice on the same expense does nothing.
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/PDF | Yes | No | No |
| Export CSV | Yes | No | No |