Blog/Operations
OperationsSeptember 8, 2026·10 min read

SOP format: a section-by-section Shopify example

Six blocks, built against one real workflow. The last one decides how far anyone should trust the other five.

AY
Anand Yadav · Founder, ReccordSOP
·Last reviewed September 8, 2026

The six blocks

A usable SOP format comes down to six blocks in this order:

  1. Header: title, document ID, owner, version, last-verified date.
  2. Trigger: the exact event that starts the run, plus any prerequisite that decides whether the procedure applies at all.
  3. Numbered steps: one action each, imperative verb, the object named, a screenshot only where it changes what someone does.
  4. Decision branches: explicit if/then forks sitting under the step where the fork happens.
  5. Exceptions and escalation: what to do when no branch fits, and the named role it goes to.
  6. Last-verified: who checked the steps, when, and against what state of the interface.

The first five are well-covered ground. This piece builds each one against a single workflow you can go and check yourself: fulfilling an order manually from the Shopify admin. It is a fair test case because the procedure is short and every step sits inside a vendor's interface, which is the situation most ecommerce SOPs are actually in.

The argument

Block six carries more weight than blocks two through five combined. A step list nobody has re-checked against the current screen is a confident set of instructions that may be wrong, and confidence is the part that makes it dangerous.

Regulated industries run headers with document title, unique identifier, department, owner, version, approval status, effective date and page control. A four-person DTC team does not need that and will not maintain it. Trimmed to what actually gets kept up to date:

FieldExampleWhy it earns its place
TitleFulfil a single order from the Shopify adminNames the task, not the topic
IDOPS-FUL-01Lets anyone tell the current doc from a copy of it
OwnerA named role, not a departmentAn unowned document is nobody's job to fix
Version1.0Tells a reader whether they have the current one
Last verifiedDate, verifier, and the screen it was checked againstThe only field that says whether the rest is still true

The ID matters more than it looks. A stable identifier in a predictable shape, a category abbreviation and a number, is what lets someone tell a current procedure from a superseded copy that got emailed around in March. Drop scope, definitions and approval signatures unless something forces you to keep them. Cut the owner field and the document stops being maintained by anybody.

How to build a DTC SOP library

Where these documents live once you have more than a handful, and how to keep the collection navigable.

The trigger

A trigger is one named event, not a scope statement. "This SOP covers order fulfilment" tells nobody when to open it. "An order appears in the Unfulfilled section of Shopify admin > Orders" does.

For this workflow the trigger carries a real prerequisite. Shopify stores use manual fulfilment by default, and fulfilling manually requires automatic fulfilment to be off. That setting lives under Settings > General > Order processing. So the block reads:

Trigger: an order shows as Unfulfilled in Shopify admin > Orders. Prerequisite: automatic fulfilment is deactivated under Settings > General > Order processing. If it is active, this procedure does not apply.

Writing the prerequisite into the trigger prevents the most common failure with a borrowed SOP: someone runs it on a store configured differently, the screens do not match, and they conclude the document is wrong rather than inapplicable.

Try it on one of your own procedures.

Record a process once, AI writes the structured SOP. 3 free SOPs, no credit card.

Start for free →

Numbered steps and screenshots

One action per step. Imperative verb first, object named, measurable criteria wherever judgement is involved. Avoid words that sound like instruction but carry no obligation: periodic, typical, appropriate. "Handle appropriately" is not a step, it is a hope.

The core sequence, from Shopify's own documentation on fulfilling orders individually:

  1. Open Orders in the Shopify admin.
  2. Click the order to be fulfilled.
  3. In the Unfulfilled section, click Mark as fulfilled.
  4. Enter the tracking number supplied by the shipping provider.
  5. Confirm the carrier. A carrier may be pre-selected, and a rushed hire will accept whatever is already there.
  6. Select Send a notification to the customer. This option only appears when the customer's email address is on file.
  7. Click Mark as fulfilled.

Step five is the one worth spelling out, because it is the step where the interface does something on your behalf and the operator has to decide whether to accept it. Steps like that are where errors enter a procedure that otherwise reads as mechanical.

On screenshots: add one only where it clarifies orientation, selection, placement, or a quality checkpoint. A screenshot added for decoration costs maintenance without improving execution, and every image you paste in is a thing that has to be replaced when the tool changes. Unreadable screenshots are worse than none, because they imply a check nobody can actually perform.

Make your SOPs visual instead of text-heavy

Where an image genuinely beats a paragraph, and how to stop the visuals becoming the part that rots first.

Branches and exceptions

Write conditionals as if/then forks, indented under the step where the fork occurs. Prose caveats get skimmed. A fork does not.

This workflow has four real conditionals, all documented by Shopify:

  • If no single location holds enough inventory, the order splits automatically into separate fulfilments by location, and each one has to be fulfilled separately.
  • If a hold is in place, release it first. Fulfilment is blocked until the hold is released, and held orders are excluded from the Unfulfilled list entirely.
  • If the order is assigned to a third-party fulfilment service, stop. That service controls the status and marks the order in progress when it accepts the request.
  • If the order has no shipping address, a tracking number cannot be added. Route it to the exception path.

