Company Purchase Orders: Adding PO Fields to Your Checkout Flow

A complete technical guide for Shopify merchants on collecting purchase order numbers from B2B buyers — why PO numbers matter, how to validate them at checkout, and how Kedra Checkout Rules makes wholesale-grade PO collection work on any Shopify plan.

Company Purchase Orders: Adding PO Fields to Your Checkout Flow

import { Image } from ‘astro:assets’;

Last Updated: April 2026

A wholesale buyer from a hospital procurement office lands on your Shopify store, builds a $4,200 cart of medical supplies, and taps checkout. Their accounts payable team has assigned the order PO number HOSP-2026-04881. Without that number on the invoice you eventually send back, the invoice will not get paid. Not “delayed.” Not “flagged for review.” It will sit in their AP queue indefinitely, fail three-way matching, and bounce back to you 45 days later asking for a corrected document.

This is the quiet revenue leak inside most Shopify B2B operations. The store accepts the order. Fulfillment ships it. Then 60 days of back-and-forth with a procurement team begins, ending with a corrected invoice, a damaged relationship, and one buyer who never reorders.

The fix is structural and it lives at checkout: collect the PO number when the buyer is in the cart, validate it before the order is placed, and stamp it on every downstream document automatically. That single change — done well — is the difference between a B2B store that scales and one that drowns in AP corrections.

This guide is the comprehensive 2026 walkthrough for Shopify merchants who want to do PO collection right. We’ll cover what a PO number actually is, why business buyers can’t pay without one, what Shopify natively supports (and where it falls short), how to validate PO numbers at checkout, and exactly how to set this up using Kedra Checkout Rules — including a pattern that works even if you’re not on Shopify Plus.

Procurement specialist reviewing a purchase order document on a laptop screen

Why PO Numbers Are Non-Negotiable in B2B Commerce

Before we get into implementation, it’s worth grounding the conversation in why this single field carries so much weight. If you’ve come from a D2C background, the PO workflow can feel like ceremonial paperwork. It is not.

The Three-Way Match

In any procurement-driven organization — hospitals, schools, government, manufacturers, large enterprises — accounts payable does not pay an invoice. AP pays a matched set of three documents:

  1. The Purchase Order — issued by the buyer’s procurement team, authorizing the purchase, listing items, quantities, prices, and delivery terms.
  2. The Receiving Document — issued by the buyer’s warehouse or department, confirming what physically arrived and in what condition.
  3. The Supplier Invoice — issued by you, the seller, requesting payment for what was delivered.

AP runs a three-way match: PO ↔ Receiving ↔ Invoice. If quantities, prices, and identifiers align across all three documents, the invoice is approved automatically. If anything is missing — most commonly, a PO number on the invoice that AP can use to find the original PO in their ERP — the invoice falls out of the automated lane and into manual review. Manual review is where invoices die, get delayed, or get sent back.

The PO number is the single most important field in that match. It’s the key that connects everything. Without it, AP’s automation cannot find the authorizing document, and the invoice waits.

The Cost of Missing PO Numbers

For sellers, the cost of not collecting PO numbers shows up in places that don’t trace neatly back to checkout:

  • Lengthening DSO (days sales outstanding) — every missing PO adds 30–90 days to the payment cycle.
  • Higher AP-to-AR cost — your team and theirs spend hours emailing back and forth to reconcile.
  • Failed reorders — a buyer who had a painful first AP experience often quietly switches to a competitor.
  • Negative cash flow — fulfilled orders that aren’t getting paid still cost you to ship and hold.

When Shopify research and B2B benchmark data shows that 80% of B2B sales interactions happen digitally and the global B2B ecommerce market is on track for $36 trillion in 2026, the systems behind those digital orders need to behave the way procurement systems expect. Collecting a PO number isn’t optional decoration — it’s the lubricant of the entire order-to-cash pipeline.

Shipping documents and invoice paperwork laid out on a warehouse desk

What Shopify Natively Supports (and Where It Stops)

Shopify has invested meaningfully in B2B over the last two years, and PO numbers are part of that. Here’s what’s available out of the box, and where most merchants run into walls.

Shopify Plus B2B Checkout Field

If you’re on Shopify Plus and using the native B2B (Company Accounts) feature, Shopify added a dedicated PO number field directly in the B2B checkout. Buyers see it during the place-order flow, the value persists onto the order in admin, and it appears in customer accounts under order history.

