Blog · 30 September 2026 · 8 min read

Tracking supplier invoices against Shopify purchase orders

Shopify's purchase order has no invoice status. How to record invoice, due date and payment on each PO, catch overdue bills and export them for your books.

There is a folder in most small retailers' inboxes called something like “Supplier invoices” and it is where cash flow goes to be surprised. The PDF arrives a week after the stock, sometimes before it, sometimes for half of it. Somebody has to work out whether the invoice matches what was ordered, whether it matches what actually turned up, when it is due, and whether it has already been paid. In a store with eight suppliers that is a Friday afternoon job. In the run-up to the holiday season, when every supplier ships at once and half of them want payment before the goods have sold, it is the difference between knowing your position and guessing it.

Shopify does not help with this, and it is not trying to. This post is about where the invoice fits into a purchase order, what the native PO leaves out, and how Restock Ops keeps the invoice on the PO so the Friday afternoon job becomes a filter.

Three documents, one delivery

Accountants call it a three-way match. The purchase order says what you asked for and at what cost. The receipt says what arrived and when. The invoice says what the supplier wants to be paid. When all three agree you pay; when they disagree you find out why before you pay. It sounds bureaucratic, and in a large company it is, but the underlying question is one every store owner asks anyway: is this bill right, and have I already paid it?

The trouble is that the three documents usually live in three places. The PO is in Shopify or a spreadsheet, the receipt is in someone's memory of unpacking boxes, and the invoice is a PDF in an email. Matching them means opening all three. Skipping the match means paying for units that never arrived, paying an invoice twice because two people had the email, or missing a due date and losing the early-payment discount that made the supplier's terms attractive in the first place.

What Shopify's purchase order records

Shopify's native purchase order, described in Creating purchase orders, has a supplier, a destination location, line items with cost, shipping and tax fields, an estimated arrival date, a reference number and a note. Receiving it, per Receiving inventory, moves quantities from incoming to available. That is the purchasing half of the story done reasonably well.

There is no field for the supplier's invoice number, no invoice status, no due date, no record of payment. The PO closes when the goods are received, whether or not the bill has been settled. If you want to know which of your open POs have unpaid invoices attached, Shopify cannot tell you, because it does not know an invoice exists.

Putting the invoice on the purchase order

Restock Ops gives each purchase order an Invoice section with four fields: invoice number, status, due date and invoice total. They work like this.

  • Status is one of No invoice, Unpaid or Paid. A draft PO has no invoice. The moment you mark it as ordered, the status flips to Unpaid, on the basis that once you have committed to buy, a bill is coming. When you pay it, set it to Paid and the payment date is recorded.
  • The due date is yours to enter when the invoice arrives. The supplier record holds payment terms in days, shown as Net 30 or Net 60 in the supplier list, so the arithmetic is one glance away rather than a search through old emails.
  • Invoice total is separate from the PO total on purpose. Until you enter it, the field shows the PO total as a hint. If the supplier's invoice says something different, you type what the invoice says, and the difference is now visible on the PO instead of buried in a PDF.
  • The invoice fields stay editable after the goods are received and until the PO is closed or cancelled, because invoices routinely arrive after the stock does. Line items, by contrast, lock once the PO is marked ordered, so the record of what you asked for cannot drift to match the bill.

On the purchase order list there is an Unpaid invoices filter. It shows every PO whose invoice status is Unpaid, whatever its receiving status, and an overdue invoice carries a critical banner on its PO page naming the date it went overdue. That list is the Friday afternoon job: open it, pay what is due, mark it Paid, done.

Where partial deliveries make it interesting

The reason receiving and invoicing need to be on the same record is that suppliers invoice per shipment, not per order. Order 200 units, receive 120 now with an invoice for 120, and the remaining 80 with a second invoice three weeks later. A PO that only knows “received” or “not received” cannot represent that. Restock Ops does partial receiving, so the PO shows 120 of 200 received with a dated receipt for each delivery, and the invoice fields sit alongside.

