Create your workspace in 5 minutes
Run the onboarding wizard at /onboarding/wizard. Pick your trades, set truck count, and AI Smart Start seeds 40-60 pricebook items in seconds.
Documentation, guides, and FAQs. Searchable answers powered by the AI Co-Pilot in-app.
Run the onboarding wizard at /onboarding/wizard. Pick your trades, set truck count, and AI Smart Start seeds 40-60 pricebook items in seconds.
Settings → Import. Export a CSV from your old software, match the columns, and preview the result before anything saves. Import customers first — locations and contacts attach to them.
Settings → Users. Add email + role. If email delivery is configured the invitee gets a one-click accept link; if it is not, the invitation is still created — use Copy link on the pending row and send it however you like. The accept page sets their password directly, so no email is required to get someone working.
Settings → Integrations → QuickBooks → Connect. The OAuth round-trip lands at /api/quickbooks/callback and stores the connection against your workspace.
Dispatch → Capacity. Define daily hours + slots per service category and see which days are overbooked. The planner is advisory today — online booking and the dispatch board will let you exceed a cap.
AI Co-Pilot rail. Ask 'who should take the Smith install?' and the AI scores all active techs by skill + location + sold-hour history.
Settings → Cadences. Build multi-step sequences: estimate-sent + 48h → SMS follow-up, expiring membership + 14d → email + task.
Estimates → New → enable Multi-option. Up to 5 tiers per estimate. Customers approve via the portal.
Settings → Pricebook. Each item has unit price + cost + sold-hours estimate. Items become commission-aware once pay rates are set.
Customers → Agreements. Set billing cadence (monthly/quarterly/annual). The recurring-billing cron creates invoices automatically.
Stripe Checkout powers payments. Invoices generate portal pay links your customer can pay by card or bank transfer. Tap to Pay is not available yet.
Prequalification for quotes $500-$25k at a fixed 3.9% transaction rate, with the operator paid in full on completion. The integration is wired to /api/financing/prequal; there is no button on an estimate that fires it yet.
Bill a percentage of a line across several invoices, so a big-ticket install can land in 25/50/25 milestones instead of one lump sum.
The assistant rail on the right of every screen — toggle it with Show AI / Hide AI in the top bar. Ask anything about your workspace; it can see your live jobs, customers, estimates and invoices. Bring your own API key from the key field in the panel itself.
Snap a photo of an HVAC data plate or damage. Claude vision returns brand/model/serial/age + suggested pricebook items.
Wire Vapi or Retell to /api/ai/voice-webhook. 24/7 inbound booking with Spanish auto-switch + membership recognition.
iOS Safari → Share → Add to Home Screen. Android Chrome → menu → Install app. Installs as a standalone app with its own icon.
ServiceFlow needs a connection to load and save work. The app shell is cached so it opens instantly, but changes are not queued offline — offline write support is on the roadmap, not shipped.
Not available yet. MFA is planned; until it ships, protect accounts with a strong unique password and your identity provider's controls via Google sign-in.
Owner role only. GET /api/tenant/export for JSON bundle. POST /api/tenant/delete with confirmation phrase = tenant slug.
Controls mapping at docs/security/SOC2-controls.md. Type II observation window planned.
The time a pricebook item takes PER UNIT — not per line. A line's time is the per-unit time × the quantity. A 2×4 commercial pane at 1m10s means 105 windows is about 2h03m, not one hour.
What a job should take: the sum of every line's sold hours, before anyone is assigned to it.
How fast a crew or a person works relative to par. 1.0 is exactly par, below 1 is faster, above 1 is slower. Teams have one overall factor; technicians have one per service category. Assigning someone to a pricebook-timed job recalculates its duration and tells you: par 2h 03m → 1h 45m (×0.85).
Pricebook means the duration is derived from the line items and updates when you change them. Manual means you typed the times and nothing will ever rewrite them. Jobs created before this existed are treated as manual, so their schedules stay put.
Jobs are scheduled onto TEAMS — a team is what owns a lane on the dispatch board. Technicians are assigned within that. This is why you need at least one team before the board or the week and month calendars show anything.
The type of work — Window Cleaning, Power Washing. Categories tie together four things: pricebook items, technician skills, technician speed factors, and capacity planning.
How often a dispatch zone should be worked. It is advisory only: a cadence never creates a job, moves a job, or reschedules anything. It flags work that is overdue for its area.
The span you promised the customer, as opposed to the actual on-site duration. Moving a job outside its window warns you rather than blocking you.
The list of what a given truck is supposed to be carrying, so you can check it against what is actually on board.
Despite the name, Team → Sold Hours is a plan-versus-capacity view built from scheduled job durations over the last seven days — not a record of finished work. Read it as “how full is next week”. For work actually done, use Reports → Job Completion Times.
There is no separate time clock. When a technician taps Check in in the field app that stamps the start, and Mark complete stamps the finish. Late %, technician Score, Job Completion Times and Completion Efficiency are all calculated from those two taps — if crews don't use the field app, those reports are correctly blank.
Mint a key at /developers. Send requests with Authorization: Bearer sfi_…. 600 GETs / 120 POSTs per minute per key.
POST /api/webhooks/subscriptions with url + events. Delivery is HMAC-signed and retried with exponential backoff.
For scripted migrations, POST /api/imports/csv with a targetTable and columnMapping (dryRun: true previews first). Most people should use Settings → Import instead.