Procurement and operations teams

From Purchase Order PDFs to Structured Data: An Example Workflow

Purchase order data extraction turns information trapped in PDFs and other documents into consistent fields that procurement and operations teams can review and pass to downstream systems. This example workflow shows how to define a schema, process fictional purchase orders, review uncertain fields, and return completed data as JSON or through an outbound webhook.

Short answer

A practical purchase order data extraction workflow starts with a clearly defined schema. The procurement team decides which fields it needs—such as supplier name, purchase order number, issue date, delivery date, currency, line items, subtotal, tax, and total—and applies that structure to incoming documents. ParseBuddy can turn uploaded documents and supported email attachments into structured data, while giving users a way to review fields that need attention. Once the fields are reviewed, the completed result can be returned as structured JSON or sent to another system through an outbound webhook. The goal is not simply to read a PDF. It is to produce a predictable record that can support receiving, reconciliation, reporting, or entry into an approved downstream workflow. The example below uses entirely fictional purchase order data and illustrates the decisions a procurement team would make before relying on the output.

What you will learn

  • Define the required purchase order fields before processing documents.
  • Treat line items as a repeatable array rather than a single block of text.
  • Include review steps for missing, unclear, or unexpected values.
  • Check dates, currency, quantities, unit prices, taxes, and totals in context.
  • Return approved records as structured JSON or send them through an outbound webhook.
  • Keep the original document available for audit and exception handling.

Start with the record you need, not the PDF layout

Purchase orders may contain similar information, but suppliers do not place that information in the same locations. One supplier may show its name in a large header, while another may place the legal entity in a footer and a trading name beside the logo. Dates, totals, and delivery instructions can also appear under different labels.

A reliable workflow begins by defining the structured record your team needs. This prevents each supplier layout from becoming a separate manual data-entry process. Instead of asking where a value appears on the page, the team asks which output field the value belongs to.

The schema should reflect the next operational step. A team preparing records for receiving may need a delivery date, destination, item code, quantity, and unit of measure. A team supporting invoice matching may also need currency, unit price, tax, and total values.

  • Document identifiers: purchase order number and revision number
  • Supplier fields: supplier name and supplier code
  • Dates: issue date, requested delivery date, and valid-until date when present
  • Line items: item code, description, quantity, unit, unit price, and line total
  • Financial fields: currency, subtotal, tax, shipping, discount, and grand total
  • Operational fields: ship-to location, buyer reference, and delivery instructions

Define a purchase order extraction schema

An extraction schema gives each expected value a stable name and structure. Procurement and operations teams should agree on these names before sending results to another system. For example, using both “po_date” and “issue_date” for the same concept creates unnecessary mapping work.

Field types and nesting also matter. A purchase order usually contains one supplier and one grand total, but it can contain many line items. The line-item portion should therefore be represented as an array, with one structured object for each row.

Optional fields should remain optional when suppliers do not consistently provide them. A missing shipping charge is different from a shipping charge of zero. Preserving that distinction helps reviewers avoid turning an absent value into an unsupported assumption.

  • Use descriptive, consistent field names.
  • Separate document-level fields from line-item fields.
  • Decide which fields are required for the workflow to continue.
  • Represent unavailable values as null or omit them according to your data policy.
  • Document expected date, decimal, and currency conventions.
  • Avoid combining separate concepts, such as subtotal and total, in one field.

Choose how purchase orders enter the workflow

Purchase orders can arrive through several channels. ParseBuddy supports workflows involving PDFs, images, spreadsheets, and inbound email attachments within the limits shown in the application. Teams can upload documents directly or use supported email attachments when purchase orders arrive through a monitored process.

The intake method should be consistent enough that staff know what has entered the workflow and what still needs handling. For email-based intake, teams should establish rules for unsupported attachments, duplicate messages, password-protected files, and emails containing several unrelated documents.

File names and email subjects can help people organize the process, but they should not replace values extracted from the purchase order itself. A file named “PO-1047.pdf” may still contain a different purchase order number because of a naming mistake.

  • Confirm that each file is a purchase order before processing it as one.
  • Keep unsupported or unreadable files in an exception queue.
  • Establish a policy for duplicate documents and revised purchase orders.
  • Check the application for current file and workflow limits.

Capture supplier and document-level fields

Supplier identification deserves careful review because a purchase order may mention several organizations. The document can include the supplier, buyer, ship-to location, bill-to entity, freight provider, and manufacturer. The extraction schema should specify which organization belongs in each field.

The purchase order number should also be distinguished from account numbers, quote references, sales order numbers, and buyer references. Labels provide context, but reviewers may need to examine nearby text when multiple identifiers look similar.