For a split shipment the practical approach is to record the first invoice's number and total when it arrives, pay it, and when the second invoice comes update the number to reference both and the total to the sum, setting the status back to Unpaid until the second payment clears. The PO's receipts show what arrived on which date, so if the second invoice bills for 80 units and the second delivery was 75, you have the evidence in the same screen you are looking at when you decide not to pay it in full.

Costs move too. The unit cost on the invoice is sometimes not the cost on the PO, because a price rose between quote and shipment or freight was added. Restock Ops records the cost at receiving, which is what feeds the cost history and the cost that Shopify shows on the inventory item, so the number your margin reports use is the number you were actually charged, not the number you hoped for when you ordered.

Getting it to the bookkeeper

Nobody wants their bookkeeper logging into the Shopify admin to read purchase orders. The PO list has an Export CSV button that respects the current filter, so Unpaid invoices exported on the last day of the month is a list of outstanding supplier liabilities with PO number, supplier, order date, status, invoice number, invoice status, due date and totals. Export All for the quarter and you have the purchases ledger.

That file is deliberately plain. It opens in a spreadsheet, imports into most accounting packages as a bills list, and does not depend on any integration staying alive. If your accountant wants a different cut, the same export runs per supplier.

A weekly routine that takes ten minutes

  1. Open Purchase orders and pick the Unpaid invoices filter. Anything with an overdue banner comes first: pay it or call the supplier, then set it to Paid.
  2. For each PO still showing No invoice or Unpaid without a number, check the inbox folder. When the invoice is there, enter its number, total and due date. If the total differs from the PO total, look at the receipts before you decide whether the difference is right.
  3. Compare received quantities to the invoice quantities on anything partially received. Query the supplier the same day; a week later nobody remembers the box count.
  4. Once every line of a PO has arrived and its invoice is Paid, close it. Closed POs drop out of the open filters and stay in the export for the records.
  5. At month end, export Unpaid invoices and send it to whoever does the books. What is on that list is what you owe suppliers, dated.

What this is not

Restock Ops is not accounting software. It does not post journal entries, reconcile bank payments or produce a balance sheet, and it does not try to. It records the invoice against the purchase order because that is where the invoice belongs when you are deciding whether to pay it, and it exports the result to wherever the books actually live. Stores that need full accounts payable with approval workflows and payment runs should look at an accounting package that does that; a retailer with a dozen suppliers mostly needs to know what is unpaid, what is due, and whether the bill matches the boxes. If you are here because Stocky closed, this is one of the things Stocky never did either.

FAQ

Can I record a supplier invoice on a Shopify purchase order?

Not natively. Shopify's purchase order has cost, shipping, tax and an estimated arrival date, but no invoice number, status, due date or payment record. Restock Ops adds those four fields to each PO and a filter that lists every PO with an unpaid invoice.

What happens to the invoice status when I mark a PO as ordered?

It changes from No invoice to Unpaid, on the assumption that a committed order will produce a bill. You enter the invoice number, total and due date when the invoice arrives, and set it to Paid when you pay; the payment date is stored with it.

How do I handle a supplier who invoices each partial shipment separately?

Record each delivery as a receipt on the PO, so quantities and dates are on the record. Enter the first invoice and pay it, then when the second arrives update the invoice number and total to cover both and set the status back to Unpaid until it is settled. The receipts let you check each invoice's quantities against what actually arrived.

Can I export unpaid supplier invoices from Shopify for my accountant?

From Restock Ops, yes. The purchase order list exports a CSV that follows the current filter, so Unpaid invoices gives a dated list of outstanding supplier bills with PO number, supplier, invoice number, due date and totals. The file is plain CSV and opens in any spreadsheet or accounting import.

Try it on your store. Restock Ops adds purchase orders with partial receiving, supplier notes, cost history, barcode labels, scanner stocktakes and a reorder report on top of Shopify inventory. From $19/month, 14-day free trial.

Install on Shopify Watch the demo

Sources