B2B Wholesale Quote → Draft Order, Automated
Every wholesale order means 10+ manual emails and a Draft Order built by hand. Draft Orders work on every Shopify plan — here's the automation pattern.

The Problem
A wholesale buyer emails you: “200 units of SKU-14, 75 of SKU-22, need them before the 20th, here’s our tax ID.”
What happens next is the same every time. Your ops person emails back for the shipping address. The buyer asks about wholesale pricing. You build a Draft Order by hand inside Shopify — line by line, quantity by quantity. You email the buyer a link to pay. They ask you to amend one quantity. You rebuild the order. Another email, another rebuild.
For a store that does five wholesale orders a week, that is tens of manual emails and half a dozen hand-built Draft Orders — every single week. None of it needs a human in the loop, and none of it should require upgrading your plan.
The Misconception: “We Need Shopify Plus for B2B”
Shopify’s native B2B system — with wholesale price lists, company profiles, and tax-exempt customer accounts — is a Plus feature. At roughly $2,300/month, most SMBs are priced out, and they reasonably assume “B2B is a Plus thing.”
That assumption is wrong, and it’s expensive.
Draft Orders work on every Shopify plan. The Admin API’s draftOrderCreate mutation is not Plus-only. The gap for a standard-plan store isn’t the platform — it’s that the workflow is manual: someone collects the details over email, then rebuilds the same order by hand. The moment you automate the workflow, you get B2B quoting on a Basic or Shopify plan without paying for Plus.
This is the honest pitch: Draft Orders are free on your existing plan. The value is automating the 10+ emails and the hand-built Draft Order, not switching to Plus.
What the Manual Workflow Actually Costs
| Step | Who does it | Time |
|---|---|---|
| Buyer emails quantities + tax ID | Ops person reads & replies | 5 min |
| Collect shipping address | Email back & forth | 15–30 min |
| Apply wholesale pricing by hand | Ops person looks up price list | 10 min |
| Build the Draft Order (line by line) | Ops person in Shopify admin | 10–20 min |
| Email the secure payment link | Ops person | 5 min |
| Amend quantities after buyer changes mind | Rebuild + re-email | 10–20 min |
Per wholesale order: roughly 1 hour of manual work and 10+ emails. At five orders a week, that’s about 5 hours of ops time and 50+ emails — every week, just to move orders from a buyer’s email into Shopify.
The Pattern: Quote Intake → Draft Order on Submit
The fix is a self-serve wholesale intake form that builds the Draft Order for you.
Wholesale buyer opens a public quote form
↓
Picks products, enters quantities, tax ID, notes
↓
Form POSTs to your server
↓
Your server creates a Draft Order via the Shopify Admin API
↓
Shopify returns a Draft Order with a secure invoice URL
↓
Send the invoice link to the buyer · log the order
↓
Buyer pays → Draft Order completes → real Order created
The key API call is the GraphQL draftOrderCreate mutation, which requires the write_draft_orders access scope:
mutation draftOrderCreate($input: DraftOrderInput!) {
draftOrderCreate(input: $input) {
draftOrder {
id
orderUrl
}
userErrors {
field
message
}
}
}
{
"input": {
"note": "Wholesale order — 200 x SKU-14, 75 x SKU-22",
"email": "buyer@example.com",
"taxExempt": false,
"lineItems": [
{ "variantId": "gid://shopify/ProductVariant/808950810", "quantity": 200 },
{ "variantId": "gid://shopify/ProductVariant/655441491", "quantity": 75 }
],
"appliedDiscount": { "value": 25, "valueType": "PERCENTAGE", "title": "Wholesale" }
}
}
(Note: the REST /draft_orders.json endpoint still exists, but the REST Admin API was deprecated as of October 2024 — new builds should target the GraphQL Admin API.)
The lifecycle, end to end
Once the Draft Order exists, the rest is three documented steps:
draftOrderCreate— builds the order with customer, line items, and wholesale discount.draftOrderInvoiceSend— emails the buyer a secure checkout link. No manual email, no copy-paste of the URL.draftOrderComplete— when the buyer pays (or you confirm a payment outside Shopify), the Draft Order transitions into a real order.
Draft Orders were built for exactly this: sell at wholesale rates, invoice via a secure link, and take payment outside the checkout if that’s what your wholesale relationship calls for.
What About the Tax ID and Wholesale Pricing?
Two pieces of B2B detail that feel like blockers, and how the pattern handles them:
Tax ID / tax-exempt
Wholesale buyers are often tax-exempt. Your intake form captures the tax ID and notes, and you set taxExempt on the Draft Order input. You can also attach the tax ID as a line-item or order note so it lives on the order record — no more hunting through an email thread to find “who was this PO from.”
Wholesale pricing
Start with a fixed wholesale discount per product or a blanket percentage (the appliedDiscount on the mutation). The price list lives in your code, not in someone’s head or a stale spreadsheet — when a rate changes, you change it once and every future quote is correct.
If you grow into company-specific price lists, that’s a natural extension: a small company → discount table your server looks up before building the Draft Order. Same pattern, just more logic between the form and the API call.
The Cost Comparison
| Approach | Monthly cost | Who builds the order | Emails per order | Per-order time |
|---|---|---|---|---|
| Manual (email + hand-build in admin) | $0 (but ops hours) | Your team, by hand | 10+ | ~1 hour |
| Shopify Plus B2B | ~$2,300/mo | Native B2B system | Fewer, still manual setup | Less, but paywalls the feature |
| Custom quote → Draft Order automation | ~$20/mo (VPS hosting) | Automated on submit | 1 (the invoice link) | ~15 seconds |
The custom approach’s monthly cost is just hosting — the same infrastructure that handles your other Shopify webhooks. The one-time build cost is typically 8–12 hours of development, and it works on the plan you already pay for.
This Is Not Theoretical
This is the exact workflow behind the live automation demo — Shopify automation that replaces manual order handling. The Draft Order direction is the flagship use case of that build: a public quote intake that turns a buyer’s browser session into a real order without an ops person touching it.
None of this requires Shopify Plus. It requires a plan (any plan), the write_draft_orders scope on a custom app, and a small server that translates a form submission into the right API call.
Summary
| Concern | Manual | Automated |
|---|---|---|
| Emails per wholesale order | 10+ | 1 (the invoice link) |
| Time per order | ~1 hour of ops time | ~15 seconds |
| Plan required | Any (manual anyway) | Any — no Plus needed |
| Wholesale pricing | Hand-looked-up | Applied in the API call |
| Tax ID / notes | Lost in email threads | Stored on the order |
| Scales past 10 orders/week | Breaks | Built for it |
If your team is still copying quantities out of a buyer’s email and rebuilding Draft Orders by hand, the fix is a days-long build — not a $2,300/month plan upgrade.
This article is part of the Shopify automation series. If you are running a wholesale line on a standard Shopify plan, book a 20-minute fit call — I will map your quote→order workflow and tell you exactly what automation replaces.