SOP Examples
Three complete procedures, written the way we write them — plus what makes each one work.
Templates show you the shape. Examples show you the judgement.
Three complete procedures below, from different kinds of business. Each is followed by a short note on the decisions that went into it.
Download the template · Read the guide
Example 1 · Responding to a new enquiry
A service business. The process that leaks the most money in most small companies.
───────────────────────────────────────────
SOP-01 · New enquiry response
───────────────────────────────────────────
PURPOSE
Every enquiry receives a useful reply within four working hours.
TRIGGER
An enquiry arrives through any channel: website form, phone,
WhatsApp, email, social message.
INPUTS
Access to the shared inbox, the CRM, and the current price list.
ROLES
Executor: Whoever is on enquiry duty that day (see rota)
Escalation: Owner, for anything over £2,000 or outside normal services
───────────────────────────────────────────
STEPS
───────────────────────────────────────────
1. Check all five channels at 09:00, 12:00 and 16:00 — see channel list below.
2. For each new enquiry, search the CRM by email, then by phone number.
3. If a record exists, open it. If not, create a contact — CRM, New Contact.
4. Record the source using the dropdown. Never free text.
5. Read the enquiry and classify it against the Decisions table below.
6. Send the matching reply template — CRM, Templates folder.
7. Personalise the first line with something specific to their message.
8. Set Next action and Next action date on the record.
9. Move the opportunity to "Qualifying" — CRM, pipeline.
10. If the enquiry needs the owner, flag it in the team channel with the
contact name and the reason.
───────────────────────────────────────────
DECISIONS
───────────────────────────────────────────
| Situation | Rule |
|---|---|
| Standard service, clear scope | Send quote template, next action in 2 days |
| Scope unclear | Send questions template, next action in 2 days |
| Outside our services | Send referral template, mark Lost, reason "out of scope" |
| Over £2,000 | Do not quote. Flag to owner, next action same day |
| Existing customer | Use returning-customer template, notify their account owner |
| Arrived outside working hours | Counts from 09:00 next working day |
───────────────────────────────────────────
EXCEPTIONS
───────────────────────────────────────────
- Urgent or emergency wording → call rather than email, within 1 hour
- Complaint rather than enquiry → do not use these templates,
escalate to owner immediately
- Obvious spam → mark as spam, no record created
───────────────────────────────────────────
OUTPUT
───────────────────────────────────────────
A CRM record with source, a sent reply, an opportunity in "Qualifying",
and a next action with a date.
───────────────────────────────────────────
VERIFICATION
───────────────────────────────────────────
- [ ] The reply appears in the contact's activity history
- [ ] Source field is populated
- [ ] Next action date is set and in the future
- [ ] The opportunity is in "Qualifying", not "New"
───────────────────────────────────────────
MEASUREMENT
───────────────────────────────────────────
- Enquiries with a reply inside 4 working hours — target 95%
- Enquiries with no source recorded — target 0
- Enquiries with no next action date after 24h — target 0
Owner: [name] · Version 1.2 · Reviewed [date] · Next review [date +6mo]
Why this one works: the channel check is scheduled, not continuous. The decision table covers five real cases rather than describing "assess the enquiry." The verification is four things the executor can see for themselves. And the escalation threshold is a number, not "if it's a big one."
Example 2 · Publishing a blog post
A content process. Shorter, but the handoffs are where it breaks.
───────────────────────────────────────────
SOP-07 · Blog post publication
───────────────────────────────────────────
PURPOSE
A finished draft goes live correctly formatted, with metadata and
distribution, without a second person being needed.
TRIGGER
A draft is moved to "Ready to publish" in the editorial board.
INPUTS
Approved draft, feature image, target publication date.
ROLES
Executor: Content lead
Approver: Owner, for anything naming a client
───────────────────────────────────────────
STEPS
───────────────────────────────────────────
1. Check the draft against the pre-publication checklist in the
editorial board.
2. Create the post in the CMS. Paste from the plain-text version,
not from the document — formatting carries over and breaks.
3. Set the URL slug: lowercase, hyphens, no stop words, under 60 characters.
4. Write the meta description: 140–155 characters, includes the main phrase.
5. Upload the feature image. Resize to 1200×630 before upload.
Fill the alt text.
6. Add internal links to at least two existing posts.
7. Assign category and tags from the existing list. Do not create new ones.
8. Preview on mobile before publishing.
9. Publish, or schedule for the target date.
10. Post the live link in the team channel.
11. Move the card to "Published" and set the review date to +6 months.
───────────────────────────────────────────
DECISIONS
───────────────────────────────────────────
| Situation | Rule |
|---|---|
| Post names a client | Do not publish. Owner approval first. |
| No feature image | Use the category default — Brand folder |
| Needed tag doesn't exist | Publish without it, request tag separately |
| Post is over 2,500 words | Add a contents block after the intro |
───────────────────────────────────────────
EXCEPTIONS
───────────────────────────────────────────
- Time-sensitive post → steps 6 and 11 may follow publication, same day
- Updating an existing post → keep the URL, change the date,
add an update note at the top
───────────────────────────────────────────
OUTPUT
───────────────────────────────────────────
A live post with metadata, image, internal links, and a review date.
───────────────────────────────────────────
VERIFICATION
───────────────────────────────────────────
- [ ] The live URL opens and renders correctly on mobile
- [ ] The meta description appears in a link preview
- [ ] Both internal links work
- [ ] The card shows "Published" with a review date
Owner: [name] · Version 1.0 · Reviewed [date] · Next review [date +6mo]
Why this one works: step 2 names a failure mode that costs an hour every time it happens. Step 7 prevents tag sprawl by removing the option. The verification is done by looking at the live page, which is where problems actually appear.
Example 3 · Monthly financial close
Different shape: mostly a checklist with a hard dependency order.
───────────────────────────────────────────
SOP-12 · Monthly close
───────────────────────────────────────────
PURPOSE
Books are accurate and reconciled by the fifth working day of
the following month.
TRIGGER
First working day of the month.
INPUTS
Bank access, accounting system, receipts folder, payroll report.
ROLES
Executor: Bookkeeper
Approver: Owner — sign-off on the summary only
───────────────────────────────────────────
STEPS
───────────────────────────────────────────
1. Confirm the previous month is complete: no draft invoices,
no unposted entries.
2. Download bank statements for every account.
3. Reconcile each account. Flag any difference over £1 — do not adjust.
4. Match receipts to card transactions. List anything unmatched.
5. Post the payroll journal from the payroll report.
6. Review the suspense account. It should be zero.
7. Produce P&L and balance sheet.
8. Compare against the prior month. Investigate any line that moved
more than 20%.
9. Write the summary: revenue, costs, margin, anything unusual.
10. Send to the owner for sign-off.
11. Lock the period once signed off.
───────────────────────────────────────────
DECISIONS
───────────────────────────────────────────
| Situation | Rule |
|---|---|
| Reconciliation difference over £1 | Do not adjust. Flag to owner with detail. |
| Receipt missing | Post with the available detail, add to the chase list |
| Suspense account non-zero | Must be cleared before step 7. Do not proceed. |
| Line moved over 20% | Written explanation in the summary |
───────────────────────────────────────────
EXCEPTIONS
───────────────────────────────────────────
- Year end → additional steps apply, see SOP-13
- Owner unavailable for sign-off → period stays unlocked,
note the delay, do not lock without sign-off
───────────────────────────────────────────
OUTPUT
───────────────────────────────────────────
Reconciled accounts, P&L, balance sheet, written summary,
signed-off and locked period.
───────────────────────────────────────────
VERIFICATION
───────────────────────────────────────────
- [ ] Every account reconciles to zero difference
- [ ] Suspense account is zero
- [ ] Every 20%+ movement has a written explanation
- [ ] The period is locked
Owner: [name] · Version 2.1 · Reviewed [date] · Next review [date +12mo]
Why this one works: step 3 says "do not adjust," which prevents the most common and most damaging shortcut. Step 6 is a hard gate — the procedure explicitly cannot proceed past it. And the exception for sign-off protects the control rather than the deadline.
What the three have in common
Decisions are rules, not judgement. Every "it depends" has been converted into a condition with a threshold.
Verification is visible to the executor. Not "check it's correct" — four specific things to look at.
Exceptions exist. Every real process has them. A procedure with none hasn't been observed closely enough.
The failure modes are named. Pasting from a document, adjusting a reconciliation, creating a new tag. Each of these is a specific mistake someone made once.
That last point is where procedures earn their keep. The template gives you the shape. What makes a procedure useful is the accumulated knowledge of what goes wrong — and that only comes from watching the real thing.
A good procedure is mostly made of mistakes somebody already made.
Want procedures written for your processes?
A free systems audit identifies which ones are worth documenting first.