From inbox to insight: automating unstructured purchase orders on AWS.
Emails, scanned faxes, and PDFs from hundreds of suppliers (pole hardware, transformers, PPE), each phrased differently.
Staff re type PO numbers, line items, and totals into the ERP. Minutes per document, thousands of documents per month.
A mistyped quantity or price isn't caught until invoice matching fails, or a storm response crew is short on materials.
…purchase order number PO-2026-04417, dated August 25, 2026. Bill to Midwest Supply Co., Carmel, IN. Ship to our Westfield warehouse. - 40 cases 16oz clear cups, item #CUP-16CL, at $28.50 per case - 12 boxes nitrile gloves (large), SKU GLV-NTR-L, $9.75 each - 5 rolls stretch wrap, item WRAP-80, unit price $22.00 Payment terms are Net 30. Requested delivery by Sept 5, 2026. Total should come to $1,367.00 before tax.
Raw PO lands in the bucket; event fires
Orchestrates extraction on each upload
Free text → strict JSON fields
Types coerced; totals cross checked
Parquet tables: header + line items
Query instantly via Glue Catalog
Raw email text lands in s3://po-pipeline/raw/. An S3 event notification triggers Lambda automatically. No schedules, no polling.
Amazon Textract AnalyzeExpense: purpose built for invoices and POs, returns fields with confidence scores.
Amazon Bedrock with Claude: a prompt asks for strict JSON, handling any phrasing a supplier invents.
| po_number | vendor | total |
|---|---|---|
| PO-2026-04417 | Midwest Supply | 1367.00 |
| po_number | sku | qty | price |
|---|---|---|---|
| PO-2026-04417 | CUP-16CL | 40 | 28.50 |
| PO-2026-04417 | GLV-NTR-L | 12 | 9.75 |
| PO-2026-04417 | WRAP-80 | 5 | 22.00 |
SELECT h.po_number, h.vendor_name, l.sku, l.quantity, l.unit_price FROM po_header h JOIN po_line_items l ON h.po_number = l.po_number WHERE h.po_date >= DATE '2026-08-01';
Emergency material orders placed by phone and email under pressure become trackable data the same day, supporting FEMA cost recovery.
Transformer, conductor, and meter POs from dozens of vendors normalize into one spend view for sourcing negotiations.
The same extract validate pattern three way matches contractor invoices against POs and receipts automatically.
Every extracted field links back to the source document in S3, giving a clean trail for rate case and regulatory audits.
Your documents, your environment: 100 real POs through the pipeline, accuracy measured against your team's own keying.
Connect curated output to your ERP (SAP, Oracle, Maximo) and your BI layer; wire quarantine review into existing workflows.
Extend the pattern to invoices, receipts, and contractor timesheets. Same architecture, new prompts.