Table of Contents
- 1 The Business Situation
- 2 The Existing Process
- 2.1 Administrative problems
- 2.2 Business effects
- 3 What the New System Needed to Do
- 4 Implementation Approaches Considered
- 4.1 Google Sheets and Apps Script
- 4.2 Airtable and Zapier
- 4.3 Microsoft Lists and Power Automate
- 4.4 Xero-only or dedicated accounts payable software
- 5 The Selected Solution
- 6 System Architecture and Data Flow
- 6.1 End-to-end data flow
- 7 Data Structure
- 7.1 Invoices table
- 7.2 Purchase Orders table
- 7.3 Exceptions table
- 7.4 Supporting tables
- 8 Workflow Statuses and Ownership
- 9 Step-by-Step Implementation
- 9.1 Step 1: Prepare the Accounts and Permissions
- 9.2 Step 2: Build the Intake
- 9.3 Step 3: Create the System of Record
- 9.4 Step 4: Connect the Tools
- 9.5 Step 5: Build the Core Automation
- 9.6 Step 6: Add Approvals, Reminders, and Escalations
- 9.7 Step 7: Add Documents and File Management
- 9.8 Step 8: Add Reporting and Operational Views
- 9.9 Step 9: Add Security and Governance Controls
- 9.10 Step 10: Deploy and Test
- 10 Code and Configuration
- 10.1 Representative configuration values
- 10.2 Exception creation configuration
- 11 Failure Handling and Operational Reliability
- 12 A Complete Example
- 13 Implementation Cost
- 14 Estimated Time and Cost Savings
- 15 Adding AI to the Automation
- 15.1 The Recommended AI Enhancement
- 15.2 Benefits of the AI Enhancement
- 15.3 What Remains Rule-Based or Human-Controlled
- 15.4 Estimating the Additional Value of AI
- 16 Testing Checklist
- 17 Ongoing Maintenance
- 18 When to Move to Dedicated Software
- 19 Implementation Checklist
The Business Situation
Elmstead Food Distribution is a fictional 64-person specialty food distributor. Its finance team includes one accounts payable coordinator and a finance manager. Procurement is handled by two buyers, while a receiving lead confirms deliveries and maintains packing-slip evidence.
The company processes approximately 280 supplier bills each month in Xero. About 20 percent require investigation because of a missing purchase order, an incorrect purchase-order reference, a price difference, a possible duplicate, or missing receiving evidence.
Xero is the accounting system. Google Drive holds invoices, packing slips, purchase-order documents, and supplier correspondence. Before the implementation, the accounts payable coordinator also maintained a Google Sheets exception log and relied on email to request action from buyers and warehouse staff.
The main problem was not entering bills. It was keeping unresolved bills visible after someone identified a problem. A spreadsheet row could be incomplete, an email could go unanswered, and neither system reliably showed who owned the next action. Finance could see that a bill had not progressed, but not always why it had stalled or how long the responsible team had held it.
The business therefore needed a controlled accounts payable exception queue. Each exception required a reason code, owner, due date, evidence folder, status history, reminder schedule, escalation path, and resolution record.
Note: This case study is provided as a representative example of the types of AI integration and digital transformation solutions Intelligex designs and delivers. Actual engagements are tailored to each client’s goals, constraints, existing systems, timeline, and available resources, so the approach, tools, and outcomes may vary.
The Existing Process
The original workflow followed these steps:
- A supplier invoice arrived by email or was saved into an incoming-invoices folder in Google Drive.
- The accounts payable coordinator entered the bill in Xero, including the supplier invoice number and any purchase-order reference shown on the invoice.
- The coordinator searched Xero for the purchase order and searched email or Drive for a packing slip or receiving confirmation.
- If the values matched and the receipt was complete, the bill continued through the company’s normal Xero review and payment process.
- If there was a problem, the coordinator added a row to a shared spreadsheet and emailed the buyer, receiving lead, or finance manager.
- The coordinator revisited the spreadsheet several times each week, searched email threads, and manually updated the status.
- Once someone supplied an answer, the coordinator updated Xero, moved or renamed supporting files, and marked the spreadsheet row complete.
Administrative problems
- The invoice number, supplier, amount, purchase order, and issue were entered in both Xero and the spreadsheet.
- Owners and due dates were sometimes omitted.
- Free-text descriptions made similar exceptions difficult to group.
- Email reminders depended on the accounts payable coordinator remembering to send them.
- Supporting files were distributed across inboxes and Drive folders.
Business effects
- Finance could not reliably distinguish a new exception from one that had been waiting for several days.
- Buyers did not have a consistent queue of invoices requiring their attention.
- Receiving staff were sometimes asked for evidence that had already been uploaded elsewhere.
- Duplicate concerns and price differences did not have a consistent approval record.
- Monthly reporting required manual spreadsheet cleanup and reconciliation.
The spreadsheet was useful as an initial register, but it did not enforce unique identifiers, controlled reason codes, ownership rules, or evidence relationships. Its value also depended heavily on one employee maintaining it accurately.
What the New System Needed to Do
Finance and procurement agreed on the requirements before selecting the implementation platform.
| Requirement | Required behavior |
|---|---|
| Intake | Accept new Xero bills, purchase-order records, invoice documents, and receiving evidence. |
| Validation | Check required references, supplier invoice keys, document names, currencies, and configured tolerances. |
| Unique identifiers | Assign stable invoice, exception, and evidence identifiers while preserving Xero and Drive IDs. |
| Duplicate prevention | Prevent repeated webhook or polling events from creating duplicate tracker records. |
| Exception classification | Use controlled reason codes rather than unstructured descriptions. |
| Ownership | Assign an individual owner, responsible team, backup owner, and escalation recipient. |
| Deadlines | Calculate a due date from the reason code and send reminders before and after that date. |
| Evidence | Create a Google Drive evidence folder and connect every supporting file to the relevant exception. |
| Approvals | Require human approval for significant price differences, duplicate overrides, and policy exceptions. |
| Human control | Keep Xero bill authorization, payment approval, and payment release outside the exception automation. |
| Reporting | Show open volume, aging, overdue work, reason trends, owner workload, resolution time, and failures. |
| Audit evidence | Record status changes, owners, approval decisions, evidence links, and timestamps. |
| Exception handling | Place incomplete or failed automation records into a visible manual-review queue. |
| Manual override | Allow authorized finance users to reassign, reopen, cancel, or resolve an exception with a reason. |
| Security | Restrict accounting data and evidence to finance, procurement, receiving, and designated administrators. |
The design also needed to operate at the company’s current volume without requiring a custom application or direct database administration.
Implementation Approaches Considered
| Approach | Connected tools | Effort | Customization | Main limitation |
|---|---|---|---|---|
| Improved spreadsheet | Google Sheets, Drive, Apps Script | Low to moderate | Moderate | Weak relational data, permissions, and record history as complexity grows. |
| Airtable exception queue | Xero, Airtable, Zapier, Google Drive | Moderate | High for this volume | Requires disciplined base design, task monitoring, and controlled editing. |
| Microsoft productivity stack | Microsoft Lists, SharePoint, Power Automate, Xero | Moderate | High | Would introduce a second productivity suite because the company already uses Google Workspace. |
| Xero-only process | Xero and attached documents | Low | Limited for this workflow | Does not provide the required cross-team queue, reason model, evidence routing, and operational reporting in this scenario. |
| Dedicated accounts payable platform | AP platform, Xero, document storage | Moderate to high | Product-dependent | Higher recurring commitment and potentially broader process change than the current volume justified. |
Google Sheets and Apps Script
A redesigned spreadsheet could add data validation, formulas, protected ranges, and Apps Script reminders. It would have the lowest incremental software cost because the company already used Google Workspace. However, invoices, exceptions, evidence files, owners, and status events are separate but related records. Modelling those relationships in multiple sheets would require substantial script maintenance and careful concurrency handling.
Airtable and Zapier
Airtable provided linked records, controlled views, forms or interfaces, attachments, formulas, and operational dashboards without requiring a custom database application. Zapier could connect Xero events and Google Drive uploads to Airtable while also sending notifications and scheduled escalations.
Microsoft Lists and Power Automate
Microsoft Lists and Power Automate would be a credible option for a company already standardized on Microsoft 365. Elmstead would have needed additional identity, file-storage, and administration decisions because its staff already worked in Google Drive. The approach was therefore technically viable but operationally less suitable.
Xero-only or dedicated accounts payable software
Keeping the process entirely in Xero would minimize integrations, but it would not provide the required queue structure without forcing issue details into accounting fields or notes. A dedicated accounts payable platform could support a broader invoice-processing lifecycle, but the representative volume and current requirements did not yet justify replacing the existing process.
The Selected Solution
Elmstead selected Airtable as the exception system of record, Zapier as the automation layer, Xero as the accounting source, and Google Drive as the evidence repository.
| Tool | Responsibility |
|---|---|
| Xero | Holds supplier bills, purchase orders, accounting statuses, invoice totals, and external accounting identifiers. |
| Airtable | Stores invoices, purchase orders, exceptions, evidence metadata, routing rules, activity history, and operational views. |
| Zapier | Synchronizes records, applies deterministic rules, prevents duplicates, creates folders, sends notifications, and runs reminders. |
| Google Drive | Stores invoice files, receiving documents, correspondence, approvals, and other exception evidence. |
| Email by Zapier | Sends assignment, reminder, escalation, rejection, and completion notices. |
| Airtable interfaces | Provide finance, procurement, and receiving dashboards based on the live exception data. |
| Optional AI service | Drafts a concise exception summary and suggested next action for human review. It does not approve bills or payments. |
Xero and Google Drive were retained. The shared exception spreadsheet and most manually generated reminder emails were removed.
Human control remained essential. The automation could identify a missing reference, calculate a difference, route an issue, and collect evidence. It could not determine whether a disputed charge was commercially acceptable, authorize a bill, approve a policy exception, or release a payment.
System Architecture and Data Flow
- Intake: New Xero bills, new Xero purchase orders, and files uploaded to controlled Google Drive intake folders.
- System of record: Airtable base containing invoices, purchase orders, exceptions, evidence, routing rules, and activity records.
- Automation layer: Zapier workflows using connected applications, filters, paths, date transformations, delays, and scheduled checks.
- Document storage: Google Drive folders organized by year, month, and exception identifier.
- Notifications: Email by Zapier using addresses held in Airtable routing records.
- Reporting: Airtable views and interfaces using live queue records and calculated aging fields.
- AI layer: Optional structured summarization called only after the rule-based queue is working reliably.
End-to-end data flow
- A purchase order is created. A Xero event is received by Zapier. Zapier validates the purchase-order number, supplier, currency, status, and total. It then creates or updates the corresponding Airtable Purchase Orders record. The Xero PurchaseOrderID is stored for idempotency. Invalid records are marked for manual review.
- An invoice file is uploaded. A new file in the Drive invoice inbox triggers Zapier. The filename is parsed into document type, supplier code, invoice number, and date. The Drive file ID is checked against Airtable before an Evidence record is created.
- A placeholder invoice is created if necessary. If no Xero bill exists yet, Airtable receives a document-originated Invoice record with an
Awaiting Xero Entrystatus. An exception is assigned to accounts payable. - A Xero bill arrives. Zapier receives the bill fields, validates the supplier invoice number, normalizes the supplier and invoice key, and searches Airtable by Xero InvoiceID and normalized invoice key.
- The invoice tracker is updated. An existing Drive-originated placeholder is completed when the normalized key matches. Otherwise, Zapier creates a new Invoice record and stores the returned Airtable record ID.
- The purchase order is matched. Zapier searches the Purchase Orders table using the normalized Xero bill reference. A matching Airtable purchase-order record is linked to the invoice.
- Deterministic exception rules run. Separate rule workflows evaluate missing purchase orders, unknown purchase orders, possible duplicates, price differences, receipt requirements, unsupported multiple-PO references, and unclear ownership.
- An exception is created. Zapier constructs an idempotency key from the invoice record ID, reason code, and exception cycle. If no active record has that key, Airtable creates the exception and returns its record ID.
- Evidence storage and notification are prepared. Zapier creates a Drive folder, writes the folder ID and link back to Airtable, assigns the responsible person, calculates the due date, and sends an email containing the exception ID and approved links.
- The responsible person acts. The owner uploads evidence to the Drive evidence inbox using the exception ID in the filename, updates the resolution fields in Airtable, and submits the item for AP review.
- Finance verifies the resolution. AP either resolves the exception, returns it for more information, or routes it for finance-manager approval. Closing the exception does not automatically approve or pay the Xero bill.
- Failures remain visible. Any partial automation is marked with an automation status, retry count, last-run time, and error message. Records exceeding the retry threshold enter an Automation Dead Letter view for manual recovery.
Data Structure
The Airtable base contains six related tables. An invoice can link to one purchase order in the standard path and to multiple exceptions. An exception can link to several evidence files and activity events. Exceptions without a matched invoice, such as an unclassified document, can link directly to an Evidence record.
Invoices table
| Field | Type | Required | Source and purpose |
|---|---|---|---|
| Invoice Record ID | Formula | Yes | Generated from the Airtable record ID and used in user-facing references. |
| Xero Invoice ID | Single-line text | After Xero entry | Immutable Xero InvoiceID used to prevent duplicate synchronization. |
| Supplier | Single-line text | Yes | Supplier name received from Xero or document intake. |
| Xero Contact ID | Single-line text | No | External Xero contact identifier used for matching and reconciliation. |
| Supplier Invoice Number | Single-line text | Yes | Supplier-provided invoice number. Trimmed and normalized before matching. |
| Supplier Invoice Key | Formula or automation text | Yes | Normalized supplier and invoice-number combination used for duplicate detection. |
| PO Reference | Single-line text | Conditional | Xero bill reference expected to contain one approved purchase-order number. |
| Purchase Order | Linked record | Conditional | Links the invoice to the matched Purchase Orders record. |
| Bill Date | Date | Yes | Invoice date received from Xero or the document filename. |
| Due Date | Date | No | Supplier bill due date received from Xero. |
| Currency | Single select | Yes | Validated against configured currency values and the matched purchase order. |
| Invoice Total | Currency or number | After Xero entry | Gross bill total received from Xero. |
| PO Total | Lookup | No | Total from the linked purchase order. |
| Variance Amount | Formula | No | Invoice total minus purchase-order total. |
| Variance Percentage | Formula | No | Absolute variance divided by the absolute purchase-order total. |
| Receipt Required | Checkbox | Yes | Copied from purchase-order or supplier rules. |
| Receipt Evidence Count | Rollup | Yes | Counts linked verified receipt documents. |
| Xero Status | Single select | Yes | Stores values such as DRAFT, SUBMITTED, AUTHORISED, PAID, VOIDED, or DELETED when received. |
| Source | Single select | Yes | Allowed values are Xero, Drive, Migration, or Manual Recovery. |
| Automation Status | Single select | Yes | Allowed values are Pending, Processing, Complete, Retry, Failed, or Manual Review. |
| Last Automation Run | Date and time | No | Updated by Zapier after each evaluation. |
| Retry Count | Number | Yes | Starts at zero and increments after recoverable failures. |
| Error Message | Long text | No | Contains a sanitized technical error without credentials or bank data. |
Purchase Orders table
| Field | Type | Purpose |
|---|---|---|
| Xero Purchase Order ID | Single-line text | External identifier used for synchronization and duplicate prevention. |
| PO Number | Single-line text | Unique business key used for invoice matching. |
| Normalized PO Number | Formula | Uppercase, trimmed value used for exact matching. |
| Supplier | Single-line text | Expected supplier for invoice validation. |
| Total | Currency or number | Expected purchase-order amount. |
| Currency | Single select | Used to prevent invalid cross-currency comparisons. |
| Status | Single select | Stores the Xero purchase-order status received by the integration. |
| Billing Pattern | Single select | Single Bill, Partial, Milestone, or Manual Review. |
| Receipt Required | Checkbox | Determines whether receiving evidence must be present. |
| Buyer | Linked People record | Provides the default procurement owner. |
Exceptions table
| Field | Type | Required | Purpose |
|---|---|---|---|
| Exception ID | Formula | Yes | User-facing identifier based on the Airtable record ID. |
| Exception Key | Single-line text | Yes | Idempotency key constructed from invoice, reason, and cycle. |
| Invoice | Linked record | Conditional | Connects the exception to its invoice. |
| Purchase Order | Linked record | No | Connects the exception to the relevant purchase order. |
| Reason Code | Linked record | Yes | Controlled reason selected by deterministic automation or an authorized user. |
| Description | Long text | Yes | Rule-generated explanation with values needed for investigation. |
| Responsible Team | Single select | Yes | AP, Procurement, Receiving, Finance, or Supplier Follow-up. |
| Owner | Linked People record | Yes | Individual accountable for the next action. |
| Backup Owner | Lookup | No | Used when the primary owner is unavailable. |
| Status | Single select | Yes | Controls queue placement and reminders. |
| Priority | Single select | Yes | Low, Normal, High, or Critical. |
| Opened At | Created time | Yes | Start of exception aging. |
| SLA Business Days | Number | Yes | Copied from the Reason Codes table when the record is created. |
| Due Date | Formula | Yes | Calculated from the opened date and SLA. |
| Escalation Level | Number | Yes | Zero for normal work, then one or two as escalation occurs. |
| Resolution Notes | Long text | At resolution | Explains what changed and why the issue can be closed. |
| Resolution Code | Single select | At resolution | Corrected PO, Receipt Added, Duplicate Confirmed, Duplicate Cleared, Credit Received, Approved Variance, Data Corrected, or Cancelled. |
| Approval Status | Single select | Conditional | Not Required, Pending, Approved, Rejected, or More Information Required. |
| Approved By | Collaborator or linked person | Conditional | Human approver responsible for an override. |
| Approved At | Date and time | Conditional | Approval timestamp. |
| Document Folder ID | Single-line text | Yes | Google Drive folder identifier returned by Zapier. |
| Document Folder Link | URL | Yes | Approved link to the evidence folder. |
| Resolved At | Date and time | At resolution | Stops aging calculations. |
| Automation Status | Single select | Yes | Tracks processing, retries, and failures. |
| Retry Count | Number | Yes | Supports controlled retry and dead-letter handling. |
| Error Message | Long text | No | Sanitized failure details for administrators. |
Supporting tables
- Evidence
- Stores Drive File ID, filename, document type, Drive URL, related invoice, purchase order, exception, uploaded date, verification status, and duplicate-document status.
- Reason Codes
- Stores codes such as MISSING_PO, PO_NOT_FOUND, PRICE_VARIANCE, POSSIBLE_DUPLICATE, RECEIPT_MISSING, AWAITING_XERO_ENTRY, MULTIPLE_PO, UNCLASSIFIED_DOCUMENT, and OWNER_UNCLEAR. Each record contains a default team, SLA, priority, approval rule, and active flag.
- People and Routing
- Stores employee email, team, role, active status, backup owner, escalation recipient, supplier category, and purchase-order assignment rules.
- Activity Log
- Stores exception, event type, previous status, new status, actor, event timestamp, source automation, and a concise event description.
Airtable does not provide a relational database unique constraint in the same way as SQL. The implementation therefore enforces uniqueness through Zapier searches before creation, stable external IDs, and visible duplicate-control views.
Workflow Statuses and Ownership
| Status | Owner and required action | Entry and exit conditions | Reminder and escalation |
|---|---|---|---|
| New | Automation administrator verifies routing if necessary. | Created by a rule. Exits when an owner and evidence folder are confirmed. | Escalates to AP if unassigned after two hours. |
| Assigned | Buyer, receiving lead, AP coordinator, or finance manager investigates. | Owner and due date exist. Exits when action starts or evidence is requested. | Reminder one business day before due date. |
| Waiting on Procurement | Assigned buyer corrects the PO or explains the variance. | Entered for PO or pricing issues. Exits with evidence or reassignment. | Escalates to procurement lead at the due date. |
| Waiting on Receiving | Receiving lead uploads or validates receipt evidence. | Entered when a receipt is required but missing. Exits when evidence is linked. | Escalates to operations manager at the due date. |
| Waiting on Supplier | AP or buyer follows up with the supplier. | Entered when a credit, corrected invoice, or explanation is required. | Reminder every two business days, subject to supplier-contact policy. |
| Ready for AP Review | AP verifies evidence and resolution fields. | Owner submits a proposed resolution. Exits to Resolved, Returned, or Approval Required. | Reminder after one business day. |
| Approval Required | Finance manager reviews a high-risk override. | Entered for significant variances, duplicate overrides, or policy exceptions. | Escalates to designated delegate after one business day if unavailable. |
| Returned | Previous owner supplies missing information. | AP or the approver rejects the submitted resolution. | A new due date is set and the return reason is mandatory. |
| Escalated | Escalation recipient assumes or supervises ownership. | Due date passed without an accepted resolution. | Second escalation after two additional business days. |
| Resolved | AP confirms the exception is cleared. | Required evidence and approvals exist. Exits to Closed after accounting confirmation. | No routine reminders. |
| Closed | Finance retains the record for reporting and audit evidence. | Xero action has been completed or no further action is required. | No reminders. |
| Cancelled | Finance manager records the cancellation reason. | Used for voided bills, invalid files, or records created in error. | No reminders. |
A record moves backward when AP or the finance manager selects Returned and records the missing information. Only designated finance users can close, cancel, or reopen an exception. Reopening creates a new cycle number so the idempotency key remains distinct from the previous resolution cycle.
Step-by-Step Implementation
Step 1: Prepare the Accounts and Permissions
- Create separate Airtable bases named
AP Exception Queue - TestandAP Exception Queue - Production. Limit production base creators and administrators to the finance systems owner and backup administrator. - Create Google Drive folders named
AP Automation TestandAP Automation Production. Under each root, createInvoice Inbox,Evidence Inbox,Quarantine, andException Evidence. - Use a Xero organization designated for testing if one is available. Otherwise, create clearly marked draft test bills and follow the company’s approved deletion or voiding procedure after testing.
- Create a dedicated integration identity if company policy, licensing, and each platform’s terms permit it. Do not share a personal password. Require multifactor authentication and retain recovery details in the approved credential-management system.
- Authorize Xero through Zapier’s supported Xero connection. Xero authentication is handled through OAuth rather than a manually pasted API key. Grant only the accounting access needed to read bills and purchase orders.
- Authorize Airtable through the supported Zapier connection. Restrict the connection to the AP base where the connection method allows resource scoping.
- Authorize Google Drive through OAuth. The connection must be able to read the intake folders, create exception folders, move files, and obtain file links. It should not have unnecessary access to unrelated shared drives.
- Create finance, procurement, and receiving test users. Include one inactive-owner scenario and one delegated approver scenario.
- Record production identifiers in a controlled deployment document: Airtable base, table names, view names, Drive folder IDs, Xero organization, default sender, finance notification address, and escalation address.
- Keep test and production Zapier workflows separate. Prefix every test workflow with
TEST -and leave production workflows disabled until user acceptance testing is complete.
Connector event names and available fields can change between platform versions. During account preparation, confirm that the connected Xero application exposes the required new-bill and purchase-order events. The implementation relies on the event data returned by the authorized connection rather than an assumed screen label.
If an updated purchase-order event is not available in the connected version, use a controlled periodic Xero export and Airtable import for changed purchase orders. Record the import timestamp and reconcile changes before relying on price-variance rules.
Step 2: Build the Intake
The system has three intake paths: Xero bills, Xero purchase orders, and Google Drive documents.
Xero bill intake
| Field | Validation | Incomplete handling |
|---|---|---|
| InvoiceID | Must be nonblank and treated as immutable. | Stop processing and log a critical integration failure. |
| InvoiceNumber | Trim whitespace; require a nonblank value. | Create a DATA_INCOMPLETE exception assigned to AP. |
| Contact name and ContactID | Require at least the external contact ID or a nonblank supplier name. | Send to manual review. |
| Date | Must parse as a valid date. | Use the received timestamp temporarily and flag the record. |
| DueDate | Optional but validated if present. | Leave blank and create a low-priority data-quality task. |
| CurrencyCode | Must match an allowed currency. | Stop price comparison and request finance review. |
| Total | Must be numeric. | Do not calculate a variance; create DATA_INCOMPLETE. |
| Reference | Normalize to uppercase and compare with the PO pattern. | Create MISSING_PO when the supplier category requires a PO. |
| Status | Map only recognized Xero status values. | Store the raw value and mark the mapping for review. |
Google Drive document intake
The Drive intake uses controlled filenames because the core implementation does not depend on AI document extraction.
Invoice file:
INV__SUPPLIERCODE__INVOICENUMBER__YYYYMMDD.pdf
Receipt file:
RCPT__PO-NUMBER__YYYYMMDD.pdf
Exception evidence:
EXC-AIRTABLE_RECORD_ID__DOCUMENTTYPE__DESCRIPTION.pdf
Examples:
INV__RBP01__RB-4821__20260715.pdf
RCPT__PO-10427__20260714.pdf
EXC-recA1B2C3D4__APPROVAL__Buyer-change-approval.pdf
Zapier splits the filename on the double underscore separator. It validates the document prefix, expected segment count, date, and file extension. Invalid files are moved to the Quarantine folder and produce an UNCLASSIFIED_DOCUMENT exception.
The Drive File ID is the technical duplicate key. A repeated event for the same file updates the existing Evidence record instead of creating another one. A different file using the same invoice or exception key is allowed, but it is marked as a possible duplicate document for human review.
The intake folders are internal, not public upload portals. The folder description and Airtable interface include a privacy notice stating that bank account details, payment credentials, card data, passwords, and unrelated personal information must not be uploaded.
Incomplete submissions
A Drive-originated invoice with a valid supplier code and invoice number can create a placeholder Invoice record. It receives an AWAITING_XERO_ENTRY exception due in one business day. A file missing those values is quarantined instead of generating an incomplete financial record.
Step 3: Create the System of Record
- Create the Invoices, Purchase Orders, Exceptions, Evidence, Reason Codes, People and Routing, and Activity Log tables.
- Use plural table names and consistent title-case field names. Do not rename fields after activating the workflows without updating every Zapier mapping.
- Configure single-select fields before importing records so unrecognized values are visible rather than silently normalized.
- Add linked-record fields before lookups and rollups. Link Exceptions to Invoices, Purchase Orders, Evidence, Reason Codes, and People.
- Create one Reason Codes record for every supported deterministic rule. Store the SLA, team, priority, and approval requirement in that record.
- Populate People and Routing with primary owners, backups, team addresses, active status, and escalation recipients.
- Import currently active purchase orders before go-live. Normalize PO numbers and resolve duplicates before enabling matching.
- Import only unresolved legacy exceptions or mark imported history with
Source = Migration. Do not mix unverified historical spreadsheet data into live automation rules. - Create filtered views for each trigger and operational queue. Lock the production views against casual edits where the selected Airtable feature set supports it.
Use formulas for display identifiers and deterministic calculations:
Invoice Record ID:
"INV-" & RECORD_ID()
Exception ID:
"EXC-" & RECORD_ID()
Normalized PO Number:
UPPER(SUBSTITUTE(TRIM({PO Number}), " ", ""))
Supplier Invoice Key:
UPPER(SUBSTITUTE(SUBSTITUTE(TRIM({Supplier}), " ", ""), "-", ""))
& "|"
& UPPER(SUBSTITUTE(SUBSTITUTE(TRIM({Supplier Invoice Number}), " ", ""), "-", ""))
Variance Amount:
IF(
AND({Invoice Total}, {PO Total}),
{Invoice Total} - {PO Total}
)
Variance Percentage:
IF(
AND({PO Total}, {PO Total} != 0),
ABS({Variance Amount}) / ABS({PO Total})
)
Due Date:
IF(
{Opened At},
WORKDAY({Opened At}, {SLA Business Days})
)
Days Open:
IF(
{Opened At},
DATETIME_DIFF(
IF({Resolved At}, {Resolved At}, NOW()),
{Opened At},
"days"
)
)
Missing Receipt Flag:
IF(
AND({Receipt Required}, {Receipt Evidence Count} = 0),
1,
0
)
Test formulas against blank totals, zero-value purchase orders, credits, different currencies, and imported dates. Price comparison runs only when invoice and PO currencies match and the purchase order uses the Single Bill pattern. Partial and milestone billing are routed to manual review.
Create a last-modified-time field watching Status, Owner, Resolution Notes, Resolution Code, and Approval Status. Add a corresponding last-modified-by field where supported. These fields trigger activity logging and identify changes requiring re-evaluation.
Step 4: Connect the Tools
| Source | Source field | Destination | Transformation |
|---|---|---|---|
| Xero bill | InvoiceID | Invoices: Xero Invoice ID | Store unchanged. |
| Xero bill | InvoiceNumber | Invoices: Supplier Invoice Number | Trim surrounding whitespace. |
| Xero bill | Contact name and ContactID | Invoices: Supplier and Xero Contact ID | Preserve ID; normalize name only for matching. |
| Xero bill | Reference | Invoices: PO Reference | Uppercase, trim, and remove spaces for lookup. |
| Xero bill | Date and DueDate | Invoices: Bill Date and Due Date | Convert to the Airtable base timezone. |
| Xero bill | CurrencyCode and Total | Invoices: Currency and Invoice Total | Validate currency before numeric comparison. |
| Xero purchase order | PurchaseOrderID and PurchaseOrderNumber | Purchase Orders external ID and PO Number | Store ID unchanged and normalize business number. |
| Xero purchase order | Total, CurrencyCode, Status | Purchase Orders total, currency, and status | Validate allowed values. |
| Google Drive | File ID | Evidence: Drive File ID | Store unchanged as the duplicate-event key. |
| Google Drive | Filename | Evidence and related record keys | Split on double underscores and validate segments. |
| Google Drive | File link | Evidence: Drive URL | Store the connector-returned link rather than constructing a URL. |
| Airtable exception | Owner email, reason, due date | Email by Zapier | Insert into a controlled notification template. |
Each connection follows the same reliability pattern:
- Authentication: Use the platform-supported OAuth connection. Never place passwords or tokens in Airtable fields.
- Returned identifier: Store Xero IDs, Airtable record IDs, and Drive file or folder IDs immediately after creation.
- Source update: Set Automation Status to Complete only after all required destination identifiers have been saved.
- Failure behavior: Preserve the source record, write a sanitized error where possible, and place the item in a retry or manual-review view.
- Retry behavior: Retry transient failures without creating a second business record. Always search by the external ID or exception key before creating anything.
Step 5: Build the Core Automation
Automation 1: Synchronize Xero purchase orders
- Trigger: A new purchase-order event from the connected Xero organization.
- Conditions: PurchaseOrderID, purchase-order number, supplier, currency, and total must be present.
- Actions: Search Airtable by Xero Purchase Order ID. Update if found; otherwise search by normalized PO number and create a record if no conflict exists.
- Fields updated: External ID, PO number, supplier, date, total, currency, status, source, and automation timestamp.
- Notification: Notify the automation owner only if required values are missing or a conflicting PO number exists.
- Exception: Put ambiguous records into the PO Sync Review view and do not use them for automatic price matching.
Automation 2: Synchronize Xero bills
- Trigger: A new supplier-bill event from Xero. The connector may poll, so the delay depends on the selected Zapier service level.
- Conditions: A nonblank Xero InvoiceID is mandatory. Process supported bill statuses according to finance policy.
- Actions: Search by Xero Invoice ID. If absent, normalize the supplier invoice key and search for a Drive-originated placeholder. Complete the placeholder or create a new Invoice record.
- Fields updated: Supplier, contact ID, invoice number, PO reference, bill and due dates, currency, amount, Xero status, source, automation status, and last run.
- Notification: No routine email is sent for a successfully synchronized bill.
- Exception: Missing invoice number, invalid currency, or unparseable total creates a DATA_INCOMPLETE exception.
The exact order is important:
- Validate the Xero InvoiceID.
- Search Airtable by Xero Invoice ID.
- If found, update rather than create.
- If not found, build the normalized supplier invoice key.
- Search for a placeholder with the same key and a blank Xero Invoice ID.
- Search for another record with the same key and a different nonblank Xero Invoice ID.
- Complete the placeholder or create the invoice.
- Set the duplicate-candidate flag when another Xero-backed record exists.
- Search the Purchase Orders table by normalized reference.
- Link an unambiguous match.
- Set Automation Status to Complete and record the timestamp.
Automation 3: Process Drive uploads
- Trigger: A new file appears in the Invoice Inbox or Evidence Inbox.
- Conditions: The Drive File ID must not already exist in Airtable, and the filename must follow an approved pattern.
- Actions: Parse the filename, create an Evidence record, find the related invoice, PO, or exception, move the file, and update the linked records.
- Fields updated: Drive File ID, filename, document type, URL, related records, verification status, and upload timestamp.
- Notification: Notify AP when an invoice file creates an AWAITING_XERO_ENTRY exception. Notify the exception owner when requested evidence is attached.
- Exception: Invalid or unmatched files move to Quarantine and create an UNCLASSIFIED_DOCUMENT or OWNER_UNCLEAR record.
Automation 4: Create deterministic exception records
Create separate Zapier workflows for each reason so one invoice can produce more than one exception. Each workflow watches new or changed Airtable invoice records and applies one rule.
- Trigger: An invoice is created or its evaluation fields change.
- Conditions: The reason-specific formula or field equals true, and the invoice is not voided, deleted, closed, or explicitly excluded.
- Actions: Build the exception key, search for an active matching exception, obtain the Reason Code and routing record, create the exception, create its Drive folder, and send the assignment notice.
- Fields updated: Reason, owner, team, priority, SLA, due date, folder ID, folder link, and automation status.
- Notification: Email the owner with the exception ID, reason, amount context, due date, Airtable link, and Drive folder link.
- Exception: If no owner can be resolved, assign the finance manager and use OWNER_UNCLEAR as an additional exception.
The baseline rule set is:
- MISSING_PO: A PO is required and the Xero bill reference is blank.
- PO_NOT_FOUND: A PO reference exists but no active Airtable PO matches exactly.
- MULTIPLE_PO: The reference contains multiple PO numbers or an unsupported format.
- POSSIBLE_DUPLICATE: Another Xero-backed invoice has the same normalized supplier invoice key.
- PRICE_VARIANCE: The PO uses Single Bill, currencies match, and the absolute difference exceeds the greater of $10 or 1 percent of the PO total.
- RECEIPT_MISSING: Receipt Required is true and no verified receipt exists 24 hours after the bill is synchronized.
- AWAITING_XERO_ENTRY: A valid invoice document exists but no matching Xero bill has appeared.
The $10 and 1 percent values are representative policy assumptions. They are stored in configuration fields rather than embedded in multiple workflows.
Automation 5: Log status and ownership changes
- Trigger: The exception last-modified timestamp changes.
- Conditions: Status, owner, approval status, or resolution fields differ from their previously logged values.
- Actions: Create an Activity Log record and update the exception’s last-event timestamp.
- Fields updated: Previous value, new value, actor when available, source, event date, and description.
- Notification: Send an email for reassignment, return, approval, rejection, or escalation.
- Exception: If the actor cannot be identified, record
Automation or Unknownrather than inventing an employee.
Step 6: Add Approvals, Reminders, and Escalations
The exception queue uses sequential approval for high-risk overrides:
- The assigned owner supplies evidence and resolution notes.
- AP reviews the evidence and confirms that required fields are complete.
- If the exception is a possible duplicate override, a price variance above $250, a variance above 5 percent, or another configured policy exception, the status changes to Approval Required.
- The finance manager reviews the record and selects Approved, Rejected, or More Information Required.
- After approval, AP resolves the exception and separately performs the appropriate action in Xero.
Payment approval is not part of this sequence. It remains in the company’s accounting controls.
Parallel branches are used only for notifications and evidence requests. For example, a missing receipt can notify both the receiving lead and AP at the same time. The final exception decision remains sequential so the audit record shows who supplied evidence, who reviewed it, and who approved an override.
| Timing | Condition | Action |
|---|---|---|
| One business day before due | Status remains open and not awaiting AP review. | Email the current owner with the outstanding action. |
| Due date | No accepted resolution exists. | Set Escalation Level to 1 and notify the owner’s manager or team lead. |
| Two business days overdue | Exception remains open. | Set Escalation Level to 2 and notify finance management. |
| One day in Ready for AP Review | AP has not completed review. | Remind the AP coordinator and show the record in the AP Review Overdue view. |
| Approver unavailable | People record is inactive or marked unavailable. | Assign the designated backup and log the delegation. |
| Rejected | Approver selects Rejected. | Return to the previous owner, require a rejection reason, and set a new due date. |
A scheduled Zap runs each weekday morning. It lists open exceptions from reminder views, loops through the records, sends the appropriate message, updates the last-reminder date, and writes an Activity Log event. A second run later in the day catches records created after the morning schedule.
Step 7: Add Documents and File Management
The production folder structure is:
AP Automation Production/
Invoice Inbox/
Evidence Inbox/
Quarantine/
Exception Evidence/
2026/
07/
EXC-recA1B2C3D4/
Invoice/
Purchase Order/
Receipt/
Approval/
Correspondence/
When Zapier creates an exception, it creates the year, month, and exception folder only if they do not already exist. It stores the returned folder ID and connector-provided folder link in Airtable.
Evidence files use the exception ID and a controlled document type. Zapier moves each file from the Evidence Inbox into the matching subfolder. The original Drive File ID remains the evidence key even if the file is moved or renamed.
- Access: Folder permissions inherit from the restricted production root. Public links are prohibited.
- Version control: Corrected files receive a version suffix such as
V2. Users do not overwrite approved evidence without retaining the previous version. - Replacement: A replacement file links to the same exception and marks the earlier Evidence record as Superseded.
- Retention: Finance applies its accounting-record retention policy to both Airtable metadata and Drive files.
- Archiving: Closed exception folders remain read-only to normal users where practical and move to a year-based archive according to policy.
- Missing documents: AP cannot resolve receipt or approval exceptions unless the required verified evidence count is greater than zero.
- Duplicate documents: The same Drive File ID updates an existing record. Different files with the same logical key are flagged for review.
- Large files: The team verifies current Drive and Zapier connector limits before deployment. Files exceeding the supported limit are uploaded directly to the destination folder and linked manually.
- Failed upload: The exception remains open, the user receives an error notice, and no evidence-complete flag is set.
Step 8: Add Reporting and Operational Views
| View | Filter | Primary owner |
|---|---|---|
| New Exceptions | Status is New or owner is blank. | AP coordinator |
| My Assigned Work | Owner is current user and status is open. | Individual user |
| Awaiting Procurement | Responsible Team is Procurement. | Buyers |
| Awaiting Receiving | Responsible Team is Receiving. | Receiving lead |
| Overdue | Due Date is before today and status is not resolved, closed, or cancelled. | Finance manager |
| Incomplete Records | Reason, owner, invoice, due date, or required amount is blank. | Automation owner |
| Approval Required | Approval Status is Pending. | Finance manager |
| Rejected or Returned | Status is Returned or Approval Status is Rejected. | Original owner |
| Manual Review | Automation Status is Manual Review. | AP coordinator |
| Automation Failures | Automation Status is Retry or Failed. | Automation owner |
| Dead Letter | Automation Status is Failed and Retry Count is at least three. | Finance systems owner |
| Recently Completed | Resolved At is within the previous 30 days. | Finance manager |
The Airtable interface displays open exceptions by reason, owner, supplier, age band, and escalation level. It also shows monthly created and resolved volumes, average resolution days, reopened count, and the percentage requiring manual review.
The source is the Airtable base. Interface charts read current base data, while new information from Xero and Drive appears after the relevant Zapier polling or processing delay. The finance manager owns reporting definitions. The automation owner owns field integrity and refresh monitoring.
Alert thresholds include any critical exception without an owner, more than five dead-letter records, or more than ten open exceptions older than five business days. These are planning thresholds and should be adjusted after observing actual volume.
Step 9: Add Security and Governance Controls
- Least privilege: Procurement and receiving users can update assigned workflow fields but cannot change external Xero IDs, formulas, automation statuses, or routing tables.
- Role-based permissions: Finance administrators manage reason codes, tolerances, approvals, and closures. Automation administrators manage connections and workflows.
- Sensitive fields: Bank details, payment instructions, tax identifiers, and credentials are excluded from notification templates and optional AI inputs.
- Shared links: Drive folders remain restricted to approved internal users and groups. Public link sharing is disabled by policy.
- Credential storage: OAuth connections are stored in Zapier. API secrets used by optional enhancements are never written to Airtable or Drive.
- Activity logs: Xero, Airtable, Zapier, and Drive activity should be retained according to the available subscription features and finance policy.
- Former employees: Identity administrators remove platform access, disable routing records, and activate backup owners as part of offboarding.
- Retention: Exception evidence follows the company’s accounting and supplier-record retention schedule.
- Backups: Export critical Airtable tables on a schedule and verify that Drive retention or backup controls cover the evidence root.
- Privacy: Collect only information needed to investigate and resolve the invoice exception.
- Regulatory review: Finance and legal teams confirm applicable tax, accounting, privacy, and record-retention requirements.
- Human approval: Duplicate overrides, significant variances, Xero authorization, and payment release remain human-controlled.
Step 10: Deploy and Test
- Build all tables, folders, mappings, and workflows in the test environment.
- Create sample suppliers, purchase orders, bills, receipts, and exception documents containing no real bank or personal information.
- Run every normal, exception, retry, approval, and security test listed later in this case study.
- Ask the AP coordinator, finance manager, one buyer, and the receiving lead to complete user acceptance testing.
- Record defects in a controlled implementation log with owner, severity, fix, and retest result.
- Pilot the process with a limited supplier group or purchase category for two weeks.
- Reconcile every pilot Xero bill against Airtable to identify missed or duplicate records.
- Freeze production field names and views after approval.
- Activate production Zaps in dependency order: PO sync, bill sync, Drive intake, exception creation, folder creation, notifications, activity logging, reminders, and reporting.
- Keep the old spreadsheet read-only during a short rollback window. Do not run both processes as editable systems of record.
- Publish a one-page user guide covering ownership, evidence naming, status changes, and support contacts.
- Monitor production runs daily for the first two weeks and weekly after stabilization.
A rollback disables production Zaps, returns staff temporarily to the read-only process template, preserves all Airtable and Drive records already created, and reconciles any Xero bills received during the interruption before reactivation.
Code and Configuration
The core exception queue does not require custom code. Xero, Airtable, Zapier, and Google Drive provide the required authentication, triggers, searches, record actions, file actions, filters, paths, delays, and scheduling.
Native configuration is preferable here because the volume is moderate and the business rules are deterministic. The required configuration is still explicit:
- Configure the Xero source connection through OAuth.
- Map immutable Xero IDs into dedicated Airtable text fields.
- Normalize supplier invoice and PO keys before searching.
- Use a search-before-create action for every Invoice, Purchase Order, Exception, and Evidence record.
- Configure reason-specific workflows so multiple valid exceptions can coexist.
- Store returned Airtable and Drive identifiers immediately.
- Use filtered Airtable views for reminder, escalation, retry, and reporting workflows.
- Set production workflow alerts to the finance systems owner and backup owner.
Representative configuration values
AIRTABLE_BASE: AP Exception Queue - Production
INVOICE_TABLE: Invoices
PURCHASE_ORDER_TABLE: Purchase Orders
EXCEPTION_TABLE: Exceptions
EVIDENCE_TABLE: Evidence
REASON_TABLE: Reason Codes
ROUTING_TABLE: People and Routing
ACTIVITY_TABLE: Activity Log
DRIVE_ROOT_FOLDER_ID: YOUR_FOLDER_ID
INVOICE_INBOX_FOLDER_ID: YOUR_FOLDER_ID
EVIDENCE_INBOX_FOLDER_ID: YOUR_FOLDER_ID
QUARANTINE_FOLDER_ID: YOUR_FOLDER_ID
DEFAULT_FINANCE_EMAIL: YOUR_EMAIL_ADDRESS
AUTOMATION_OWNER_EMAIL: YOUR_EMAIL_ADDRESS
DEFAULT_TIMEZONE: YOUR_APPROVED_TIMEZONE
MAX_AUTOMATION_RETRIES: 3
PRICE_TOLERANCE_FIXED: 10.00
PRICE_TOLERANCE_PERCENT: 0.01
HIGH_VALUE_VARIANCE: 250.00
HIGH_PERCENT_VARIANCE: 0.05
Exception creation configuration
Trigger:
Airtable invoice created or relevant evaluation field updated
Filter:
Reason-specific flag equals 1
AND Xero Status is not VOIDED, DELETED, or PAID
AND Automation Status is not Failed
Exception key:
Airtable Invoice Record ID | Reason Code | Cycle Number
Search:
Exceptions where Exception Key exactly matches the generated key
Create only when:
No matching active exception exists
After creation:
1. Store Airtable exception record ID
2. Create Google Drive evidence folder
3. Store Drive folder ID and returned link
4. Assign owner and backup
5. Send notification
6. Set Automation Status to Complete
7. Create Activity Log event
To test native configuration, create one test record for each reason code, replay the same source event, and confirm that the second event updates the existing record rather than creating a duplicate. Inspect Zapier task history, Airtable automation fields, Activity Log records, and Drive folder contents.
Likely configuration errors include renamed Airtable fields, a disconnected OAuth account, a Drive folder moved outside the authorized root, a formula returning text instead of a number, or a lookup returning multiple purchase orders. Correct the source configuration and replay the failed workflow only after confirming the idempotency key.
Failure Handling and Operational Reliability
| Failure | Automated response | Manual recovery | Owner |
|---|---|---|---|
| Missing required Xero field | Create DATA_INCOMPLETE or mark Manual Review. | Correct the bill or tracker field and re-run evaluation. | AP |
| Duplicate Xero event | Find by Xero Invoice ID and update the existing record. | Reconcile only if external IDs conflict. | Automation owner |
| Possible duplicate supplier invoice | Create POSSIBLE_DUPLICATE without deleting either bill. | AP compares documents and Xero history. | AP |
| Invalid PO reference | Create PO_NOT_FOUND or MULTIPLE_PO. | Buyer corrects or confirms the reference. | Procurement |
| Partial completion | Leave Automation Status as Processing or Retry and retain returned IDs. | Resume from the failed action after checking created records. | Automation owner |
| Xero authentication expiry | Workflow fails and platform alert is sent. | Reconnect OAuth, test the connection, and replay affected records. | Finance systems owner |
| Airtable authorization failure | No destination write occurs. | Restore scoped access and replay using external IDs. | Automation owner |
| Drive folder creation failure | Exception remains open with Document Status set to Failed. | Create or select the folder, store its ID, and rerun notification. | Automation owner |
| File upload or move failure | Do not mark evidence complete. | Move the file manually and update the Evidence record. | AP |
| Invalid email address | Mark Notification Status as Failed. | Correct the People record and resend. | Team manager |
| Unavailable approver | Assign the configured backup and log delegation. | Finance confirms the delegate has authority. | Finance manager |
| Rate limit or timeout | Use platform retry behavior where available and retain the idempotency key. | Wait, inspect source and destination, then replay once. | Automation owner |
| Repeated failure | Increment Retry Count and enter Dead Letter after three attempts. | Correct the root cause, reset the count, and run controlled recovery. | Finance systems owner |
Idempotency is enforced at every create step:
- Xero bills use Xero InvoiceID.
- Purchase orders use Xero PurchaseOrderID and normalized PO number.
- Drive files use Drive File ID.
- Exceptions use invoice record ID, reason code, and cycle.
- Activity events use exception ID, event type, and source event timestamp where available.
A scheduled reconciliation compares recent Xero bill IDs with Airtable, open Airtable exceptions with valid linked invoices, and Evidence records with accessible Drive file IDs. Missing links are sent to Manual Review rather than silently ignored.
The Dead Letter view acts as the operational dead-letter queue. It contains records that could not be recovered automatically, the last error, retry count, affected source ID, and the required recovery owner.
A Complete Example
The following is a representative record moving through the completed Elmstead workflow.
- A supplier called Riverbend Packaging submits invoice
RB-4821for $5,320. The invoice references purchase orderPO-10427. - A Xero draft bill is created with a unique Xero InvoiceID, supplier contact, invoice date, due date, currency USD, and total of $5,320.
- The Xero bill event reaches Zapier. Zapier searches Airtable by the Xero InvoiceID and finds no existing record.
- Zapier creates the normalized supplier invoice key
RIVERBENDPACKAGING|RB4821. It finds no other Xero-backed invoice with that key. - Zapier finds
PO-10427in Airtable. The PO total is $4,700, the currency is USD, the billing pattern is Single Bill, and receipt evidence is required. - A verified receipt file already exists in Drive under the PO number, so the receipt-missing rule evaluates false.
- The calculated variance is $620. The variance percentage is approximately 13.19 percent. Both exceed the configured high-value approval thresholds.
- Airtable creates invoice record
INV-recF8G7H6J5. - The PRICE_VARIANCE workflow creates exception key
recF8G7H6J5|PRICE_VARIANCE|1. No active exception has that key. - Airtable returns exception record
EXC-recP4Q3R2S1. The responsible buyer is obtained from the linked purchase order. - Zapier creates the Drive evidence folder, stores its returned folder ID and link, and emails the buyer. The exception enters Waiting on Procurement with a two-business-day due date.
- The buyer investigates and determines that an approved packaging specification change was not reflected in the original PO. The buyer uploads the approved change record using the exception filename convention.
- The Drive workflow moves the file into the Approval subfolder, creates an Evidence record, and notifies AP.
- The buyer enters resolution notes and changes the status to Ready for AP Review.
- Because the variance exceeds $250 and 5 percent, AP changes the status to Approval Required rather than resolving it.
- The finance manager reviews the Xero bill, purchase order, receipt, and approval evidence. The manager records Approved with a timestamp and comment.
- AP updates or confirms the accounting record according to company policy and marks the exception Resolved. The Xero bill is not automatically authorized by Zapier.
- The exception later moves to Closed after AP confirms that no further corrective action is required.
- The Activity Log contains creation, assignment, evidence receipt, AP review, approval, resolution, and closure events.
If the Drive upload had failed, the exception would have remained in Waiting on Procurement, Evidence Status would have stayed Failed or Missing, and the approval step would not have been available.
Implementation Cost
All amounts below are representative planning assumptions in US dollars. They are not vendor quotations or verified client costs. Current vendor pricing, tax, usage limits, currency, and licensing requirements must be checked before implementation.
| Item | Assumption | Estimated cost |
|---|---|---|
| Professional implementation | 60 hours at $145 per hour, including design, configuration, testing, deployment, and documentation | $8,700 |
| Internal setup and validation | 24 hours at a loaded rate of $38 per hour | $912 |
| Training participation | 8 staff-hours at $38 per hour | $304 |
| Total economic implementation cost | Professional and internal effort | $9,916 |
The 60 professional hours assume approximately 12 hours for discovery and design, 32 hours for configuration, 10 hours for technical testing and deployment, and 6 hours for documentation and training preparation. The internal allowance includes data cleanup, routing decisions, user acceptance testing, and production validation.
| Item | Assumption | Monthly allowance |
|---|---|---|
| Airtable | Six operational users with the required permission and interface features | $90 |
| Zapier | Task volume sufficient for bill sync, document processing, reminders, and retries | $55 |
| Xero | Existing accounting subscription | No incremental cost assumed |
| Google Drive | Existing Google Workspace storage | No incremental cost assumed |
| Core recurring software | Airtable and automation allowance | $145 |
| Internal maintenance | Three hours per month at $38 per hour | $114 in retained staff capacity |
| Optional AI service | Usage allowance subject to measured token volume | $8 |
An internal team could perform more of the implementation, but free or existing software would not eliminate design, testing, training, monitoring, or maintenance effort.
Estimated Time and Cost Savings
The savings model uses these representative assumptions:
- 280 supplier bills per month.
- 12 minutes of current average handling time per bill, including spreadsheet maintenance and follow-up.
- 4 minutes of routine handling per bill after automation.
- 20 percent exception rate, equal to 56 exceptions per month.
- 7 additional minutes of human exception investigation per exception after automation.
- 3 hours of monthly maintenance and reconciliation.
- $38 loaded hourly labour cost.
- $145 recurring monthly software cost.
- $9,916 one-time economic implementation cost.
Current monthly labour hours: Monthly volume × current minutes per record ÷ 60
280 × 12 ÷ 60 = 56.0 hours
New monthly labour hours: Monthly volume × new minutes per record ÷ 60, plus exception handling and maintenance
Routine processing: 280 × 4 ÷ 60 = 18.67 hours
Exception handling: 56 × 7 ÷ 60 = 6.53 hours
Maintenance: 3.00 hours
Total new labour: 18.67 + 6.53 + 3.00 = 28.20 hours
Monthly hours recovered: Current monthly labour hours minus new monthly labour hours
56.00 – 28.20 = 27.80 hours
Estimated monthly labour value: Monthly hours recovered × loaded hourly labour cost
27.80 × $38 = $1,056.40
Net estimated monthly value: Monthly labour value minus recurring tool costs
$1,056.40 – $145 = $911.40
Estimated payback period: One-time implementation cost ÷ net estimated monthly value
$9,916 ÷ $911.40 = approximately 10.9 months
Recovered time does not automatically reduce payroll. It can represent additional invoice-processing capacity, quicker turnaround, lower overtime risk, fewer administrative tasks, reduced dependency on the AP coordinator, or the ability to absorb higher volume without adding equivalent administrative effort.
Non-financial benefits include clearer ownership, fewer follow-up emails, more consistent exception reasons, better evidence retention, faster identification of overdue issues, improved supplier responses, and a more reliable audit history.
Readers should replace the monthly volume, current handling time, exception rate, review time, maintenance requirement, labour cost, software allowance, and implementation cost with their own figures.
Adding AI to the Automation
AI is optional and should be added only after Xero synchronization, record matching, ownership, reminders, evidence handling, and failure recovery are operating reliably.
The core benefits come from normal automation:
- Required fields and validation identify missing information.
- Exact external IDs prevent duplicate event processing.
- Formulas calculate price differences.
- Lookup tables assign owners and deadlines.
- Workflow rules send reminders and escalations.
- Human approval controls financial decisions.
AI is useful for unstructured information. It can summarize long resolution notes, identify stated missing items, group supplier correspondence by theme, or draft a next-action description. It should not be used for arithmetic, exact duplicate keys, threshold rules, permissions, Xero status decisions, bill approval, or payment release.
The Recommended AI Enhancement
The recommended enhancement produces a structured exception summary when an exception contains lengthy notes or several evidence descriptions.
- Trigger: Exception status changes to Ready for AP Review and AI Status is blank or Retry.
- AI input: Reason code, supplier name, invoice number, PO reference, variance values, user-entered notes, and approved evidence filenames or short text descriptions.
- Prohibited input: Bank details, payment instructions, credentials, card data, tax identifiers, unrelated personal data, or full documents without an approved data-processing assessment.
- Output: Summary, missing items, suggested next action, suggested owner team, risk flags, and confidence.
- Validation: A JavaScript step checks the JSON structure, enums, length, arrays, and confidence range.
- Record update: Valid output is written to dedicated AI Draft fields, never directly into approval fields.
- Human review: AP accepts, edits, or rejects the draft before using it.
- Low confidence: Confidence below 0.75 sends the item to manual review without an owner or status change.
- Failure: The exception remains operational. AI Status becomes Failed or is identified by a watchdog workflow for retry.
Reusable system instruction
You summarize accounts payable exceptions for internal human review.
Use only the supplied facts. Do not approve or reject an invoice, authorize a payment, make an accounting entry, infer missing commercial terms, or state that evidence has been verified unless the input explicitly says it was verified.
Produce a concise factual summary, list missing information, suggest a non-binding next action, and suggest the team most likely to own that action. If information conflicts or is incomplete, say so. Treat all suggestions as drafts requiring human confirmation.
Reusable user prompt
Summarize this accounts payable exception.
Exception ID: {{Exception ID}}
Reason code: {{Reason Code}}
Supplier: {{Supplier}}
Invoice number: {{Supplier Invoice Number}}
PO reference: {{PO Reference}}
Invoice total: {{Invoice Total}}
PO total: {{PO Total}}
Variance amount: {{Variance Amount}}
Variance percentage: {{Variance Percentage}}
Current owner team: {{Responsible Team}}
Resolution notes: {{Resolution Notes}}
Evidence filenames and descriptions: {{Approved Evidence Descriptions}}
Return only the requested structured JSON. Do not make a payment, approval, accounting, legal, or policy decision.
Structured output schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"summary": {
"type": "string",
"maxLength": 800
},
"missing_items": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10
},
"suggested_next_action": {
"type": "string",
"maxLength": 400
},
"suggested_owner_team": {
"type": "string",
"enum": [
"AP",
"Procurement",
"Receiving",
"Finance",
"Supplier Follow-up",
"Unknown"
]
},
"risk_flags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"summary",
"missing_items",
"suggested_next_action",
"suggested_owner_team",
"risk_flags",
"confidence"
]
}
A Webhooks by Zapier custom request can call the OpenAI Responses API after company approval. Use POST https://api.openai.com/v1/responses with an approved model.
{
"model": "YOUR_APPROVED_MODEL",
"instructions": "You summarize accounts payable exceptions for internal human review. Use only supplied facts. Do not approve or reject an invoice, authorize payment, make accounting entries, infer missing commercial terms, or claim evidence is verified unless explicitly stated.",
"input": "Exception ID: {{Exception ID}}\nReason code: {{Reason Code}}\nSupplier: {{Supplier}}\nInvoice number: {{Supplier Invoice Number}}\nPO reference: {{PO Reference}}\nInvoice total: {{Invoice Total}}\nPO total: {{PO Total}}\nVariance: {{Variance Amount}}\nCurrent team: {{Responsible Team}}\nNotes: {{Resolution Notes}}\nEvidence descriptions: {{Approved Evidence Descriptions}}",
"text": {
"format": {
"type": "json_schema",
"name": "ap_exception_summary",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"summary": {
"type": "string",
"maxLength": 800
},
"missing_items": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10
},
"suggested_next_action": {
"type": "string",
"maxLength": 400
},
"suggested_owner_team": {
"type": "string",
"enum": [
"AP",
"Procurement",
"Receiving",
"Finance",
"Supplier Follow-up",
"Unknown"
]
},
"risk_flags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"summary",
"missing_items",
"suggested_next_action",
"suggested_owner_team",
"risk_flags",
"confidence"
]
}
}
}
}
Set the request headers to Authorization: Bearer YOUR_API_KEY and Content-Type: application/json. Store the credential in the approved connection or secret-management method, restrict workflow-editing rights, and never write the key into Airtable.
The expected text is normally found in the response message content. Map the returned text value into a Code by Zapier JavaScript step. Confirm the actual response mapping during testing because response presentation can vary between connector versions.
Complete JSON validation code
Place this code in a Code by Zapier JavaScript action. Map the AI text response to an input named response_text. The step has no external dependencies and does not call the AI service itself.
const allowedTeams = new Set([
"AP",
"Procurement",
"Receiving",
"Finance",
"Supplier Follow-up",
"Unknown"
]);
function cleanJsonText(value) {
let text = String(value || "").trim();
if (text.startsWith("```")) {
text = text.replace(/^```(?:json)?\s*/i, "");
text = text.replace(/\s*```$/, "");
}
return text.trim();
}
function validateStringArray(value, fieldName, maxItems) {
if (!Array.isArray(value)) {
throw new Error(`${fieldName} must be an array.`);
}
if (value.length > maxItems) {
throw new Error(`${fieldName} contains more than ${maxItems} items.`);
}
return value.map((item, index) => {
if (typeof item !== "string" || item.trim() === "") {
throw new Error(`${fieldName}[${index}] must be a nonblank string.`);
}
return item.trim();
});
}
const raw = cleanJsonText(inputData.response_text);
if (!raw) {
return {
valid: false,
validation_error: "The AI response was empty.",
ai_status: "Failed"
};
}
try {
const parsed = JSON.parse(raw);
if (
typeof parsed.summary !== "string" ||
parsed.summary.trim() === "" ||
parsed.summary.length > 800
) {
throw new Error("summary must be a nonblank string of 800 characters or fewer.");
}
if (
typeof parsed.suggested_next_action !== "string" ||
parsed.suggested_next_action.trim() === "" ||
parsed.suggested_next_action.length > 400
) {
throw new Error(
"suggested_next_action must be a nonblank string of 400 characters or fewer."
);
}
if (!allowedTeams.has(parsed.suggested_owner_team)) {
throw new Error("suggested_owner_team contains an unsupported value.");
}
const confidence = Number(parsed.confidence);
if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) {
throw new Error("confidence must be a number between 0 and 1.");
}
const missingItems = validateStringArray(
parsed.missing_items,
"missing_items",
10
);
const riskFlags = validateStringArray(
parsed.risk_flags,
"risk_flags",
10
);
const lowConfidence = confidence < 0.75;
console.log(
JSON.stringify({
event: "ai_output_validated",
confidence,
lowConfidence,
suggestedOwnerTeam: parsed.suggested_owner_team
})
);
return {
valid: true,
ai_status: lowConfidence ? "Low Confidence" : "Draft Ready",
summary: parsed.summary.trim(),
missing_items_text: missingItems.join("\n"),
suggested_next_action: parsed.suggested_next_action.trim(),
suggested_owner_team: parsed.suggested_owner_team,
risk_flags_text: riskFlags.join("\n"),
confidence,
requires_manual_review: true,
low_confidence: lowConfidence
};
} catch (error) {
console.log(
JSON.stringify({
event: "ai_output_validation_failed",
message: error.message
})
);
return {
valid: false,
validation_error: error.message,
ai_status: "Failed",
requires_manual_review: true
};
}
Add a Zapier filter after the code step. When valid is true, update the Airtable AI Draft fields. When confidence is below 0.75, retain the current owner and status and add the record to the Low Confidence view. Invalid output must never update resolution, approval, Xero status, or payment fields.
Test with a valid response, malformed JSON, missing property, unsupported owner, excessive text, empty array item, confidence above one, and text that incorrectly claims approval. Inspect Zapier task logs and the Airtable AI Status field.
For HTTP 429 responses, timeouts, or service errors, use the automation platform’s controlled retry feature where available. Do not repeatedly call the API inside the validation code. A scheduled watchdog can identify AI records left in Queued or Failed status and retry them up to the configured limit.
Benefits of the AI Enhancement
The AI enhancement provides benefits only for unstructured exception content:
- Less time reading long notes and evidence descriptions.
- More consistent draft summaries for AP review.
- Faster identification of information that appears to be missing.
- A concise suggested next action that a human can accept or edit.
- More consistent text for reporting on recurring exception themes.
It does not create the queue, calculate variances, prevent duplicate events, assign mandatory approvals, send deterministic reminders, or maintain Drive links. Those benefits come from the core automation.
What Remains Rule-Based or Human-Controlled
- Exact matching: Xero IDs, Drive IDs, invoice keys, and PO numbers remain deterministic.
- Variance calculations: Currency checks, amounts, percentages, and thresholds use formulas and rules.
- Duplicate decisions: AI may summarize evidence, but AP determines whether a bill is actually duplicated.
- Commercial acceptance: Procurement decides whether a price or quantity difference is valid.
- Accounting entries: Authorized finance users make or approve accounting changes in Xero.
- Policy exceptions: The finance manager approves or rejects them.
- Bill authorization: Remains in the controlled accounting process.
- Payment release: Remains entirely outside the AI workflow.
- Legal conclusions: Supplier disputes or contract interpretations require qualified human review.
- Final communications: High-risk supplier messages are reviewed before sending.
These controls prevent a probabilistic text system from making financial or policy decisions that require accountability, exact data, and formal authority.
Estimating the Additional Value of AI
The original manual process averaged 12 minutes per invoice. The core automation model reduces routine work and leaves an estimated 7 minutes of human handling for each exception.
For the optional AI estimate, assume:
- 56 exceptions per month.
- 7 minutes per exception without AI.
- 5.25 minutes for a valid AI draft, including human review.
- 10 percent of outputs require additional correction and take 7.25 minutes.
- 2 percent fail and use the 7-minute non-AI process.
- $8 monthly AI usage allowance.
- $38 loaded hourly labour rate.
| Outcome | Monthly records | Minutes each | Total minutes |
|---|---|---|---|
| Valid with normal review | 49.28 | 5.25 | 258.72 |
| Valid but corrected | 5.60 | 7.25 | 40.60 |
| AI service or output failure | 1.12 | 7.00 | 7.84 |
| Total with AI | 56 | 5.49 average | 307.16 |
Without AI: 56 × 7 = 392 minutes.
Estimated additional capacity: 392 – 307.16 = 84.84 minutes, or approximately 1.41 hours per month.
Estimated labour value: 1.41 × $38 = approximately $53.58 per month.
Net after the $8 AI allowance: approximately $45.58 per month.
This modest estimate reflects the narrow role assigned to AI. Its main value is consistency and reduced reading time, not removal of human review.
Testing Checklist
Use sample data and test folders before processing real accounting information.
| Test | Expected result |
|---|---|
| Normal bill submission | Invoice syncs, PO matches, no exception is created when all rules pass. |
| Missing required field | DATA_INCOMPLETE is created or the record enters Manual Review. |
| Invalid currency or date | Price comparison stops and the error is visible. |
| Duplicate submission | Existing invoice is updated by Xero Invoice ID. |
| Duplicate event | No second Invoice, Evidence, or Exception record is created. |
| Possible duplicate invoice | POSSIBLE_DUPLICATE is created without deleting or approving either bill. |
| Missing PO | MISSING_PO is assigned with the correct SLA. |
| Unknown PO | PO_NOT_FOUND is assigned to procurement. |
| Price variance | Formula and threshold produce the expected reason and priority. |
| Partial billing | Automatic total comparison is bypassed and manual review is required. |
| Missing receipt | RECEIPT_MISSING appears after the configured waiting period. |
| Failed authentication | Workflow stops, alerts the owner, and creates no duplicate destination record. |
| Expired credential | Reconnection and replay recover the original source event. |
| Failed API request | Retry count increments and repeated failure enters Dead Letter. |
| Unavailable approver | Configured backup receives the approval request and delegation is logged. |
| Rejection | Record returns to the previous owner with a mandatory reason. |
| Reassignment | New owner is notified and an Activity Log record is created. |
| Overdue item | Escalation level and overdue view update correctly. |
| Reminder | One reminder is sent for the configured period and timestamp is stored. |
| Escalation | Correct manager receives the notice at the due threshold. |
| Failed file upload | Evidence remains incomplete and the exception cannot resolve. |
| Failed folder creation | Document Status becomes Failed and recovery instructions are visible. |
| Failed notification | Notification Status becomes Failed without changing exception ownership. |
| Unauthorized user | User cannot alter protected IDs, approval fields, or routing configuration. |
| Malformed AI output | Validator rejects it and no AI draft fields are accepted. |
| Inaccurate AI output | Human reviewer rejects or edits the draft without affecting approval status. |
| AI service failure | Core queue continues and AI Status enters Failed or Retry. |
| Successful completion | Required evidence and approval exist before AP resolves the exception. |
| Correct reporting | Open, overdue, owner, reason, and resolution metrics match source records. |
| Correct audit record | Creation, status, assignment, approval, resolution, and closure events are present. |
| Correct retry behavior | Transient failures recover without producing duplicate business records. |
Ongoing Maintenance
The finance systems owner is the primary system owner. The finance manager or designated operations systems administrator is the backup owner.
| Frequency | Task | Owner |
|---|---|---|
| Daily during launch | Review failed Zapier runs, Dead Letter records, and unmatched Drive files. | Automation owner |
| Weekly | Reconcile recent Xero bill IDs with Airtable and inspect overdue exceptions. | AP and automation owner |
| Monthly | Review reason trends, owner workload, correction rates, and automation task usage. | Finance manager |
| Monthly | Sample closed exceptions for evidence, approval, and status-history completeness. | AP lead |
| Quarterly | Review user permissions, shared links, inactive owners, and backup assignments. | System owner and identity administrator |
| Quarterly | Test authentication, file movement, reminders, escalations, and recovery workflows. | Automation owner |
| Quarterly | Review Airtable, Zapier, storage, and optional AI costs against actual usage. | Finance manager |
| Semiannually | Review reason codes, tolerances, SLAs, approval thresholds, and templates. | Finance and procurement |
| Annually | Test exports, backups, retention, archive retrieval, and disaster-recovery documentation. | System owner |
| After platform changes | Retest connector fields, mappings, permissions, and response formats. | Automation owner |
Optional AI output should be sampled monthly for unsupported claims, missing context, incorrect ownership suggestions, and prohibited data. Model, prompt, schema, correction rate, failure rate, and usage cost should be recorded in the implementation documentation.
When a user leaves, administrators must remove platform access, disable the People record, transfer open exceptions, validate the backup owner, and review any personal connections used by active workflows.
When to Move to Dedicated Software
The Airtable and Zapier implementation remains appropriate while its volume, security model, and maintenance requirements stay manageable. Replacing it should be a considered decision rather than an automatic next step.
Signals that dedicated accounts payable automation, procurement, document-management, or workflow software may be appropriate include:
- Transaction volume materially exceeds the tested automation capacity.
- Invoices regularly contain multiple purchase orders, partial receipts, credits, tax complexities, or line-level matching requirements.
- Formal three-way matching must occur at line-item level.
- Multiple entities, currencies, warehouses, or accounting organizations require separate controls.
- Users need a supplier-facing portal rather than internal Drive intake.
- Mobile or offline receiving workflows become necessary.
- Advanced segregation of duties cannot be represented safely in the current permission model.
- Regulatory or external audit requirements demand formal immutable histories and certified controls.
- Exception rates rise enough that maintaining custom routing rules becomes expensive.
- Spreadsheet-style database limits, connector delays, or API constraints affect processing reliability.
- Automation maintenance consumes more time than a supported product would require.
- Vendor support, service-level commitments, or formal disaster recovery become mandatory.
- Advanced cash forecasting, supplier statement reconciliation, tax validation, or fraud controls are required.
- Security risk increases because too many users need broad access to the base or Drive folders.
If these conditions do not apply, the existing implementation can remain useful with controlled maintenance, periodic testing, and documented upgrade criteria.
Implementation Checklist
- Confirm monthly invoice volume, exception rate, reasons, owners, and deadlines.
- Confirm Xero, Airtable, Zapier, and Google Drive as the selected tools.
- Create separate test and production accounts, bases, folders, and workflows.
- Configure least-privilege permissions and backup administrators.
- Build Invoices, Purchase Orders, Exceptions, Evidence, Reason Codes, Routing, and Activity Log tables.
- Define unique external IDs and normalized matching keys.
- Configure Xero bill and purchase-order intake.
- Configure Drive invoice and evidence intake with controlled filenames.
- Document every source-to-destination field mapping.
- Build search-before-create idempotency into every workflow.
- Create separate deterministic exception rules.
- Configure owners, backups, priorities, SLAs, and due dates.
- Configure sequential approval for high-risk exceptions.
- Configure reminders, escalations, delegation, rejection, and reassignment.
- Create Drive folders, naming standards, permissions, and retention controls.
- Create operational, overdue, manual-review, failure, and reporting views.
- Protect credentials, sensitive fields, external IDs, and approval data.
- Validate formulas, configuration values, and optional AI code.
- Test normal, incomplete, duplicate, failure, approval, security, and recovery scenarios.
- Pilot with sample or limited-scope data before full activation.
- Document launch, monitoring, support, rollback, and manual recovery.
- Replace representative cost assumptions with current vendor and labour figures.
- Replace representative savings assumptions with measured handling times.
- Add AI only after the core workflow is reliable and governed.
- Assign primary and backup maintenance owners.
- Define transaction, security, complexity, and support thresholds for moving to dedicated software.
Department/Function: Finance & Accounting
Get a FREE
Proof of Concept
& Consultation
No Cost, No Commitment!


