NetSuite Vendor Bill and Purchase Order Approval Workflow Design Template
This template produces a SuiteFlow design document for a tiered vendor bill or purchase order approval workflow in NetSuite: header settings, states, buttons, transition formulas, emails and test cases. Fill in your limits and roles, review it with AP and finance, then build it in Customization, Workflow, Workflows.
Fill in
NetSuite Vendor Bill Approval Workflow Design Template
1. Workflow header
| Setting | Value |
|---|---|
| Record type | Vendor Bill |
| Workflow ID | customworkflow_vb_approval |
| Owner | NetSuite Administrator |
| Release status | Testing |
| Execute as Admin | No |
| Initiation | Event Based: On Create; event types Create; context types User Interface, CSV Import, Web Services (decide each explicitly) |
| Initiation condition | Approval Status is Pending Approval or empty |
| Standard approval routing preference | Reviewed: custom SuiteFlow replaces standard routing |
2. States
| State | Entry actions | Buttons | Transitions | Trigger |
|---|---|---|---|---|
| Pending Approval | Set Field Value: Approval Status = Pending Approval (1); Lock Record (Before Record Load) for users not in AP Supervisor | Approve, Reject (Add Button, condition: role is AP Supervisor) | Approve and total <= 5000: Approved; Approve and total > 5000: Tier 2 Review; Reject: Rejected | On Entry / Before Record Load |
| Tier 2 Review | Send Email to Controller; Lock Record for other roles | Approve, Reject (role is Controller) | Approve and total <= 25000: Approved; Approve and total > 25000: Final Review; Reject: Rejected | On Entry / Before Record Load |
| Final Review | Send Email to CFO | Approve, Reject (CFO only) | Approve: Approved; Reject: Rejected | On Entry / Before Record Load |
| Approved | Set Field Value: Approval Status = Approved (2); Send Email to creator | None | On edit of amount: back to Pending Approval | On Entry |
| Rejected | Set Field Value: Approval Status = Rejected (3); Send Email to creator with reason | Resubmit (creator) | Resubmit: Pending Approval | On Entry |
3. Transition rules
| From | To | Condition (formula) | Execute on button |
|---|---|---|---|
| Pending Approval | Approved | {total} <= 5000 | Approve |
| Pending Approval | Tier 2 Review | {total} > 5000 | Approve |
| Tier 2 Review | Approved | {total} <= 25000 | Approve |
| Tier 2 Review | Final Review | {total} > 25000 | Approve |
| Any review state | Rejected | none | Reject |
| Approved | Pending Approval | {total} changed after approval (compare old and new value) | Before Record Submit |
4. Emails and notifications
Tier 1 notice: to AP Supervisor on entry to Pending Approval, subject includes document number, vendor and amount. Tier 2 notice: to Controller on entry to Tier 2 Review. Final notice: to CFO on entry to Final Review. Outcome: to the creator on Approved and Rejected; the rejection email includes the reason field. Reminder: optional scheduled transition or saved search alert for items pending more than 3 business days.
5. Test cases
| # | Scenario | Expected result | Pass |
|---|---|---|---|
| 1 | Vendor Bill for 5000 exactly | Approved after one approval | |
| 2 | Amount just over 5000 | Moves to Tier 2 Review | |
| 3 | Amount just over 25000 | Moves to Final Review | |
| 4 | Reject at Tier 2 | Approval Status Rejected (3), creator emailed | |
| 5 | Edit amount after approval | Returns to Pending Approval | |
| 6 | Create through CSV import | Workflow initiates or not, per context types chosen | |
| 7 | Non-approver opens record | Record locked, no Approve button | |
| 8 | Approver is also the creator | Segregation rule applied as designed |
6. Sign-off
Approval Status internal ids on transactions are 1 Pending Approval, 2 Approved, 3 Rejected. Check Setup > Accounting > Accounting Preferences > Approval Routing (Vendor Bill Approval Routing, Purchase Order Approval Routing) in a sandbox before release, so that only one approval mechanism acts on the record. Document the decision in the header.
Have your approval design checked
Send the completed design and we will review it for missed contexts, edit-after-approval gaps and segregation of duties before you build.
Optional. The tool and every export work without this. No spam.
How to use it
Choose the record type, enter the workflow ID you will use, the two tier limits and the role or person at each tier, then decide release status and Execute as Admin. The document fills every state and transition with your values. Walk through the states table with the AP manager and controller before anyone opens the workflow editor: most rework in approval workflows comes from undecided edge cases such as edits after approval, CSV imports and approvers who created the bill. Keep the release status at Testing in sandbox, where only the owner triggers it, and switch to Released after the test cases pass.
Where this lives in NetSuite
Workflows are built at Customization, Workflow, Workflows, New. The Approval Status field (approvalstatus) on vendor bills and purchase orders uses internal ids 1 Pending Approval, 2 Approved and 3 Rejected, which is what Set Field Value actions and saved search criteria reference. The accounting preferences for approval routing sit at Setup, Accounting, Accounting Preferences, Approval Routing subtab, with separate checkboxes for vendor bills and purchase orders. Review those preferences before building: if standard routing and a custom workflow both act on the same record, approvers see conflicting buttons and statuses. Oracle also offers the SuiteApprovals SuiteApp if you prefer configured rules over a hand-built workflow.
- Lock Record and Add Button actions use Before Record Load triggers.
- Use formula conditions such as {total} > 25000 on transitions with Execute on Button set.
Design decisions to make explicitly
Decide which context types initiate the workflow: user interface only, or also CSV import, web services and scripts. Imported bills that skip approval are a frequent audit finding. Decide whether an amount change after approval sends the record back, and whether foreign currency bills compare {total} in transaction currency or a converted value. Decide whether Execute as Admin is needed; it lets actions run with full permissions, which hides role problems during testing. Finally, decide who can approve their own bills: a condition comparing the current user to the creator enforces segregation of duties.
How to check it in the system
After each test case, open the record's System Information, Workflow History subtab to see each state entered and action executed, and the System Notes for the Approval Status changes. A saved search on the record type with criteria Approval Status is Pending Approval and a column for the current workflow state gives AP a queue view, and the same search with date created older than three days is a ready reminder alert.
Frequently Asked Questions
How do I create a vendor bill approval workflow in NetSuite?
Go to Customization, Workflow, Workflows, New, set the record type to Vendor Bill, initiation On Create, then add states for pending, each review tier, approved and rejected. Use Add Button for Approve and Reject, transitions with Execute on Button and formula conditions on {total}, and Set Field Value actions on Approval Status. Test in sandbox before release.
What are the Approval Status values in NetSuite?
On transactions such as vendor bills and purchase orders, Approval Status internal ids are 1 for Pending Approval, 2 for Approved and 3 for Rejected. Workflows set them with Set Field Value actions, and saved searches and SuiteQL filter on them, for example approvalstatus = 1 for the pending queue.
Should I use standard approval routing or a custom workflow?
Standard routing and SuiteApprovals cover common limit-based approvals with configuration only. A custom SuiteFlow workflow is worth it when you need extra tiers, department or subsidiary rules, custom emails or locking. Whichever you choose, review the Approval Routing preferences so only one mechanism controls the record.
How do I approve purchase orders in NetSuite with limits?
Employee records carry purchase and approval limits used by standard routing, while a custom workflow compares {total} against tier limits on its transitions. This template uses fixed tier limits in transition formulas; if limits vary per approver, read them from the employee record in a condition or a workflow action script.
If you want AP and controllers to ask NetSuite which bills are waiting on whom, and why, in plain English with answers drawn from workflow history, we can set that up on your own infrastructure.
Related Tools
NetSuite Workflow Action Script Generator (SuiteScript 2.1)
Generate a working workflow action script that reads a threshold parameter, looks up an approver and returns a value your workflow can store in a field.
NetSuiteNetSuite Script and Workflow Inventory Worksheet
An editable inventory of the scripts, workflows and scheduled jobs in your NetSuite account, with owners, schedules, daily run minutes and risk level.
NetSuiteNetSuite Role Permission Matrix Worksheet
An editable worksheet that records which role holds which permission level on each record area and scores the access risk for review.
NetSuiteNetSuite Month End Close Checklist
A practical NetSuite period close checklist covering subledgers, inventory and manufacturing, accruals, reconciliations and period lock.
More NetSuite tools
See all- NetSuite Saved Search Formula Generator
- NetSuite CSV Import Template Guide
- NetSuite Inventory Costing Method Reference
- NetSuite License Cost Estimator
- NetSuite User Access Request Form Template
- NetSuite Custom Record Design Spec Template
- NetSuite SuiteScript Deployment Handover Template
- NetSuite Sandbox and Release Change Log Worksheet
- NetSuite SuiteQL Transaction Query Generator
Keep exploring
Free tools
- NetSuite SuiteFlow Workflow Action Types ReferenceEvery workflow action in SuiteFlow with where it runs, which triggers support it, its main settings and the gotcha to know before you use it.
- NetSuite Workflow Troubleshooting ChecklistA five-step diagnostic for SuiteFlow workflows that do not initiate, skip actions or behave differently in imports and integrations.
- SuiteScript Technical Design Document TemplateFill in a technical design document for a SuiteScript customization and export it as PDF or Word for sign-off before you write code.
ERP fixes and how-tos
- How to Set Up Approval Routing in NetSuiteHow to configure NetSuite approval routing for purchase orders, vendor bills, and expense reports using native approval limits or SuiteFlow workflows.
- How to build a workflow in NetSuite with SuiteFlowStep-by-step guide to building a NetSuite SuiteFlow workflow: record type, trigger, states, transitions, actions, and why workflows silently do not fire.
- NetSuite Workflow Not Triggering: Troubleshooting ChecklistWhy a NetSuite workflow does not fire: release status, event type, execution context, conditions, record scope and subsidiary. A checklist to find the cause.
AI on your ERP
- NetSuite Procurement With AI for Purchase Orders, Receipts and Vendor BillsAI for NetSuite procurement: query purchase orders, item receipts and vendor bills with SuiteQL, flag three-way match breaks, and draft vendor follow-ups.
- AI agents for NetSuite manufacturing operationsAI agents for NetSuite manufacturing: WIP tracking, routing exceptions, and work order status grounded in SuiteQL, with human approval on anything that writes back.
Integrations
- How to add document OCR to Oracle NetSuiteAdd document OCR to Oracle NetSuite: capture invoices, packing slips and certs of conformance with confidence thresholds, review queues and REST write-back.
- How to connect Slack to Oracle NetSuiteAdd Slack to Oracle NetSuite: build a Slack app with slash commands, interactive approvals and alerts using SuiteScript, RESTlets and SuiteQL, with security notes.