ERPNext Africa · operating playbook

Made-to-order & curated Shopify brands on ERPNext

How a design-led brand that sells on Shopify — some products held in stock, some built bespoke to order, much of it sourced from specialist makers — should set ERPNext up so finance, operations and the warehouse all read from one truth.

The shape of the problemThese brands usually run two flows at once: a stocked catalogue made ahead of demand and sold off the shelf, and bespoke work built to order against a deposit — much of it produced by outside makers, not in-house. Cash and stock behave differently across the two. ERPNext keeps them straight only if it is set up around how the product is really made and sold, not around accounting alone. Companion to Operating with Shopify and the Shopify → ERPNext setup.

Two demand models, one business

A stocked line and a bespoke line behave differently at every step. ERPNext has to tell them apart — flag each item's model, and let each order line route down the right path (a single order can contain both).

DimensionStocked · make-to-stockBespoke · make-to-order
Sold on Shopify asIn stock — ships from the shelfMade to order — lead time / preorder
Triggers productionReorder level / min-max / forecastThe customer's Sales Order
PaymentFull at checkoutDeposit up front, balance on delivery
Revenue recognisedAt sale / dispatchOn delivery (balance invoice)
Where value sitsFinished-goods inventory (asset)Work-in-progress until delivered
Shopify inventoryTwo-way sync — live available qty pushed backNot stock-tracked
Key ERPNext leversItem (stock) · Reorder Level · Production PlanSales Order · BOM · Work Order
The website's “in stock” number is an ERPNext numberFor stocked lines, the quantity Shopify shows as available is your ERPNext finished-goods stock. If the two drift you either oversell (and disappoint) or hide sellable stock — so the stocked side lives or dies on inventory accuracy and a reliable two-way sync.

Sourcing from multiple specialist makers

Many of these brands don't make everything themselves — they curate. One catalogue might be filled by a soft-furnishings maker, a lighting maker and a furniture maker, plus a long tail of smaller suppliers. This is a second axis on top of stock-vs-bespoke: who makes it — you, or a supplier.

Worked example — three makers, one catalogue

Maker (Supplier)Supplier GroupCategory (Item Group)Typical buy mode
Soft-furnishings workshopSoft furnishingsShades & BeddingStock the fast lines · make-to-order the custom sizes
Lighting makerLightingLamps & LightsStock the bestsellers · dropship or to-order the rest
Furniture makerFurnitureTables & Case goodsMostly made-to-order (lead time) · a few display lines stocked

The setup that makes it work

  • Suppliers grouped by discipline — one Supplier per maker, in Supplier Groups (Lighting, Soft furnishings, Furniture), each with its lead time and payment terms.
  • Item Groups by category · default supplier per item — so reporting rolls up by product line and a purchase suggests the right maker automatically.
  • Buy for stockPurchase OrderPurchase Receipt into the finished-goods warehouse → available on Shopify; replenish on reorder level.
  • Buy to order — the customer's Sales Order raises a Purchase Order (or Subcontracting Order) to the maker; receive it, then deliver to the customer.
  • Dropship — for bulky or slow lines, flag the item so the maker ships direct to the customer and no stock touches your warehouse.
  • Landed cost — a Landed Cost Voucher adds freight, import and handling to item cost, so margin isn't overstated.
Adding “other suppliers” later is just repetitionA new maker is a new Supplier in the right group; their products are Items in the right category with them as default supplier. The catalogue, buying modes and reporting all extend with no rework — which is the point of setting the structure up deliberately now. The procurement spine stays the same: Purchase OrderPurchase ReceiptPurchase Invoice, and you track each supplier's on-time delivery like your own floor.

Finance — set the ledger up to answer questions, not just file returns

The chart of accounts you design in week one decides which questions you can answer in year one.

  • Split revenue — and matching cost of sales — by product line. The single biggest lever. If every sale lands in one Product Sales account you can never see margin per line; give each line its own income and COGS account, or use a Cost Center / Accounting Dimension. Decide the lines up front.
  • Book deposits as a liability; recognise revenue on delivery. Post customer deposits to a Customer Deposits Received liability, not to income. Recognise revenue and its COGS when the product is delivered and the balance is invoiced, so they land in the same month.
  • Carry finished-goods stock as an asset; recognise at sale. Stocked catalogue items are inventory you own until sold — on the balance sheet at cost, with revenue and COGS landing together at dispatch, no deposit, no deferral.
  • Treat the undelivered order book as the forward view. Open Sales Orders not yet delivered are future revenue and WIP — report the backlog and how much is already cash-secured by deposits.
  • Reconcile to the accounts off the GL, not raw invoices. Invoice documents include proformas, credit notes and intercompany lines and read far above recognised revenue; the GL Entry income accounts are the truth.
  • Load budgets so a forward-looking P&L compares against a real plan.