You can also configure whether the PO number is required or optional per company, which is genuinely useful — a small wholesaler that doesn’t run formal procurement can keep it optional, while an enterprise customer that legally requires it can have it enforced.

The 2026-04 API: PO Validation Joins Cart and Checkout Functions

As of API version 2026-04, Shopify added PO numbers and billing addresses to the Cart and Checkout Validation Functions input graph, with new error targets specifically for PO number errors. This is a meaningful upgrade: previously, validation was a UI-extension exercise that could be bypassed by anyone clever enough to inspect the network. Now PO validation can be enforced server-side, by a Function, before the order is ever created.

In practice this means a merchant (or an app like Kedra Checkout Rules) can now write rules that check the PO number’s format, uniqueness, length, prefix, and conditional presence — and block checkout if the PO doesn’t match.

Where Native Support Stops

For all that progress, the native Shopify offering still leaves several common B2B needs unfilled:

  1. Plus-only. The native PO field is gated behind Shopify Plus. Most B2B Shopify stores in the world are not on Plus — they’re on Shopify or Advanced, often selling to a mix of wholesale and retail buyers, and they still need PO collection.
  2. No format validation by default. A buyer can type asdf into the PO field and the order goes through. Real PO numbers follow patterns like PO-2026-04881, HOSP-XXXXX, or fixed 10-digit codes. Without validation, junk values flow into your fulfillment workflow.
  3. No conditional logic. You can require the PO field for a Company, but not “require the PO only when cart total > $1,000” or “require the PO only for customers tagged enterprise.”
  4. Visibility for non-B2B customers. Showing the PO field to a retail customer adds confusion, makes the checkout look busy, and dings retail conversion.
  5. Downstream propagation. Even when collected, the PO number doesn’t always show up cleanly on every invoice, packing slip, or fulfillment integration without additional configuration.

This is where conditional checkout customization becomes the bridge between “Shopify supports PO numbers” and “Shopify works for your B2B workflow.”

What “Doing PO Collection Right” Actually Means

Before the implementation, let’s define the bar. A well-designed PO collection flow has the following properties:

RequirementWhat It Means
Visible to right buyersThe PO field appears for B2B/wholesale customers, not retail.
Required when applicableIf the buyer’s account or cart triggers a PO requirement, the field is mandatory and validated.
Format-validatedThe PO number matches a sensible pattern — length, alphanumeric, optional prefix.
Optional when sensibleA small business buyer placing a $200 order shouldn’t have a required PO field blocking checkout.
Persists everywhereThe PO number reaches the order, invoice, packing slip, fulfillment notification, and CSV exports.
Doesn’t slow checkoutValidation happens fast, errors are explicit, and one bad keystroke doesn’t kill the buyer’s flow.

Most stores nail the first one and miss the next four. The rest of this guide is about hitting all of them.

B2B buyer entering order details on a laptop in a modern office

The Architecture: Where Each Piece Lives

A complete PO collection setup touches four layers of your Shopify store. Understanding which layer does what makes it much easier to debug when something goes wrong.

Layer 1: The Checkout UI

This is where the buyer sees and types the PO number. On Shopify Plus B2B, this is the native PO field. On other plans, it’s a checkout block, a checkout UI extension, or a line-item / order-level custom field added by an app.

Layer 2: The Validation Logic

This is the rule that decides whether the entered value is acceptable. It runs at order placement and can:

  • Confirm the field isn’t empty when required.
  • Match the value against a regex (e.g., ^[A-Z0-9]{4,20}$).
  • Check the value isn’t a duplicate of a recent order’s PO.
  • Cross-check against external systems (an ERP, a CSV of valid POs from the customer).

In 2026, this is a Cart and Checkout Validation Function — either the merchant’s own, or one provided by an app.

Layer 3: The Storage

The PO number lives somewhere on the order. The three options are:

  • Native PO field (Plus B2B only) — stored as a dedicated property on the order.
  • Order metafield — robust, queryable, and the recommended pattern for non-Plus stores.
  • Order note attribute — simpler but less structured; harder to extract reliably.

Layer 4: Downstream Propagation

