Book a Free Consultation
All resources
SuiteScriptPerformanceUser Event

record.submitFields() vs record.load() in SuiteScript: Choosing the Right Update Method

July 14, 2026 · Updated August 15, 2026 · 5 min read· Part of the 100 NetSuite Tips series

Need help applying this in your account?

Quick answer

record.submitFields() updates one or more body fields on a record without loading the full record object. It is faster than record.load() followed by record.save() because it skips constructing the full record in memory and executes a targeted update. The critical caveat: record.submitFields() does not trigger beforeLoad or beforeSubmit User Event scripts on the record being updated, only afterSubmit. If the record has a beforeSubmit script that validates or modifies fields, bypassing it with submitFields() may produce inconsistent data. Always check whether User Event scripts on the target record type need to run before choosing submitFields(). For simple field updates in afterSubmit scripts where you need to stamp a computed value on a related record, submitFields() is the correct tool. Passing ignoreMandatoryFields: true as an option is necessary when updating a record that has required fields not included in the submitFields call.

Using Google AI Search? Add SuitePacific as a Preferred Source so we show up in your AI answers.
Add as Preferred Source

Why Is record.load() Slow for Single-Field Updates?

A typical record update in SuiteScript loads the full record, changes a value, and saves:

var rec = record.load({
    type: record.Type.SALES_ORDER,
    id: 123
});
rec.setValue({ fieldId: 'memo', value: 'Updated' });
rec.save();

This works. But loading a record retrieves everything associated with it, all body fields, all sublists, all subrecords. When you only need to update a single body field, you are paying a full record load cost for a one-field change.

In a script that runs once or twice, this is irrelevant. In a Scheduled Script running nightly across thousands of transactions, or a Map/Reduce script processing your full orders list, it becomes a significant governance and performance cost.

record.load(): loads everything All body fields (including unused ones) Sublist: Item lines (all 50 line items) Sublist: Billing / Shipping addresses Subrecords (e.g. inventory detail) → target field: memo (1 field) Full governance cost per record record.submitFields(): targeted body fields: skipped sublists: not loaded addresses: not loaded subrecords: not loaded → target field: memo (1 field) ✓ Fraction of the governance cost
The governance difference is negligible on one record. On 5,000 records in a nightly script, it is not.

What Is a Faster Alternative for Updating Body Fields?

record.submitFields() updates body fields directly without loading the full record:

record.submitFields({
    type: record.Type.SALES_ORDER,
    id: 123,
    values: {
        memo: 'Updated'
    }
});

No full record load. Lower governance usage. Faster execution per record.

You can update multiple body fields in a single call by adding more keys to the values object. The savings scale with the number of records your script processes, a script that handles 5,000 records with submitFields() instead of record.load() + save() will complete measurably faster and use fewer governance units.

What Is the Critical Caveat for record.submitFields()?

This is the most important thing to understand before switching from record.load() + save() to submitFields().

record.submitFields() does not trigger beforeSubmit or afterSubmit User Event scripts.

If your NetSuite account has business logic in a User Event script that you expect to run on every record update, validation, field recalculation, downstream notifications, audit logging, submitFields() will bypass it silently.

This is not always a problem. If the User Event script handles something unrelated to the field you are updating, the bypass may be intentional and desirable. But if the script contains logic that must execute on every save, switching to submitFields() will stop running that logic without any error or warning.

Before making the switch: identify what User Event scripts are deployed on the record type you are updating and confirm whether any of them contain logic that needs to execute on this particular change.

When Should You Use submitFields() vs record.load()?

Use record.submitFields() when:

  • You are updating one or a few body fields
  • No User Event script needs to run as a result of the update
  • The script runs at high volume, hundreds or thousands of records
  • You want to reduce governance usage and execution time

Use record.load() + save() when:

  • You need to update sublists or subrecords
  • A User Event script must run on the save, validation, downstream logic, notifications
  • You need to read other field values from the record before deciding what to update
  • The update logic depends on the current state of the record

When Should You Use record.submitFields() vs record.load()?

Body fields only, no User Event dependencies → record.submitFields()

Sublists, subrecords, or User Events must run → record.load() + save()

The governance savings from submitFields() are real and meaningful at scale. The decision comes down to one audit: check what User Event scripts are deployed on that record type and confirm the bypass is safe before switching.

Need help applying this in your account?

We work with post-go-live NetSuite accounts every day. Tell us what you're working on.