Paying the people who did the work

Friday's sub pay gets rebuilt
from memory and a stack of photos.

Every material pays a different rate. The canvasser is on a different deal than the rep. Nobody can be paid until you know what the job actually collected — so it all waits for one person and a spreadsheet on Friday afternoon, and it's the spreadsheet that gets you sued. Rates go in once here, and the job carries its own math.

Per square, per materialThe ledger freezes at settlementApproval is a human act
A roofer in a hooded sun-shirt bent to the work on a shingle slope under a heavy grey sky, bundles staged on the deck behind him and the neighbouring rooftops beyond.
Somebody is owed for this slope by Friday. Getting that number right is the whole page.
01 · What the work actually costs

Standing seam and architectural shingle are not the same job.

So one blended rate means you're either overpaying on shingle or losing the metal crew — and the number everybody agreed to lives in a text message from March that two people remember differently.

Give each subcontractor a rate card priced in $ per square, per material type, plus a fallback general rate for anything you haven't listed. Rates go in once. Every job after that prices itself off them, and nobody re-derives anything.

Add a rate row for any material in your own pricing vocabulary — the platform ships no fixed material list.

app.onerooflabs.com/settings/payouts/rates
Alpine Roofing Crew
Subcontractor · pay rates by material
Autosaves
Material type$ / squareActive
General rate
Applies when no material match
$85.00
GAF Timberline HDZ
Architectural shingle
$92.00
CertainTeed Landmark
Architectural shingle
$90.00
Standing seam metal
Metal panel
$145.00
Malarkey Vista
Architectural shingle
$95.00
Tear-off (2nd layer)
Add-on labor
$18.00
Rates keyed to your material vocabulary+ Add material rate
02 · Everybody is paid differently

The sub bills by the square. The canvasser doesn't.

One pay model can't hold both, so half your people end up on a side spreadsheet nobody else can open — and the person who can open it is on a roof.

Three payout kinds, set per payee: per square, a flat amount per job, or a percentage — and the percentage runs on a basis you choose, on the sale or on the profit. One job can pay a sub by the square, a canvasser a flat amount per deal and a rep a percentage of profit, out of one rule set.

Exactly one active structure per payee and material — enforced in the service and backstopped in the database, not hoped for. There is never a question about what a job owes when it closes.

app.onerooflabs.com/settings/payouts/structure
Structure · Alpine Roofing Crew
Choose how this payee is paid
Per square
Rate × squares installed
Flat per job
Fixed $ per completed job
Percent
% on the sale — or on the profit
$92.00/sq × 24.5 sq = $2,254.00
Job: Hvillard — 2841 Fenmore St · GAF Timberline HDZActive structure
03 · The people who found you the deal

The canvasser sourced it in March and is still asking in June.

Comp owed to a door-knocker gets tracked somewhere other than sub pay, which makes it the thing that gets forgotten — so the person who found you the work is the one chasing you for money.

Set the kind per rep — a percent of the sale, a percent of the profit, or a flat rate — and what's owed tallies itself as the deals they sourced get signed.

Comp owed rolls into the same ledger your subs are paid from — one approval queue, every payee. And release the accrued commissions when the job is paid in full is a rule you write once: paid-in-full fires it, not somebody's Friday.

app.onerooflabs.com/payouts/canvassers
Canvasser comp
This week · West Ridge territory
Percent of salePercent of profitFlat rate
CanvasserComp kindDealsComp owed
Jordan Reyes% of sale · 5%5$1,120
Maya Ellison% of profit · 8%4$965
Devon ClarkFlat · $150 / deal3$450
Priya Nair% of sale · 5%2$540
4 canvassers · 14 deals sourced$3,075 owed
04 · Releasing the money

A rate you edit in August shouldn't change what someone was paid in June.

But on a spreadsheet it does, silently — and then you cannot prove what anybody agreed to. Meanwhile nothing can be released at all until somebody works out what the job actually collected.

At settlement the job's cost ledger is snapshotted, so a later edit to a rate or an order can't reach back and rewrite history. Settlement then advances Pending → Approved → Paid: no skipping, no reversing, and Paid is terminal — it closes the job through the same path a board drag uses.