Dates require the same care. An issue date, requested delivery date, promised date, and expiration date are not interchangeable. If the workflow only needs the issue date and requested delivery date, the schema should name those concepts explicitly.

  • Supplier name: the organization expected to fulfill the order
  • Purchase order number: the buyer-issued order identifier
  • Issue date: the date the purchase order was created or issued
  • Delivery date: the requested or stated delivery date, as defined by the schema
  • Currency: the currency that applies to the monetary values

Structure line items without losing row context

Line-item extraction is often the most detailed part of purchase order data extraction. Each row may contain an item code, a supplier code, a description, quantity, unit of measure, unit price, discount, tax treatment, and line total. Wrapped descriptions or repeated page headers can make row boundaries less obvious.

The output should preserve the relationship among the values in each row. A quantity from one row must not be paired with the unit price from another. When a description continues onto a second line, it should remain attached to the correct item.

Teams should also decide how to handle non-product rows. Freight, setup charges, deposits, and discounts may appear inside the item table even though they are not ordinary goods. Depending on the downstream process, these values can remain as line items or be assigned to separate document-level fields.

  • Keep each item in a separate array object.
  • Preserve item codes exactly when they are operational identifiers.
  • Do not infer a quantity or unit when the document does not provide one.
  • Review wrapped descriptions and tables that continue across pages.
  • Define how freight, discounts, and service charges should be represented.

Review fields that need attention

ParseBuddy allows users to review fields that need attention. That review stage is important when a value is unclear, missing, or inconsistent with the expected structure. It gives procurement staff a place to apply business context before the record continues.

Reviewers should compare flagged values with the source document rather than choosing the most plausible value from memory. If a date cannot be determined, leaving it unresolved is safer than inventing one. The same principle applies to currency symbols, decimal separators, item quantities, and handwritten annotations.

Teams can create internal rules for when a record is ready. For example, they may require supplier name, purchase order number, currency, at least one line item, and grand total before releasing the result. These are workflow choices made by the team, not assumptions that should be applied to every purchase order.

  • Confirm that the supplier is not being confused with the buyer.
  • Check similar identifiers against their printed labels.
  • Verify that dates have the intended meaning.
  • Compare line totals with their corresponding quantities and prices.
  • Review the subtotal, tax, shipping, discount, and grand total separately.
  • Escalate unresolved values according to the team’s exception process.

Check totals without replacing the source values

Arithmetic checks are useful review aids. A reviewer can compare quantity multiplied by unit price with the printed line total, then compare the line totals with the subtotal and grand total. Differences may reflect rounding, discounts, taxes, shipping charges, or an actual document issue.

A computed value should not silently replace a value printed on the purchase order. If the printed total is 335.34 and a separate calculation produces 335.35, the team should investigate the difference and preserve an audit trail according to its own procedures.

Currency must stay attached to financial values. A bare number such as 1,250.00 is incomplete when the process handles purchase orders in more than one currency. Teams should also decide how their downstream systems expect decimal values to be represented.

  • Compare each line total with quantity and unit price.
  • Check whether discounts apply at line or document level.
  • Confirm whether tax and shipping are included in the grand total.
  • Keep printed values separate from reviewer calculations.
  • Do not infer a currency solely from the supplier’s location.

Return approved data as JSON or through a webhook

After review, ParseBuddy can return the completed result as structured JSON. JSON gives downstream processes predictable field names, nested objects, and line-item arrays. It can also retain null values when the team needs to distinguish missing information from zero.

Completed results can also be sent through an outbound webhook. The receiving endpoint and the actions taken after delivery are part of the team’s implementation. For example, an internal service might validate required fields, place the record in a staging table, or route an exception to a procurement queue.

Before using webhook delivery in an operational workflow, teams should define how the receiving system handles duplicate events, unavailable endpoints, schema changes, and rejected records. They should also test with fictional documents before introducing business data.

  • Version the schema when field names or structures change.
  • Validate required fields in the receiving workflow.
  • Use a stable identifier to support duplicate handling.
  • Record whether a result was accepted or routed for follow-up.
  • Test normal, incomplete, revised, and multi-page purchase orders.

Build exception handling into the process

Not every purchase order should move straight through. A useful workflow makes exceptions visible and assigns them to a responsible role. Common examples include a missing purchase order number, an unclear currency, an empty line-item table, or a total that does not match the displayed components.

Revised purchase orders need special treatment. A revision may retain the original purchase order number while changing quantities, dates, or prices. Teams should decide whether revisions replace earlier records, create new versions, or require approval before downstream use.

The exception policy should be short enough for reviewers to follow consistently. It should state which fields block completion, which fields may remain empty, and where unresolved documents go next.

  • Define blocking and non-blocking fields.
  • Assign ownership for unresolved purchase orders.
  • Keep revisions distinguishable from duplicates.
  • Do not fill missing fields with guessed values.
  • Test the exception path as carefully as the standard path.

