How much to charge for WordPress maintenance: a method, not a guess

By CompatNav · Published · Last reviewed · 3 min read

Short answer

Start from your own time, not from what others charge: hours per site per month (routine plus a share of incidents), times your hourly rate, plus your tools per site, plus a margin for the response you promise. Then check the result against the client’s risk: a shop that loses sales while it’s down can pay more than a brochure site. Plan the yearly PHP upgrade into the price, because it comes every year or two on every site.

Why your own numbers beat a market rate

Prices for WordPress maintenance vary enormously, and the ones you see online mix very different services: one includes staging tests and a same-day response, another only clicks “update all”. A price copied from someone else’s page tells you nothing about your costs. Building it from your own time does.

Step 1: measure your hours

For two months, on three to five typical sites, write down the time you spend per site:

  • Routine: backups checked, updates, Site Health, the visit after updates (the maintenance checklist).
  • Reporting: writing or checking the monthly report.
  • Incidents: a plugin conflict, a form that stopped sending, a host problem. Divide the total by the number of sites: incidents are part of the average.

Ten minutes of routine a week becomes about 45 minutes a month; a report adds its own time; incidents add the rest.

Step 2: add the yearly work

Some work comes once a year or less, and is easy to forget in a monthly price:

  • The PHP upgrade. PHP versions get security fixes until fixed dates, published years ahead on php.net, and hosts move sites when they end. Per site: the compatibility check, a staging test, the switch, and a few days of watching the error log. Divide your estimate by twelve.
  • The yearly audit: the website audit checklist on each site.
  • Renewals of premium plugins and themes, if you manage them.

Step 3: build the price

  1. Hours per site per month (routine + reporting + incidents + yearly work / 12) × your hourly rate.
  2. + tools per site: backups, staging, monitoring, licences you resell, divided by the number of sites.
  3. + a margin for the response promise: being available the same working day, or within hours, means turning other work down. That has a cost.
  4. Round to a price the client remembers, and set the next tier where the response and extras change.

Step 4: check it against the client’s risk

The same hours are worth more on some sites. A shop that loses sales every hour it is down, a booking site, a membership site: for them a quick response is insurance. A brochure site that can be offline for a day without loss needs the routine, not the speed. Your tiers (what to include in each) let each client choose.

When to raise your price

When the measured hours grow (more plugins, more traffic, more incidents), or when you add something, such as quarterly PHP checks. Apply new prices to new clients first, and to existing clients at their renewal, with notice in writing.

Key takeaways

  • Price = (hours per site per month × your rate) + tools per site + a margin for your response promise.
  • Measure your hours on a few real sites for two months before fixing the price.
  • Add a monthly share of the incidents and the yearly PHP upgrade, not just the routine.
  • Faster response costs you availability: price it as a tier, not a favour.
  • Raise prices for new clients first; existing clients follow at renewal, with notice.

Frequently asked questions

Should I charge per site or per hour?

Per site and per month is easier for clients to budget and for you to plan. Keep an hourly rate for work outside the plan.

What if a client only wants updates, nothing else?

Offer the lowest tier, with backups included. Updates without a tested backup are the riskiest service you can sell.

How do I account for PHP upgrades?

Estimate the yearly check, staging test and switch per site, divide by twelve and add it to the monthly price. Quote rewrites of custom code separately.

Check your own site before you upgrade

CompatNav is a free WordPress plugin. It reads the code of your plugins and themes on your own server and tells you, in plain words, what will break and what will only show notices on the PHP version you choose. It never changes your code. It can’t see problems that only appear while code runs with real data, so a quick check of your site after the upgrade still matters.

Get CompatNav on wordpress.org How it works

Sources

About the code examples: each output is the real output of the code shown, run with the official PHP builds, without a php.ini, with all errors reported and displayed. Only the file path was replaced by a neutral server path.