NewNetSuite 2025.2 — What's new

NetSuite Workflows & SuiteFlow: Complete Automation Guide

Master NetSuite workflows with SuiteFlow. Covers workflow states, transitions, actions, approval routing, and when to use workflows vs SuiteScript.

15 min read
NetSuite Workflows & SuiteFlow: Complete Automation Guide

NetSuite workflows and SuiteFlow: why they matter more than most people think

If you've spent any time inside NetSuite, you've probably noticed that manual processes don't scale. Someone forgets to approve a purchase order. An expense report sits in limbo for two weeks. A sales order ships before finance signs off on the credit terms. This happens every week.

SuiteFlow is NetSuite's answer to this problem. It's the visual workflow engine built directly into the platform, and it lets you automate business logic without writing a single line of code. Drag-and-drop states, point-and-click conditions, and a visual canvas that even non-developers can understand. When used well, workflows eliminate the "someone forgot" category of business errors entirely.

We've built hundreds of workflows across dozens of NetSuite accounts over the years. Some were simple two-state approval chains. Others were sprawling multi-department routing engines with conditional logic that would make a flowchart weep. The tool is flexible enough to handle both — you just need to know what you're doing.


Core concepts: the building blocks of every workflow

Before you build anything, you need to understand the five components that make up every SuiteFlow workflow.

States

States represent where a record currently sits in a process. Think of them as stages: Pending Approval, Approved, Rejected, Under Review. Every workflow has at least an initial state, and most have three to six. A record can only be in one state at a time.

Transitions

Transitions are the paths between states. They define how a record moves from Pending Approval to Approved, or from Approved back to Under Review. Each transition can have conditions attached — so the record only moves when specific criteria are met.

Actions

Actions are what happens when a record enters a state, exits a state, or meets a transition condition. Send an email, set a field value, create a related record, lock the record from editing — these are all actions. They're the "do something" part of the workflow.

Conditions

Conditions are the gatekeepers. They evaluate whether a transition should fire or an action should execute. You can build conditions based on field values, roles, formulas, or combinations of all three. For example: "Only allow the transition to Approved if the user's role is CFO and the PO amount exceeds $10,000."

Triggers

Triggers determine when the workflow runs. The most common triggers are on record creation, on record update, on record approval, and scheduled. The trigger you choose affects when the workflow engine evaluates your states and transitions.


Common workflow use cases

Almost every NetSuite workflow we build falls into one of these categories. If you're wondering whether a workflow is the right approach for your problem, chances are good that one of these patterns applies.

Purchase order approval routing

The most common workflow we build. Route POs through one or more approvers based on amount thresholds, department, or vendor. Low-value POs get auto-approved. High-value ones require VP or C-suite sign-off.

Sales order approval

Hold sales orders until credit checks pass, margin thresholds are met, or a sales manager reviews non-standard terms. Without this, orders hit the warehouse before finance has signed off on the credit terms -- and unwinding a shipped order is painful for everyone.

Expense report approval

Manager approval first, then finance if the amount exceeds a threshold. The workflow can also flag policy violations automatically -- meals over $75, missing receipts -- and bounce them back to the employee without a human reviewer needing to catch it.

Vendor bill approval

This closes the loop on procure-to-pay. After goods arrive, route vendor bills through the appropriate cost center manager, then to AP for final processing.

Record status management

Not everything is an approval. Workflows handle record lifecycles too: moving projects through stages, updating opportunity statuses based on activity, closing out stale quotes after 90 days. Any process that follows a predictable sequence of states is a candidate.


Building your first workflow: PO approval step by step

Here's a practical example: a purchase order approval workflow with three states, role-based routing, and email notifications.

Step 1: Create the workflow

Navigate to Customization > Workflow > Workflows > New. Select Purchase Order as the record type. Give it a clear name like "PO Approval Routing" and set the trigger to Before Record Submit (this ensures the workflow evaluates before the record is saved, so you can block unapproved POs from processing).

Step 2: Define your states

Create three states on the canvas:

  • Pending Approval — the initial state. Every new PO lands here.
  • Approved — the PO has been signed off and can proceed to fulfillment.
  • Rejected — the PO was declined and needs revision.

Set Pending Approval as the entry state. Every new PO starts here.

Step 3: Add transitions

Draw two transitions from Pending Approval:

  • Pending Approval -> Approved: This fires when an authorized approver clicks the Approve button.
  • Pending Approval -> Rejected: This fires when the approver clicks Reject.

Add a transition from Rejected back to Pending Approval, so employees can revise and resubmit.

Step 4: Configure conditions

On the Approved transition, add a condition: the current user's role must be Purchasing Manager or higher. You can also add an amount condition — for POs over $50,000, require a second approver by routing to an intermediate "VP Review" state instead.

Step 5: Add actions

On the Pending Approval state entry, add a Send Email action that notifies the designated approver. On the Approved state entry, add a Set Field Value action to update the PO status field and a Send Email action to notify the requestor. On the Rejected state entry, send an email to the requestor with the rejection reason.