Nobody gets paid because software decided to. Approval is a human act, deliberately — and only payouts that actually reached the bank count as money out, so one still in flight is never treated as spent.

app.onerooflabs.com/payouts/ledger
Payout ledger
Week of Jul 21 · Pending → Approved → Paid
4 pending
Payable$12,965
Approved$6,180
Pending4
Paid · MTD$28,500
SubJobBasisAmountApprove
Alpine RoofingHvillard — 2841 Fenmore
GAF Timberline HDZ
24.5 sq × $92$2,254
Summit CrewOkafor — 119 Crestline
Standing seam metal
Flat per job$1,800
Ridgeline ProsBergstrom — 77 Alder Ct
Malarkey Vista
18.2 sq × $95$1,729
Cedar PeakNguyen — 5502 Birchwood
CertainTeed Landmark
6% of $16,700$1,002
Costs are frozen at settlement — a later rate edit cannot change these numbers.
05 · What a sub has to prove

Every sub swears they're covered. One of them isn't.

And you find out which one on the day something happens, because "we have their insurance" means a PDF somebody was emailed eighteen months ago and nobody has opened since.

Decide once what every subcontractor has to prove — mark each item Required, Conditional or Off, and set the minimums you'll actually accept. You don't start from an empty screen either: the catalog seeds itself the first time you open it, so an answer to "what do we require?" exists before anyone asks. W-9 and Proof of ID are always requested, so the essentials can't be switched off by accident.

And General Liability is not one number. A certificate can clear your each-occurrence minimum and still be short on products & completed operations — the coverage that answers for the roof after the crew has driven away. So all six limits are held separately, each with its own floor. If a GC contract makes you demand a coverage nobody else asks for, add it under your own name with your own minimums.

Changes apply to future invites; already-onboarded subs keep the checklist they agreed to.

app.onerooflabs.com/settings/subs/documents
Documents to request
Applied to new subcontractor invites
General LiabilityRequiredCond.Off
Each occurrence$1,000,000
General aggregate$2,000,000
Products / completed ops$2,000,000
Damage to rented premises$100,000
Medical expense$5,000
Personal & adv. injury$1,000,000
Workers' CompReq.ConditionalOff
Min. limitStatutory
Auto LiabilityRequiredCond.Off
Min. limit$500,000
UmbrellaReq.Cond.Off
Min. limit
Four seeded coverages · yours to change+ Add a coverage
Always requested — platform items W-9 · Proof of ID
06 · Coverage that lapses quietly

A certificate expires in March and nobody notices until August.

Because noticing means a person opening a PDF and reading dates, on a recurring day that does not exist in anybody's week.

Send one onboarding link and the sub uploads against the checklist you built. Each certificate is read into coverages, limits and dates on the way in, and a rule — not a model's opinion — decides whether it complies. Then it re-checks at 30 days, 14, 7 and the day it lapses: once each, so it warns you without becoming noise you learn to ignore.

And it tells you which line failed. A certificate that clears five of your six General Liability minimums comes back naming the one it missed and the gap, not a red X — because "not compliant" is where the argument with your sub starts, and the number is where it ends. A coverage the certificate itself marks N/A is counted as not provided, not quietly passed over.

Bank connection rides the same invite as a separate opt-in, not a document. Reading a certificate carries no fee of its own — $0 flat, with the model's token use billed at the published rate like everything else.

app.onerooflabs.com/subs/alpine-roofing/onboarding
Alpine Roofing Crew
Onboarding checklist
1 item pending
Overall progress4 of 5 complete
General Liability
Uploaded · 6 of 6 limits met
Exp 03/2027
!
Auto Liability
Uploaded · $500,000 limit
Expiring 30 days
Workers' Comp
Uploaded · statutory coverage
Verified
W-9
Signed & on file
Verified
Proof of ID
Photo ID · always requested
Pending
Link expires in 7 days

Rates go in once.
Friday stops being a reconstruction.

Month-to-month · every price published · your data stays yours.