Capsa builds the revenue forecast as a layered ledger. The safest dollars come first: revenue already earned, work already performed, and work already on the schedule. The least certain dollars come last: open pipeline, weighted by how likely it is to close and when the work is likely to be produced.
The point is not to make the future look precise. The point is to separate known work from expected work, then make every assumption visible enough that an operator can challenge it.
The five layers
| Layer | What we pull | How dollars are calculated | Confidence |
|---|---|---|---|
| Earned actuals | Earned-revenue events already recognized on work tickets. | Sum earned revenue by month, branch, and division. | Actual |
| Pending acceptance | Unaccepted labor time on open or scheduled tickets from the current and prior month. | Estimate value from pending hours as a share of remaining ticket revenue. | Medium |
| Scheduled work | Future schedule-board hours on work tickets. | Take remaining ticket revenue, subtract pending value, then allocate by scheduled-hour share. | High |
| Backlog | Open or scheduled tickets that are not yet on the future schedule. | Spread remaining ticket revenue from the expected work date across estimated duration. | Medium |
| Pipeline | Open opportunities in the configured statuses and opportunity types. | Estimated price times close probability, then spread by expected production timing. | Lower |
That ordering matters. Pending acceptance reduces the remaining revenue available to scheduled work and backlog. Scheduled work reserves capacity before backlog. Backlog reserves capacity before pipeline. The forecast does not let low-confidence pipeline crowd out work that crews have already produced or scheduled.
How each layer is built
1. Earned actuals
We pull event-level earned revenue from work tickets for the current year and bucket it by the month it was earned. This is the historical anchor. Negative adjustments stay in the math because net revenue is what matters.
2. Pending acceptance
We look for labor time that has been worked but not accepted yet on open or scheduled work tickets. To avoid overstating revenue, we only use the current month and immediately prior month. The value is capped by remaining ticket revenue:
Pending value = min(remaining ticket revenue, pending hours / estimated hours x remaining ticket revenue)
3. Scheduled work
We pull future schedule-board hours and calculate the ticket value still left to earn: ticket price minus earned revenue minus pending acceptance. If a ticket is only partially scheduled, only the scheduled share lands on the schedule. The unscheduled remainder spills into backlog.
4. Backlog tickets
Backlog is open or scheduled work with no future scheduled visit. We calculate remaining revenue and remaining hours, then spread that work from the expected work date. Future-dated backlog starts on its scheduled date. Past-due or no-date backlog can be rolled forward from today, within the configured lookback window.
5. Weighted pipeline
Pipeline starts with open opportunities in the statuses and types selected for the forecast. The gross number is the opportunity estimate. The forecast number is expected value:
Weighted pipeline revenue = estimated opportunity price x probability of close
How probability of close is weighted
The simplest version is a flat close rate. If a company closes 30% of proposed dollars, multiply every open proposal by 30%. That is easy to build, but it ignores the obvious: a branch, division, sales type, deal size, and old proposal do not all behave the same.
Capsa uses a historical close-rate model unless the customer chooses a simpler setup. It starts with the trailing historical dollar-weighted win rate, then adjusts each opportunity through a hierarchy:
- Branch
- Sales type
- Division
- Age in pipeline
- Deal size
Sparse history is dangerous, so small samples are pulled back toward the broader average. Cells below the minimum sample are skipped. Middling sample sizes are blended. Strong sample sizes stand on their own. The final probability is also guarded by a floor and ceiling so one strange pocket of history cannot turn an open proposal into either zero or a sure thing.
If the team maintains rep-entered probability on opportunities, that can be used first. If they prefer a flat rate, that is available too. The important part is that the source of probability is explicit, not hidden.
How future months are assigned
Forecasting revenue is not just deciding whether work will happen. It is deciding when the earned revenue should land.
Scheduled work follows the calendar
Scheduled work is allocated to the months where the future scheduled hours sit. If 60% of a ticket's future scheduled hours are in June and 40% are in July, scheduled revenue follows that same split.
Backlog follows expected work duration
Backlog already exists as a work ticket, so there is no close date to forecast. We start with the scheduled date when it is usable. If that date is stale and the ticket is still open, we roll the work forward from today. Duration is estimated from remaining labor hours and the division's actual daily production rate, with a minimum of one workday.
Pipeline follows close, start, and duration
For contracts with usable start and end dates, those dates are the source of truth. For work orders and unscheduled contracts, we estimate three things: when the opportunity will close, when work will start after close, and how long the work usually lasts.
The historical timing model is grouped by division and opportunity type, then falls back to division-level or company-wide averages when the exact group does not have enough history. That is how the forecast handles start dates that are not meticulously maintained. A stale past start date does not get blindly trusted. The forecast rebuilds timing from how similar work actually behaved: average proposal-to-win days, average win-to-first-work days, and average production duration.
Stale dates are handled deliberately
If an open opportunity has a start date or enabled anticipated close date that is already in the past, we treat it as if it was proposed yesterday, then apply the historical time-to-close average. That keeps old CRM dates from dumping revenue into the current month or quietly removing active work from the forecast.
How capacity changes the forecast
A forecast that ignores crew capacity will often look better than the business can actually deliver. Capsa lets admins set production-hour caps by calendar month, branch, and division. A May enhancement cap for a branch and division applies every May until it is changed.
Capacity is consumed in this order:
- Actual labor already worked in the forecast window
- Scheduled hours already on the board
- Fresh backlog
- Partially scheduled work spilling out of the schedule layer
- Past-due backlog
- Pipeline
If a month is full, Capsa keeps the portion that fits and moves the overflow hours and matching revenue into the next forecast month for the same branch and division. Actual and scheduled work are never pushed out by the cap. Only lower-certainty backlog and pipeline move.
Smart caps can seed the setup from history: highest actual production hours for that calendar month, branch, and division, plus a growth buffer. Rows with limited history are marked for review instead of being treated as gospel.
What can be configured
| Pipeline included | Opportunity statuses, opportunity types, sales types, and never-sent proposal handling. |
| Close probability | Calculated close-rate model, flat-rate mode, or rep-entered probabilities when enabled. |
| Timing | Whether to use anticipated close dates, historical close timing, or start-date rules. |
| Backlog | Include future-only backlog, all recent past-due backlog, or no backlog. |
| Capacity | Recurring production-hour caps by calendar month, branch, and division. |
| Horizon | How many months the forecast should project. |
The goal is not to force one forecasting philosophy on every operator. The goal is to give each company a defensible model, then make the assumptions editable where local judgment matters.
You could build this yourself
The manual version is possible. Pull earned events, unaccepted time, scheduled visits, open tickets, and opportunities. Rebuild remaining revenue by ticket. Maintain close-rate history. Build timing averages by division and work type. Keep a production-cap table by branch and division. Re-run the whole thing every time the schedule changes, time is accepted, a proposal moves, or a manager edits capacity.
That is the actual work behind a forecast people can trust. The spreadsheet version is not hard because the formulas are mysterious. It is hard because the inputs keep changing.
Capsa updates the underlying Aspire data automatically each day and recomputes the forecast from the latest tickets, schedules, time entries, opportunities, historical averages, and saved settings. You get the method without babysitting the workbook.
See the gaps your team is missing
Capsa gives landscape company leaders full visibility into proposal activity, coverage gaps, and ancillary capture rates across every property.