Sign in with your admin account.
No password set yet for this account. We'll email you a code to verify it's you, then you can set a password.
Sent to . Expires in 10 minutes.
Set a password for next time. This is optional. Google sign-in and the emailed code both keep working without one.
Counted from each address's Current Service Labels. An address with no label is not counted as a customer.
| Service | Addresses | Share | |
|---|---|---|---|
| Loading… | |||
⚠ QuickBooks is connected to its sandbox environment. The figures below are test data, not real invoices.
Open balance by service.
Past due only.
Where the count and the money disagree.
Open balance and how much of it is past due.
| Customer | Open invoices | Service type | Customer type | Oldest due | Days late | Balance |
|---|
Scan is read-only. Create queues real deals and needs confirmation.
Only a super admin or a developer can change these.
How many customers this service has, and how many of them take each add-on. The share is of this service's own customers, so it reads as a conversion rate.
Every deal this service made, by what made it. The share is of that column's own created count.
Closes one service's season. Scan is read-only. Completing rewrites labels and needs the season typed to confirm.
Bought this service this season, on a won deal with at least one of its line items: label stays, flagged Ready for Renewal. Did not: this one label moves to past, no renewal. Nothing else on the address is touched.
Every completion is recorded with what it changed. Undo puts that whole run back.
Which services go on this pipeline's renewal deal, and what decides each one. The price comes from the product's own pricing rule, never from here.
Only a super admin or a developer can change these rules.
Deals in eProposal Ready, by how they were created. Scan is read-only. Send enrols each in the proposal workflow, and asks first.
| Deal | Address | Renews | Sent |
|---|
One workflow does every batch send. Swapping the email here rewrites that workflow's send step in HubSpot, so the workflow itself never has to be re-picked.
Edits the real Product record's price. Every future deal reads this directly.
| SKU | Product | Price (CAD) |
|---|
What this service offers a customer. The eProposal reads these, and a new deal is created with them.
New deals for this service are created with this term. Not set leaves the deal blank, and a blank deal invoices as Due upon receipt.
These apply to all five services at once. Changing one here changes it on every service tab.
Write the terms once and link to them from everywhere. Each document says what it is for, and the eProposal or the website asks for that job rather than for a document name, so renaming or replacing one never breaks what points at it. The addresses are shown under the editor. Published documents are live the moment you save; a draft is only visible here.
| Document | Address | Status | Updated | |
|---|---|---|---|---|
| Loading… | ||||
Plain paragraphs are fine. Pasted formatting survives. Anything that could run code is stripped on save.
Address to use everywhere
This address asks for whichever document is doing this job, so it keeps working if you rename this one or replace it with a new version.
Paste this into a website page or an eProposal block:
This exact document, whatever its job:
Not configured yet. No properties or SKUs are set up for this service in the admin console.
A route is the named run a crew drives, the thing the paper schedule called "WEED CONTROL - 1". Name is all that's required.
| Name | Category | Crew | Truck | Trailer | Start | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
A crew is a standing group: "Lawn Cutting 1", "IRR Crew 3". Routes point at one. This is the default membership, not a rule — the day board can swap people for a single date without you editing the crew, because the history says the core holds and the edges move constantly.
| Crew | Description | Members | |
|---|---|---|---|
| Loading… | |||
Off means no template mails a customer, whatever its own setting says. Completions still record, services still close in HubSpot, and the mail still renders — it goes to the office queue instead. Nothing is lost while this is off, so turning it on later needs nothing replayed.
On completion, each part a crew recorded becomes a line item with its quantity, and the time on the job becomes a labour line in hours. Every line carries HST 13, which QuickBooks requires. Time rounds up to the increment, since a short callback still costs a trip. Turning this on needs a labour product — without one the hours would be silently dropped while the parts went through.
One template per outcome. The active templates for a service are exactly the outcome buttons a crew sees, so writing the "nobody answered" mail is what puts that button on their screen. Personalise with , {{deal.dealname}}, , , or . Anything after the dot is a raw HubSpot property name, so a new property works here the day it exists. A token that resolves to nothing renders empty rather than leaking braces into a customer's inbox.
"Finishes the work" closes the service in HubSpot when a crew picks this outcome. Leave it off for anything that needs another visit, like nobody answering the door, or the job gets billed and never revisited. "Send automatically" mails the customer as soon as the crew reports it; off routes it to the office queue for a person to read first.
Mail a crew's report generated that is waiting for a person. Each row shows the message exactly as it would go out, and why it stopped here. Sending is a real send.
| Name | Outcome | Sends to | Auto | |
|---|---|---|---|---|
| Loading… | ||||
Name is the only thing required. A work email is what the portal signs them in with, so leave it blank for anyone who doesn't need the app.
Decides which training, toolbox items and forms they are shown. They can also set it themselves in the app; whatever is saved here wins.
What this role can do is set on the Access manager tab.
Location-tracking rules differ between the two, so the record has to say which it is.
If something happens on site. This is the only part of the record that leaves the console in an emergency, so keep it to what an ambulance crew or a supervisor at the roadside actually needs. It is never sent to anyone else's phone — the employee can see and edit their own contact in the app, and nobody can see anybody else's.
Office only — the employee cannot edit this from the app, and it is never shown to anyone else. Keep it to the minimum that could matter.
Optional. Everyone signs in with Google, or an emailed code if their work address is not a Google account. Set a password only for someone those two do not suit — it works on its own, with no code behind it. Remove it and they are back to the other two.
—
| Name | Role | Department | Crew | Reports to | Portal login | Time clock | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
What each portal role is allowed to do. Everyone always sees their own day, their own timesheet and their own HR forms, and those need no permission, so they are not listed.
| Permission |
|---|
| Loading… |
Documents, training videos and toolbox talks all land on the crew's HR tab. Anything marked for sign-off stays on their list until they confirm it.
Paste whatever the browser gave you. YouTube and Vimeo links are converted to an embed automatically; anything else plays as a file.
Used to decide how long the app makes them sit with it before the sign-off unlocks.
Tick none to show it to everybody. That is the right answer for most policies.
—
| Title | Type | Version | Signed off | Live | |
|---|---|---|---|---|---|
| Loading… | |||||
—
| Name | Department | Crew | Signed off |
|---|
The 360 walk-around check and the incident report are built in and cannot be deleted, only switched off. Anything else here is yours to add and change.
| Form | Fields | Photo | Live | |
|---|---|---|---|---|
| Loading… | ||||
Fields are shown to the crew in this order. A "heading" is a divider with no answer.
Tick none to offer it to everybody.
| Label | Key | Type | Req | Options / shown when |
|---|
—
| When | Form | Who | Summary | |
|---|---|---|---|---|
| Loading… | ||||
—
—
The allowed areas are the sites below — the ones ticked "clock in allowed" and given a pin. Clocking IN outside them is refused; clocking OUT is always allowed and recorded as off site, because refusing it would mean working unpaid or walking back to a car park to stop the clock.
Leave that last one on. A punch with no location is recorded as unverified, not refused.
Added to each site's radius. A phone in a truck cab reads 50–100 m out on a bad morning.
A place the company works at repeatedly. The pin and radius only record how far away somebody was at sign-in. Being outside is noted, never refused.
Both or neither. Right-click a spot in Google Maps and the first menu item is the pair.
—
| Name | Where | Requires | In use | |
|---|---|---|---|---|
| Loading… | ||||
Newest first. A row is written on sign-in, not on sign-out, so the ones who never signed out still show.
| Who | Site | In | Out | On site | Notes |
|---|---|---|---|---|---|
| Loading… | |||||
Click the map to place it, or drag the pin. The circle is the radius. Other sites are shown faintly so overlaps are obvious.
One map per pipeline. Draw a zone, drag its corners to reshape it, and give it the name the office uses for it. Nothing here reads or writes HubSpot yet, so a change on this screen moves no customer record.
A .kmz is a zipped .kml. Unzip it first and pick the doc.kml inside. An import adds what is not already on the map by name, and changes nothing that is.
Nothing is deleted. A removed zone keeps its shape and comes back exactly as it was.
One map per pipeline to begin with. Add a map to cover several pipelines at once, for example one snow map for both the residential and the commercial pipeline. A map that still holds zones cannot be taken off the list.
Click a zone to select it.
One pay period at a time. A correction never edits a punch. It adds a signed row saying what the clock read, what it should read, and why.
—
| Name | Department | Crew | Days | Break | Paid | Approved | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
A paper sheet, or a supervisor's note. Each line is filed as the same signed, appended row a single correction produces — it is not a weaker kind of record.
| Name | Department | Already on file | Hours worked |
|---|---|---|---|
| Loading… | |||
—
| Day | In | Out | On the clock | Break | Paid |
|---|
—
This is the sentence that gets read back in a dispute. Say what the evidence was.
| Event | Server time | Where | Origin | Chain |
|---|
What every proposal and contract reads. Nothing here lives in code.
Loading…
What the crew's Hours screen slices their punches by. Nothing about a period is stored — change these and every period, past and future, recomputes.
Any pay day you can name. Everything rolls forward and back from it.
Decides which day an overnight shift is filed against.
| Period | Closes | Pays |
|---|---|---|
| Loading… | ||
If these dates look wrong, the anchor or the lag is wrong. It is far easier to see it here than to reason about it.
Ontario counts overtime per week, not per pay period. Weeks are counted separately and do not line up with the period.
44 is the ESA minimum. 0 switches it off.
Pick it once. Changing it later moves people's overtime retroactively.
Long enough for a real storm shift, short enough to be useful next morning.
This produces a split, not a rate. Payroll applies the premium to it.
The dropdown a crew member picks from in the app, and what training, toolbox items and forms are targeted at. Rename freely. The id is frozen on first save, so nobody is orphaned.
| Name | Id | Offered in the app | |
|---|---|---|---|
| Loading… | |||
A name that already exists keeps its id, so pasting a corrected list does not orphan anyone. Anything missing from the paste is dropped from the dropdown.
What a crew books their hours against. A code tied to a service rolls up into that service's costing; the rest (shop, travel, training, callbacks) are the buckets no service covers. The code is frozen on first save because time entries point at it.
| Code | Name | Rolls up to | Where | Offered in the app | |
|---|---|---|---|---|---|
| Loading… | |||||
The crew only see this code when they are inside the radius.
What the crew is asked to agree to before the app records where they are, and who has answered. Changing the wording bumps the version and asks everybody again.
Say what is recorded, when, why, how long it is kept, who sees it, and what happens if they say no. The exact text is stored with each answer, so a record always shows the wording that person actually saw.
| Name | Department | Phone belongs to | Answer | When |
|---|---|---|---|---|
| Loading… | ||||
—
Leave the password blank to let them set their own on first login.
| Role | Password set | Added |
|---|
Tick what a role may reach. Everyone signed in can still see the dashboard and the service pages; this table only covers people, payroll and the admin screens.
| What it covers |
|---|
| Loading… |
Most recent 200 actions, newest first.
| When | Who | Action | Details |
|---|
Find a deal by name, by deal number, or by its record id.
| Deal | Number | Amount | Invoice status |
|---|
The address workflow the Batch Send page drives for this service. Only Address workflows can send one proposal link per address.
How deal-creator resolves each SKU's sale price at deal-creation time. Only editable and only visible here, not on any service's own page.
Which SKUs go on a seasonal renewal deal, and under what condition. Pricing itself still comes from each product's Pricing Rule above. This only decides whether a SKU is included at all. Only editable and only visible here.
The list the Batch renewal page links to. Build it in HubSpot on the status below, then pick it here.
Products with a sub-service split, or classified as Bundle / Multi-Application. Each split must total 100%. Only editable and only visible here, not on any service's own page.
Stops everything this business sends to or reads from QuickBooks. Use it when something is going out wrong and you need it to stop now.
While it is stopped, no invoice and no customer is created, changed or read. The QuickBooks cards on a deal show an error and the invoice figures on the dashboard stop loading. The per-service auto invoice setting is a different thing: it only decides whether a signature invoices by itself, and it never stops the button.
Opt in per event. Nobody is emailed unless they've turned an event on.