Ecommerce SOP Template: 10 Procedures to Copy
An ecommerce SOP template is a fill-in standard operating procedure for one recurring store task, such as the weekly stock count or a refund. Each of the ten below gives a trigger, steps, an owner, a check and an alert. Copy a block, replace the [bracketed] parts with your own names and numbers, and run it for two weeks.
What an ecommerce SOP is
The US Environmental Protection Agency defines a standard operating procedure (SOP) as a set of written instructions that document a routine or repetitive activity followed by an organization. EPA wrote that for environmental quality systems, but the definition fits a store. An ecommerce SOP is the written procedure for one recurring store task, such as counting stock, approving a refund or closing the month.
Each SOP below has the same five parts, the ones set out in our guide to ecommerce systemization.
- Trigger: the event or the time that starts the task.
- Steps: what the person does, in order, in plain words.
- Owner: one named person, plus a named cover for when that person is away.
- Check: what proves the task was done right.
- Alert: what fires when it was not, and who receives it.
A procedure with no check is a wish. An SOP is also not automation. It is the procedure an automation would later enforce, so write it first. The tool question comes after, and Shopify Flow vs n8n vs Make covers it.
How to use these templates
EPA's guidance says SOPs should be written by the people who actually perform the work, and that it helps to have a draft tested by someone other than its writer. The same steps fit a store.
- Copy one block into a shared document, not a personal note.
- Replace every [bracketed] part. The limits, such as an approval amount or a count tolerance, are yours to set, so the blocks give none.
- Edit the steps to match how your team really does the task. Where a step names a screen, it is the Shopify admin; use your own platform's equivalent.
- Name the owner and the cover.
- Run it for two weeks, then ask the cover to follow it alone. Fix whatever they get stuck on.
SOP 1: Stock count reconciliation
Trigger: [day of week] at [time], and any time a paid order cannot ship for lack of stock.
- Choose the variants to count: your [20] best sellers, plus any variant flagged since the last count.
- In the Shopify admin, open Inventory, then Stock counts, and create a count for the location.
- Count the units on the shelf without looking at the system number, and record them.
- Compare each count with the On hand quantity. List every gap, every variant with no SKU, and every variant the warehouse or 3PL cannot match.
- Find the cause of each gap before changing a number: [damage, miscount, an open purchase order counted as stock, stock held for another order].
- Have [approver name] review and approve the count. In Shopify, approving applies the difference between the counted and expected quantities, and each change is recorded in the adjustment history.
Owner: [name], with [cover name] when away. Where two people are available, the approver should not be the person who counted.
Check: after approval, the counted variants match On hand. The log records how many variants were counted, how many had gaps and the cause of each.
Alert: a gap above [number] units or [amount] in value, or any variant with no SKU, goes to [owner] by [deadline].
SOP 2: Order exceptions
Trigger: a paid order has not shipped after [number] [hours or business days], or an order is flagged for an address problem, an unavailable item or a payment review.
- Export the paid orders not yet shipped that are older than the limit above.
- Sort them by cause: stock, address, payment, warehouse or 3PL hold, other.
- Act on each cause. For stock, check the latest count from SOP 1. For an address, contact the customer. For a hold, ask the warehouse or 3PL for the reason in writing.
- Tell the customer what is happening, and give a new date only if you have one.
- Write the cause on the order, as a tag or a note, and close the exception when the order ships or is refunded.
Owner: [name], with [cover name] when away.
Check: each [week], count the exceptions by cause. A cause that repeats gets a fix to the process, not another one-off rescue.
Alert: any paid order past the limit with no note on it goes to [owner]. The alert can be a daily export, or a Shopify Flow that tags paid orders that have not shipped.
SOP 3: Refunds
Trigger: a customer asks for money back, or a staff member finds a pricing or shipping error on an order.
- Confirm the order and pick the reason: [damaged, wrong item, late, changed mind, pricing error, other].
- Check the approval limit: staff may refund up to [amount] alone, and [approver name] approves anything above it.
- If the customer is sending items back, create the return first and choose a Return reason, then refund the returned items. Shopify records return reasons only on returns, and it does not let you create a return for items you have already refunded.
- Choose where the money goes, the original payment method or store credit, and decide whether to restock the items and notify the customer.
- Check the amount before you confirm. Shopify cannot cancel or reverse a refund once it is initiated from the admin.
- Write the reason and the approver on the order.
Owner: [name], with [cover name] when away. In Shopify, refunds are limited to the store owner and staff with the right Orders permissions, and refunding to store credit is a separate permission from refunding to the original payment method. Grant them to the people named in step 2 and no one else.
Check: each [week], total the refunds by reason and by approver. At month-end, compare the total with the Refunds line in your payments report and explain any gap, such as refunds paid through a third-party gateway or fee adjustments (SOP 10).
Alert: any refund above [amount] with no approver on the order, or a customer who has had more than [number] refunds in [period], goes to [owner].
SOP 4: Returns
Trigger: a customer asks to return an item, or a package arrives at the warehouse with no return on file.
- Check the request against your return rules: eligible items, a window of [number] days and the condition you accept. Shopify lets you set return and cancellation rules and offer self-serve returns.
- Create the return from the order, choose a Return reason, and send the shipping instructions or label.
- When the item arrives, inspect it before any refund. Record its condition: [resell, repair, discard].
- Restock only the units that passed inspection, and count them into stock.
- Refund the returned items under SOP 3, or send the exchange.
- Each [month], group the return reasons and pass product problems to [product owner].
Owner: [name], with [cover name] when away.
Check: every return received has a Return reason and a recorded condition, and the units restocked match the units that passed inspection.
Alert: a return open for more than [number] days with no tracking update, or an item received with no return on file, goes to [owner].
SOP 5: Support triage
Trigger: [every business day] at [time], and whenever the open queue passes [number] tickets.
- Sort the new tickets into three groups: real customers, messages your own systems sent (order confirmations, auto-replies, notifications) and spam.
- Tag each real customer ticket by topic: [order status, return, refund, product question, subscription, wholesale].
- Assign each topic to a named person.
- Close or reroute the system-sent tickets and note which sender created them, so the sender can be fixed.
- Each [month], export [30] days of tickets, read [50] at random and count the share your own systems sent.
- In the same month, compare your phone system's inbound call count with the phone-tagged tickets in the helpdesk. In a three-week count at a US automotive parts retailer we work with, the helpdesk held 21 phone-tagged tickets against roughly 2,161 calls, so its reports looked fine while the phone log said otherwise.
Owner: [name], with [cover name] when away.
Check: the monthly sample shows the system-sent share, and the phone log and the helpdesk are compared. Write both numbers down, with the date.
Alert: a ticket with no first reply after [number] hours, or a single sender of your own sending more than [number] tickets in a day, goes to [owner].
SOP 6: Subscription changes
Trigger: a subscriber asks to skip, pause, swap, change the delivery frequency, update a card or cancel, or a subscription payment fails.
- Identify the request type and find the subscription in [your subscription app].
- If your app has a customer portal, point the customer to it first.
- For a cancellation, record the cancel reason from your list [price, too much product, switched brand, other] before you process it. Offer [save offer] only if [owner] has approved it.
- For a failed payment, follow the retry-and-card-update window of [number] days. Then pause or cancel the subscription and note which.
- Log the change with the date and the name of the person who made it.
Owner: [name], with [cover name] when away.
Check: each [month], split the cancellations into customers who chose to leave and customers whose payment failed, and count each. In the one-page report we built from live Recharge data for a subscription brand, 90% of churn was voluntary and product volume was the top cancel reason, at twice the share of price. Your split may differ, which is the reason to count it.
Alert: a failed payment still unrecovered when the retry window ends, or any cancellation with no reason recorded, goes to [owner].
SOP 7: Vendor and purchase orders
Trigger: a variant reaches its reorder point, or a supplier changes a price or a lead time.
- Check the reorder point for the variant: daily sales times the supplier's lead time in days, plus safety stock.
- Create a purchase order in the Shopify admin with the products, quantities, costs, payment terms and supplier details. Keep it as a draft until [approver name] approves.
- When the supplier confirms, mark the purchase order Ordered, create an inventory transfer for it to track the shipment, and write the expected arrival date on it.
- Keep purchase orders that are not yet received out of the sellable count. In Shopify, incoming inventory is not available to sell until it has been received.
- When the goods arrive, count them before you receive them on the inventory transfer, and check the count against the purchase order. Note any shortage or damage and tell the supplier by [deadline].
- Each [quarter], compare the lead times suppliers actually delivered with the lead times in your reorder points, and update the points.
Owner: [name], with [cover name] when away.
Check: every purchase order marked Ordered has a supplier confirmation, an expected date and an inventory transfer, and none of its units are counted as Available before they are received. A draft purchase order has not been ordered yet, so leave it out of your stock count. The units counted at receipt match the packing slip. The glossary defines phantom stock as inventory your system shows as sellable but you can't ship. Counting an open purchase order as stock is one cause.
Alert: a purchase order more than [number] days past its expected date, or a variant at its reorder point with no open purchase order, goes to [owner].
SOP 8: Weekly reporting
Trigger: [day] at [time], for the week ending [day].
- Write one definition per number and keep it beside the number: revenue (gross, or net of refunds and taxes), order count, ad spend, new against returning customers.
- Pull each number from its source system, not from another report: [storefront], [helpdesk], [phone system], [ad accounts], [finance tool].
- Put the numbers in one sheet, with the source and the pull date beside each.
- Reconcile [two] of the numbers against a second source, such as revenue against the payments report or calls against the phone log. Write down every difference above [tolerance].
- The owner signs the report with a note on any difference that is unresolved, then sends it.
Owner: [name], with [cover name] when away.
Check: the reconciled numbers match their second source within [tolerance], or the difference is explained in a note. The weekly brief we built for an online clinic was reconciled against the founder's own tracking spreadsheet to the dollar before anyone relied on it.
Alert: a number that moves more than [percent] week on week, or a source that returns no data, holds the report until [owner] has checked it.
SOP 9: New-hire onboarding
Trigger: a new hire accepts the offer, [number] days before the start date.
- Before day one, create the accounts the job needs with the roles it needs and no wider access, and name a buddy.
- On day one, give the hire the SOP folder and the list of who owns which task.
- In week one, for each SOP in the hire's role, the hire watches the owner do it once, does it once with the owner watching, then does it alone while the cover checks the result.
- At the end of week one, the hire lists every step that was unclear or missing, and the owner updates the SOP that day.
- On day [number], the owner reviews the hire's first [number] runs and signs off each SOP the hire now owns.
Owner: [hiring manager name], with [cover name] when away.
Check: the hire runs each assigned SOP alone and the cover confirms the result, without the hire needing more than [number] people to explain a task.
Alert: any assigned SOP the hire cannot run alone by day [number] goes to [owner], and the SOP is revised before the next hire uses it.
SOP 10: Month-end
Trigger: business day [number] of each month, once the last payout for the month has landed.
- Export the month's orders, refunds and payouts from the storefront and the payment processor, using the same date range and time zone for each. Shopify notes that its finance reports and its payments report can differ in date range, time zone, timing and totals.
- Walk the payment processor's summary from the starting balance to the ending balance, and match each payout to a bank deposit.
- Compare storefront sales with the processor's activity and give each gap a cause: refunds, fees, disputes, taxes, or a third-party gateway the processor report does not cover.
- Compare the refund total with the processor's Refunds line and explain the gap: refunds to store credit, refunds through a third-party gateway, and related fee adjustments (SOP 3).
- List the open items for your bookkeeper: disputes, paid orders not yet shipped (SOP 2) and purchase orders received but not yet billed (SOP 7).
- Send the pack to [bookkeeper or accountant name] with each difference explained. They decide the accounting treatment.
Owner: [name], with [cover name] when away.
Check: every difference above [amount] has a one-line cause. Shopify says its Payments activity report is not a statement of revenue for accounting purposes, so do not use it as one.
Alert: a payout with no matching bank deposit, or an unexplained difference above [amount], goes to [owner] and [bookkeeper name].
Which SOP to write first
Write the costliest one first. Cost means errors, hours or customers lost, not how annoying the task is. If you cannot tell which that is, start with SOP 1. Orders and reorders draw on the stock count, and scaling ecommerce operations covers how things tend to break as a store grows.
Then take the work the founder does personally that should not be founder-level work. If the founder approves every refund or compiles the weekly report, SOP 3 or SOP 8 is next.
How to keep SOPs alive
An SOP the team does not open is a document, not a system. The first three habits below come from EPA's guidance on SOPs, and the last two from our own work.
- Put a review date on each SOP. EPA gives every one to two years as an example interval and says to revise an SOP whenever the procedure changes. Set yours by how often the steps, apps or people change, and review earlier whenever a check fails or a tool changes.
- Keep one master list of your SOPs. EPA's list records each SOP's number, version, issue date, title, author and status; for a store, add the owner and the date each was last reviewed.
- Withdraw an SOP for a process that is no longer followed, so the list holds only live procedures.
- When an alert fires, act on it, then ask whether the SOP should change. If an alert fires and no one acts on it, fix the owner or the threshold.
- Automate only the steps that are fixed sequences, once people follow them reliably. The cover and the owner still own the SOP.
Check this in your own store
The first four steps change nothing in your store. The last one is a two-week trial run of one SOP.
- List the ten SOPs above in a sheet, one row each.
- For each row, mark whether the task has a written procedure, a named owner, a named cover, a check and an alert.
- Count the rows with a task that someone does but no document. That count is your starting list.
- Pick the costliest row and copy its block into a shared document.
- Fill in the brackets, run it for two weeks, then ask the cover to follow it alone and fix whatever they get stuck on.
When to get help
You can do all of this yourself. Get outside help when you cannot see where your gaps are, when the data sits in systems your team cannot read, or when the founder is still the system. What an ecommerce operations audit covers lists what a good diagnosis returns, and how to choose an ecommerce automation agency lists what to ask. Morsegrid is one option among several. We start with a diagnosis against your live data, then build a system your team can run, and we scope and quote the fix after the diagnosis findings.
Sources
The outside facts in this guide were read at the source on October 18, 2026.
- US Environmental Protection Agency, Guidance for Preparing Standard Operating Procedures (EPA QA/G-6), April 2007. The definition of an SOP, the advice that people who perform the work write the SOP and that someone else tests the draft, and the review, withdrawal and master-list practices.
- Shopify Help Center, Inventory stock counts. Staff count against On hand, a manager approves, and approval applies the difference.
- Shopify Help Center, Refunding orders. Refund permissions, return reasons recorded only on returns, and a refund that cannot be reversed.
- Shopify Help Center, Returns and exchanges. Returns, refunds and exchanges, inspection before a refund, and return and cancellation rules.
- Shopify Help Center, Purchase orders. What a purchase order records, the draft and Ordered states, and receiving through an inventory transfer.
- Shopify Help Center, Understanding inventory states. Incoming inventory is not available to sell until it has been received.
- Shopify Help Center, Shopify Payments activity report. The report is not a statement of revenue for accounting purposes, and it can differ from finance reports in date range, time zone, timing and totals.
- Shopify, Reorder point formula. Reorder point as daily sales velocity times lead time, plus safety stock.
- Morsegrid figures come from our published case studies, with the client names left out on purpose.
Frequently asked questions
- What is an SOP in ecommerce?
- An SOP in ecommerce is the written procedure for one recurring store task, such as the weekly stock count, a refund or the month-end close. It names the trigger that starts the task, the steps, one owner, the check that proves it was done right and the alert that fires when it was not. The method behind it is in our guide to ecommerce systemization.
- What should an ecommerce SOP include?
- Five things: the trigger, the steps in order, a named owner with a named cover, a check and an alert. A procedure with no check has no way to show it failed. Add a review date, and replace any limit, such as an approval amount, with a number you have chosen for your own store.
- Should I automate an ecommerce SOP?
- Write the procedure first and automate later. An automation built on an undefined process spreads the problem faster. Once people follow a step reliably and it is a fixed sequence, a tool can enforce it, and Shopify Flow vs n8n vs Make compares the options. The SOP still needs an owner and an alert for when the automation fails.
Start with the check above and one SOP. If filling in the brackets turns up a number you can't source or a task nobody can explain, book a diagnosis call. We start with the evidence, then scope the fix from it. For the method behind these templates, read ecommerce systemization, and for the terms they use, the ecommerce operations glossary. To see where your team stands today, take the free assessment.