Wash Attribution & Incentives

Wash Attribution & Cleaner Incentives

A wash can be marked done or not-found from several different places — the cleaner’s own phone, a team lead acting for a teammate, an admin at a desk, or the tasks board used on the ground. Every one of those paths now feeds the same two questions: who gets the incentive for this wash, and how much is it worth.

Where a status click can come from

Whoever physically taps the button is always recorded as-is — but when that person is a lead or an admin naming someone else as the one who actually did the job, the system records both: who clicked, and who the credit belongs to. Nothing is ever silently overwritten in favor of “whoever was logged in.”

Two different questions, kept separate

  • Who clicked — the real, physical person who tapped Done or Not Found. Always recorded, always accurate, useful for accountability.
  • Who gets credit — the cleaner the wash and its incentive actually belong to. Identical to “who clicked” in the normal case (a cleaner marking their own job). Different only when a lead or admin is marking a job on a teammate’s behalf.

Keeping these separate means a lead naming a teammate never has to choose between accurate bookkeeping and getting the right person paid — both are recorded, every time.

Where this shows up

  • Calendar — completed and not-found jobs show a small “by {name}” line, so an admin scanning the day’s board can see who actually did each job without opening it.
  • Tasks board — every Done / Not Found click prompts for the real cleaner (defaulting to whoever the board is currently acting as), instead of the old placeholder names that had no connection to a real account.
  • Wash history / audit log — the full chain of status changes for a wash, including who did it and who it was credited to when those differ.

Incentive weighting: waterless counts double

Not all washes take the same effort. A waterless wash counts as 2 toward a cleaner’s daily incentive count; a water-based wash counts as 1.

The wash type comes from the subscription’s plan for recurring washes, or from the service itself for one-time washes — either way, it’s the same underlying wash-type field the customer sees in the app, so there’s no separate “incentive type” that can drift out of sync with what was actually booked.

One count, computed the same way everywhere

Before this, the daily wash count that feeds payroll could be computed slightly differently depending on which screen triggered it — completing a job from the admin panel, from the app, bulk-completing several jobs, or manually syncing counts into a payroll spreadsheet. Every one of those now routes through the same calculation, so a cleaner’s daily total can no longer disagree with itself depending on where it was counted from.

Why this matters

Incentive pay is only fair if it’s traceable — a cleaner should be able to trust that the count they’re paid on reflects the jobs they actually did, weighted the way the business intends, regardless of which screen was used to close out the job. This closes the gap where a lead covering for a teammate could previously mean the credit silently went to the wrong person, or the wrong number.