Kiley Sullivan
← All work

An agent that runs purchase-order intake end to end

  • Purchase Order Automation Agent
  • Applied AI
  • Built independently, in production

This one I built on my own, outside my formal role, because the process was visibly broken and the fix was just as visible. Zeitview's operations work runs on purchase orders arriving daily from a portfolio of 20+ enterprise accounts, and every client formatted theirs differently. The PO number might sit in the header, the footer, a reference field, or buried in a line-item table. Emails often carried several attachments with only one real PO among them, and senders varied by client domain, individual contact, and sometimes a third-party procurement platform that hid the origin entirely.

Processing each order by hand meant opening the email, finding the right attachment, extracting the PO number, renaming and filing the document in the correct Drive folder, logging it in a spreadsheet, and keying the data into a Coda work-order form. Every order, every day. It worked only because someone showed up and did it. But none of those steps actually needed human judgment at intake; each decision was rule-based and pattern-driven, which is exactly the kind of thing worth automating, not just to save time but to make intake consistent regardless of who was on that day.

I built an agentic workflow in n8n that runs the whole intake from email receipt to a populated work-order form, with a human approval gate before anything is submitted. The Gmail API watches the designated inboxes and triggers on a new message. An Anthropic model reads the body and every attachment to identify the PO, extract its number, and classify the order by client, with client-specific extraction logic for the highest-variance accounts where one generic prompt was not enough. The Drive API renames the confirmed document to a standard convention and files it in the right client folder, and a sheet logs each PO with structured metadata, which gives both an audit trail and a clean data layer downstream. Coda receives the structured output and pre-fills the work-order form, holding submission until a person confirms it is right. To close a second gap, I used Coefficient to export Salesforce opportunity and quote data on a sync schedule so the form arrives with both the PO data and its matching Salesforce context, working around a Salesforce write-back feature that would have required a paid upgrade. I chose n8n deliberately for its low cost, no-code entry point, and self-hostable, modular structure, so components can be swapped without rebuilding the pipeline.

Outcomes

  • Reclaims more than 10 hours a week previously spent on manual PO intake
  • Makes intake consistent regardless of who is handling it, removing single-person dependency
  • Delivers a pre-filled work order carrying both PO and Salesforce context, cutting manual cross-referencing
  • Keeps a full audit trail of every processed PO, with a human approval gate preserving accuracy