Measurement guide

Roofing Marketing ROI: Measure Opportunities, Appointments and Revenue

Raw leads do not tell the whole story. Connect each marketing source to qualification, calendar outcomes and jobs the roofing company can verify.

Marketing reporting becomes more useful when every stage has one definition and one owner. Start with the inbound event, not with an assumed job value.

The missed revenue calculator is a planning model; this guide explains how to replace assumptions with operating data.

Use a complete measurement chain

Source → unique inquiry → legitimate opportunity → qualified opportunity → booked estimate → completed estimate → signed job → verified revenue

Keep each stage separate. A phone-button click is not necessarily a completed call. A completed call is not necessarily a roofing opportunity. A booked estimate is not earned revenue.

Define the funnel before calculating ROI

  • Unique inquiry: one homeowner need, after deduplicating repeat attempts.
  • Legitimate opportunity: possible new work relevant to the business.
  • Qualified opportunity: fits the agreed service, territory and customer criteria.
  • Booked estimate: a confirmed appointment on the calendar.
  • Signed job: contract status verified in company records.
  • Revenue: use signed, invoiced or collected value consistently and label it.

Calculate the right cost at each stage

Cost per inquiry = channel cost ÷ unique inquiries

Cost per qualified opportunity = channel cost ÷ qualified opportunities

Cost per booked estimate = channel cost ÷ confirmed appointments

Customer acquisition cost = attributable sales and marketing cost ÷ verified new customers

Explore the distinction in cost per roofing lead versus cost per booked estimate.

Show where opportunities leak

Break results out by source, business hours, after hours, location, job type and storm versus normal periods. This can reveal a strong ad channel paired with a weak answer rate, or a high inquiry count with poor service-area fit.

Attribute recovery without double counting

  • Use one opportunity ID across calls, texts, forms and appointments.
  • Record the original source separately from the recovery channel.
  • Credit a recovered opportunity only once.
  • Keep estimated pipeline distinct from signed or collected revenue.
  • Replace assumptions with verified values as the job progresses.

Context changes the numbers

Storms, seasonality, territory changes, price changes and capacity constraints can make two periods unlike each other. Note those conditions before declaring an improvement.

Protect paid calls already in the funnel

See how to connect Google Ads call activity to missed-call handling and downstream outcomes.

Read the Google Ads recovery guide