Once stored, the PO number needs to surface on:

  • The customer’s order confirmation email.
  • Invoices generated by your invoicing app (Sufio, Order Printer Pro, etc.).
  • Packing slips for the warehouse.
  • Fulfillment integrations (ShipStation, ShipBob) — most modern shipping apps now support the Shopify B2B PO field directly.
  • CSV exports for AR reconciliation.

Every layer matters. A PO collected at checkout that doesn’t reach the invoice is the same as no PO at all.

The Kedra Checkout Rules Approach to PO Collection

Native Shopify PO collection works for Plus stores with simple needs. For everything else — most non-Plus stores, all stores blending B2B and D2C, and any store that wants conditional or validated PO collection — Kedra Checkout Rules is built for the gap.

Here’s how the workflow looks.

1. Decide When the PO Field Should Appear

Kedra Checkout Rules lets you define conditions under which a PO field is shown, hidden, required, or validated. The most common B2B trigger conditions are:

  • Customer tag. If a customer has the tag wholesale, b2b, net-30, enterprise, or procurement, show the PO field.
  • Cart value. Above a threshold (e.g., $500 or $1,000), show the PO field.
  • Customer email domain. If the email is on a known business-domain list, show the PO field.
  • Shipping address type. Commercial address → show PO. Residential → hide it.
  • Cart contains B2B-only product or collection. Some catalogs are explicitly wholesale; their cart should always require a PO.

You can combine these. The most common production rule looks like:

Show the PO field if the customer has tag wholesale OR the cart total is over $750 OR the cart contains a product from the “Wholesale Catalog” collection.

2. Decide When the PO Field Is Required vs Optional

Showing a PO field is one rule. Making it required is another, and worth keeping separate so you can tune them independently.

A typical setup:

  • Optional for cart values $1–$1,500.
  • Required for cart values > $1,500 OR customers tagged enterprise.
  • Required for any cart paying with the “Net 30 Invoice” payment method.

Decoupling visibility from required-ness gives smaller B2B buyers the ability to add a PO if their procurement team needs one, while not blocking checkout for the business owner who’s buying with a personal card.

3. Validate the Format

Junk values are the silent killer of PO workflows. A Cart and Checkout Validation rule with a regex pattern stops them at the door.

Common patterns:

PatternRegexUse Case
Alphanumeric, 4–20 characters^[A-Z0-9-]{4,20}$General default
Strict 10-digit numeric^\d{10}$Customers with fixed-length PO numbers
Prefix-required^PO-\d{4}-\d{5,}$Customers using PO-YYYY-NNNNN
Customer-specific^HOSP-\d{4,}$Per-customer pattern (hospital networks)

When the pattern fails, the buyer gets an explicit, helpful error like “PO number must start with PO- and contain at least 4 digits.” No silent failure. No accepted-then-bounced invoice 45 days later.

4. Block Common Junk Inputs

Beyond format validation, a few cheap rules catch most of the abuse you’ll see in real B2B traffic:

  • Reject empty strings, whitespace-only values, single characters.
  • Reject obvious test inputs: test, TEST, n/a, none, placeholder, 1234.
  • Reject the same PO number used on this customer’s last 3 orders (often a sign of an autocomplete-driven mistake).
  • Reject special characters that break downstream CSV exports: ,, ", leading/trailing whitespace.

These rules sound paranoid until you see your first six months of raw B2B PO data. The amount of asdf and 123 that gets typed in unchecked PO fields is genuinely surprising.

5. Persist to a Stable Storage Location

Kedra Checkout Rules writes the validated PO number to an order metafield with a stable namespace and key, e.g., kedra.po_number. This matters for two reasons:

  • Queryable. Order metafields can be queried via the Shopify Admin API and surfaced in any reporting tool, ERP integration, or CSV export.
  • Stable. Unlike note attributes, metafields don’t get accidentally cleared when an order is edited.

If you’re already using the native Shopify B2B PO field on Plus, Kedra can write to that field directly. If not, the metafield pattern works on every plan.

6. Surface It Downstream

Once stored as a metafield, the PO number is available to:

  • Order confirmation emails — add a {{ order.metafields.kedra.po_number }} Liquid snippet to your email template.
  • Sufio / Order Printer Pro invoices — both apps support pulling order metafields onto invoices and packing slips. Sufio has documented PO support specifically.
  • Fulfillment apps — ShipStation and similar platforms can map order metafields to internal order references that print on shipping labels.
  • CSV exports — Shopify’s order export and most reporting apps include order metafields.

