Margin Analysis

Read V2's Margins report, including estimated and subcontractor-payout-adjusted costs, callback leakage, and cost coverage across four verticals.

IntermediateownermanagerUpdated 2026-09-22

Margin Analysis

Open Business > Reports, then the Margins card, or go straight to /reports/margins. It has its own page and report-tab entry, and shows revenue, cost, gross profit, and gross margin for the selected range, broken down by module (Residential, Commercial, Holiday Lights, and Generic quote). The report also separates the original estimate-based cost from a cost view that incorporates matched approved or paid subcontractor payouts.

Screenshot placeholder
Margin analysis report showing revenue, cost, and gross margin by module

What It Tracks

The summary line shows:

  • Revenue: the accepted total for every estimate sold in the range
  • Estimated cost: the sold total's cost, read from the same cost engine

that priced the job

  • Gross profit and Gross margin: revenue minus cost, and that profit

as a percentage of revenue

  • Sold-to-job conversion: how many of the range's sold estimates have a

real job linked to them

  • Callback leakage: how many sold jobs in the range were flagged as

callback or rework, their revenue, and an estimated leakage dollar figure

Below that, a table breaks the same four figures out by module.


Cost Coverage

Cost is only available for estimates the pricing engine actually costed at send time. All four verticals now have a cost engine: residential, commercial, and Holiday Lights already froze a costing snapshot on send, and generic quotes now do too, priced from each line's price-book catalog link and its unit cost. A generic quote line with no price-book link, or one whose catalog row has no unit cost set, marks the whole quote's cost unsupported rather than costing that line at zero. Once frozen at send time, a snapshot never changes afterward, even if the price book or job pay settings change later.

A module row (or the whole-range total) only shows a real cost, profit, and margin number once every sold estimate in it has cost data; otherwise it shows a dash rather than a number that looks priced but isn't. The note under the table says how many of the range's sold estimates that covers, for example "Cost data for 12 of 40 sold."

This replaces V1's per-module crew-day cost model and its per-org cost-settings tables, which V2 does not have. It is a stricter standard than V1 used: V1 always showed a margin number, even a wrong one, when its cost model had gaps; V2 shows a dash instead of guessing.

Cost with subcontractor payouts

The report's Cost with subcontractor payouts card uses approved and paid payout records that match jobs linked to sold estimates. For matched work, it replaces the estimated crew-pay portion with those recorded payout amounts. Materials, franchise fees, and any unmatched or unrecorded work remain estimates. Pending or disputed payout records are not counted. The report shows how many sold estimates have matched payouts, remain estimated, or are unavailable; if required costing or job matches are incomplete, the total shows a dash.

This is a mixed-basis adjusted estimate, not actual cost, profit, or accounting margin. Payout records document external payments; Clean Estimate does not move the funds. See Managing Subcontractors for recording payout status.


Callback Leakage

Callback leakage now shows real figures instead of "not available," read from each job's own pay settings (the same Callback / rework flag used on Crew Pay) joined onto this report's sold, job-linked rows:

  • The count of sold jobs in the range flagged as callback or rework, and

that count's share of every sold job in the range

  • Their combined revenue (the accepted total for those jobs)
  • An estimated leakage figure: 35% of those jobs' own estimated cost,

V1's own leakage formula. A callback job counts toward the count and revenue even without cost data yet; it just contributes nothing to the leakage dollar figure until it has one, the same honest-partial-data handling the rest of this report uses.

V2 only has the explicit Callback / rework flag; it has no equivalent of V1's inferred, notes-based callback detection, so a job is counted here only when that flag is explicitly set. Set it from the office job detail page: the Callback / rework checkbox (requires the Manage team permission) saves the flag on that job's pay settings without touching its other pay overrides, and the next Margins run counts the job here.


Sold-to-Job Conversion

The conversion figure shows how many of the range's sold estimates have a job linked back to them, for example "8 of 12 sold linked to a job." Unlinked sold work points to a scheduling or workflow gap, the same read V1 gave this number.


Best Uses

  • Watch gross margin trend by module once a module has full cost coverage
  • Use sold-to-job conversion to catch sold work that never made it onto the

schedule

  • Watch callback leakage once jobs are being flagged, to see how much of a

crew's cost is going toward rework rather than new work

  • Export the report (margin_analysis) to work the numbers in a spreadsheet;

see Reporting Overview

Was this article helpful?

Still need help? Contact support