How to Automate Purchase Orders and Supplier Emails With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Automate Purchase Orders and Supplier Emails With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Automate Purchase Orders and Supplier Emails With AI.

Send every purchase request through one form or inbox, let AI turn it into a draft purchase order with gaps flagged, route it for approval by value, then create and email the PO from your accounting system via Zapier or Make. Then AI chases unacknowledged orders and sorts supplier replies: confirmed, new date, query or price change.

The one rule to set before building anything: the AI fills in a PO only from what the request says and what your price list or last order says. It never guesses a rate, picks a new supplier or accepts a price change on its own. Everything missing goes back to the person who asked, and every price change goes to a person who can say no.

Follow me on Instagram@sagnikteaches

Which steps to automate and which stay with a person

StepAutomate?Why
Capturing the requestYesA form or monitored inbox stops requests living in chats and phone calls
Drafting the PO fieldsYes, with gaps flaggedAI is good at pulling supplier, item, quantity and dates out of a rough message
ApprovalRouting yes, deciding noRules send it to the right person; the person approves
Creating and sending the POYesPure data transfer once approved
Chasing acknowledgement and delivery datesYesRepetitive, time-based, low risk
Reading supplier repliesSorting yes, acting partlyConfirmations can update the record; price changes and substitutions need a person
Choosing a new supplierNoNeeds judgement on quality, credit and history

The running example here is an illustrative engineering consultancy of 22 people doing ground investigation and structural work. It raises around 60 purchase orders a month: drilling subcontractors, laboratory testing, plant hire, traffic management and site equipment. Before automating, about a third of its POs were raised after the work had started, and supplier invoices arrived without PO numbers, so each one needed a round of "which job is this for?" emails.

Connect on LinkedInSagnik Bhattacharya

Step 1: one front door for every purchase request

Automation can't read a request made in a corridor. Pick one route, a short form (Microsoft Forms, Google Forms or your project system's request feature) or one shared mailbox, and make it the only way an order gets placed. The form needs eight fields:

Subscribe on YouTube@codingliquids
  1. Project or job number
  2. Supplier (a drop-down of approved suppliers, plus "other, please specify")
  3. What's needed, in the requester's own words
  4. Quantity and unit
  5. Agreed price or quote reference, if known
  6. Date needed on site
  7. Delivery address or site
  8. Requester's name

A free-text box is fine for the description. That's the part the AI is there to interpret, and making engineers fill in twelve structured fields is how you get people phoning the supplier directly instead.

Step 2: AI turns a rough request into a draft PO

Here is a real-looking request as it arrives from site (illustrative; SPT is a standard soil test that needs its own equipment on the rig):

Need the tracked rig again from the usual drilling lot for the Mill Lane job, 3 days from Tuesday 14th, same setup as the Hawthorn Road job. Plus they'll need to bring the SPT kit. Cheers

The automation passes that text, the approved supplier list and the last three POs for that supplier to an AI step with this instruction:

You draft purchase orders from staff requests. Use ONLY the
request text, the approved supplier list and the previous POs
provided. Never invent a price, rate, quantity or date.

Return JSON with these fields:
supplier, project_no, lines (description, qty, unit, rate,
rate_source), date_required, delivery_site, notes,
missing_fields (list), questions_for_requester (list).

If a rate comes from a previous PO, set rate_source to that PO
number. If there is no rate, leave it blank and add it to
missing_fields. If the supplier is not on the approved list,
add "supplier not approved" to missing_fields.

An illustrative result:

