> For the complete documentation index, see [llms.txt](https://help.rinsebase.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.rinsebase.com/reports-and-payroll.md).

# Reports and Payroll

This article covers the numbers side of running your cleaning business: the **Reports** page, the **Forecast** page, running payroll on the **Payroll** page, and approving crew mileage. It also explains how each figure is worked out, so you can reconcile it against your own books.

**Reports** and **Payroll** are owner-only. **Forecast** and **Mileage** are open to owners and managers.

## Reports

Go to **Reports** in the sidebar. Pick a period at the top (**This month**, **Last month**, **Last 30 days**, **Last 90 days**, **Year to date**, **All time**), then pick a tab. The tabs are **Overview**, **Revenue**, **Profit**, **Jobs**, **Quality**, **Clients**, **Crew**, **Retainers**, **Expenses** and **Exports**. **Profit**, **Quality**, **Crew** and the **Churn risk** table on **Clients** are on the Growth plan and up; the rest are on every plan.

Things that apply to every tab:

* **"vs prev" deltas** compare against the previous period of the same length: Last month against the month before, Last 30 days against the 30 days before that. Year to date compares against the same stretch of last year. All time has no comparison.
* **Invoice figures** use invoices *created* in the period. Jobs use the scheduled date.
* **Demo data** from sample jobs is left out of revenue and profit figures.

### Overview

* **Revenue collected**: amount paid on invoices created in the period.
* **Jobs completed**: jobs in the period with status completed.
* **New clients**: clients added in the period.
* **Avg job value**: revenue collected divided by jobs completed.
* **Outstanding**: open balance on sent, viewed, partly paid and overdue invoices.
* **Overdue**: open balance on invoices past their due date (not paid, void or draft).
* **Avg days to pay**: average days from creating an invoice to its payment, for paid invoices.
* **Completion rate**: completed jobs as a share of all jobs in the period.

Below the cards: **Monthly revenue — last 12 months** (invoiced and collected by the month each invoice was created), **Jobs by service type**, **Invoice aging**, **Client breakdown**, **Crew summary**, **Top clients by revenue** and **Top properties by jobs completed**.

### Invoice aging

Unpaid invoices from the period (not paid, void or draft), grouped by how far past due they are:

| Bucket                 | Means                                      |
| ---------------------- | ------------------------------------------ |
| **Current (not due)**  | No due date, or the due date hasn't passed |
| **1–30 days overdue**  | Due date 1 to 30 days ago                  |
| **31–60 days overdue** | Due date 31 to 60 days ago                 |
| **60+ days overdue**   | Due date more than 60 days ago             |

Each bucket adds up the open balance (what's left after payments and credits), not the invoice total.

### Revenue

**Collected**, **Invoiced** (total of invoices created in the period), **Outstanding** and **Overdue**, the 12-month chart, invoice aging, **Avg days to pay**, and a table of the period's invoices with total, paid, balance, status, due date and paid date.

### Profit

Profit by property for **completed cleans** in the period. Each row shows **Cleans**, **Revenue**, **Crew**, **Supplies**, **Travel**, **Rework**, **Job costs**, **Overhead**, **Profit** and **Margin**, with an **All properties** total. The properties losing the most money are listed first and flagged with ⚠.

Where each column comes from:

| Column        | Source                                                                                                                                   |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Revenue**   | Each clean's invoice total after credits. Drafts count, voids don't. A clean billed on a period invoice counts its own lines, before tax |
| **Crew**      | The same pay calculation payroll uses, per clean                                                                                         |
| **Supplies**  | Supplies logged on the clean × the unit cost on your supply list. Items with no unit cost aren't counted                                 |
| **Travel**    | Mileage logged against the clean (its reimbursement, or miles × your mileage rate)                                                       |
| **Rework**    | Extra costs you recorded on defects. Rework minutes are shown but not priced, because that time is already in crew pay                   |
| **Job costs** | Expense entries tied to a specific clean                                                                                                 |
| **Overhead**  | Your monthly running costs, spread evenly over every completed clean                                                                     |

**Overhead** comes from **Monthly running costs** at the bottom of the tab. Click **Add running costs**, then enter a name, a category (Rent, Insurance, Software, Vehicles, Admin pay, Marketing, Utilities, Other) and a monthly amount. Amounts are prorated by the days in the period, up to today. So if you look on the 8th of the month, only eight days of running costs are counted. Every clean carries the same share, which means lower-priced properties take a bigger hit from overhead than higher-priced ones.

When a cost changes, end the old one and add a new one. Ending a cost stops it from today, and past periods keep it.

Until you add running costs, the headline reads **After measured costs** instead of **Profit**, and **Margin** shows "—". A box under the table lists every cost line with nothing recorded in the period, and tells you how many cleans have no invoice yet. Those properties show costs but no revenue, so they look worse than they really are.

Expenses you add on the **Expenses** tab aren't tied to a clean, so they don't show up in any property's row.

### Jobs

**Total jobs**, **Completed**, **Cancelled** and **Avg duration** (scheduled start to end for completed jobs, not clocked time). Then a status breakdown with completion, cancellation and turnover percentages, **Busiest days** (completed jobs by weekday), **By service type**, and a table of the period's jobs.

### Quality

Headline counts: **Completed jobs**, **Guest-ready releases**, **Defects logged**, **Rework** and **Time to correction**. Then control bands, each shown with what it's measured against: **First-pass yield**, **Reclean / rework rate**, **Critical defects**, **Inspection pass rate**, **Photo / evidence compliance**, **Worst repeat defect** and **Corrective-action closure**. When there's data, you also get **The inspection sample**, **Which layer caught it** and **Root causes**.

If more than 10 jobs were completed and no defects were logged, the tab warns you that nobody may be reporting defects. It also warns you when a quarter or more of defects were caught by a client or guest.

### Clients

* **Active clients**: clients not marked inactive.
* **New this period**: clients added in the period.
* **Churn risk**: active clients with no clean in the period that falls within the last 60 days. On a short period like This month, that's every active client without a clean this month.
* **Pending leads**: pending booking requests (from the 50 most recent).

The **! Churn risk — no job in 60+ days** table lists those clients, each with a **→ Re-engage** button that sends them a win-back email. The tab also shows **Top clients by revenue** (amount collected), **Top properties** and **Acquisition sources**. On Overview, **Recurring** means clients with 2 or more jobs in the period, and **One-time** means clients with exactly one.

### Crew

**Active crew**, **Total hours logged** (clocked time in the period), **Est. payroll** and **Jobs completed**. The **Crew performance** table ranks crew by completed jobs and shows **Jobs**, **Completed**, **Turnovers**, **Hours**, **Est. earnings** and **Workload**.

* **Est. earnings** is a quick estimate: hours × hourly rate for hourly crew, and completed jobs × per-job rate for per-job crew. It shows "—" for every other pay type. For what you actually owe, use the **Payroll** page.
* **Workload** is each person's completed jobs as a percentage of your top performer's completed jobs. It isn't a percentage of available hours.

### Retainers

* **Monthly recurring revenue**: total of your active retainers.
* **Paused (at-risk MRR)**: total of your paused retainers.
* **Churn**: retainers cancelled during the period.
* **Billing in next 7 days**: active retainers due to bill in the next week.

The tab also lists retainers overdue for billing, **MRR by service**, **Top clients by retainer MRR**, **Upcoming bills — next 30 days**, and the retainers cancelled in the period.

### Expenses

Business spend for the period: **Total spent**, **Laundromat**, **Supplies** and **Entries**. Laundromat runs come in automatically from the crew's laundry cash form (amount spent = starting card balance + cash loaded − ending balance). Runs with missing figures show a blank amount and aren't counted in the totals. Supply purchases you record with a cost in the Supply closet also appear here.

To add one yourself, use **Add expense**: date, category (Supplies, Laundry, Fuel, Equipment, Other), amount and description, then **+ Add**. Expenses never feed into payroll.

### Exports

| Export                | What's in it                                                                                                                                                   |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **QuickBooks Online** | Every invoice except drafts and voids, one row per line item, with tax as its own Sales Tax row                                                                |
| **Revenue summary**   | Every invoice with status, total, paid, balance and paid date                                                                                                  |
| **Jobs report**       | Your most recent 1,000 jobs with client, address, service, crew, scheduled duration and status                                                                 |
| **Client list**       | Clients with contact details, their first property, source and status                                                                                          |
| **Payroll report**    | One row per crew assignment, with date, client, address and job status                                                                                         |
| **Cleans & pay**      | Every completed clean in the period with what you charged, crew pay, margin after crew pay and invoice status. Includes a total and a pay total per contractor |
| **Expenses report**   | The period's expenses, shaped for a QuickBooks expense import                                                                                                  |

Only **Cleans & pay** and **Expenses report** follow the period you selected. The others export everything.

**Cleans & pay** is built for weekly reconciliation. It flags breaks (**NOT INVOICED**, **NO CREW PAY**) instead of filling in $0. Its pay total matches the payroll calculation for the same dates, and it includes paid inspections or tasks so the total still ties out. For pay amounts, use this export or the exports on the **Payroll** page. The **Payroll report** here doesn't carry calculated pay.

To import the QuickBooks CSV, go to **Sales → Invoices → Import invoices** in QuickBooks and upload the file. Customer names must match your QuickBooks customers exactly. If QuickBooks or Xero is connected under **Settings → Integrations**, invoices sync without a CSV.

## Forecast

**Forecast** in the sidebar shows your upcoming cleans and what they're worth, looking ahead from today. Cleans are counted from three places:

* **Booked**: one clean on each checkout day from the calendars synced for the properties you clean.
* **Scheduled**: residential, commercial and manual cleans that have no booking behind them.
* **Contract**: future dates on recurring series. Recurring jobs are only created about eight weeks ahead, so dates beyond that are projected from the series until it ends.

Owner blocks, laundry runs and tasks aren't counted.

**Forecasted revenue** shows **Rest of this month**, **Rest of this year** and **Next 12 months**. Each clean is priced from the first of these that exists: the clean's quoted price, the property's price list, the property's typical recent price, or your typical price across the business. Cleans with no price still count toward volume but add $0, and the card tells you how many there are. Set property pricing to include them.

The **after crew pay** figure uses each property's flat crew rate only. It leaves out overhead, supplies, travel, admin and taxes. Properties without a crew rate are left out of the margin (it shows **Crew pay not set** when none have one). If any property pays more in crew pay than it bills, a warning lists it with the loss per clean.

Also on the page:

* **Season outlook · next 12 months**, with your peak staffing day.
* A **Calendar** or **Table** view of each month, with cleans, back-to-backs, arrivals, in-house stays, teams needed and estimated revenue.
* **Team capacity** settings (**Cleans / team / day**, default 4; **Same-day turns / team**, default 2). Teams needed is whichever is higher: cleans ÷ cleans per team, or back-to-backs ÷ turns per team.

## Payroll

### Pay period

Go to **Payroll** in the sidebar. The date range at the top is the pay period. It defaults to Sunday–Saturday until you set a schedule. Use **‹** and **›** to step one period back or forward, or pick any start and end date. **📌 Set as pay schedule** saves the range's length and start day, and the page opens on the matching period from then on.

### What's in each person's pay

Each crew member's total is labor + approved mileage + laundry bonus + tips + bonuses and adjustments. Labor depends on their pay type:

| Pay type                                | How labor is worked out                                                                                     |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Hourly (all jobs)**                   | Clocked hours × hourly rate. A property with a flat crew rate pays that rate instead                        |
| **Flat rate (all jobs)**                | The property's crew rate for each clean, falling back to the crew member's own flat rate                    |
| **Salary or fixed recurring fee**       | Annual salary ÷ 52 × weeks in the period                                                                    |
| **Mixed — hourly + turnover flat rate** | Turnovers and flat-rate properties pay flat; everything else is hourly                                      |
| **Mixed — hourly + turnover % share**   | Turnovers pay their % of the clean's price, split across the crew who clocked in; everything else is hourly |
| **Revenue share (% of each clean)**     | Their % of each clean's price, split across the crew who clocked in                                         |

* **Price for revenue share** is what the clean is invoiced at, before tax and any promo code: the property's price for the service, else the quoted price, else your **Settings → Pricing** formula (with its turnover, weekend and tight-window surcharges), else the service's base price, else the linked quote. The pet fee is added when one applied. Hover over a clean's **Revenue** in **Pay by clean** to see which one it came from.
* **Lead pay**: a property's lead rate or lead bonus goes to whoever is lead on the clean.
* **Mileage** counts only once approved.
* **Laundry bonus** is paid per bag or per property for each laundry destination, based on your rates in **Settings → Company** (Pro plan and up).
* **Tips** are client tips recorded in the period.

**Overlapping clock-ins are paid once.** If someone is clocked into two jobs at the same time, such as a clean and its inspection, the overlapping minutes are paid on one entry only. Hover over the time entry to see this.

### Checking and editing pay

Click a crew member to open their row:

* **💵 Pay by clean** lists every clean with **Revenue**, **Rate**, **Wage**, **Extras** and **Total**. Click **✏ Edit** on a clean to change its **Revenue $**, **Pay rate %** and **Split ÷** (revenue share), **Pay for this clean $**, **Extras $** or **Note**, or tick **Don't pay for this clean**. On a team clean paid by revenue share, **Share of this clean** splits it unevenly (for example 20% / 80%). **Reset to calculated** removes your edit.
* **⏱ Time entries** shows each clock-in and clock-out with the checklist tasks completed. **✏ Edit** changes the times.
* **Mileage** lists the period's trips. You can edit miles and amount here too.
* **⭐ Bonuses & adjustments**: click **⭐ Bonus** on any row (even someone with no hours) to add an amount, note and date. Use a negative amount for a deduction.

To add time someone forgot to log, click **+ Add time entry**. Pick the crew member, an optional job, the clock-in and clock-out times, and a note.

### Approving payroll

Until you approve it, the period is a **Draft payroll**. The **✓ Approve** button on a single crew row approves that person's pending time entries and mileage, and marks their tips paid. It doesn't lock anything.

**✓ Approve payroll** approves the whole period:

1. It records each crew member's labor, hours, mileage, laundry bonus, tips and adjustments, plus every clean's pay line.
2. It approves any time and mileage still pending in the period, including flagged trips, and marks tips as paid. Sort out flagged mileage before you approve.
3. It locks pay for every clean in the period. Pay edits open read-only after this.

If the period hasn't ended yet, you get a warning. Anything logged after approval isn't in what was recorded as paid. The page lists those differences under **Crew pay changed after this period was closed**. Add them as a bonus in your next period.

### Exporting payroll

Click **↓ Export payroll**. Exports work on every plan.

* **Summary CSV**: one row per crew member with 15 columns: Employee, Role, Pay Type, Hours, Jobs, Labor, Miles, Mileage, Laundry Bags, Laundry Bonus, On-site Laundry Jobs, Tips, Adjustments, Total, Status.
* **Detailed CSV**: every time entry and mileage trip.
* **Laundry expenses**: laundromat spend per run as a QuickBooks expense CSV (only when there are runs).
* **Payroll provider templates**: **Gusto**, **QuickBooks**, **ADP RUN**, **Paychex** and **Square**. These carry hours, labor and mileage reimbursement (Square carries hours and reimbursement only). Tips, laundry bonus and adjustments aren't in them, so add those in your provider. For ADP and Paychex, you match each crew member to their File # or Worker ID on the first upload.

### Push to Gusto (Growth plan and up)

Connect Gusto under **Settings → Integrations**, then click **↻ Match crew to Gusto** to match crew to Gusto employees by email. Anyone who isn't matched is skipped when you push, so match them there.

After approving a period, click **💸 Push to Gusto**. It fills your *open* Gusto payroll for the same dates:

* **Hourly crew**: hours only. Gusto applies its own rate.
* **Other crew who aren't on salary**: their labor amount as a fixed earning.
* **Salaried crew**: nothing is sent, because Gusto pays their salary.

Mileage isn't sent. Gusto has no way to add a one-off reimbursement, and sending it as a bonus would tax it. The result message lists each person's unsent mileage so you can add it in Gusto. Tips, laundry bonus and adjustments aren't sent either.

Nothing is submitted for you: you review the payroll and run it in Gusto. Pushing again overwrites the same numbers rather than adding to them.

### Post to QuickBooks (Growth plan and up)

After approving, **📒 Post to QuickBooks** books the period as one journal entry. It debits a **Crew Payroll** expense account (wages and adjustments, tips, laundry bonus and mileage on separate lines) and credits a **Payroll Clearing** liability account, which you reconcile against what you actually paid. Rinsebase creates both accounts if they don't exist. Each period can be posted once.

## Mileage

Go to **Mileage** in the sidebar to review trips logged by your crew, or click **+ Log trip** to add one.

* **Cards**: **Total miles**, **Pending approval**, **Pending amount** and **Total reimbursed** (approved trips).
* **Filters**: **All**, **Pending**, **Approved** and **Flagged**, plus a crew filter. The list shows the 200 most recent trips.
* **Approve** includes a trip in payroll. **✓ Approve all** approves every pending trip that matches the current filter.
* **Flag** marks a trip for review and takes it out of Pending. Approving a flagged trip clears the flag.
* **Edit** (trips not yet approved) changes the miles and the reimbursement amount. Changing miles recalculates the amount at your current rate.
* **↓ Export CSV** downloads the filtered list.

The reimbursement rate comes from **Mileage rate ($/mile)** in **Settings → Company**. If none is set, the default rate of $0.67 per mile is used. Each trip keeps the amount worked out when it was logged, so changing the rate doesn't change existing trips.

## Related

* [Billing and Payments](/billing-and-payments.md)
* [Crew Management](/crew-management.md)
* [Settings](/settings.md)
* [Clients and Properties](/clients-and-properties.md)