The result: a PO number entered once at checkout, validated automatically, and stamped on every document that touches the order.

Warehouse worker scanning a packing slip showing a clearly visible PO number

A Real-World Setup Walkthrough

Here’s a complete configuration for a B2B/D2C hybrid Shopify store on the Advanced plan (no Plus required), selling industrial supplies to both small businesses and large enterprise procurement teams.

Store Profile

  • ~30% of revenue is wholesale, 70% is D2C.
  • Wholesale customers are tagged wholesale and a smaller subset are tagged enterprise.
  • AOV: $90 D2C, $1,400 wholesale.
  • Pain point: 22% of wholesale invoices currently fail AP three-way matching due to missing or malformed PO numbers.

Goal

Eliminate AP-failed invoices without:

  • Adding friction to D2C checkout.
  • Forcing the small wholesale buyer (who doesn’t issue formal POs) into a required field.
  • Migrating to Shopify Plus.

The Rule Set

Rule 1 — Show PO field

IF customer.tags includes "wholesale"
   OR cart.total >= $750
   OR shipping_address.address_type == "commercial"
THEN show field "po_number" with label "Purchase Order Number (optional)"

Rule 2 — Make PO required for enterprise tier

IF customer.tags includes "enterprise"
   OR cart.total >= $2000
   OR payment_method == "Net 30 Invoice"
THEN field "po_number" required: true, label: "Purchase Order Number (required)"

Rule 3 — Validate format

IF field "po_number" is not empty
THEN match regex: ^[A-Z0-9-]{4,30}$
ELSE error: "PO number must be 4–30 characters, letters, numbers, or hyphens only."

Rule 4 — Block junk values

IF field "po_number" matches one of [test, TEST, none, n/a, placeholder, 1234, asdf]
THEN block checkout with error: "Please enter a valid purchase order number from your procurement system."

Rule 5 — Hide PO field for retail D2C

IF customer.tags does NOT include "wholesale"
   AND cart.total < $750
   AND shipping_address.address_type != "commercial"
THEN hide field "po_number"

Rule 6 — Persist to metafield

ON order_create
SAVE field "po_number" TO order.metafield "kedra.po_number"

Rule 7 — Surface in confirmation email

In Shopify admin → Settings → Notifications → Order confirmation, add a conditional Liquid snippet:

{% if order.metafields.kedra.po_number %}
  <p><strong>Purchase Order Number:</strong> {{ order.metafields.kedra.po_number }}</p>
{% endif %}

That’s the entire setup. Seven rules. Two evenings of configuration and testing. The result: enterprise customers can no longer place an invoice-paid order without a properly formatted PO; small wholesale customers can optionally add one if their procurement team wants it; D2C customers never see the field at all.

In production stores running this exact pattern, AP-failed invoices typically drop from double-digit percentages to under 1% within the first billing cycle.

The Common Mistakes That Cost B2B Merchants Real Money

After watching a lot of Shopify B2B implementations, the same mistakes show up over and over. Avoid these and you’ll skip months of pain.

Mistake 1: Treating PO Number as a Note

It’s tempting to ask buyers to “add the PO number in the order notes field.” Don’t. Order notes are unstructured, hard to extract reliably, and frequently get truncated or stripped by integrations. PO numbers belong in a dedicated field with structured storage.

Mistake 2: Required for Everyone

Forcing every wholesale customer through a required PO field is the most common over-correction. Many small B2B buyers don’t have a procurement team and don’t issue PO numbers — they’re just buying for their business. A required field blocks them. Use conditional requirements based on cart value, customer tier, or payment method.

Mistake 3: No Validation

Collecting raw, unvalidated input is barely better than not collecting at all. If half your “PO numbers” are 1 or xx, you’ll still hit AP failure on every one of those invoices. Format validation is cheap and high-impact.

Mistake 4: PO Stored, but Invoice Doesn’t Show It

A surprising number of stores collect PO numbers cleanly at checkout and then send invoices that don’t surface them. The buyer’s AP team can’t match what isn’t on the document. Always confirm the PO number flows to every downstream document — invoice, packing slip, confirmation email, CSV.

Mistake 5: One Pattern for All Customers

Different buyers use different PO formats. A hospital uses HOSP-XXXXX. A school district uses SD-2026-XX. A federal agency uses fixed-length numeric. If you have a small number of large customers, consider per-customer validation patterns rather than one global regex.