{
  "supplier": "Approved drilling contractor (from list)",
  "project_no": "",
  "lines": [
    {"description": "Tracked drilling rig with crew", "qty": 3,
     "unit": "day", "rate": 1450, "rate_source": "PO-2291"},
    {"description": "SPT equipment", "qty": 3, "unit": "day",
     "rate": "", "rate_source": ""}
  ],
  "date_required": "Tuesday 14th",
  "delivery_site": "Mill Lane",
  "missing_fields": ["project_no", "SPT equipment rate",
                     "month for date_required"],
  "questions_for_requester": ["Which project number is Mill
    Lane?", "Is SPT kit included in the day rate, as on the
    Hawthorn Road order, or charged separately?"]
}

Two things are worth noticing. The AI took the rig rate from the previous PO and said where it came from, so the approver can check that the rate is still current. And it asked the question a buyer would ask: on the previous order, was the test kit included? That question goes straight back to the requester by email or chat, and the draft waits. A PO with blanks never goes to a supplier.

Where this goes wrong: an AI step without the "never invent" instruction will happily fill the SPT rate with a plausible number. In testing, always feed it a request with a missing price and confirm it comes back blank.

Step 3: approval limits that route themselves

Once the draft is complete, a filter or router step sends it to the right approver by value. The consultancy's rules:

PO valueSupplierApprover
Under $500ApprovedNo approval; PO sent automatically
$500 to $5,000ApprovedProject manager for that job
Over $5,000ApprovedDirector
Any valueNew or unapproved supplierDirector
Any valueRate differs from last PO by more than 10%Project manager, with both rates shown

The approval message should show the request text, the draft lines, the rate source and one-click approve or reject. Approvers who have to open three systems to approve a $900 plant hire will approve without looking. How to design those limits for a whole business is covered in setting spending rules and approvals, and the general pattern for approval steps inside automations in adding human approval steps to AI automations.

Step 4: create the PO and send it

Once approved, the automation creates the purchase order in your accounting system. QuickBooks Online has purchase orders on its Plus and Advanced plans (they are switched on under Account and settings, Expenses). Xero includes purchase orders that can be emailed to suppliers as PDFs and converted into bills when the invoice arrives; check your plan includes them. Zapier has a Create Purchase Order action for both QuickBooks Online and Xero, which returns the PO number for the next step.

A Zapier or Make flow for this stage looks like:

  1. Trigger: approval recorded (a form response, a button in a chat app, or a row status changing to "approved").
  2. Create Purchase Order in QuickBooks Online or Xero with the supplier, lines and project reference.
  3. Send the supplier email from your purchasing mailbox with the PO number in the subject line.
  4. Log the PO number, supplier, date sent and date required in a tracking sheet or table. The chasers run off this log.

The PO email itself can be a fixed template rather than AI-written. Consistency helps suppliers' own systems pick it up:

Subject: Purchase order PO-2318 - Mill Lane - required Tue 14 Oct

Hello,

Please find our purchase order PO-2318 for 3 days' tracked rig
hire with crew at Mill Lane, starting Tuesday 14 October.

Please reply to this email to confirm you can meet the date,
and quote PO-2318 on your invoice. Invoices without a PO number
may be delayed.

Thanks,
Purchasing team

Step 5: supplier emails that chase themselves

This is the part that gives the office its time back. Three timed emails cover most orders:

WhenEmailStops if
2 working days after sending, no replyShort acknowledgement chaserSupplier has replied
3 working days before the date requiredDelivery or attendance confirmation requestOrder already confirmed for that date in the last week
Day after the date required, not marked receivedNote to the requester: did it arrive or happen?Marked received

The acknowledgement chaser is where AI helps with tone. A fixed "REMINDER: PO-2318 NOT ACKNOWLEDGED" email reads like a machine and gets ignored like one. An AI step can write a two-line note that mentions the job and date, and varies a little each time:

Hi, just checking you received PO-2318 for the rig at Mill Lane from Tuesday 14th. Could you confirm the crew is booked? Thanks.

Keep the AI on a short leash here: two sentences, must include the PO number and date, no new information. The third email goes to your own requester, not the supplier, because "did it arrive?" is the question that stops invoices being paid for goods that never turned up.

Step 6: let AI sort the supplier replies

Replies land in the purchasing mailbox. An AI step reads each one, matches it to a PO by the number in the subject or body, and puts it in a category:

Classify this supplier email about a purchase order.
Categories:
CONFIRMED - supplier confirms the order as sent
NEW_DATE - supplier confirms but gives a different date
PRICE_CHANGE - any change to price, rate, surcharge or quantity
SUBSTITUTE - different product or equipment offered
QUERY - supplier asks a question
OTHER
Return: po_number, category, new_date (if any), summary
(one sentence), needs_person (true for PRICE_CHANGE,
SUBSTITUTE, QUERY, OTHER).
If no PO number is found, return po_number "not found".

An illustrative reply and its classification:

Morning, rig is fine for the 14th but we can't get the SPT kit to site until the 15th, and just to flag that our fuel surcharge has gone up to 6% from this month. Regards

{"po_number": "PO-2318", "category": "PRICE_CHANGE",
 "new_date": "15th (SPT kit only)",
 "summary": "Rig confirmed for 14th; SPT kit a day late;
             fuel surcharge now 6%.",
 "needs_person": true}

This reply contains a date change and a price change, and the classification correctly lands on the more serious one. That's why the categories are ordered by risk in your routing: anything that touches price goes to a person, even when it arrives inside an otherwise good confirmation. A plain CONFIRMED can update the tracking log and stop the chasers automatically. Everything else becomes a task for the project manager, with the summary line at the top.

A second example: a law firm's disbursement orders

The same flow suits businesses that don't buy much stock but do order third-party services against client work. Take an illustrative 15-person law firm that orders expert reports, property searches, process servers and translations for its matters. Its problem isn't approval; it's that supplier invoices arrive weeks later with no matter reference, so the costs are hard to recover from clients.

The firm's version is lighter: the fee earner fills in a four-field form (matter number, supplier, service, estimate), an AI step drafts the instruction letter from a template using the matter's details, and the automation logs a PO number that the supplier must quote. Approval only kicks in for estimates over $1,500, or any expert instruction, because expert fees usually need the client's agreement first. The saving comes at month end, when every invoice can be matched to a matter by its PO number instead of by memory. Matching those invoices automatically is the natural next step, covered in matching supplier invoices to purchase orders.

What the automation costs to run

With Zapier, every successful action step counts as a task; triggers, filters and Paths don't. An AI by Zapier step uses 1, 3 or 5 tasks per run depending on the model tier you choose. For the consultancy's 60 POs a month, a rough count, assuming the 3-task tier:

  • Drafting from the request: AI step (3) plus a message to the requester or approver (1) = 4
  • After approval: create PO (1), send email (1), log it (1) = 3
  • Chasers: on average 1.5 emails per PO = 1.5
  • Reply sorting: AI step (3) plus update log or create task (1) = 4

That's about 12.5 tasks per PO, or 750 a month, which sits right at the limit of Zapier's Professional plan (750 tasks, from $29.99 a month billed monthly or $19.99 billed annually). Requests that need a second round of questions push it over, so budget for the Team plan (2,000 tasks, from $103.50 a month monthly or $69 annually) or build it in Make, where plans are credits-based from about $9 a month and routers and filtered-out bundles use no credits. AI costs are included in those tasks unless you connect your own API key.

The bigger cost is set-up time: typically two to four days to build, test with real past requests and adjust, and an hour a week for the first month watching the exceptions.

Test it on last month's requests before switching on

Before any supplier sees an automated PO, run the flow in test mode against 15 to 20 real requests from the previous month, with the send step pointed at your own inbox. Pick the awkward ones on purpose:

  • A request with no price and no previous PO for that item. The draft must come back with the rate blank.
  • A request naming a supplier that isn't on the approved list, spelled slightly differently from how it appears in your accounts.
  • One message asking for two things from two different suppliers. The AI should split it into two drafts or flag it, not merge the lines onto one PO.
  • A request that cancels or changes an earlier order ("actually make that 2 days, not 3"). This should update the existing draft, not create a new one.
  • A request with a date but no month, like the Mill Lane example.

Score each draft as right, fixable by the requester's answer, or wrong. In the consultancy's test run of 18 requests, 13 were right, 4 were correctly flagged with questions, and one was wrong: the AI read "same as last time" as the last PO for that supplier on any project, not the last one on that site. The fix was one line in the instruction ("previous POs means previous POs for the same project, unless none exist"). An afternoon of testing like this is cheaper than one wrong order arriving on site.

Where purchase order automations break

  • The supplier replies from a different address or starts a new thread without the PO number. The reply is never matched, and the chaser goes out to someone who already confirmed. Ask suppliers to keep the PO number in the subject line, and send unmatched replies to a person.
  • The same request triggers twice. Someone edits a form response, and the automation creates a second PO. Add a check that no PO exists for the same request ID before creating one.
  • The contact on file is out of date. A PO emailed to someone who left the supplier in spring sits unread. When chasers get no reply twice, route it to a person to phone.
  • Rates drift unnoticed. Copying the rate from the last PO is convenient until the supplier's price list changes. The "more than 10% different" rule catches increases only if someone enters the new rate; put a review date on every standing rate.
  • Nobody notices the automation has stopped. An expired connection means requests pile up silently. Set up an alert for failed runs, as described in stopping automations breaking silently.

Four numbers that show the PO automation is working

Track four numbers monthly, starting with a baseline from the month before you switch on:

  1. POs raised before the work starts, as a share of all POs. The consultancy moved from about 65% to 94% within two months, mainly because a phone request now got a form link in reply.
  2. Median days from PO sent to supplier acknowledgement.
  3. Supplier invoices that quote a PO number. This is what makes invoice matching possible.
  4. Price changes caught before the invoice, rather than discovered when it arrives.

If the second number doesn't improve, the chasers aren't reaching the right people. If the third doesn't, the PO email isn't making the "quote this number" instruction clear enough, and it's worth phoning your ten biggest suppliers to ask them to update their records.

Purchase order automation: follow-up questions

Do I need purchasing software, or will my accounting system do?

For most firms raising under a few hundred orders a month, the purchase orders in QuickBooks Online Plus or Advanced, or in Xero, plus an automation tool, are enough. Dedicated purchasing software starts to pay off when you need multi-level approvals, budgets per project, catalogues or supplier portals, or when several sites order from the same suppliers.

Can AI choose the supplier for me?

It can suggest one from your approved list, based on who supplied the same item or service last time. It shouldn't choose freely, because it doesn't know about quality problems, credit limits or a falling-out last month. Keep an approved supplier list in the automation and have the AI pick only from that list, with a person confirming anything new.

What happens when a supplier replies to the wrong address?

Replies that don't reach the monitored mailbox never get classified, so the order looks unacknowledged and the chaser goes out anyway. Put a reply-to address on every PO email, ask suppliers to quote the PO number in the subject line, and make the chaser email polite enough that a duplicate does no harm.

Should small orders skip the PO process entirely?

Often, yes. Orders below a set value from approved suppliers can go on a company card with the receipt captured, which saves everyone time. The point of a PO is control over spend and a reference for matching invoices. Below a few hundred dollars, the admin can cost more than the control is worth.

Further reads

Sources: QuickBooks Online help (purchase orders on Plus and Advanced); Xero purchase order feature page; Zapier help and app pages (QuickBooks Online and Xero Create Purchase Order actions, task counting, AI by Zapier task use); Make pricing page.

Want your purchase orders and supplier chasers automated?

On a 1:1 call we'll map how purchase requests reach you now, set approval limits that suit your team, and decide which steps your accounting system and automation tool can handle.

Book a 1:1 call with me