PitfallOne revenue account plus deposits booked as income — a P&L that swings on cash timing and can't show margin by line. Fix it before the first month closes.

Operations — the order is a promise; production keeps it

Most failures here aren't software — they're a step someone stopped doing in ERPNext. (This covers what you make in-house; sourced products go via the makers above.)

  • One Sales Order per customer order — the contract. It carries items, price, promised delivery date and deposit; everything downstream hangs off it.
  • Open and close every Work Order. The discipline that matters most: mark work started on the floor and completed when it comes off. Un-closed work orders make WIP inflate forever and on-time-delivery meaningless.
  • A costed BOM per product drives material requirements, planned cost and — with actuals — real margin per job.
  • Build to the shelf as well as to the order. Stocked lines are produced ahead of demand via Production Plan and reorder points — run those replenishment work orders on the same start/close discipline.
  • Measure on-time delivery against the promised date, per order line — the best pulse of whether ops keeps the storefront's promises.

Warehouse & stock — keep the system equal to the shelf

Every dashboard upstream is only as good as whether system stock matches what's physically there.

  • Discipline the item master and category every item. Consistent codes; each item tagged finished good / raw material / consumable, and within finished goods, its product line. No category means no product-line reporting anywhere.
  • Model your real spaces as warehouses / bins — raw store, WIP, finished goods, dispatch — so counts and WIP valuation match reality.
  • Post movements as they happen, not in weekly batches — issue to production, receive finished goods, dispatch on delivery, in ERPNext, at the moment it happens.
  • Finished-goods stock is your shop window. For stocked lines the shelf quantity is the quantity the website offers — count often and keep the two-way Shopify sync honest.
  • Reorder levels on raw materials raise a Material Request before a build stalls on a missing part.
  • The Delivery Note is the handoff to finance — it moves stock out and triggers cost of sales, keeping dispatch and revenue recognition in step.

Shopify ↔ ERPNext — who owns what

Shopify is the shop window; ERPNext is the system of record. Keep the storefront simple and let ERPNext own production, stock and finance.

JobWhere it lives
Selling, storefront, checkout, marketingShopify
Orders & customers → Sales Orders / InvoicesSync in to ERPNext
Finished-stock levels of stocked linesSync out to Shopify (don't oversell)
Production, stock, purchasing, the ledgerERPNext
SKU ↔ Item codeMapped 1:1, exactly and consistently
Rule of thumbIf a decision is about selling, it belongs in Shopify. If it's about making, holding or accounting for the product, it belongs in ERPNext. Don't split one responsibility across both — and decide up front how deposits, VAT and non-stocked made-to-order items behave in the sync.

Go-live checklist, by role

OwnerIn place before go-liveWhy it matters
FinanceRevenue + COGS accounts split by product lineMargin by line becomes possible
FinanceDeposit liability account & recognition-on-delivery ruleP&L reflects earnings, not cash timing
FinanceReconciliation to management accounts via GLERPNext ties to the accountant's number
OperationsCosted BOM per product lineMaterial needs + real margin per job
OperationsWork-order start/close routine agreed with the floorHonest WIP & on-time delivery
WarehouseItem master coded, every item categorisedProduct-line reporting end to end
WarehouseWarehouses/bins model the real spacesCounts & WIP match reality
SupplySuppliers grouped; default supplier + lead time per itemPurchasing routes to the right maker
AllEvery item flagged stocked vs made-to-orderRight fulfilment path; no overselling
AllShopify SKU ↔ Item code mapping verifiedThe integration stays reliable

The most common ways it goes wrong

  1. One revenue account. Everything in Product Sales → no margin by product line, ever.
  2. Deposits booked as revenue. The P&L swings on when cash lands, not when product is earned.
  3. Work orders never closed. WIP inflates indefinitely; on-time-delivery becomes noise.
  4. Item codes drift from Shopify SKUs. The integration mis-maps and stock/orders silently diverge.
  5. Stock posted in weekly batches. System stock stops matching the shelf; every downstream report is suspect.
  6. Reconciling to accounts off raw invoices. Invoice documents read far above recognised revenue — reconcile on the GL.
  7. Two entities summed together. Intercompany value counted twice; group revenue looks several times reality.
  8. Items with no category. No product-line dimension exists, so no product-line reporting can.
  9. Stocked and bespoke not distinguished. The same item sold both ways — oversell shelf stock, or carry phantom made-to-order “inventory”.
  10. No default supplier or landed cost. Purchases route to the wrong maker and freight/duty never hits item cost — COGS understated, margin flattered.