Set lead source and industry on any quote. Changes save individually — no bulk submit needed.
Quote
Client
Status
Lead source
Industry
New Quote
Where did this lead come from?
Type of work
Who's quoting it?
Assign painter — date range
Each day = 8 hrs.
Add column
When a project is dragged into this column, its status field updates automatically. Useful for "In Progress" → Active and "Complete" → Complete columns.
CEO overview — financial health, pipeline, jobs and team productivity.
Revenue vs target (last 7 months)Source: Xero · invoiced
Quote pipelineSource: PaintHub Quotes
Debtors ageingSource: Invoices
Revenue mix by job typeYTD invoiced
Leads — source & industryAll quotes
Labour this weekHours scheduled
Jobs due for completion check
Watch list
On site today
Team notes
Loading...
Scorecard
Monthly KPIs for the 1-1 reviews — project managers at the top (scheduling, resourcing, materials, access equipment), then site leaders (jobs on budget, compliance, callbacks, as Employment Hero points), then painter rewards.
Scorecard points — applies to every month shown
KPI 1 — Fantastic
≥ % → pts
KPI 1 — Ideal
≥ % → pts
KPI 1 — Average
≥ % → pts
KPI 1 — Below Average
below → pts
KPI 2 — Non-compliant job
− pts per job
KPI 3 — Callback
− pts per callback
KPI 1 points are for a full-size job (160 budgeted hours) — bigger and smaller jobs pay in proportion, so a 3-month job pays roughly three months' worth when it finishes. Compliance and callback penalties are flat per job/callback.
🎨 Painter rewards — same % thresholds as above, own points
Fantastic job
pts
Ideal job
pts
Average job
pts
Below average job
pts
On-time job bonus
+ pts per job that ran on budget at Fantastic — split across the crew by hours worked
🏆 Sales KPIs — same Exceeds / Meets bands as the PMs
Dates entered within hours of the job being assigned
Scheduling · materials · access bands
Exceeds ≥ % · Meets ≥ % · below = Unacceptable
Resourcing (avg on-budget %)
Exceeds ≥ % · Meets ≥ %
Per-job overage allowed
Materials % · Access equipment % over budget
Changes apply to every month the scorecard shows, past and future.
🏆 Sales KPIs
Quote turnaround · follow-up discipline · win rate · won value vs target, per quoter (the "Quoted by" name on each quote). Same Exceeds / Meets / Unacceptable bands; the month's rating is the lowest of the four.
📋 Project manager KPIs
Scheduling within 48h · resourcing (on-budget hours, averaged across their jobs) · materials within 5% · access equipment within 5%. Each KPI rates Exceeds / Meets / Unacceptable; the month's rating is the lowest of the four.
⭐ Site leaders
Jobs on budget (hours), compliance sign-ons and callbacks, scored as Employment Hero points per job.
🎨 Painter rewards
Monthly job points + on-budget bonus for the rest of the team. Subcontractors are shown for visibility but don't earn points; site leaders are on their own scorecard above.
Sales. Turnaround counts quotes created in the month and checks the first send (from the quote's send log) landed within the working-day window. Follow-up counts quotes first sent in the month and looks for the first follow-up after the send — a re-send, an outbound email, call or note on the linked CRM deal, or a completed CRM task; a quote decided inside the window counts as met. Win rate and won value use quotes decided in the month (won = accepted in PaintHub, lost = the linked deal marked lost), valued at the accepted tabs ex GST, against the monthly targets in ⚙ Edit points.
Project managers. Scheduling counts every job handed to the PM in the selected month (the moment the PM owner is set) and checks that both start and end dates were entered within the window — jobs that already had dates before this feature went live count as on time. Resourcing, materials and access equipment use the jobs the PM owns that finished in the month (same landing rule as the site leaders): resourcing is the site-leader on-budget % averaged across those jobs, materials compares manual purchases + assigned Xero bills against the quoted materials budget, and access equipment compares 🏗-tagged bills against the quote's access allowance at cost. The month's rating is the lowest of the four KPIs.
Site leaders. A job lands in the month its last scheduled day falls in, and is scored once finished (complete / invoicing / archived). KPI 1: budget hours (won quote labour lines + approved variations, fallback the job's budgeted hours) ÷ crew actual hours, banded into Fantastic / Ideal / Average; each job pays its band points scaled by job size (budget hours ÷ a standard 160h month) and the points are summed — so a 3-month job pays three months' worth when it lands, and leaders on long jobs aren't behind leaders running many small ones. Running jobs show on the card as "in progress" until they finish. KPI 2: every crew member signed onto every active SWMS/JSA and the client sign-off sheet is done — a non-compliant job loses points. KPI 3: each callback recorded in the month (job card → ↩ Callbacks) loses points against that job's site leader. Painter rewards: each finished job is banded on how its costs came in (budget hours ÷ crew hours) against the KPI percentages. The job then pays its band's points as a pool — scaled by the job's budget hours against a standard 160h month, so a 160h Fantastic job pays the full 2,000 and a 4h job pays its proportion — and the pool is split across the crew by hours worked. Job points are summed for the month, so one blown job can't wipe out the good ones, and beating budget raises everyone's points per hour. The bonus pays on every job that runs on budget at Fantastic, split across the crew by hours worked — end dates don't affect points, though late jobs are still flagged for visibility. The Efficiency figure shown is the monthly overall for context. All thresholds, points, penalties and bonuses are editable via ⚙ Edit points above. Mark your site leaders with the "Site leader" checkbox on the painter card.
Team performance
How on-budget each painter runs the jobs they work on. Each job's over- or under-run is shared pro-rata across the crew by hours worked.
Budget hours per job come from the won quote's labour lines (plus approved variations), falling back to the job's budgeted hours. A painter's fair share = job budget × their portion of the crew's hours. $ impact uses each painter's cost rate. Jobs with no hours budget are shown but excluded from the on-budget stats.
Painters
Manage your workforce. Set working days — used in the scheduler and capacity forecast.
Show:AllActiveInactive
New painter
Working days
Max days per week
days/week
Time off
Track painter leave, company RDOs, and public holidays. Days marked here block scheduling and reduce capacity forecasts.
Show:UpcomingAllPast
Leave & Capacity
Monthly planned vs unexpected leave and what it does to the average painter number, capacity and utilisation.
Minimum average painters:
Work days = weekdays minus public holidays and company RDOs (half-days count 0.5). Headcount = all active painters right now — employees and subcontractors, since subbies are scheduled to jobs too. Planned leave = annual + RDO; unexpected = sick + other; rain days tracked in their own column (never blocked by the floor). Average painter number = headcount − average painters away per work day — this is what the capacity band (80–100% of average painters × work days) is built on. Utilisation = employee scheduled painter-days ÷ capacity: green in the 80–100% band, amber under 80%, red over 100%. Booking annual or RDO leave that would drop a day below the minimum is blocked (with a management override); sick leave is always recorded.
Skills Matrix
Where each apprentice is at — what they've been shown, what still needs supervision, and what they can be trusted with solo. Everyone can see it; only project managers move the ratings.
Tap a cell to cycle the level: ⬜ Not shown yet → 🟡 Learning (needs full supervision) → 🔵 Checking (can do it, check the result) → 🟢 Solo (trusted without checking). Tap an apprentice's name for their card — the 🎯 Teach next strip is the two-second answer to "what do I show them today". Every rating is stamped with who set it and when. Moving ratings is for project managers only; if that's not you, look but don't tap. Apprentices = painters whose Level on the painter card is "Apprentice".
Who's rating?
Every rating is stamped with this name. Project managers only — everyone else views.
Edit skills
Rename, add or delete skills and categories — nothing changes until you hit Save. Deleting a skill hides it from the matrix but keeps any ratings already recorded in the database.
Payroll
Hours worked per employee each pay week (Wed–Tue), with leave, sick, RDO and public holidays. Subcontractors excluded.
Hours come from the scheduler (8h full day, 4h half day). ★ LH = leading hand on a job that week.
Cells: L leave · S sick · RDO · PH public holiday · RN rain day.
Add leave
Tick when the painter worked 4h and used leave/sick/RDO for the remaining 4h. Payroll will show both the worked hours and a ½ off-day.
Clients
Edit contact details once and propagate updates to all of a client's quotes, projects, and invoices.
Edit client
Project register
Click any row to open & edit. Drag column edges to resize.
Visible columns
Status:AllActivePendingCompleteInvoicingArchivedOn hold
No projects match.
Loading projects...
Scheduler
Drag painters onto days, or use range assign for bulk planning.
Zac & Brendan — drag projects between columns. Click a card for full details.
Weekly Report
Jobs running, utilisation, upcoming starts and finished jobs — snapshot emailed to Tyron, Zac & Brendan every Wednesday 7:30am.
Loading…
Client Surveys
Post-project feedback & KPIs — Net Promoter Score, satisfaction ratings, response history.
Average rating per question
ResponsesSubmitted & pending — click a row to copy its link or view detail
Send client survey
Pick a finished project — we'll generate a unique link to share with the client.
Quotes
Build, send and track client quotes. Accepted quotes convert to projects automatically.
Quote
📄 COVER PAGE
Scope of works
Specifications
Preparation level
Pricing options
Description
Qty
Unit
Rate
Amount
Adding to: Option 1
📐 Measurement worksheet
Add a row for each surface or area you measured. Rates auto-load from your library; tweak per row if needed. Hit "Push to quote lines" to turn it into the priced quote the client sees.
✍️ Manual line items on this option
Total hours:0
Labour cost:$0
Material cost:$0
Material w/ markup:$0
Worksheet total:$0
Labour$0.00
Materials$0.00
Sub-Total ex GST$0.00
GST (10%)$0.00
Total inc GST$0.00
Full repaint in year 1 · 3 annual payments with CPI · we return each year to maintain the painted surfaces
Split must add to 100%
🧮 Suggest markup — what does it cost you to carry this program?
Margin analysis
Add line items to see margin analysis
Client details
Lead source & industry
Attachments
Loading...
Loading invoices...
Profitability
Live and finished jobs — actual labour, material costs and margins. Quote estimates shown for comparison.
In progressFinishedOver budgetAll
Job costing breakdown
Settings
Business details, banking, rates and quote defaults — used across all quotes and invoices.
📋 Business details
Optional. Paste your Google Places API key to enable address autocomplete on quote builder and project pages. Get a key →
PNG, JPG or SVG. Max 500kb. Appears on all quotes & invoices.
🏦 Payment & banking details
These details appear on the payment section of every invoice PDF. Clients use them to make direct deposits.
Tick to display the bank details block on every invoice PDF. Untick if you want to control per-invoice.
🔒 Privacy note: These details are stored in your Supabase database. They are visible to anyone using PaintHub with your access code. Treat them like any sensitive business detail.
💰 Rates & pricing
Default rates used by the quote builder and profitability calculations. These can be overridden per-quote.
TOTAL labour burden per hour — on-costs + business overhead. Used for NETT margin.
Super, workers comp, payroll tax, LSL — % loaded onto employee wages as a DIRECT cost in GROSS margin. Set 0 if painter card rates already include on-costs (hard-cost rates). Subcontractor rates are always treated as all-in.
📊 How these are used: Labour sell rate sets the default $/hr on new quote labour lines. Labour cost rate is used by the Profitability page to calculate margin. Resources markup auto-applies to material/other lines (Apply button on quote builder).
🔢 Overhead rate calculator
Derive the correct overhead $/hr from your total annual overhead and staffing. As you add painters the rate drops — that's the point. Hit Apply then Save rates above.
📄 Quote & invoice defaults
Document numbering, terms, and the default cover letter that appears on the front page of new quotes.
Auto-populated on every new quote. Editable per-quote on the cover page card.
📊 Margin alert thresholds
Margins above the green threshold show green. Between the two thresholds show amber (warning). Below the amber threshold show red (alert).
Healthy gross margin
Below this, gross goes red
Healthy net margin
Below this, net goes red
🏷 Lead source & industry tags
These are the tick-box options shown when creating a new quote. Add, rename or remove options here — changes apply to all new quotes immediately.
Lead sources
Industries
👁 Who sees what on the dashboard
Tick which widgets each role sees on the dashboard (the Owner/Manager/Office/Crew pills at the top of the Dashboard). Leave a column untouched to use the built-in defaults.
🎯 Dashboard targets
Set the targets the CEO Dashboard measures performance against. Leave a field blank or at 0 to hide its delta indicator from the dashboard.
Revenue & margin
Used for any month without a per-month override below. Drives the Revenue MTD KPI delta and the revenue chart target line.
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Annual total (12 months)—
Used by the Gross Margin YTD KPI on the dashboard
Transition — legacy system overrides
While jobs are still invoicing through your old system, enter this month's external revenue and matching costs below. Dashboard revenue, the chart, MTD KPI, and YTD margin will all include these figures. Reset to 0 once all legacy jobs are migrated.
Sum of invoices raised in the old system this calendar month
Labour + materials + overhead estimated for those external jobs · keeps margin honest
Invoices created before this point are treated as migration/historic and excluded from dashboard revenue & margin (the legacy figure above covers them). Only invoices created after it count on top. Use this once after a data bring-over, then Clear it next month.
Cash flow & debtors
Target for invoices marked paid each month
Dashboard goes red when 60+ day debtors exceed this number
Operations
Percentage of active jobs that should be on track at any time
Scheduled hours as a percentage of total team capacity
Pipeline
Total value of open (draft + sent) quotes you want at any time
90-day rolling win rate target
💡 Tip: Targets are aspirational — set them where you want the business to be, not where it currently is. The dashboard's traffic-light colours and delta arrows reference these numbers. Leave any field at 0 or blank to hide its KPI delta.
⭐ Client survey questions
Edit the wording shown to clients on the post-project feedback form. Each question keeps its underlying meaning (used for KPI tracking) — only the customer-facing label and helper text change here.
Important: Already-sent surveys keep their original wording — your edits only apply to new surveys generated after you save. Don't change what a question measures (e.g. "Value for money" → "Would you hire us again?"), because the Surveys tab + per-painter scores will still treat the column as "Value".
🛒 Paint stores
Saved suppliers for paint purchase orders. The store's email is used when you raise a PO from a job's pre-start record.
Add a store
🧾 Paint & material suppliers (bill filter)
The Bills page only shows bills from these suppliers, so non-job bills (rent, fuel, insurance) stay out of the way. Match is by name — add the supplier name as it appears in Xero (a partial word is fine, e.g. "Dulux", "Inspirations", "Haymes"). Cashflow still counts every bill.
📋 Specification library
Standard prep + finish text blocks inserted into the Scope of Works on quotes via "+ Add spec". Edits here only affect new quotes — existing quotes keep their original text.
📥 Import jobs from simPRO
Drop a simPRO pending-jobs CSV. Each row will become a project in PaintHub. You'll get a preview to review and edit before committing.
If you ran the earlier version of this importer (which created projects directly), use this to find and remove them so you can re-import as quotes instead. Identifies projects whose notes start with "simPRO ref:".
📧 Gmail connection Per-user — only affects your sign-in
Connect your Gmail account so the Email to client button creates a real Gmail draft in the right account, with your Gmail signature already inserted. You still save the PDF and drag it into the draft (auto-attach coming in Phase 2).
Loading…
How it works: When you hit "Email to client" on a quote, PaintHub asks Gmail to create a draft on your behalf. Because the draft is created inside your real account, Gmail itself applies the signature you've set up in Gmail Settings → General → Signature. The draft opens in a new tab — review, attach the PDF, and hit Send.
Permissions requested:gmail.compose only — PaintHub can create drafts in your Drafts folder. It cannot read your inbox or send mail without your click.
🔗 Pipedrive integration
Push quotes from PaintHub to your Pipedrive sales pipeline as Deals. The "Push to Pipedrive" button on the quote builder appears once configured here.
Get this from Pipedrive: top-right avatar → Personal preferences → API → Generate. Store it here and never share it.
Default pipeline & stage for new deals
What gets pushed: A Deal is created in Pipedrive with the quote total, client name, business name, site address, and a note linking back to the quote. A Person and Organization are also created/matched. The deal won't be re-pushed if you already pushed it.
🎨 Premium PDF template
An 8-page brochure-style proposal for high-value quotes. Configure your photos and team here once, then use the "Premium PDF" button on the quote builder to generate it. Standard PDF stays available for everyday quotes.
Brand text
Page 1 — Cover photo
Wide image, ideally landscape. Recommended 1600×900 or larger. The cover photo of someone selecting paint colours works well.
Page 2 — Meet the Team
Add team members with portrait photo, name, and title. Recommended portrait orientation (taller than wide), 600×800 or similar. Up to 6 team members display well; 3-4 looks cleanest.
Hero photos (smaller supporting images)
Page 4 — Protection / setup photo
Painters covering furniture, masking, etc. Landscape orientation, 1200×800 ideal.
Page 5 — Quality & Standards thumbnail
Small image inside the navy callout box. Painters at work, 800×600 ideal.
Page 6 — Team in conversation photo
Group shot of team. Landscape or square, 1000×800 ideal.
Tips: Photos are stored as compressed JPEGs in your settings. Each photo is automatically resized to max 1600px wide and around 200-400KB. The "Premium PDF" button on the quote builder appears once you've configured at least the cover photo and one team member.
🔗 Integrations
Xero accounting
Loading connection status…
What this does: Connecting Xero authorises PaintHub to send invoices to your Xero org via API instead of CSV download. Invoice send + paid-status sync are coming in future updates — for now connecting just establishes the secure link.
Accept quote — which options?
Tick the options the client has accepted. Unchecked options will be marked rejected (kept on the quote as an audit record but excluded from the project, invoices, and the client-facing PDF).
Accepted total (inc GST)$0.00
Progress claim
Quote total (inc GST)
Already invoiced
Remaining
%
$inc GST
Invoices
All invoices across every job.
Invoice
Type
Client
Site
Quote ref
Issued
Due
Amount
Xero
Actions
CRM
Your sales pipeline — leads through to won, with follow-ups, labels and BDM reporting.
Loading…
BDM & pipeline performance
📅 →
🎯 BDM targets — what the report measures against
BDM
Won value / month (total)
$
Lead source 1 — label
Lead source 2 — label
Won deals / month
New deals in / month
Activities / month
FY won value target (total)
$
One TOTAL won-value target; the report still breaks won value down by the two lead-source labels (matched against the deal's Source field, case doesn't matter — other sources show as "Other"). Set either figure: FY blank = 12 × monthly, monthly blank = FY ÷ 12. Activities count entries logged against the BDM's deals.
New company
People at this company
New contact
To
CC
BCC
Template
Subject
Sends from your Gmail
Mark deal lost
✉️ Email templates
Merge fields auto-fill when you pick a template on a deal:
{first} · {contact} · {company} · {value} · {title} · {me}
🏷 Labels
Tag companies to organise them (Aged care, Builder, Strata…). Click a colour dot to recolour a label.
Deal details
To
CC
BCC
Subject
Template
Sends from your Gmail · logged to this deal
Billing Register
Per-job billing position — contract value, invoiced to date, utilisation and overrun.
Loading…
Retention register
Money clients are holding back across all jobs — what's held, what's due for release, and what's been claimed.
HeldDue nowReleasedAll
Loading…
Bills
Supplier bills pulled from Xero (fed by Hubdoc receipts), matched to jobs by PO number. Filtered to your paint & material suppliers.
Reports from your CFO agent — cash, profit, receivables and pipeline from Xero + Paint Hub. A weekly report lands every Monday morning, plus a month wrap on the 1st of each month. Both are emailed to Tyron and Zachary.
Full report
Budget vs Actual
Monthly cash flow budget matched line-by-line against live Xero actuals (cash basis, inc GST). Refreshed every Monday 8am by the budget agent — ask Claude for an on-demand refresh anytime.
Loading…
Cashflow
Forecast across the Australian financial year — predicted invoice payments in, recurring + one-off expenses out.
Forecast — month by month
Recurring · expenses + income
One-off · expenses + income
Add recurring expense
Add one-off expense
Forecast settings
Opening balance and the assumptions used to predict when unpaid invoices actually land in the bank.
Pull balance from Xero
Uses your reconciled Xero bank balance. You can still type over the figure above.
Predicted payment delays (days after due date)
🦺 Safe Work Method Statement
🎨 Pre-start record
Pre-start meeting notes
Colour & paint schedule
Litres come from the quote (if measured by m²) or you can type them. Packs round up from litres ÷ pack size — type over Packs to override (turns blue).
Complete all items below before marking this job as done. Once confirmed it will appear as Ready to invoice on the dashboard.
Hours confirmed
All painter days have been logged in the scheduler
Materials logged
All material purchases have been entered
Defects / outstanding works
Any defects or outstanding items noted below (or confirm none)
Client sign-off
Client has approved the completed works
Project details
None
Site contact
On-site contact person (if different from client)
Schedule
Status & ownership
Scope / Notes
▸🔒 Internal notes● notedOffice only
▸👷 External notes for painters● notedPainter app
▸📝 Crew updates
▸⚠️ Dilapidation log
Pre-existing damage or surfaces that aren't our work — photo + comment, time/date stamped. Record here at pre-start, or it syncs from what the crew logs on site.
▸🔧 Defect log
👷 Assign to
📅 Book fix day(s)to
Snag / punch list — defects in our own work that still need fixing. Crew only see these in their app once you Send to crew.
Painters assigned
▸🔐 Retention held
Re-address invoice
Change who this invoice is addressed to, then reprint. The invoice number and amounts stay the same — only the bill-to changes.
Import painter rates from spreadsheet
Upload your Employee_Cost_xxxx.xlsx (the simPRO OH calculator) to sync painter loaded costs
How this works: The importer reads the OH & Employment Cost Summary sheet, takes each painter's Direct Employment Cost Per Hour (loaded $/hr including super, leave, workcover) and matches by name to existing painters in PaintHub.
Subcontractors are skipped automatically — their flat rates are managed manually.