DEV Community

Cover image for The WordPress maintenance business: real numbers, pricing math, and what most freelancers get wrong
devautomation
devautomation

Posted on

The WordPress maintenance business: real numbers, pricing math, and what most freelancers get wrong

WordPress maintenance is one of the most reliably profitable niches in freelancing. It's also one of the most consistently underpriced.

After running maintenance contracts for years, here are the numbers and the mistakes I see most often.


The math that makes this business work

A typical WordPress maintenance client requires about 1.5-2.5 hours of actual work per month once you're set up:

  • Updates: 20-40 minutes (with proper tooling, much less)
  • Security review: 15-20 minutes
  • Backup verification: 10 minutes
  • Report writing: 15-20 minutes
  • Unexpected issues (averaged across all clients): 15-30 minutes

At a standard freelance rate of $50-80/hour, that's $75-200 of work.

Most freelancers charge $50-80/month.

The margin is uncomfortable. But that's before you account for automation.


What automation actually changes

I spent about 12 hours over one month building scripts that automate:

  • Updates across all client sites (SSH -> backup -> update -> test)
  • Security scanning
  • Monthly HTML report generation
  • Uptime monitoring with email alerts

Result: what was 1.5-2.5 hours per client is now 10-15 minutes of reviewing output that ran automatically.

On 10 clients: 15-25 hours/month -> 1.5-2.5 hours/month.

The hourly math at $75/month per client:

  • Before automation: $75 / 2 hours = $37.50/hour
  • After automation: $75 / 0.2 hours = $375/hour

Same work. Same client. Same invoice. Different leverage.


What most freelancers get wrong about pricing

Mistake 1: Pricing by what feels fair instead of what it costs

Calculate your actual floor:

Monthly overhead (software, tools, insurance, admin):    $200
Target monthly income:                                   $6,000
Billable hours available (realistic, not optimistic):    100

Minimum hourly rate = ($6,000 + $200) / 100 = $62/hour
Add 30% for taxes: $62 x 1.3 = $80/hour
Add 15% margin:    $80 x 1.15 = $92/hour
Enter fullscreen mode Exit fullscreen mode

Most WordPress freelancers have never done this math. They price by feel, which means they price below their actual floor.

Mistake 2: Charging per site instead of per value

A WooCommerce store doing EUR50,000/month revenue and a portfolio site for a local photographer are both "one WordPress site." The maintenance work is roughly similar. The value to the client is not.

Tiered pricing by business type:

  • Portfolio / brochure site: $80-120/month
  • Small business with leads/bookings: $120-200/month
  • E-commerce / WooCommerce: $200-400/month
  • High-traffic or high-revenue sites: $400+/month

Mistake 3: Month-to-month only

Annual prepay discounts serve you more than the client. Offering 10-13% off for annual upfront:

  • Removes churn risk for 12 months
  • Gives you cash flow
  • Clients who prepay never cancel mid-year

On 10 clients at $150/month: $18,000 annual value. Offer 10% off: client saves $1,800, you get $16,200 upfront.


The churn problem no one talks about

The biggest threat to a maintenance business isn't finding clients -- it's keeping them.

Average monthly churn rate in subscription businesses: 3-8%.

At 5% churn: You lose half your client base in a year without adding anyone new.

What actually reduces churn:

  1. Monthly reports -- clients who receive reports cancel less. They see the value. Clients who get no communication wonder if they're paying for anything.
  2. Proactive communication -- tell them about the SSL expiry you caught before it expired, the plugin vulnerability you patched before anyone exploited it. These moments justify the retainer.
  3. Reasonable response times -- most clients don't need 1-hour response. They need to know they won't be ignored.

How long to build a $3,000/month maintenance business

Working backwards:

  • $3,000/month / $150/average client = 20 clients
  • At 5% monthly churn: need ~1 new client/month just to maintain
  • Realistic acquisition rate (with consistent outreach): 1-2 new clients/month

Timeline: 12-18 months to reach 20 clients while managing churn.

Faster if:

  • You already have web design clients you can convert to maintenance
  • You run the systematic outreach (about 20 cold emails/month needed for 1 new client)
  • You raise prices as your client list fills (waitlist = clear signal to raise rates)

The stack that makes it work

Free or near-free tools:

  • WP-CLI -- command-line WordPress management (free)
  • UptimeRobot -- uptime monitoring, email alerts (free tier: 50 monitors)
  • Google Search Console -- SEO monitoring for clients (free)
  • UpdraftPlus -- backups (free tier sufficient for most sites)
  • Wordfence -- security scanning (free tier)

Paid but worth it:

  • ManageWP or MainWP -- centralized dashboard for all sites ($100-200/year for small agency)
  • WP Rocket -- caching/performance ($60/year/site -- pass through to client)
  • ShortPixel -- image optimization ($10-20/month for unlimited sites)

Monthly tool cost for 10 sites: roughly $50-80. On $1,500/month retainer income, that's a 5% overhead ratio.


What I've packaged up

The automation scripts I use (Bash for Linux servers, PowerShell for Windows management): WordPress Agency Automation Bundle ->

The business side -- service agreement, proposal templates, pricing calculator, 15 client email templates, 5-day onboarding checklist: WordPress Agency Starter Kit ->

Getting clients in the first place -- cold email sequences, LinkedIn scripts, discovery call guide: WordPress Client Acquisition Kit ->


What's the biggest challenge in your WordPress maintenance business right now -- finding clients, pricing, or keeping up with the work?


These numbers are from my own experience managing sites across various client types. Your market will differ -- adjust accordingly.


More in this series: WordPress Agency Toolkit

All tools and templates: devautomation.gumroad.com

Top comments (0)