Step 6: Test in sandbox

Deploy the workflow to your sandbox account first. Create test POs at various amounts, log in as different roles, and verify every transition and action fires correctly. Only then move it to production.


Workflow actions: what you can actually do

SuiteFlow provides a solid library of built-in actions. Here are the ones you'll use most often.

Send Email — The backbone of approval workflows. Notify approvers, requestors, or any recipient, pulling field values from the record into the email template (PO amount, vendor name, due date).

Set Field Value — Update status fields, stamp approval dates, flag records. Accepts static values or formulas for dynamic computation.

Create Record — Generates a related record when a state is entered. Automatically create a vendor bill when a PO is approved, or a follow-up task when an expense report is rejected.

Lock Record — Prevents edits once a record reaches a certain state. You can lock specific fields or the entire record. Critical for approved POs and finalized invoices.

Go to State — Moves the record to a different state programmatically. The main use is auto-approval logic: if the PO is under $500, skip Pending Approval entirely and land in Approved.

Custom Action (SuiteScript) — Call a SuiteScript function from within the workflow when built-in actions fall short. This connects no-code workflow logic to full programmatic control. More on this later.


Transition conditions: controlling the flow

Conditions determine whether a transition fires. SuiteFlow gives you several ways to build them.

Role-based conditions — Only allow certain roles to trigger a transition. "Only the CFO can approve POs over $100,000." This is the most common condition type for approval workflows.

Field value conditions — Evaluate a field on the record. "If department is Engineering, route to the Engineering VP." You can compare against static values, other fields, or the current user.

Amount-based conditions — Set thresholds that change the approval path. Under $5,000 goes to a manager. $5,000-$50,000 goes to a director. Over $50,000 goes to the VP of Finance. This tiered approach is standard for most organizations.

Formula conditions — Write NetSuite formula expressions for complex logic. You can reference fields, use date functions, or calculate derived values. For example: {amount} > 10000 AND {department} = 'Marketing'.

Combined conditions — Stack multiple conditions with AND/OR logic. "The approver must have the Purchasing Manager role AND the PO must be under $25,000 AND the vendor must not be on the restricted list." SuiteFlow handles all of this visually.


Scheduled workflows: automation on a timer

Not all workflows are triggered by record events. Scheduled workflows run at defined intervals — daily, weekly, monthly — and process records in bulk. These are underused by most NetSuite admins, and they shouldn't be.

Recurring cleanup tasks — Close stale opportunities that haven't been updated in 90 days. Archive completed projects. Deactivate vendors with no activity in the last year.

Periodic status updates — Every Monday morning, flag all open POs older than 30 days and send a summary email to the purchasing team. This keeps things from falling through the cracks without anyone having to remember to check.

Escalation workflows — If an approval has been pending for more than 48 hours, escalate it. Send a reminder email, CC the approver's manager, or reassign the approval to someone else. These keep your processes moving even when people are busy or on vacation.

To create a scheduled workflow, set the trigger type to Scheduled and define the frequency. Add an initiation condition to filter which records get processed — you don't want it running against your entire transaction history every time.


Workflows vs SuiteScript: when to use each

Both tools automate business processes, but they excel in different areas. Picking the wrong one costs you time on the build and time on maintenance.

Use workflows when:

  • The business logic is likely to change frequently (approval thresholds, routing rules, notification recipients)
  • Non-developers need to understand or modify the logic
  • The process is primarily about routing, approvals, and notifications
  • You want an auditable, visual representation of the process
  • The automation involves a single record type with straightforward state transitions

Use SuiteScript when:

  • You need to interact with external systems (API calls, webhooks)
  • The logic involves complex calculations, loops, or data transformations
  • You need to process multiple record types in a single operation
  • Performance is critical and you need fine-grained control over execution
  • The automation requires features workflows don't support (file operations, advanced search manipulation, custom UI)

Use both together when:

  • You want the visual state management of workflows with the power of SuiteScript for specific actions
  • The approval routing is best handled visually, but one step requires a complex calculation
  • You need workflows for the business team to manage, with SuiteScript custom actions for the technical bits

In practice, most mature NetSuite implementations use a combination. Workflows handle the high-level process orchestration, and SuiteScript handles the heavy lifting at specific steps.


Performance considerations

Workflows aren't free. They execute during record save events, and poorly designed workflows can noticeably slow down your system. Here's what to watch for.

Execution order matters. When multiple workflows apply to the same record type, NetSuite executes them in a specific order based on the workflow ID. If Workflow A sets a field that Workflow B depends on, you need to ensure A runs first. Check your execution order and adjust if needed.

Nested workflows create complexity. A workflow that triggers another workflow that triggers a third workflow is a recipe for performance problems and debugging nightmares. Keep your workflow hierarchy as flat as possible. If you find yourself nesting more than two levels deep, it's time to reconsider your architecture.

