Back to Analytics Academy
Brief5 min read

How We Forecast Earned Revenue

A forecast should be auditable. If you cannot explain where the dollars came from, what they depend on, and why they landed in a specific month, it is not a forecast. It is a wish.

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

LayerWhat we pullHow dollars are calculatedConfidence
Earned actualsEarned-revenue events already recognized on work tickets.Sum earned revenue by month, branch, and division.Actual
Pending acceptanceUnaccepted 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 workFuture schedule-board hours on work tickets.Take remaining ticket revenue, subtract pending value, then allocate by scheduled-hour share.High
BacklogOpen or scheduled tickets that are not yet on the future schedule.Spread remaining ticket revenue from the expected work date across estimated duration.Medium
PipelineOpen 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:

  1. Branch
  2. Sales type
  3. Division
  4. Age in pipeline
  5. 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:

  1. Actual labor already worked in the forecast window
  2. Scheduled hours already on the board
  3. Fresh backlog
  4. Partially scheduled work spilling out of the schedule layer
  5. Past-due backlog
  6. 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 includedOpportunity statuses, opportunity types, sales types, and never-sent proposal handling.
Close probabilityCalculated close-rate model, flat-rate mode, or rep-entered probabilities when enabled.
TimingWhether to use anticipated close dates, historical close timing, or start-date rules.
BacklogInclude future-only backlog, all recent past-due backlog, or no backlog.
CapacityRecurring production-hour caps by calendar month, branch, and division.
HorizonHow 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.