Features

Tickets

Tickets are the core of Servelo. Each ticket represents a service request or job, tracks its lifecycle from open to closed, and can carry comments, photos, charges, and quotes.

The Tickets list

The Tickets list is fully configurable. Click the โŠž Columns button to show or hide any of the available columns: Ticket #, Description, Client, Phone, Email, Location, Assigned To, Priority, Paid, Status, Scheduled, Hours, Miles, Charge, Date Created, Date Closed, Work Type, Lead Fee, and Revenue. Ticket #, Client, and Status are always shown; Phone, Email, Hours, Miles, Date Closed, Work Type, Lead Fee, and Revenue are hidden by default to keep the list compact. Date Closed only shows a value for Closed/Cancelled tickets. Both dates are also shown under the title on the ticket detail page ("Created {date}" and, once finished, "ยท Closed {date}" or "ยท Cancelled {date}") regardless of which columns are visible.

Drag any column header left or right to reorder it. If the order gets messy, open the Columns picker and click โ†บ Reset column order to put everything back to default. Column visibility and order are saved per browser and are shared with the ticket tables on the Dashboard โ€” a change made on either page shows up on the other.

Click a sortable column header to sort by that column; click again to reverse direction. The row โ‹ฎ menu offers Edit, Export PDF, Duplicate, Pin to Dashboard / Unpin, and (admins) Delete.

The default sort (Date Created) isn't purely chronological: active Urgent tickets float to the very top, active High priority next, then upcoming scheduled tickets (soonest first), with everything else falling back to normal date order below that. Closed and cancelled tickets are excluded from the priority float. Switching to any other sort column drops this behavior entirely and sorts strictly by the chosen field.

Creating a ticket

Go to Tickets and click New Ticket. Required fields are title and client. All other fields are optional.

FieldDescription
TitleShort description of the job (required)
ClientThe client this ticket belongs to (required)
DescriptionFull details of the request
Work TypeCategory of work, e.g. Hardware, Networking, Software. Managed in Settings
Assigned toThe technician responsible for the job
AssetA device from the client's asset list to associate with this job. Appears after a client is selected
Scheduled dateWhen the job is planned. Setting a date automatically moves the ticket to Scheduled status. Triggers Google Calendar and/or Outlook Calendar sync if the technician has connected their calendar. You can't pick a date or time in the past โ€” the picker disables them. Click ๐Ÿ•“ History next to the Schedule heading on an existing ticket to see every time the scheduled date was changed, who changed it, and when
Due dateOptional deadline for the ticket. Tickets past their due date appear in the overdue count on the dashboard
ChargeAmount collected from the client for this job. Used in the P&L summary and revenue tracking
Payment MethodHow the client paid: Cash, Credit Card, Check, Zelle, etc.
PaidToggle that appears once a Charge is set. Marking it Paid logs a revenue entry immediately and works regardless of ticket status โ€” useful when a customer pays up front but the job isn't finished yet. Unmarking it removes the revenue entry. Closing a ticket with an amount in Collected at close sets this automatically; the toggle just lets you set it earlier (or later) too.
Hours WorkedTime spent on the job. Shown in dashboard stats and exports
Miles DrivenDistance traveled in miles. Combined with your MPG and gas price (configured in Tickets > Settings) to calculate fuel cost. Click โ†” Round trip to replace the value with the round-trip distance from your start location to the client's address, or + Add Trip to add another round trip on top of what's already there, for jobs that need more than one visit
Lead feeReferral or lead fee paid to a third party, separate from the charge. Deducted in the P&L summary. This field is per-job profitability info only; the actual charge should reach the Expenses page through your normal expense records (e.g. the credit card CSV import)
Payment feeCredit card or processor fee. Deducted in the P&L summary
Job costsOne or more out-of-pocket costs for the job: parking, tolls, supplies, subcontractor fees, etc. Each row has a label and an amount. Deducted in P&L. Costs can be auto-added as expense entries when the ticket is marked paid (configure in Tickets > Settings)
StatusCurrent state: open, in progress, scheduled, on hold, closed
PriorityLow, normal, high, or urgent

Ticket statuses