Record save times are directly affected. Every Before Record Submit workflow adds time to the save operation. Users will notice. If you have five workflows all firing on every sales order save, those milliseconds add up. Audit your workflows periodically and disable or consolidate any that overlap.

Watch your governance. Workflow actions consume governance units just like SuiteScript. If you have a workflow with many actions firing on a busy record type, you can hit governance limits. Monitor your usage in the Script Execution Logs.


Common mistakes (and how to avoid them)

We've seen these patterns across dozens of implementations.

Infinite loops. Workflow A updates a field on the record. That update triggers Workflow B. Workflow B updates another field, which triggers Workflow A again. The record save hangs or errors out. Always check whether your workflow actions could re-trigger the same or another workflow. Use conditions to break the cycle.

Missing conditions on transitions. A transition without conditions means any user can trigger it at any time. That "Approve" button shouldn't appear for the person who submitted the PO. Always add role-based or field-based conditions to every transition.

Testing only in production. We still encounter teams that build and test workflows directly in their production account. One misconfigured transition and every PO in the system is auto-approved. Always build in sandbox, test thoroughly, then deploy to production. NetSuite's SuiteCloud Development Framework (SDF) can help manage this deployment process.

Overcomplicating a single workflow. If your workflow canvas looks like a subway map, it's probably doing too much. Break complex processes into smaller, focused workflows. A PO creation workflow, a PO approval workflow, and a PO receipt workflow are easier to manage than one monolithic workflow that handles all three.

Forgetting about edge cases. What happens when an approver leaves the company? What happens when a PO is edited after approval? What happens when the amount changes during the approval process? Build transitions and conditions for these scenarios from the start, not after they cause problems in production.


Advanced patterns

Once you're comfortable with basic workflows, these patterns let you build more sophisticated automations.

Subflows

Subflows let you reuse workflow logic across multiple parent workflows. If you have the same approval logic for POs, expense reports, and vendor bills, build it as a subflow and reference it from each parent workflow. This keeps your logic DRY and changes only need to happen in one place.

Custom action scripts

When built-in actions aren't enough, write a Workflow Action Script in SuiteScript. This script runs as a workflow action but has full access to the SuiteScript API. Common uses include calling external APIs for validation, performing complex calculations, or creating multiple related records in a single step.

/**
 * @NApiVersion 2.1
 * @NScriptType WorkflowActionScript
 */
define(['N/record', 'N/email'], (record, email) => {
  const onAction = (context) => {
    const poRecord = context.newRecord;
    const amount = poRecord.getValue({ fieldId: 'total' });
    const vendor = poRecord.getText({ fieldId: 'entity' });
 
    // Custom logic: create a task for high-value POs
    if (amount > 100000) {
      const task = record.create({ type: record.Type.TASK });
      task.setValue({ fieldId: 'title', value: `Review high-value PO: ${vendor}` });
      task.setValue({ fieldId: 'assigned', value: poRecord.getValue({ fieldId: 'custbody_finance_reviewer' }) });
      task.save();
    }
 
    return 'success';
  };
 
  return { onAction };
});

Workflow-initiated SuiteScript

A pattern we use frequently: the workflow manages the state machine and user interactions (approve/reject buttons, email notifications, field locking), while a SuiteScript User Event script watches for state changes and handles the complex backend logic. The workflow sets a custom field like custbody_wf_state, and the User Event script triggers different logic based on that field's value. This gives you the best of both worlds — visual process management for the business team and full programmatic control for the development team.


Wrapping up

SuiteFlow workflows are one of the most practical tools in NetSuite. They solve real operational problems — missed approvals, forgotten notifications, inconsistent processes — without requiring development expertise for every change. The key is starting simple, understanding the core concepts, and building complexity only when you need it.

If you're just getting started, build that first PO approval workflow. Get it into sandbox, test it, iterate on it. Once you see a purchase order route itself to the right person, send the notification email, and lock itself after approval — all without anyone touching a line of code — you'll understand why workflows are worth the investment.

Need help designing a workflow architecture that scales with your business? Reach out to our team — we've been building these for years and we're happy to help.


Workflows and SuiteScript automation working together on a real NetSuite project.

Frequently Asked Questions

Share:
BrokenRubik

BrokenRubik

NetSuite Development Agency

Expert team specializing in NetSuite ERP, SuiteCommerce development, and enterprise integrations. Oracle NetSuite partner with 10+ years of experience delivering scalable solutions for mid-market and enterprise clients worldwide.

10+ years experienceOracle NetSuite Certified Partner +2
NetSuite ERPSuiteCommerce AdvancedSuiteScript 2.xNetSuite Integrations+4 more

Get More Insights Like This

Join our newsletter for weekly tips, tutorials, and exclusive content delivered to your inbox.

Need help with your NetSuite project?

Whether it's integrations, customization, or support — let's talk about how we can help.

What happens next:

  1. 1Tell us about your project or challenge
  2. 2We'll review and get back to you within 24 hours
  3. 3We'll schedule a free consultation to discuss your needs

Tell us about your project

We respond within 24 hours.

Get in Touch