Report Metric Definitions
This article explains where report numbers come from in MaidCentral Pulse. It covers how quickly numbers update, why a metric may not match a hand calculation, and the difference between billed, collected, and projected revenue.
Do report numbers update live, or only after payroll or invoicing closes?
Most reports read live data. They do not wait for payroll or invoicing to close. When you open a report like Sales KPIs, Revenue Production Planning, or Employee Stats, the system calculates the numbers from your current jobs, quotes, timesheets, and invoices at that moment. If someone books a quote or closes a job, the change shows up the next time the report loads.
Two things can make a number look slightly behind:
- Short-term caching. Some busy reports keep results for a very short time so the page loads fast. Sales KPIs, for example, reuses results for about one minute. Click Refresh on the report toolbar to force a fresh calculation.
- Your browser's cached view. Returning to a tab does not reload report data, and a page reload can restore recently viewed numbers instead of fetching new ones. When you need certainty, use the report's own Refresh button — it always fetches fresh data.
Analytics reports update on a schedule, not instantly. Each report is tagged with its data source, and you can see the tag in the report catalog: Real-time reports read your live data, while Data Warehouse reports show an "up to 24h delay" note. Warehouse-backed pages include Revenue Analytics, Profitability, Operations, Job Metrics, Stats by Week, Dispatch Summary, and the Franchise KPI reports. In practice the warehouse syncs from your live data several times a day — roughly every four hours, with a deeper sweep overnight — so the delay is usually a few hours, and up to a day at worst. A job you closed ten minutes ago will appear in real-time reports right away, but not yet on these analytics pages.
Most reports do not wait for payroll or invoicing to close. They show whatever data exists for the date range you pick. The exception is Core KPIs, which are built from closed payroll weeks. See How are the Core KPIs calculated?. This means a report you run mid-week can change by the end of the week as more jobs close and more payments post.
What do the hours and staffing terms mean?
| Term | What it means | Where you see it |
|---|---|---|
| Allowed Hours | The hours a job is budgeted for, from the service's estimate. It is the time the job should take, not the time it took. | Revenue Production Planning, job and technician pages |
| Scheduled Hours | The working hours your employees are scheduled for on their team schedules. It is your available capacity. | Revenue Production Planning |
| Utilization | Allowed Hours divided by Scheduled Hours. Over 100% means more work is booked than your staff can cover. | Revenue Production Planning |
| Unused Hours | Scheduled Hours minus Allowed Hours. A positive number is spare capacity. A negative number means you are overbooked. Scheduled Hours is adjusted first by each scope's Efficiency Factor (set under the scope's Pay Settings). | Revenue Production Planning |
| Actual Hours | The time technicians really clocked on the job. | Job and technician pages, Employee Stats |
| Productivity | Allowed Hours divided by Actual Hours. Over 100% means the job took less time than budgeted. | Technician Jobs tab |
| Clock Hours | Total time clocked in for the day, including drive time and breaks. | Employee Stats |
| Efficiency | Job Hours divided by Clock Hours, capped at 100%. It shows how much of a person's clocked time was spent on jobs. | Employee Stats |
| NPT (non-productive time) | Clock time minus job time: paid time not spent cleaning, such as driving and waiting. | Employee Stats, Team Mileage |
| NPT Factor | How your actual NPT compares to the NPT you planned for. 100% means you used exactly the planned NPT. Above 100% means less NPT than planned. Below 100% means more. It is green at 100% or more, yellow from 80% to 99%, and red under 80%. | Employee Stats |
| NPT Diff | Actual NPT minus planned NPT, in hours and minutes. Red means over plan and green means under plan. | Employee Stats |
| Attendance | 100% minus days absent (unexcused, excused and time off) plus half a point for each day late, divided by days worked. It never goes below 0% or above 100%. | Employee Stats, technician Time & Attendance tab |
Example: a team is scheduled for 40 hours and has 32 allowed hours booked. Utilization is 80% and Unused Hours is 8. A technician who clocks 8 hours and spends 6 on jobs has an Efficiency of 75% and 2 hours of NPT.
Some employees show no NPT Factor. Office staff, for example, have scheduled hours but no planned job time, so there is nothing to score.
How are the Core KPIs calculated?
The Core KPIs tab on Office > Reports is built from your closed payroll weeks, not live data. A week only shows up after payroll for that week is closed, and the numbers are totals or averages over the weeks you choose with the week count and Weeks Ending On controls.
| KPI | How it is calculated |
|---|---|
| Avg Bill Per Cleaning | Total revenue divided by total jobs |
| Avg Quotes Per Week | Total quotes divided by the number of weeks |
| Avg Close Rate Per Week | Recurring sales divided by quotes, over all the weeks. It counts recurring sales only. |
| Cleanings Per Home Per Month | Jobs per week, times 4.333, divided by the average number of recurring homes |
| Revenue Per Technician Per Day | Total revenue divided by total days technicians worked |
| Direct Payroll % to Revenue | Total payroll divided by total revenue |
| Monthly Cost Less Direct Payroll | Average of the Monthly Cost you enter on the card, over the weeks in your range that have one entered. Weeks with nothing entered are skipped, not counted as zero. |
| Home Churn Rate | Recurring homes lost per week, times the months in the range, divided by recurring homes at the start |
| Avg Skipped Cleanings Per Day | (Skipped jobs + lockout jobs) divided by (completed + skipped + lockout jobs). It is a share of jobs, not a count per day. |
| Absentee Rate Per Day | (Excused + unexcused + time-off days) divided by (days worked + those absent days) |
| Avg Technician Turnover Per Year | Technicians lost per week, times 4.333, divided by current technicians, times 12 |
| Avg Technicians Hired Per Month | Technicians hired per week, times 4.333 |
| Avg # of FTE Cleaning Technicians | Total days worked, divided by the number of weeks, divided by 5 |
| Recurring Homes at Start | Recurring homes in the first week of the range |
Hover over a KPI card to see its formula with your own numbers filled in.
How do I enter the Monthly Cost for Core KPIs?
The Monthly Cost Less Direct Payroll card has a pencil icon if your role is allowed to enter it. Click the pencil, type an amount for the week selected in Weeks Ending On, and save. The value is saved for that payroll week only, but each later payroll close carries the most recent entry forward automatically, so you only need to update it when the cost changes. Clear the field and save to remove a week's value.
Why don't the Core KPI and Sales KPI close rates match?
They measure different things:
- Core KPIs close rate is recurring sales divided by quotes, added up over your closed payroll weeks.
- Sales KPIs follows the leads created in your date range and counts how many of the quoted ones booked recurring service. See Find Your Recurring Close Rate.
A lead created in one week that books in the next is counted differently by each report. Pick one report and use it consistently to track trends.
Why doesn't a metric match my hand calculation?
Almost every mismatch comes down to inclusion rules — the report counts a slightly different set of records than you did, or measures them a different way. Here are the rules for the metrics people check by hand most often.
Average actual hours (Rate Increases)
The Rate Increases tool shows an Avg Actual Hours value for each service set. Three rules make it hard to match by hand:
- Only closed jobs count. Pending, cancelled, and skipped jobs are never included. If you set a Job History Date Range in the wizard, only closed jobs inside that window count.
- Hours are the whole team's time, added together. If two cleaners each spent 1.5 hours on a job, that job contributes 3 hours — not 1.5. The report measures total labor on the job, not one person's time.
- Jobs with no completed clock time still count in the average. A closed job where no one clocked out contributes zero hours but still adds one to the job count. This pulls the average down compared to a hand calculation that skips those jobs.
The wizard also has Include in Calculations checkboxes for first-time jobs, redo jobs, trainee jobs, and time-rate-mod jobs. Unchecking any of these removes those jobs from the average. There is also a Normalized Avg Actual Hours value: it weights each cleaner's time by their productivity score, and it skips any job where a team member has no productivity history for that service type. The normalized value and the plain average can differ for the same service set — that is expected. A row with no productivity history for one of its team members shows an Estimated tag next to the normalized value — read it with care, since it rests on an assumed productivity score rather than a measured one.
The same normalized-hours idea also appears as Team Productivity, Norm. Act. Hrs and similar columns on the Dispatch tab and the Service Set Pricing report, if your company has team productivity reporting turned on. See Service Set Pricing and Profitability for what those columns mean.
Why did a Rate Increase value change since I last looked?
Rate Increase previews are recalculated from job history every time you run the wizard. They are not saved snapshots. As new jobs close, the average hours shift, and any rate that is calculated from hours shifts with them. Changing the Job History Date Range or the include/exclude checkboxes also changes the result.
The History tab records each executed rate change, but its revenue figure is also live: the actual additional revenue for a change is the rate difference multiplied by the number of jobs that have closed under the new rate so far. That number grows over time as more jobs close, and its window ends when a newer rate change starts. So it is normal to see a different value today than last week — nothing was edited; more jobs simply closed.
Why doesn't Dashboard revenue match Revenue Production Planning?
They count different jobs over different dates. Both price a job the same way: the base rate in effect on the job date plus one-time and recurring add-ons.
| Dashboard Revenue card | Revenue Production Planning report | |
|---|---|---|
| Jobs included | Closed jobs, plus Pending jobs someone has clocked out of. Pending jobs nobody has worked yet are left out. | Every Closed and Pending job, including future jobs nobody has worked yet |
| Date window | The last 4 complete Monday–Sunday weeks, ending last Sunday, for the branch you have selected. Today is never included. | The dates you pick (the current calendar month by default). With more than one branch, the report shows each branch plus a Total. |
| What it means | Revenue from work your teams actually did | Revenue on the books: done plus still scheduled |
Use the Dashboard to see how recent weeks went. Use Revenue Production Planning to plan ahead. To compare them, set the report to the same four weeks shown on the Dashboard and look at the same branch; the report will still be higher by any Pending jobs in those weeks that nobody worked. See Revenue Production Planning and Overview Dashboard.
Revenue Production Planning
- Only jobs with a Closed or Pending status count. Cancelled and skipped jobs never appear in the job counts or revenue.
- Revenue per job is the base rate plus any one-time and recurring add-ons for that job's date. It is the scheduled amount, not what was invoiced or paid.
- Zero-dollar jobs are included. A job priced at $0 still counts as a job; it just adds nothing to revenue. If you divide revenue by jobs to get an average, your average will include those jobs.
Employee Stats
- Efficiency is capped at 100%. Job hours divided by clock hours never shows above 100%, even when raw math would.
- Only completed time records count toward hours. A shift or job time entry with no clock-out contributes no hours. Job counts do not apply that same filter, so an employee's jobs and job hours can come from slightly different record sets.
- Paid time can start later than the clock-in. When a scheduled work start time is later than the actual clock-in, hours are measured from the work start time. Raw clock-in to clock-out math will overstate the hours.
- Unscored employees are left out of footer averages. Someone with no planned clock time or no planned job time (office staff, for example) shows no score, and the totals row averages only the scored rows. A hand average across all rows will not match.
Average hours on analytics pages
Analytics-suite averages are often per time entry, not per job. An "Avg Actual Hours" figure there averages one row per person per job. A job cleaned by three technicians contributes three entries. If you averaged per job by hand, you will get a different — usually higher — number than the per-person average.
Percentage metrics with zero in the denominator
Reports skip percentage math when the base number is zero. Week In Review, for example, only computes revenue-percentage figures for weeks that have both revenue and payroll. A blank or dash is deliberate — it means "cannot be calculated," not "zero."
If a number still looks wrong after checking these rules, click into the detail. Many reports let you drill into the records behind a figure — Sales KPIs opens a record list when you click a summary number. Comparing that list to your own list usually reveals which records the report included or excluded.
Billed vs collected vs projected revenue — what's the difference?
These are three different measurements, and they can legitimately show three different amounts for the same period.
| Term | What it counts | Where you see it |
|---|---|---|
| Billed | The total of invoices issued during the period | Billed vs Collected widget on the Dashboard |
| Collected | Payments actually received during the period (voided payments excluded) | Billed vs Collected widget on the Dashboard |
| Projected | Revenue from booked jobs that have not happened yet | Projected Revenue on the Franchise KPI report; scheduled revenue in Revenue Production Planning |
Billed answers "how much did we invoice?" It sums invoice totals by their issue date. Collected answers "how much cash came in?" It sums payments by their payment date, skipping voided payments. These rarely match for the same window, because a payment often lands days or weeks after its invoice — a strong January can be billed in January and collected in February. The widget also shows a collection rate (collected divided by billed) and the gap between the two. Both figures count invoices issued and payments recorded in Pulse.
One important habit to build: on most report pages, "revenue" means the job's bill rate — the base rate plus add-ons, less discounts — measured by the job's service date. It is not the invoiced amount and not the collected amount. Revenue Analytics, Stats by Week, Revenue Production Planning, and the Franchise KPI revenue columns all work this way. If you compare a revenue report against your accounting totals, expect differences: the report counts what jobs were worth, while accounting counts what was invoiced or paid.
Projected looks forward. On the Franchise KPI report, Projected Revenue is the value of pending jobs with dates still in the future — the book as it is scheduled today, not a statistical forecast. Total Projected Revenue adds what has already been earned in the period to that future book: "if every scheduled job completes, this is your period revenue." Revenue from cancelled, skipped, and lock-out jobs is excluded, since it is already lost. Revenue Production Planning shows the same idea for planning: the scheduled revenue of Closed and Pending jobs in your date range. Goal tracking uses the same family of forecast metrics — Scheduled Revenue (all non-cancelled, non-skipped jobs in the period), Remaining Scheduled Revenue (pending jobs not yet worked), and Projected End-of-Period Revenue (actual revenue so far plus the remaining schedule).
So for one month you might see: $80,000 projected at the start, $78,500 billed by the end (a few jobs cancelled), and $71,000 collected (some invoices unpaid). All three numbers are correct — they measure different things at different points in the money's journey.
Tips
- Run reports after the day's work settles if you compare them day to day. A mid-morning run and an end-of-day run can differ simply because more jobs closed.
- Use the Refresh button before trusting a number in a meeting. It clears the short-term cache and recalculates.
- Drill into totals when a figure looks off. The record list behind the number is the fastest way to spot an inclusion-rule difference.
- Expect analytics pages to lag a few hours. For up-to-the-minute answers, use the live report pages instead.
Related Articles
- Why Is a Record Missing from My Report? — Date ranges, status filters, and branch scoping
- Exporting Report Data — Where export lives and what ends up in the file
- Rate Increases — How the rate wizard calculates hours and new rates
- Revenue Production Planning — Scheduled revenue and capacity in detail