StatusMeaning
OpenNew or unstarted. Counts toward the technician's open workload
In ProgressActively being worked on
ScheduledHas a scheduled date and is waiting for that date
On HoldPaused. Waiting on parts, approval, or the client
ClosedWork is complete. The ticket is locked โ€” all fields are read-only and autosave is disabled; the page shows Re-open ticket to make changes instead of the usual saving indicator. Use Re-open Ticket to resume editing.

Closing a ticket

Click Close Ticket โ€” either the green button in the top-right action row on the ticket header, or the button in the reply area at the bottom. Both open the same close modal, which collects final job details before locking the ticket:

FieldNotes
Closing commentRequired. Choose Internal (staff only) or Public (client sees it). A public comment triggers a client notification email.
Work TypeRequired. Must be selected before the ticket can be closed. If the ticket already has a work type it is pre-filled. Work type is saved to the ticket on close.
Assigned ToRequired. Pre-filled from the ticket if a technician is already assigned. Saved to the ticket on close.
Hours, Miles, FeesOptional final values. Pre-filled from whatever was already on the ticket. In the Miles Driven field, click โ†” Round trip to calculate the round-trip distance from your start location to the client's address automatically, or + Add Trip to add another round trip on top of it. Requires a start location set in My Account and an address on the client record.
Collected at closeEnter an amount to log a revenue entry and mark the ticket paid in one step.
Payment MethodOptional. Recorded alongside the revenue entry.

Two close actions are available: Mark as paid & Close (creates a revenue entry) and Close without marking paid. Both are disabled until a Work Type and an assigned technician are selected and a closing comment is written.

Re-opening a ticket

When a ticket is closed, a Re-open Ticket button appears in the banner where the reply area normally is. Clicking it sets the status back to Open and unlocks all fields for editing. There is no confirmation step โ€” the ticket is re-opened immediately.

Autosave

Ticket detail pages save automatically. About a second after you stop typing or change a field, Servelo saves the whole form โ€” there is no Save button on desktop. A small label near the top of the page reads Unsaved changes while an edit is pending and switches to Savingโ€ฆ during the save. On mobile, a sticky Save bar stays at the bottom of the screen instead. Closed tickets don't autosave; re-open the ticket first. New tickets still use an explicit Create Ticket button.

Comments and communication

All team members can add internal comments to any ticket. Comments are visible to anyone with access to the ticket in the app.

When a comment is posted with Notify Client checked, it triggers an email notification to the client. The client can reply directly by email, the reply is threaded back to the ticket automatically. See Email Integration.

Photos and attachments

Photos can be uploaded to a ticket from the ticket detail page. Up to 10 files per upload, 10 MB each. Supported formats: JPEG, PNG, GIF, WebP, and PDF. Photos are stored in S3 and accessible via time-limited signed URLs. Photos are also visible to the client in the customer portal.

โ„น๏ธ Photos attached by clients via the portal appear on the ticket just like internal uploads.

Documents and e-signing

Any ticket can have PDF documents attached for client review and e-signature. This is separate from the photo attachment system and is designed for contracts, liability waivers, scope-of-work agreements, and similar documents.

Uploading a document

  1. Open the ticket and scroll to the Documents section
  2. Click Upload Document and select a PDF from your device
  3. The document is stored securely and listed under the ticket

Sending a document for signing

  1. After uploading, click Send for Signing next to the document
  2. Servelo emails the client a unique signing link
  3. The client opens the link, reviews the PDF, types their full name, draws their signature, and submits
  4. The signature, signer name, IP address, and timestamp are recorded
  5. The ticket updates to show the document as signed
โ„น๏ธ Document signing on tickets uses the client's email address on file. Make sure the client record has a valid email before sending.

Device entry step

