Website maintenance report template, with a filled-in example
The most dangerous month on a maintenance plan is the quiet one. Nothing broke, nobody asked for anything, and on day 30 someone looks at the invoice and wonders what they're paying for. The monthly report is your answer, and it works best when it's written for the person who defends your invoice internally: usually the marketing manager.
The short answer
A monthly website maintenance report should have six sections, in this order:
- Summary: four lines and two sentences the manager can paste into their own report.
- Campaign support delivered: what shipped, for which campaign, and what it changes for their team.
- Tasks and hours: every task with its date, category and time.
- The base: uptime, updates, security, backups, SSL, incidents. Short.
- Hours balance: hours by source month, what expires next, any overage.
- Next month: planned work lined up with their campaign calendar, and what you're waiting on.
The order is the point: results first, proof second, housekeeping last.
You can download the template free (Word, Google Docs and Markdown). The rest of this page explains each section and shows one filled in for a fictional client.
Write it for the marketing manager, not the IT contact
Most maintenance reports are written for a technician: “Updated 14 plugins, core 6.x to 6.y, 0 malware found.” Accurate, and useless to the person who approves the budget. A marketing manager needs to show their own boss that the site supports the campaigns. Give them sentences they can copy:
- Not “built landing page” but “Fall sale page live on Sep 4, a day before the ads started.”
- Not “fixed HubSpot form” but “Form leads now reach HubSpot with their campaign source; before Sep 10 those fields were empty.”
- Not “installed pixel” but “Add-to-cart and lead events now fire in GA4 and Meta, so the ads can optimize on real data.”
Updates, backups and security still appear. They just come after the work the reader cares about. They're the reason the campaign pages don't break.
What goes in each section
1. Summary
Campaign items delivered, hours used out of hours available, uptime and incidents, and the balance carried to next month with what expires. Then one or two plain sentences on what the month was about. If the manager reads nothing else, this is enough.
2. Campaign support delivered
A table with five columns: what shipped, campaign or goal, live since, what it means for their team, and hours. Add a line for anything reusable you built (a campaign page template, a form handler, a how-to video). Reusable work is how a retainer gets cheaper per campaign over time, and the client should see it.
3. Tasks and hours
Every task from your time tracker with date, category (Campaign, Feature, Fix, Update, Infra, Security, Support), severity and hours. Export it from whatever you use, such as ClickUp, Jira, Toggl or Harvest. If time is logged as you go, the whole report takes about 15 minutes. Include a line for content tasks you did on request, with links to any how-to videos you sent, so the client sees what their own team could do next time.
4. The base
Uptime with the monitoring tool named, platform version, packages updated, security patches, backups and their retention, forms and tracking tested, SSL and domain dates, and an incidents table with response times. Keep it to one screen. Its job is to make invisible work visible: in the client's mind, invisible work is unpaid work.
5. Hours balance
If your plan includes rollover, show hours by source month, what was used from each, what remains, and when each batch expires. Then the overage line, with the multiplier. And always add the heads-up: “4 hours from August expire at the end of this month.” That one line fills more wishlists than any sales email.
6. Next month
Their campaign calendar as you understand it, planned tasks with estimates, recommendations (an end-of-life plugin, a plan size that no longer fits), and what you're waiting on from them. This section turns the report from a receipt into a planning document.
A filled-in example
Here is the template completed for a fictional outdoor-gear retailer on a 10-hour plan, in a month built around a seasonal sale. Names and numbers are made up; the hour math adds up.
Monthly Report — September 2026
1. Summary
- Campaign support delivered: 5 items (1 landing page, tracking events, 1 CRM form fix, 1 A/B test, reusable campaign blocks)
- Hours used: 14.50 of 12.25 available (10.00 h bank + 2.25 h rolled over); 2.25 h overage, approved Sep 23
- Uptime: 99.98% · Incidents: 1 (High) · Backups verified: Yes
- Balance carried to October: 0.00 h. Nothing expires.
September was built around the Fall Trail Sale. The page went live a day before the campaign, with conversions tracked in GA4 and Meta and campaign sources reaching HubSpot.
2. Campaign support delivered
| What shipped | Live since | What it means for your team | Hours |
|---|---|---|---|
| Fall Trail Sale landing page | Sep 4 | Live one day before the campaign, checked with your UTMs | 4.25 |
| GA4 + Meta events (add to cart, view item, lead) | Sep 3 | You can see the campaign in your numbers; ads optimize on real data | 1.25 |
| HubSpot form: UTM fields fixed | Sep 10 | Leads now reach sales with their campaign source | 1.50 |
| A/B test: sale page hero | Sep 15 | Running 50/50; results after it ends on Oct 5 | 1.50 |
| Reusable campaign blocks in the CMS | Sep 25 | Black Friday page estimated at 2 h instead of 4.25 h | 2.25 |
3. Tasks and hours (by category)
Campaign and marketing development 8.00 · Tracking 1.25 · Fixes 1.50 · Incident 1.00 · Updates and security 1.25 · Content on request 1.00 (6 products added, 4-minute how-to video sent) · Monitoring 0.50 · Total 14.50
4. The base
- Uptime 99.98%: one 9-minute hosting-provider outage on Sep 12.
- Framework patch release and 23 packages updated; 1 security patch (image-processing package flagged high).
- Daily content backups, 7-day retention, code in Git. Verified Sep 30.
- Incident, Sep 18: product feed to Google Merchant failing after a CMS field change. Site stayed up. Response 20 min, fixed the same morning.
5. Hours balance
| From | Avail. | Used | Left | Expires end of |
|---|---|---|---|---|
| Aug | 2.25 | 2.25 | 0.00 | Oct |
| Sep | 10.00 | 10.00 | 0.00 | Nov |
| Total | 12.25 | 12.25 | 0.00 |
Overage: 2.25 h × $120 (1.25x the $96 package rate) = $270, on the October invoice; approved by email on Sep 23.
6. Next month
- Black Friday landing page from the new blocks, estimate 2.00 h.
- Cookie banner update for Google consent mode v2, estimate 1.50 h.
- Waiting on you: Black Friday offer copy and product list by Oct 20.
- Recommendation: you've used 10.25, 12.50 and 14.50 h over the last three months. A 12-hour bank would be $1,152/month; September cost $960 + $270 overage = $1,230.
Look at what the manager can lift straight out of this: the summary paragraph, the five campaign lines, and the recommendation. None of it requires them to understand what a package update is.
What to write in a quiet month
Even a month with no requests has content: updates applied, backups verified, a renewed SSL certificate, forms and tracking tested before a campaign. Write it down, and lean on the next-month section: ask about their campaign calendar and point to the hours that expire soon. A quiet month is also the best time to suggest something small and useful, such as a speed fix on the top landing page or a reusable template for the next campaign.
Common mistakes
- Leading with plugin counts. Put campaign work first, even when it's one item.
- Hiding overage until the invoice. Warn before it happens, then show it in the report with the approval date.
- Hours without tasks. “7.5 hours: maintenance” invites the question you're trying to avoid.
- Skipping it when nothing happened. That's the month the client most needs to see it.
- Inventing forecasts. Only state what your data shows. If an A/B test has no result yet, say when it will.
The report also only works if the plan behind it is clear. Your maintenance contract should define the same hour bank, rollover and overage rules the report shows, and the rate should come from your costs: see how to price maintenance retainers.
Free
Get the report template
This exact structure, blank and ready to fill: summary, campaign support, tasks and hours, the base, hours balance, next month. Word, Google Docs and Markdown. Enter your email and it arrives in your inbox.
Get the free template$0 checkout through Gumroad. No card needed.
The Retainer Kit
The rest of the system
The guide, proposal, agreement, scope matrix, pricing spreadsheet with a rollover tracker, onboarding checklist and email scripts, all on the same rules as this report. The AI Pack turns a time-tracker export into a draft report.
Kit + AI Pack — $45Or the kit only for $29. Launch prices, 14-day refund.