Wholesale Inbox

Guide

Wholesale order management for Shopify brands: PO to shipment

A simple wholesale order management process for Shopify brands whose retailers email POs, from intake and checks to drafts, invoicing and shipping.

ยท 4 min read

Most Shopify brands that sell wholesale start the same way: a few stores ask to carry the product, the orders arrive by email, and someone types them in. That works for five retailers. At twenty, POs sit unread over a weekend, a case quantity gets entered as units, and a store calls asking where its order is.

This guide sets out a simple wholesale order management process for a Shopify brand, from the moment a PO arrives to the moment it ships. It suits a team of one to five people and needs no new software, though it points out where software saves time.

A packing table with cartons on a pallet, a purchase order pinned to a corkboard and an open envelope
Every wholesale order starts as a document someone sent you. The process starts there too.

Where wholesale orders come from

Before choosing a process, list how orders reach you today. For most brands it is a mix:

  • Emailed purchase orders. A PDF from the retailer's buying system, an Excel or CSV file, a list typed into the email, or a photo of a paper order form.
  • A wholesale marketplace, such as Faire, which takes the order and payment for you.
  • Sales reps who send orders on the retailer's behalf.
  • A wholesale portal or order form on your own store, where retailers log in and order at wholesale prices.
  • Phone calls and texts from long-standing accounts.

Marketplaces and portals already produce structured orders. The work in this guide is mostly about the first and last groups: orders that arrive as documents and messages, in the retailer's format, using the retailer's item numbers.

The ways to get them into Shopify

RouteHow it worksBest for
Draft orders by handYou type each PO into a Shopify draft order and convert it once checkedLow volume, few lines per PO
Shopify's B2B featuresCompany accounts, catalogs with wholesale prices, payment terms. Which plans include them changes, so check your planRetailers willing to order through your store
A wholesale portal appRetailers log in to a wholesale storefront and order themselvesRetailers who will use a portal
A PO-reading toolYou forward the PO and get a draft order back to reviewRetailers who will keep emailing POs

Many brands use two routes: a portal or B2B setup for retailers who will use it, and something else for the chains and independents who send a PO and will not change.

A process that holds up

1. One intake address

Ask every retailer and rep to send POs to one shared address, such as orders@ on your domain, not to a person's inbox. Then a holiday or a sick day does not stop orders, and you can see every PO in one place.

2. Log every PO the day it arrives

Keep a log, even a spreadsheet, with one row per PO. These columns cover most needs:

ColumnWhy
Date receivedShows how long orders wait
RetailerWho to contact
PO numberWhat their payables team will quote back to you
Ship window or cancel dateOrders shipped late can be refused
StatusReceived, checked, entered, confirmed, shipped
Shopify draft or order numberLinks the log to Shopify

3. Check before you enter

Most wholesale errors are caught or missed here. For each line, check:

  • The item. Match the retailer's item number or barcode to your SKU. Keep a mapping per retailer, since many use their own numbers.
  • The unit. Is the quantity in eaches, inner packs or cases? Convert to the units you sell in Shopify.
  • The price. Compare it with your wholesale price list and with the retailer's last order. A difference is either an old price list on their side or a promotion you agreed to. Find out which.
  • Minimums. If you have an opening order minimum or a case minimum, check the PO meets it.
  • The ship-to. Chains often ship to a distribution center that differs from the store address on the email signature.

4. Enter it as a draft order

Enter the checked PO as a Shopify draft order, with the PO number in the note and a wholesale tag. A draft can still be changed, which matters when a retailer replies to your confirmation with a correction.

5. Confirm to the retailer

A short confirmation catches problems while they are cheap to fix. A template:

Subject: Confirming PO 4471

Hi Dana,

Thanks for PO 4471. We have it as 5 lines, $380.10 before shipping, shipping to your Portland store by October 30.

One change: Maple Pecan Bar is $3.85 a unit on our current wholesale list, not $4.10, so we have used $3.85.

Reply if anything looks wrong. Otherwise we will ship as above.

6. Convert, invoice and ship

Turn the draft into an order the way the retailer pays: an invoice for card payment, payment terms for net 30, or mark it paid if they paid another way. Then fulfill it like any other order, and send tracking to the buyer who placed the PO.

7. Close the row in the log

Mark the PO shipped with the date. Once a month, look at the time from "received" to "entered". If POs wait more than a day or two, intake or entry is the bottleneck.

Where the time goes

For most small teams, step 4 takes the longest: retyping every line, looking up SKUs, converting cases and fixing prices. It is also where typos happen.

Wholesale Inbox takes that step. You forward a retailer's PO to your Wholesale Inbox address. It reads the lines, matches them to your Shopify SKUs and barcodes, remembers each retailer's item numbers once you confirm them, and flags unknown SKUs and prices that differ from your price list or the retailer's last order. You review the PO next to the original and approve it, and it arrives in Shopify as a draft order with the PO number and ship-to (the ship-to goes in the order note when Shopify does not accept the address). Steps 5 to 7 stay with you.

Forward a retailer's PO, get a Shopify draft order back

Forward a purchase order (PDF, Excel or CSV file, email or photo) to your Wholesale Inbox address and get a draft order matched to your SKUs, with mismatches flagged for you.

$79/ month

Get started

Cancel any time.