Mistake 6: Ignoring Mobile

A meaningful share of B2B procurement is now mobile — over 60% of B2B buyers use phones for research and an increasing share for ordering. A long checkout with extra fields is harder on mobile. Test the PO field on a phone, make sure error messages are readable, and don’t bury “Place Order” under a long error block.

SEO and Strategic Benefits Beyond AP

Cleaning up PO collection isn’t just an operational fix — it has a few quiet strategic benefits.

Wholesale customer retention. AP-friendly suppliers get reordered. AP-difficult suppliers get replaced. A clean PO workflow is a retention multiplier you don’t see in the dashboard.

Account expansion. When a procurement team’s first order goes through cleanly — PO captured, invoice matched, payment automatic — they’re far more likely to roll your store out to other departments, locations, or subsidiaries.

Search visibility. Pages that explicitly mention “B2B,” “wholesale,” “purchase order,” and “net terms” rank for buyer-intent queries that have very high commercial value. Stores that surface their B2B PO support on a dedicated landing page or wholesale FAQ benefit from organic traffic that’s pre-qualified.

Lower DSO = healthier business. A 14-day improvement in days sales outstanding is the same as borrowing free working capital. Multiply that across a year of wholesale revenue and the savings dwarf the cost of the apps doing the work.

Implementation Checklist

If you’re ready to upgrade your B2B checkout, here’s a step-by-step you can run through this week.

  1. Audit current state. Pull the last 90 days of wholesale orders. How many have a PO number? How many AP-failed and had to be reissued?
  2. Talk to your three biggest wholesale customers. Ask exactly what their AP team needs on the invoice. Most will tell you the format, the field name, and the deadline rules.
  3. Define your tags and segments. Make sure wholesale and enterprise (or whatever taxonomy fits) are applied consistently across customers.
  4. Install Kedra Checkout Rules.
  5. Configure the seven rules from the walkthrough above, adapted to your AOV, tags, and customer mix.
  6. Map the order metafield into your invoicing app (Sufio, Order Printer Pro), email templates, and fulfillment integrations.
  7. Test with three test orders — one D2C (PO field should be hidden), one small wholesale (optional), one enterprise (required, validated, persisted).
  8. Communicate to wholesale customers. A short email: “We’ve upgraded our checkout to make AP matching easier. You can now enter your PO number directly during ordering and it will appear on every invoice.”
  9. Track results for 30 days. Compare AP-failed invoice rate, DSO, and wholesale reorder rate before/after.

Common Objections (And Why They Don’t Hold Up)

“Our wholesale buyers don’t really care.”

Some don’t. Their AP teams do. The buyer is the relationship; the AP team is the cash. A workflow that pleases both is the only one that scales.

“We’re not on Plus, so we can’t do B2B properly.”

Untrue in 2026. The native PO field is Plus-only, but the entire workflow described in this guide runs on any Shopify plan with Kedra Checkout Rules. Plus is nice; it isn’t a precondition.

“We’ll add a PO field later when wholesale grows.”

The cost of fixing AP issues after you have 100 wholesale customers is enormous compared to setting it up before. The smaller and earlier the better.

“Our invoicing is manual anyway, so we just type the PO from the order notes.”

This works when wholesale is 5% of orders and one person handles AP. It collapses the moment that team needs to scale. Better to structure the data now and adopt automated invoicing whenever you’re ready.

Final Take

PO numbers are not paperwork. They are the single most load-bearing identifier in the entire B2B order-to-cash pipeline, and they belong in your checkout — collected, validated, stored cleanly, and surfaced on every document that follows.

Shopify Plus solves part of the problem with its native B2B field. Everyone else — and every Plus store with non-trivial conditional needs — is better served by a checkout customization layer that can show, hide, require, validate, and persist the PO number based on real-world rules.

Kedra Checkout Rules was built for that work. The seven-rule pattern in this guide is enough to solve the majority of B2B PO collection problems on a Shopify store, on any plan, in an evening of configuration.

Get the field right, and the rest of the order-to-cash pipeline follows. Get it wrong, and every wholesale invoice becomes a 45-day argument with someone else’s AP team. The choice — and the implementation — is one short rule set away.

K

Kedra Team

Expert insights on Shopify development and e-commerce growth strategies.