Why Shopify doesn't have native purchase orders

Shopify is a sales platform. Its data model is built around customers, orders, products, and inventory locations — the outbound side of commerce. Purchase orders are an inbound operations tool, and Shopify has made a deliberate product decision to leave that problem to the app ecosystem.

That means every Shopify merchant who buys inventory from suppliers is doing one of three things: using a spreadsheet and email, using a separate ERP system (expensive and usually overkill for small to mid-size stores), or using an inventory management app that adds PO functionality on top of Shopify. This guide covers the correct workflow regardless of which tool you use, and then shows how EZStock automates each step.

The 5-step purchase order workflow

A complete PO workflow has five distinct stages. Each stage has a specific action, a specific output, and a specific failure point if skipped.

  • 1
    Reorder alert fires. When inventory drops to the reorder point you've set for a SKU, you receive an alert. This is the trigger for creating a new PO. Without this step automated, you're either checking inventory manually or reacting after a stockout.
  • 2
    Create the PO as a draft. Open a new PO, select the supplier, add the SKUs that triggered the reorder alert, set quantities, and verify cost prices. The PO stays in DRAFT status while you're building it — you can come back to it and add more items if multiple SKUs from the same supplier need reordering at the same time.
  • 3
    Set quantities and cost prices. This step matters for two reasons: it determines what you pay, and it gives you the cost of goods data that feeds into margin calculations. Entering the wrong cost price at this stage propagates errors into your COGS tracking for the next several months.
  • 4
    Send the PDF to your supplier and mark as SENT. The PO moves from DRAFT to SENT status. At this point, the PO is a committed document — any changes to quantities or cost prices should go through a PO amendment, not a quiet edit, so you have a paper trail.
  • 5
    Receive goods and update inventory. When stock arrives, mark the PO as RECEIVED and enter actual received quantities (which may differ from ordered quantities if a supplier short-shipped). This triggers the inventory update — your Shopify inventory counts go up by exactly the received quantities, automatically.

What a professional PO should include

Suppliers receive POs from many different customers, ranging from handwritten orders to properly formatted documents. A professional PO reduces the chance of errors in fulfillment and sets a more professional tone for the supplier relationship. Here's what every PO should include:

Required PO fields:
  • PO number — unique identifier you assign (e.g. PO-2026-0047)
  • Issue date and expected delivery date
  • Your business name and delivery address
  • Supplier name and contact details
  • Line items — SKU, product name, variant, quantity, unit cost
  • Subtotal, any taxes, shipping cost, total
  • Payment terms (e.g. Net 30, 50% deposit + 50% on delivery)
  • Notes or special instructions (packaging requirements, labeling, etc.)

A PO that's missing the delivery date or payment terms creates ambiguity — the supplier may ship later than you expected or invoice on different terms than you intended. Get these details in writing from the start, on every order.

DRAFT → SENT → RECEIVED status tracking

The three-status PO lifecycle gives you a clear audit trail and lets you quickly see the current state of all open orders at a glance. DRAFT means you're still building or reviewing the order. SENT means the supplier has been notified and the order is in progress. RECEIVED means goods have arrived and inventory has been updated.

Some POs get partially received — a supplier ships 80% of the order in one batch and the remaining 20% a week later. A good PO workflow handles partial receipts: you mark partial quantities received, the inventory updates accordingly, and the PO stays in a PARTIALLY RECEIVED state until the final shipment arrives. Without this, you either update inventory based on what you ordered (inaccurate) or wait until the full order arrives (delayed).

How receiving a PO automatically updates Shopify inventory

The receiving step is where the workflow closes the loop. When you mark a PO as received in EZStock, it calls the Shopify Inventory API and increments the on-hand count for each received variant by the received quantity. This happens at the Shopify location level — if you have multiple warehouse locations, you specify which location received the goods and the inventory update goes to the right place.

This replaces the most error-prone step in the manual workflow: the manual inventory adjustment in Shopify Admin. When you're updating 15 SKUs after a large shipment, manual adjustment means 15 opportunities for a typo. Automatic PO receiving means you enter quantities once in the PO tool and Shopify reflects reality without any manual adjustment.

EZStock PO workflow walkthrough

In EZStock, the PO workflow is accessible directly from a reorder alert. When the alert fires for a SKU, there's a "Create PO" button in the alert email and in the EZStock dashboard. Clicking it opens a pre-populated PO draft with the triggered SKU already added, the quantity suggestion filled based on your reorder quantity setting, and your supplier pre-selected if that SKU has a supplier assigned.

You review the draft, adjust quantities if needed, and click Send — EZStock generates a formatted PDF and emails it to the supplier contact on file. The PO status moves to SENT. When goods arrive, you open the PO from the SENT list, click Receive, enter actual quantities for each line, and confirm. Shopify inventory updates instantly. The PO archives with full history: who created it, when it was sent, when it was received, and what quantities were ordered vs. received.

Common mistakes to avoid

Wrong cost prices: Cost prices entered at PO creation become the COGS data in your inventory records. Using last year's cost price (supplier raised it) or an estimate rather than the actual negotiated price gives you bad margin data for months. Always confirm the current cost price with your supplier before creating the PO.

Not tracking lead time: A PO without a clear expected delivery date has no accountability. You have no way to follow up proactively if a shipment is late. Log the expected delivery date on every PO and set a calendar reminder to follow up with your supplier if it doesn't arrive within 2 days of the expected date.

Manually updating inventory after receiving: This is the most common and costliest mistake in the spreadsheet workflow. A manual adjustment in Shopify creates no link between the inventory change and the purchase order that caused it. If inventory numbers later don't match expected, you have no audit trail to understand why. Always update inventory through the PO receiving process, not through manual adjustments.