That last one is where the exception block starts. An escalation path names a specific role rather than a department: no branch fits, or the customer was notified incorrectly, so hold the order, add a comment in the Timeline so the team can see the state, and hand it to the role named in the header.

Keep the step list to what is needed to complete the task. Notes, warnings and background belong in their own block. Branches belong next to the step they affect; rare exceptions belong at the end.

The last-verified line

This is the field that decides whether the other five blocks describe reality, and it is the one almost every template treats as decoration.

"Last verified: 12 March" says a file was opened. "Last verified: 12 March by the fulfilment lead, against the Shopify admin Orders view, all seven steps re-run on order #10428" says somebody did the work. Three parts: the date, the verifier, and the state of the interface it was checked against.

The interface part matters most here, because the steps live inside somebody else's product. When the button in step three moves, your document does not know. Nobody sends a release note to your SOP folder. You find out when a new hire gets stuck, or when a customer gets the wrong notification.

Approval is not the finish line either. A procedure that has been approved but not assigned, not understood, or not reachable from the place the work happens is not finished in any sense that matters operationally.

The failure that is worse than a stale document

A verifier who signs the line without re-running the steps. A false verification date makes a wrong document look trustworthy. Require the verifier to name the specific order, ticket or record they tested against. If they cannot name one, they did not verify.

SOP version control that keeps every change visible

Why replacing the old version destroys the information you need later, and what to keep instead.

How often to refresh it is a question about your tools rather than your calendar. Regulated documents run review cycles of one to three years. A procedure sitting on top of a vendor's admin needs re-checking whenever that interface changes, whenever somebody new runs it, and whenever it produces a mistake. Anyone who hits a step that no longer matches should be able to raise it with the owner without asking permission.

SOP drift: why your documentation is lying to you

The mechanics of a correct document quietly becoming a wrong one, which is the problem this whole format is built to expose.

Disclosure, since it is our product: ReccordSOP is built around this specific gap. You record the task again and it compares the new recording against the published SOP, so you see which steps moved rather than replacing the document wholesale. It does not watch your Shopify admin and notice on its own, and nothing on the market does. Somebody still has to record the task. What it removes is the cost of the comparison, not the need for one.

The check before you publish

Fill the six blocks in order, in one sitting, for one workflow where getting it wrong costs real money. Fulfilment, refunds, or high-risk order review. Not the easiest one.

Then do the part most teams skip. Hand the document to somebody who has not done the task and watch them perform it in silence. Every point where they hesitate, look somewhere else, or ask a question is a defect in the document rather than in them. Revise at each of those points.

Then have that person sign the last-verified line, with their name and the record they tested against. They are the best possible verifier, because they had no prior knowledge to fill the gaps with.

SOP vs work instruction: what's the difference?

Whether the click-by-click detail belongs in this document or a separate one, and why the two go stale at different speeds.

A step list is a claim about how a screen looked on the day someone wrote it. The format above is just the machinery for keeping that claim honest.

Frequently asked questions

What is an SOP format?

An SOP format is the fixed structure a procedure follows so the essential information appears in a predictable place: what starts it, who owns it, the steps in order, the decisions, the exceptions, and when it was last checked. The point is not that every document looks identical. It is that a reader knows where to look, and an auditor can trace who approved what and when.

What sections should an SOP have?

Six earn their place for most teams: a header with title, ID, owner, version and last-verified date; a trigger naming the event that starts the run; numbered steps with one action each; if/then branches under the steps they affect; an exception path naming an escalation role; and the last-verified line. Regulated work adds scope, definitions, approval signatures and revision history. A four-person ecommerce team does not need those and will not maintain them.

How long should an SOP be?

Long enough to complete the task correctly and no longer. If a procedure is sprawling, split it into a parent process plus focused work instructions rather than writing one long document, because readers need different levels of detail at different moments. A procedure someone runs mid-task competes with the task itself for attention.

Does every step need a screenshot?

No. Add one only where it clarifies orientation, selection, placement or a quality checkpoint. Decorative screenshots cost maintenance without improving execution, and unreadable ones are worse than none because they imply a check nobody can perform. Capture tools make producing screenshots cheap, which makes deleting the ones that add nothing your job rather than the tool's.

How often should the last-verified date be refreshed?

Whenever the underlying tool changes, rather than on a fixed schedule. A one to three year review cycle suits regulated documents that describe stable physical processes. A procedure built on top of a vendor's admin screen needs re-checking whenever that screen changes, whenever a new person runs it, and whenever it produces an error. The trigger is a change, not a date.

Ready to record your first SOP?

3 free SOPs to start. No credit card required. See if drift detection keeps your docs honest.

Start for free
AY
Anand YadavFounder, ReccordSOP

I built ReccordSOP after watching too many DTC ops teams lose months to undocumented workflows. These SOPs are battle-tested with Shopify operators running $1M to $50M brands.

Last reviewed September 8, 2026

Related reading