Residential exterior cleaning marketing is dominated by three structural facts: bundle ticket is $500-$3,500 (5-10× the cost-of-acquisition floor), demand is sharply seasonal (Q2 and Q4 dominate), and recurring annual cadence turns one-shot $800 bundles into $3,400+ LTV across 4-5 years. The right budget starts from per-dollar return economics and the recurring stack, not a fixed percentage of revenue.
The short answer
Most established cleaning companies spend 8-12% of revenue on marketing:
- Year 1 (zero base): 15-25% of revenue. Building initial route density and recurring subscriber base.
- Year 2-3 (growing): 10-15% of revenue. Neighbor follow-up compounding and recurring renewals share the load.
- Year 4+ (established): 5-8% of revenue. Recurring annual renewals carry most acquisition; marketing focuses on filling crew capacity.
Budget benchmarks by revenue tier
| Annual revenue | Total marketing budget | Suggested channel mix |
|---|---|---|
| $0-$150K (year 1) | $25K-$40K | 70% mailed cleaning quotes · 10% Google LSA · 10% same-day door-knocking on jobs · 10% community/network |
| $150K-$500K | $25K-$60K | 60% mail · 15% LSA · 10% retargeting · 10% neighbor follow-up · 5% review collection |
| $500K-$2M | $50K-$200K | 50% mail · 15% LSA · 15% retargeting · 10% review collection · 10% recurring re-engagement |
| $2M+ | $120K-$500K+ | 40% mail · 15% LSA · 15% retargeting · 10% review/reputation · 10% recurring re-engagement · 10% truck-wrap/signage |
The unit economics that decide everything
| Channel | Approx return per $1 spent |
|---|---|
| Mailed Clean Launch postcards (Q2 post-pollen) | $32 |
| Neighbor follow-up mailings (within 14 days of completion) | $45-$65 |
| Google Local Service Ads (well-managed) | $8-$15 |
| Facebook retargeting (scanners + portal visitors) | $5-$10 |
| Door-knocking (year 1 owner-operator) | $10-$20 (excluding operator time) |
| Boosted Facebook (local geo) | $3-$8 |
| Aggregator leads (Angi, HomeAdvisor, Networx) | $3-$8 |
| Cold Facebook ads (broad) | $1-$3 |
| Recurring annual renewals (years 2-5) | Effectively infinite (no acquisition cost) |
Surge-window timing
Cleaning demand is sharply seasonal. The right mail-spend rhythm:
- Pre-pollen Q1 (Feb-March): Mail 3-4 weeks before pollen arrives in your region. Postcards land at the moment intent begins climbing.
- Post-pollen Q2 (April-June pollen belt, May-July Northeast): The biggest surge. Run 2-3 mail waves through the window. Neighbor follow-ups peak.
- Mid-season Q3 (July-Aug): Moderate. Focus on humid-Southeast algae markets. Light mail volume.
- Pre-holiday Q4 (Oct-Nov): Second surge. Pre-Thanksgiving / pre-Christmas intent. Window cleaning over-indexes here.
- Q1 mid-winter (Dec-Jan): Don't mail in cold climates. Soft-wash chemistry breaks below 45°F and the schedule is 6-10 weeks out.
The first $1,000
Spend your first $1,000 on a 1,000-postcard Clean Launch campaign in a $300K+ neighborhood with mature trees, 3-4 weeks ahead of a surge window. Average year-1 return across cleaning operators: $15K-$80K in cleaning revenue depending on bundle mix. Worst-case outcome: Dave refunds your $1,000 personally under the money-back guarantee.
How recurring annual changes the math
The single highest-leverage marketing investment for established cleaning companies isn't a channel — it's the recurring-annual toggle on the customer portal. When 30-50% of your one-shot bundles convert to recurring annual at the quote stage:
- Year 1 acquisition cost: $30-$120 per booked bundle (with $800 first-year ticket).
- Year 2-5 acquisition cost on the same customer: $0 (no marketing required for renewal).
- Lifetime revenue: $3,400+ per recurring customer across 4-5 years.
- Effective LTV/CAC: ~30-100×, vs ~10× without recurring conversion.
This is why marketing-as-percent-of-revenue drops from 20% in year 1 to 5-8% by year 4 for cleaning companies that systematically convert recurring at the quote.
The math works on $100 too.
100 mailed cleaning postcards, $100 spend, 2-4 booked bundles per average campaign. Free account, no subscription.
Start free →