Written Tutorial
Margin Lens takes your completed jobs and answers three questions:
How much money am I actually keeping on each job?
Which jobs are losing money, or haven't been invoiced at all?
Where is my data incomplete, so I know which numbers I can trust?
You'll find it under Reports → Job Costing → Margin Lens.
Before you start
Margin Lens uses data Ply already has: invoices and billed hours synced from your FSM (ServiceTitan, Housecall Pro, Jobber), plus the materials tracked in Ply through POs and purchases linked to each job.
If your margin looks off or a lot of jobs are flagged, the most common reason is missing data: jobs without invoices linked, without hours logged, or without materials tracked in Ply.
Three things to know before reading any number
These three rules explain almost every question people have about Margin Lens.
1. Margin is revenue minus what the job cost you
Margin = Revenue − Materials − Labor
Revenue is what you invoiced your customer for that job.
Materials are the material and equipment costs tracked in Ply for that job.
Labor is the billed hours on the job multiplied by your labor cost (see rule 3).
Example. A job invoiced at $464 with $72 in costs leaves you $392, an 84% margin.
2. A job needs an invoice to have a margin
If a job has costs but nothing invoiced, Ply can't calculate a margin for it, so it's left out of your average. It doesn't disappear though: Margin Lens flags it as Not Invoiced so you can follow up.
3. Labor cost is an estimate you set
Your FSM only syncs the hours you billed, not what each hour actually costs you. Ply knows a job had 2 billed hours, but not what you pay that technician. That's why you need to tell Ply how to calculate labor cost.
Click the gear icon in the top right corner of the report and choose one of two options:
Option | How it works |
Per hour | A fixed cost for every billed hour. The default is $85/hour. |
Percentage of billed labor | Labor cost is a percentage of what you charged for labor. |
Example. You billed $500 in labor and set the percentage to 40%. Your labor cost for that job is $200.
Keep in mind:
The same rate applies to every technician. You can't set a different cost for a senior and a junior tech.
It's based on billed hours, not worked hours. If a tech worked 4 hours but you billed 2, the report counts 2.
If you've never opened this setting, all your labor numbers are based on the $85 default.
The Margins tab
The summary cards
Card | What it means |
Blended Margin | Your average margin across all jobs, plus total profit over total revenue. |
Losing Money | Jobs where costs were higher than what you invoiced. |
Not Invoiced | Jobs with material costs but nothing invoiced. Work done, materials bought, no invoice linked. |
Labor Hours Missing | Jobs that were invoiced but have no hours logged, so labor cost can't be calculated. These are left out of your margin. |
No Cost Tracked | Jobs with no materials and no labor. Everything invoiced counts as profit. |
Not Invoiced is the most actionable card on this page. Every job there is money your team already spent, with nothing billed against it yet.
Example. 721 jobs with $157,000 in materials and no invoice linked. That's money you could be leaving on the table.
Click any card to filter the job table below and see exactly which jobs fall into that group.
Margin by Technician
Shows the margin for each technician, along with how many of their jobs have real costs logged.
Read the job count alongside the margin. If only a handful of a tech's jobs have costs tracked, their percentage isn't reliable yet.
Example. A technician shows a margin of −763%. Looks alarming, but filtering by that tech shows only 3 jobs that month:
One job had $179 in materials and only $21 invoiced.
The other two had $114 and $1,197 in materials, with nothing invoiced.
The problem isn't the technician, it's invoicing.
Click a technician to filter the whole report to their jobs. You can select more than one technician at a time.
Volume and Margin by Month
The bars show how many jobs were completed each month. The line shows your margin. Click a month to filter the whole report to that month (one month at a time).
The job table
For each job you'll see Revenue, Labor, Materials, Margin ($), Margin (%) and a cost breakdown. You can search for a specific job, and click any job to open its details: revenue, labor, materials and equipment, and estimated margin.
The Material Costs tab
This tab leaves revenue aside and focuses only on how much you spent on materials, per job and per technician, based on POs and purchases linked to each job in Ply.
Card | What it means |
Material Cost | Total spent on materials. |
Average per job | Average material cost, calculated only across jobs that have materials tracked. |
Jobs with materials tracked | How many of your jobs actually have material costs in Ply. |
You'll also find Material Costs by Technician, a monthly chart where the line shows the average material cost per job, and a job table sorted from highest to lowest material cost.
A drop in average material cost doesn't always mean you spent less. It can also mean you had more small jobs with materials tracked that month.
Using both tabs together
Start in Material Costs and pick the jobs with the highest material spend. Then search for those jobs in the Margins tab. If any of them show up as Not Invoiced, that's big money you haven't collected yet.
Why data quality matters here
Margin Lens is only as good as the data behind it. Three issues account for most confusing results:
Missing invoices. Jobs with costs but no invoice linked stay out of your margin and show up as Not Invoiced.
Missing hours. Labor usually comes from services in your FSM, and Ply doesn't sync services. If hours aren't logged on the job, its labor cost can't be calculated.
Untracked materials. Materials used on a job that never went through a PO or purchase in Ply won't show up as a cost, so the job looks more profitable than it really is.
None of these are problems with Margin Lens, they're gaps that Margin Lens surfaces. The more complete your data, the more accurate your margin.
Frequently asked questions
Why does a technician have a huge negative margin? Usually it's just a few jobs with materials and little or nothing invoiced. Filter by that technician and check the job table.
Why does my margin look too high? Check No Cost Tracked and Labor Hours Missing. Jobs without costs logged count everything as profit.
Why are so many jobs missing labor? Your FSM syncs billed hours, not services. If no hours were logged on the job, Ply can't calculate labor.
Can I set a different labor cost per technician? Not right now. The labor cost setting applies to all technicians.
Why doesn't a job with costs show a margin? It doesn't have an invoice linked yet. Margin only appears once a job has revenue.
Can I export Margin Lens? Not right now. You can adjust how many rows you see in the table.
Where to go next
Still have questions?