Example workflow

From document to usable data

1

1. Select representative fictional documents

Prepare synthetic purchase orders that cover simple tables, multiple pages, wrapped descriptions, optional charges, and revised orders. Do not use personal or confidential data during workflow design.

2

2. Define the extraction schema

List the document-level and line-item fields required by procurement, receiving, finance, or another approved downstream process. Mark fields as required or optional.

3

3. Choose the intake route

Upload supported documents or use supported inbound email attachments within the limits shown in the application. Document how duplicates and unsupported files will be handled.

4

4. Extract the purchase order data

Apply the schema so supplier, identifiers, dates, line items, currency, and totals are returned in a consistent structure.

5

5. Review fields needing attention

Compare unclear or incomplete fields with the source purchase order. Correct verified values and leave unresolved information for the defined exception process.

6

6. Approve the structured record

Confirm required fields, row relationships, currency, and financial components. Apply the team’s rules for revisions, missing values, and total discrepancies.

7

7. Deliver and monitor the result

Return the completed record as JSON or send it through an outbound webhook. Ensure the receiving workflow can validate, accept, reject, and track the record.

Synthetic product demonstration

Fictional purchase order PDF → structured JSON

Fields to capture

  • • Supplier: Northstar Industrial Supply Ltd. (Fictional)
  • • Supplier code: SUP-DEMO-008
  • • Purchase order: PO-DEMO-1047
  • • Issue date: 2026-04-08
  • • Requested delivery date: 2026-04-22
  • • Currency: USD
  • • Line 1: DEMO-GLV-100, Fictional safety gloves, 12 pairs at 18.50, line total 222.00
  • • Line 2: DEMO-LBL-200, Fictional warehouse labels, 6 packs at 14.75, line total 88.50
  • • Subtotal: 310.50
  • • Tax: 24.84
  • • Grand total: 335.34
{
  "document_type": "purchase_order",
  "supplier": {
    "name": "Northstar Industrial Supply Ltd. (Fictional)",
    "supplier_code": "SUP-DEMO-008"
  },
  "purchase_order_number": "PO-DEMO-1047",
  "issue_date": "2026-04-08",
  "requested_delivery_date": "2026-04-22",
  "currency": "USD",
  "line_items": [
    {
      "line_number": 1,
      "item_code": "DEMO-GLV-100",
      "description": "Fictional safety gloves",
      "quantity": 12,
      "unit": "pair",
      "unit_price": 18.50,
      "line_total": 222.00
    },
    {
      "line_number": 2,
      "item_code": "DEMO-LBL-200",
      "description": "Fictional warehouse labels",
      "quantity": 6,
      "unit": "pack",
      "unit_price": 14.75,
      "line_total": 88.50
    }
  ],
  "subtotal": 310.50,
  "tax": 24.84,
  "shipping": null,
  "discount": null,
  "total": 335.34
}

Frequently asked questions

Which purchase order fields should we extract first?

Start with the fields required for the next operational step. A common initial schema includes supplier name, purchase order number, issue date, requested delivery date, currency, line items, subtotal, tax, and total. Add fields only when they have a defined use.

Can line items be returned as structured data?

Yes. Define line items as an array in the extraction schema. Each item can contain fields such as item code, description, quantity, unit, unit price, and line total.

What happens when a value is unclear?

Users can review fields that need attention and compare them with the source document. If the value cannot be verified, route the document through the team’s exception process instead of guessing.

Can purchase orders arrive as email attachments?

ParseBuddy supports inbound email attachment workflows within the limits shown in the application. Teams should still define how they will handle unsupported files, duplicate messages, revisions, and emails containing multiple documents.

Can completed purchase order data be sent to another system?

ParseBuddy can return structured JSON and send completed results through outbound webhooks. The receiving system and any subsequent validation, mapping, or posting logic must be configured as part of the team’s own workflow.

Should calculated totals replace totals printed on the purchase order?

Not automatically. Calculations can help reviewers identify discrepancies, but the printed value and the calculated value should remain distinguishable until the team resolves the difference according to its procedures.

Which document formats can be used?

Supported workflows include PDFs, images, spreadsheets, and inbound email attachments within the limits shown in the application. Check the application for the current limits that apply to your workflow.

Build a reviewable purchase order extraction workflow

Start with a small set of synthetic purchase orders, define the supplier, date, line-item, and total fields your team needs, and test the review process from intake to structured output. Use ParseBuddy to turn supported uploaded documents or email attachments into structured data, review fields needing attention, and return completed results as JSON or through an outbound webhook.

Start free — no card required