If the document being signed contains a device table (created by including a | # | Device Type | table in the document), the client signing experience adds a step before the signature. The client is prompted to enter up to 5 devices โ€” type, make/model, and serial number โ€” before reviewing and signing. Servelo fills in the table automatically so the final signed PDF contains the completed device list. Documents without a device table go straight to the signature step as usual.

Provider counter-signing

After a client signs a ticket document, an admin can add a counter-signature to create a fully executed record. Open the ticket, find the signed document in the Documents section, and click Counter-sign. Type your name and draw your signature in the panel that appears. The counter-signature is timestamped and recorded in the audit trail alongside the client's signature, and the finalized PDF is embedded in the ticket record.

For reusable agreement templates (service agreements, terms of service, etc.) that you want to attach to quotes for signing, see Digital signatures on quotes.

Deleting a document

Clicking the ๐Ÿ—‘ icon on a document moves it to that ticket's Trash panel rather than deleting it immediately. Expand the ๐Ÿ—‘ Trash (N) section under Documents to Restore a document back to the active list, or Delete Forever to permanently remove it (this also deletes the underlying file, including any signed PDF, from storage). Trashed ticket documents also appear in the global Trash page alongside deleted tickets and other records.

Ticket settings

Admins can access ticket-specific settings from the Settings tab on the Tickets page.

SettingDescription
Ticket NumberingSet the starting number and zero-padding for ticket IDs. Locks once any ticket exists; use Reset numbering to jump the counter forward.
Auto-add job costs to expensesWhen on, each job cost row on a ticket creates an expense entry automatically when the ticket is marked paid. Leave off if costs arrive via bank import.
Vehicle MPGYour vehicle's average fuel efficiency. Used with the gas price to calculate fuel cost per ticket.
Gas Price ($/gal)Current fuel price. Use the refresh button to pull the national average from the EIA.

Ticket numbers

Each ticket is assigned a sequential number (e.g. #0042) at creation. The starting number and zero-padding can be configured under Tickets > Settings > Ticket Numbering. Ticket numbers are stable and can be used to look up tickets from email subjects or reference in conversations with clients.

Calendar sync

Technicians who connect their Google Calendar or Microsoft Outlook Calendar via My Account will have scheduled tickets synced automatically. When a ticket's scheduled date is set or updated, a calendar event is created or updated. When a ticket is closed or its scheduled date is removed, the event is deleted.

Both Google and Outlook are supported simultaneously. Calendar sync is per-user. Each technician manages their own connection independently. Once connected, My Account shows which email address is synced, useful if you have more than one Google or Microsoft account. If you connected before this was shown, disconnect and reconnect to pick it up.

Assets on tickets

Any asset from the ticket's client can be linked to a ticket, so it's always clear which device the job is about. The asset (name, make, model, serial) appears in the ticket detail and is included when the ticket is exported or emailed.

From the ticket detail you can also run a device scan: click Scan on the linked asset to generate a PowerShell one-liner. Run it on that machine and Servelo auto-fills the OS, CPU, RAM, storage, GPU, hostname, and IP address directly into the asset record. No software needs to be installed on the client machine.

AI Job Planner

Every ticket has a built-in AI Job Planner, accessible from the ticket detail page. Click โœฆ AI Job Planner to open a persistent chat panel where you can ask follow-up questions, build a game plan, or draft a customer reply, all in the context of the current job.

The AI already has the full ticket details, client profile, client history, and any assets linked to the customer. You don't need to describe the job from scratch.

FeatureHow it works
Persistent conversationThe conversation is saved per ticket. Close the panel and reopen it later to continue where you left off.
Voice inputTap the microphone icon next to the text box to dictate your message hands-free. The mic turns red while listening. Speech is transcribed and appended to any text already in the box. Works in Chrome, Edge, and most Chromium-based browsers. Not available in Firefox or Safari.
Customer ReplyIf the AI includes a suggested customer reply, a "Use as reply" button appears. Click it to drop the text straight into the reply box.
Game PlanAsk for a game plan and the AI returns a structured step-by-step procedure. A "Copy game plan" button lets you grab it to clipboard.
Clear conversationUse the Clear button in the planner header to wipe the conversation and start fresh for the same ticket.

Actions the AI can take

The AI Job Planner can do more than answer questions. It can take direct actions on the ticket. When it proposes an action, a confirmation card appears before anything is changed. Review the details and click Confirm to apply, or Cancel to skip it.

ActionWhat it does
Add assetCreates a new asset record linked to the client and pre-fills make, model, type, and notes from the conversation.
Update ticketChanges ticket fields such as title, status, priority, scheduled date, charge, miles driven, or work type without leaving the chat.
Create quoteGenerates a draft quote with line items, quantities, and prices. The quote is attached to the ticket immediately.
Add job costLogs a parts or materials cost entry on the ticket (description, amount, optional vendor).
Post commentAdds an internal note or customer-visible comment to the ticket thread. Each AI Job Planner response also has a Post as internal note button that saves that specific response directly to the ticket comments.
Create follow-up ticketOpens a new linked ticket for a separate issue or return visit, pre-filled with the same client and relevant context.
โ„น๏ธ To use Anthropic Claude as the AI provider instead of the default, add your Anthropic API key under Settings > Integrations > AI Provider. Without a key the planner falls back to the built-in Groq model automatically.

Pinned tickets

Pin any ticket to keep it visible on the Dashboard regardless of its status. Pinned tickets appear in a dedicated Pinned panel on the Dashboard, making it easy to track tickets you're actively watching without searching or filtering.

You can pin a ticket from several places: the pin icon in the top-right action strip on the ticket detail page; the โ‹ฎ menu on any row of the Tickets list (Pin to Dashboard / Unpin); or the ๐Ÿ“Œ icon at the end of a row in the Dashboard's Today's Jobs, Upcoming Jobs, Unassigned Tickets, or Recent Jobs panels. Servelo also asks you directly at two points in a ticket's life: right after you create a new ticket ("Pin to dashboard?"), and right after you close a pinned one ("Unpin it now that it's closed?"). Both prompts are optional to act on. Unpinning shows an Undo button on the confirmation toast for a few seconds if you didn't mean to. Pins are per-user; each team member manages their own pinned list independently.

Quotes on tickets

A quote can be attached to any ticket. The quote is a line-item estimate that can be emailed to the client for acceptance or signature. See Quotes for the full flow.

P&L Summary

Each ticket shows an estimated profit and loss summary at the bottom of the Financials section once a charge or costs are entered. This is for internal reference only and is not shown to the client.

LineSource
Gross RevenueThe Charge field on the ticket
Equipment / PartsTotal of all reimbursed expenses linked to this ticket (see Reimbursed Expenses)
Customer depositIf the ticket has a linked accepted quote with a deposit, the deposit amount is shown as a credit that offsets the equipment cost, since the client pre-funded that portion
Lead FeeThe Lead Fee field on the ticket
Payment FeeThe Payment Fee field on the ticket, auto-calculated from the rate configured under Invoices > Settings > Processing Fees
Job CostsEach row from the Job Costs section, listed individually
Est. FuelCalculated from miles driven, MPG, and gas price settings
Est. P&LGross Revenue + deposit credit − all cost lines above. Informational only

The P&L summary only appears when at least one of charge, expenses, fees, or mileage has a value. It does not affect invoices or revenue records.

Duplicating a ticket

Duplicate a ticket to quickly create a new one pre-filled with the same client, description, work type, priority, charge rate, notes, and job cost line items. This is useful for recurring visits with the same client where the work is similar each time.

To duplicate from the ticket list, open the โ‹ฎ menu on any row and choose Duplicate. To duplicate from a ticket detail page, click the Duplicate button in the top-right action strip.

The new ticket opens immediately with status set to Open and the scheduled date blank โ€” set the date for the next visit; changes save automatically. Fields that are specific to the original job (hours worked, miles driven, P&L amounts) are not carried over.

Trash

Deleted records are moved to Trash, not immediately erased. Admins can view and manage Trash from the Trash item in the sidebar, and filter by type: Tickets, Clients, Assets, Expenses, Revenue, Quotes, Invoices, Chats, or Documents (ticket documents sent for signing, see Documents and e-signing). Items in Trash can be restored or permanently deleted. Permanently deleted tickets and documents have their S3 attachments removed as well.

Exporting tickets

Click Export on the Tickets list page to download all visible tickets as a CSV. The export respects your current filters (status, date, assignee, etc.), so filter first to get exactly the slice you want. Exported columns include ticket number, title, status, priority, assigned technician, client, scheduled date, charge, and timestamps.

Who can do what

ActionAdminTechnicianViewer
Create ticketYesYesNo
Edit ticketYesYesNo
Add commentYesYesNo
Upload photoYesYesNo
Close ticketYesYesNo
Duplicate ticketYesYesNo
Delete ticketYesNoNo
View all ticketsYesYesYes