Invoices
Invoices let you bill clients for completed work with itemized line items and built-in payment links. Invoices can be created manually or auto-generated when a quote is accepted.
Searching and filtering
The Search box matches invoice number, title, client, and company by default. To search one field specifically, prefix the query with the field name and a colon, e.g. status: paid or total: 250. 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. status: outstanding & client: smith. To leave things out instead, see Excluding results below.
| Field | Aliases |
|---|---|
| Invoice # | invoice, invoice #, invoice number |
| Title | title |
| Client | client, customer, name |
| Company | company |
| Status | status |
| Total | total, amount (exact number) |
| Ticket # | ticket, ticket #, ticket number |
| Quote # | quote, quote #, quote number |
| Due Date | due, due date |
| Date Created | created, date created, date |
| Paid Date | paid, paid date, date paid |
Field names are case-insensitive. Total is matched as an exact number, not text — total: 250 finds invoices whose total is exactly 250, not ones merely containing "250". 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:
status != paidstatus: !paid-status: paid
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 status != and it lists the real values in use.
| Type this | To see |
|---|---|
-smith | Every invoice that doesn't mention "smith" in its number, title, client, or company. |
status != paid | Everything not yet paid, including drafts. |
status != paid & status != draft | Invoices that have gone out and aren't paid yet. |
total != 0 | Hides $0 invoices. |
status != paid & smith | Smith's invoices that aren't paid yet. |
-smith also hides anything containing smithson. Use a field and more of the word to be precise, e.g. client != john smith.
- in front of the value means a negative number, not "exclude". Use ! or != there, e.g. total != 0.
In the dropdown filters
The All Statuses dropdown is a checklist: tick as many values as you want. With Is (the small button on its left) you see every invoice matching any ticked value. Click it and it turns red and reads Not: the list now shows every invoice except the ticked values. You can click it before or after ticking. Click it again to go back to Is.
For example, tick Paid and Draft, then click Is so it reads Not, to see every invoice that is neither paid nor a draft.
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 ร. A dashboard link that opens this page with a status always starts on Is.
Quotes vs Invoices
Both documents share a similar line-item structure but serve different purposes in the job workflow:
| Quote | Invoice | |
|---|---|---|
| Purpose | Estimate sent for approval before work begins | Bill sent after work is done |
| Client action | Accept or decline (with optional e-signature) | Pay |
| Payment | Optional deposit on acceptance | Full balance via payment links |
| Status flow | Draft โ Sent โ Accepted / Declined | Draft โ Sent โ Paid |
| Typical order | Step 1 | Step 2 (can auto-create from accepted quote) |
When a client accepts a quote, Servelo can automatically create a draft invoice pre-filled with the same line items. Any deposit paid on the quote is deducted from the invoice total. You review and send the invoice when the job is complete.
Summary cards
Above the invoice list, four cards summarize the currently filtered set: Outstanding (all non-draft, unpaid invoices), Overdue (still unpaid 14 or more days past their due date), Paid, and Total (a count, not a dollar amount). All four respect whatever filters and search you have applied, so filtering to one client scopes the totals to that client.
Creating an invoice
There are three ways to create an invoice:
- From a ticket: open a ticket and click Create Invoice in the right panel. The client and ticket are pre-filled.
- From the Invoices list: click New Invoice from the main Invoices page. The Client field is a searchable picker โ start typing a name, company, or email to filter, matches show as Name | Company.
- Auto-created from a quote: when a client accepts a quote, a draft invoice is automatically created with the same line items, ready to review and send. If a deposit was paid on the quote, it is automatically deducted from the invoice total.
Creating an invoice for a ticket moves that ticket's status to Awaiting Payment automatically (unless it's already Closed or Cancelled) โ see Ticket statuses. Marking the invoice paid then moves the ticket to Closed.
Line items
An invoice is built from individual line items. You can type them in, or pick saved services and parts from the Price book โพ menu in the quick-add row (see Price book). Each item has:
- Description: what was done or provided
- Quantity: how many units
- Unit price: price per unit
- Total: calculated automatically (quantity ร unit price)
Line items can be reordered by dragging. The invoice total updates in real time as you edit. If the invoice is linked to a ticket, you can also pull in any of that ticket's unbilled reimbursed expenses as line items โ see Reimbursed expenses.
Hours
An invoice has its own Hours field, separate from the line items, kept in sync with the linked ticket's Hours Worked field in both directions:
- Creating a new invoice from a ticket pre-fills Hours from that ticket's Hours Worked (only if you haven't already typed something into it).
- Saving an invoice with Hours set writes that value back to the linked ticket's Hours Worked - the invoice becomes the field of record for hours once one exists for the ticket.
Hours is informational only - it isn't a line item and doesn't affect the invoice total. If you want billed labor hours to actually appear on the invoice the client sees, add a Labor line item (the 1hr Labor / 2hr Labor quick-add buttons prefill one for you).
AI line item suggestions
Click AI Suggest to automatically generate line items based on the ticket description and any attached photos. When a ticket is linked, the AI analyzes the full service context. When no ticket is linked, you can describe the work manually and the AI will suggest relevant items.
Suggested items appear in a panel where you can select which ones to add. Each suggestion includes a description, quantity, and price.
Sending an invoice
- Build the invoice and review line items and total
- Add any notes to appear at the bottom of the invoice
- Click Send Invoice. The client receives an email with the full invoice contents and payment links
- The email includes Pay Now buttons for any payment methods you have configured (Venmo, PayPal, Square)
Invoices always display Due Now to the client rather than a calendar date - the intent is full payment on receipt, not a net-30-style grace period. A due date still exists behind the scenes (it defaults to the day the invoice is created, and is filled in with today's date at send time if it was left empty, which covers invoices created by the AI Job Planner or converted from a quote, and drives the automatic reminders below and the Overdue status), but it's an internal scheduling detail, not something shown to the client.
Before sending, you can check Send me a copy in the send dialog. When checked, a copy of the invoice email (including the PDF attachment) is sent to your account's email address at the same time the client receives theirs. A confirmation toast confirms whether the copy was delivered.
If the invoice is linked to a ticket, its notes are copied onto that ticket as an internal (staff-only) note the first time you send it, so you don't have to write the same context twice. This only happens on the first send from draft; resending an already-sent invoice does not add a duplicate note.
Setting up payment methods
Before your invoices can include payment buttons, you need to configure at least one payment handle. This is a one-time setup in Invoices > Settings > Payment Links (admin only).
Servelo supports three payment methods:
| Method | What to enter | How to find it |
|---|---|---|
| Venmo | Your @username (e.g. @yourbusiness) |
Open the Venmo app, tap your profile icon. Your @username appears below your name. |
| PayPal | Your full paypal.me URL (e.g. paypal.me/yourbusiness) |
Visit paypal.com/paypalme to create or find your link. |
| Square | A "buyer enters amount" Square payment link (e.g. https://square.link/u/...) |
In Square Dashboard, go to Payments > Payment Links, create a new link with Buyer sets the amount, and copy the URL. |
Once saved, Servelo automatically builds prefilled payment links using the exact invoice amount and attaches them to every invoice email and automatic reminder. Customers see a Pay Now button for each configured method.
Invoice statuses
| Status | Meaning |
|---|---|
| Draft | Created but not yet sent. Only visible to your team. |
| Sent | Emailed to the client, awaiting payment. |
| Overdue | A Sent invoice still unpaid 14 days past its due date. Invoices are due on receipt, and the customer's copy only ever says Due Now; the 14 days is an internal window for your own list, never shown to the customer. Shown automatically, not something you set by hand. |
| Paid | Marked paid either manually by your team, or automatically when a Square payment completes. |
| Not Paid | Set manually to close out an invoice you don't expect to collect, without marking it Paid. Stops further automatic payment reminder emails. Its ticket moves to Not Paid too (unless the ticket is already paid or cancelled), and switching the invoice back to Sent puts the ticket back to Awaiting Payment. See Ticket statuses. |
| Void | Cancelled. No longer collectible. |
Client viewed indicator
When a client opens their invoice in the customer portal, Servelo records the timestamp automatically. Two places surface this:
- Invoice list: a "Viewed [date]" note appears beneath the status badge for any sent invoice the client has opened.
- Invoice detail page: the sidebar shows "Opened by client: [date]" under the Dates section, and the header banner also displays it.
A browser push notification is also sent to your team the first time a client opens each invoice โ useful for knowing when to follow up on payment.
Square payment link (invoice-specific)
Servelo supports two distinct ways to accept card payments via Square. Understanding the difference is important for how you handle each job.
Generic Square link vs. invoice-specific link
| Generic link (Settings) | Invoice-specific link | |
|---|---|---|
| Where it comes from | You create it manually in Square Dashboard and paste it into Servelo under Invoices > Settings > Payment Links | Servelo creates it for you by clicking Generate Card Link inside an invoice |
| Amount shown to customer | None. Customer enters whatever amount they want | Preset to the exact invoice total. Customer cannot change it |
| Tips | Customer can pay any amount, including a tip | Amount is fixed. No tip possible via this link |
| Auto-marks invoice paid | No. Servelo can't match an untracked payment to an invoice. You receive a push notification but must mark the invoice paid manually | Yes. Invoice is automatically marked paid the moment Square confirms payment |
| Appears in invoice emails | Yes, as a fallback "Pay by Card" button if no invoice-specific link exists | Yes, replaces the generic button once generated |
| Best for | Walk-in or ad-hoc payments where you want flexibility, or when a tip is expected | Any invoice where you want the exact amount enforced and zero manual follow-up |
How to generate an invoice-specific link
- Open an invoice in Servelo
- In the right sidebar, under Payment Options, click Generate Card Link
- Servelo creates a Square Order for the invoice total and returns a checkout URL
- The link is saved on the invoice. A Pay by Card button now appears in the sidebar for you to copy or preview
- If you send (or re-send) the invoice after generating the link, the email will include this preset-amount checkout button instead of the generic one
Regenerating a link
If the invoice total changes after generating a link, click the โบ button next to the existing link to regenerate it. A new Square Order is created for the updated total and the old link becomes inactive.
Tips and invoice-specific links
Invoice-specific links lock the amount to the invoice total. If you want to give a customer the option to tip, share the generic Square link (from Settings) instead and manually mark the invoice paid afterward. If you receive a payment via the generic link, Servelo sends you a push notification with the payment amount so you can find the right invoice and mark it paid.
Automatic mark-paid (Square)
When a customer pays via an invoice-specific Square link (see Square payment link), Servelo marks the invoice paid automatically with no manual step needed.
How it works:
- When you generate a card link, Servelo creates a Square Order tied to that invoice.
- When the customer completes payment, Square fires a
payment.updatedwebhook to Servelo. - Servelo matches the webhook's
order_idto the invoice and sets its status to Paid.
If payment arrives via the generic Square link (no order ID), Servelo cannot automatically match it to an invoice. Your team gets a push notification and (if a support email is configured) an email at the time it happens, and the payment is also saved to the Unmatched Payments queue described below so it isn't lost if you miss those.
Requirements: Square must be connected under Settings > Integrations. Venmo and PayPal payments always require manual mark-paid since those providers do not send signed payment webhooks.
Unmatched Payments
Whenever a Square payment can't be auto-matched to an invoice, it's saved to a review queue. When there's anything to review, a banner appears at the top of the Invoices list (admins only) showing the count and total amount, with a Review button. For each payment, search for the invoice it belongs to by invoice number or client name and click Mark Invoice Paid โ this marks that invoice paid exactly as if you'd used the invoice's own Mark Paid action, then removes it from the queue. If a payment wasn't actually a business payment (e.g. a personal transaction on the same Square account), click Ignore instead.
Automatic payment reminders
Servelo can automatically email clients reminders about unpaid invoices. Reminders stop as soon as the invoice is marked paid.
Configure which reminders to send under Settings > Invoices > Automatic Reminders. Available triggers, each sent once per invoice:
- 3 days before due date
- 1 day before due date
- On the due date
- 3 days after due date (overdue)
- 7 days after due date (overdue)
- 14 days after due date (overdue)
A separate Every week until paid toggle sends a repeating reminder every 7 days, starting a week after the invoice was sent โ it does not require or depend on a due date, and keeps repeating indefinitely (not just once) until the invoice is paid. It can be enabled alongside the triggers above; a client could receive both an overdue reminder and a weekly reminder in the same week if both apply.
Invoice PDF
Every invoice has a Download PDF option that generates a branded PDF with your company name, logo, contact details, billed-to information, all line items, and totals. The PDF is generated on demand.
Email content
When you send an invoice, the email body includes the full invoice contents inline, no need for the client to click through to a PDF just to see the total. The email shows:
- Billed To (client name and email)
- Invoice number and "Due Now"
- All line items with descriptions, quantities, unit prices, and totals
- Subtotal, tax (if applicable), and total due
- Any notes
- Payment buttons for each configured payment method
Quote to invoice
When a client accepts a quote, Servelo automatically creates a draft invoice pre-populated with the same line items, title, and notes. The invoice is linked to the same ticket and client. Your team receives an email notification with a link to review and send the invoice.
This eliminates manual re-entry, the quote acceptance flow creates a complete, ready-to-send invoice in one step.
Receipts for invoices paid in person
If a customer pays you on the spot and asks for a receipt afterward, create the invoice as usual, click Mark as Paid, and send it. Once an invoice is Paid, the same button becomes Send Receipt and the customer gets a receipt instead of an invoice:
- The email subject reads Receipt for Invoice #NNNN, and the header says RECEIPT with the paid date.
- The totals row reads Total Paid, and there are no Pay Now buttons or payment links.
- The PDF attachment is titled RECEIPT and shows PAID IN FULL, the paid date, and any payment notes you entered.
- The invoice stays Paid. Sending a receipt never changes its status, due date, or days-to-pay reporting.
To save a step, tick Then email a receipt to the customer in the Mark as Paid dialog. As soon as the payment is recorded, the send dialog opens with the customer's email filled in. A paid invoice's Download PDF is also a receipt.
The date a receipt was emailed shows under Email History on the invoice and in the Last Emailed column on the list.
List columns and Last Emailed
Click โ Columns above the Invoices list to show or hide columns: Client, Total, Ticket, Quote, Due Date, Last Emailed, and Created. #, Title, and Status are always shown. Your choice is remembered in your browser. The picker is available on desktop only. 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.
Last Emailed shows the most recent time the client was emailed about the invoice, whether that was the original send, an automatic reminder, or a receipt, with a small label under the date saying which. Click the header to sort by it. Invoices that were never sent show a dash.
Exporting invoices
Click Export on the Invoices list page to download all visible invoices as a CSV. The export includes invoice number, title, client, status, amount, due date, and sent date. Filter by status or date before exporting to get a specific period.
Who can do what
| Action | Admin | Technician | Viewer |
|---|---|---|---|
| Create invoice | Yes | Yes | No |
| Edit invoice | Yes | Yes | No |
| Send invoice | Yes | Yes | No |
| Mark as paid | Yes | Yes | No |
| Download PDF | Yes | Yes | Yes |
| Void invoice | Yes | No | No |
| View invoices | Yes | Yes | Yes |
Related tickets and quotes
The InvoiceBuilder shows a related-links bar at the top when the invoice is linked to a ticket or originated from a quote. Click any link to jump directly to that record. On the Invoices list page, the Linked Ticket and Quote columns are also clickable for quick navigation.
Recurring invoice plans
Recurring plans automatically generate and optionally send invoices on a repeating schedule. Manage plans under Invoices > Recurring (admin only).
Each plan defines:
- Client (required): who receives the invoices. Start typing to filter by name, company, or email โ matches show as Name | Company so duplicate or similarly-named clients are easy to tell apart. A plan can't be saved without a client.
- Title and line items: the invoice template, with optional discount and tax
- Frequency: weekly, monthly, quarterly, annually, or a custom day interval
- Fixed day: optionally pin invoices to a specific day of the month (e.g. always the 1st)
- Due days: how many days after creation the invoice is due
- Auto-send: when enabled, invoices are emailed to the client automatically. When off, they are created as drafts for your review
- Start and end dates: control when the plan runs. Leave end date blank for an ongoing plan
You can pause a plan (toggle Active off), edit it at any time, or trigger the next invoice immediately with Run now.
Invoice settings
Invoice-specific settings are under Invoices > Settings (admin only):
- Payment Links: your Venmo @handle, PayPal.me URL, and Square payment link. These appear as Pay Now buttons in every invoice email. Invoices sent without any handles configured will not include payment buttons. See Setting up payment methods for step-by-step instructions.
- Automatic Reminders: choose which reminder schedule applies to unpaid invoices. Reminders also include your payment buttons if configured.
- Processing Fees: your processor's rate (% + flat $) per payment method. Used to auto-calculate the Payment Fee field when you close a ticket. Square payments made through generated invoice links pull the actual fee from the Square webhook automatically and don't rely on this rate. See Processing Fees in Settings for the full rate table.