NetSuite Development

NetSuite Sandbox Refresh: Best Practices for a Clean Environment

Written by Sandeep G. Published August 27, 2026 16 min read
Person reviewing dashboard reports on a laptop and tablet at a desk

A sandbox refresh looks like a routine housekeeping task, right up until it wipes out three days of untested script work or breaks an integration nobody remembered to reauthorize. This guide is for NetSuite administrators and technical leads who need to plan, execute and validate a refresh safely, not just click the button.

It covers what a refresh actually does, the change Oracle made in the 2026.1 release that some existing published guidance still doesn’t reflect, and the governance habits that keep a refresh from derailing a project.

If you need the basics of sandbox tiers and setup first, our complete guide to NetSuite sandbox environments covers that ground. This article goes deep on one piece that guide only touches briefly: doing the refresh itself correctly, every time.

What a NetSuite Sandbox Refresh Actually Does

A refresh takes a snapshot of a source account, your production account or another sandbox, and copies it into the target sandbox, replacing whatever was there before. It is not a merge and not selective. Configurations, records, transactions, user passwords and customizations all come across. Test data, in-progress script builds and custom records created purely for testing in the target sandbox are gone the moment the refresh completes.

You request a refresh from Setup > Company > Company Management > Sandbox Accounts, choosing which sandbox to refresh, who gets access once it’s done, and, depending on your service tier, which account supplies the data. Per Oracle’s own documentation on requesting a refresh, the request itself doesn’t lock anyone out immediately.

NetSuite prepares the refresh in the background, and the target sandbox needs to be activated once the copy is ready. Any changes made in the sandbox between requesting the refresh and activating it are lost the moment you activate, so that window is not a safe place to keep working.

The 2026.1 Change: Sandbox Refreshes Are Now Unlimited

As of March 6, 2026, with the NetSuite 2026.1 release, Oracle removed the long-standing limits on how many times you can refresh a sandbox account. Oracle’s current Requesting a Refresh documentation confirms this directly: “With an active sandbox license, you can request a sandbox refresh whenever you need to,” with no numeric limit stated.

Previously, refresh frequency was capped and effectively rationed, and planning a refresh was as much a question of “do we have one left” as a question of timing.

This is a genuine shift in how sandbox strategy should work. Some published sandbox guidance, including some of what currently ranks for this topic, was written before the change and still describes refreshes as a scarce resource to conserve.

Unlimited refreshes remove the excuse for testing against stale data, but they also remove the friction that used to force teams to plan refresh timing carefully. Without a real process behind it, “we can refresh anytime” can quietly turn into “someone refreshes whenever they feel like it,” which is exactly how in-progress work gets wiped out by surprise.

Per Oracle’s Refresh Summary documentation, the source-account option also depends on service tier: Standard tier sandboxes always refresh from production, with no choice of source. Premium, Enterprise and Ultimate tiers can instead choose another sandbox as the refresh source, which opens up cascading refresh strategies covered later in this guide.

When a Refresh Is Appropriate

Refresh before a new UAT or testing cycle begins, not partway through one. Refreshing mid-cycle invalidates test data and scenarios testers have already built, and the first day of testing becomes rebuilding context instead of actually testing.

Refresh after a meaningful structural change in production, a new subsidiary, a significant chart of accounts change, or a major feature rollout, so the sandbox reflects the environment changes will actually deploy into. Testing customizations against a sandbox that still reflects an older company structure is a reliable way to miss a bug that only shows up live.

Avoid refreshing during active development or mid-testing, even though nothing technically stops you now that limits are gone. Unlimited refreshes remove the rationing problem, not the disruption problem. A refresh still replaces whatever is in progress.

Never schedule a refresh during a NetSuite version upgrade window either. Per Oracle’s documentation on scheduled version upgrade dates and refresh requests, a refresh will fail if it does not complete before your scheduled upgrade begins, leaving you timing a retry around the upgrade instead of your own project calendar.

Match refresh cadence to sandbox purpose rather than a single company-wide schedule. A QA or UAT sandbox can benefit from more frequent refreshes to stay close to current production state. A dedicated development sandbox can benefit from a slower cadence, or from being refreshed from a stable QA sandbox rather than production directly, so developers aren’t rebuilding context every time production changes something unrelated to their work.

What Must Be Checked Before Requesting a Refresh

Refresh problems are a preparation gap, not something NetSuite itself did wrong. Because refreshes are unlimited now, it’s tempting to skip the checklist on the theory that another refresh is always available.

A lost afternoon of unsynced script work doesn’t come back just because a repeat refresh is allowed.

Confirm no active development or testing is genuinely mid-cycle in the target sandbox, checked with every team using it, not just your own. Back up SuiteScript files, SDF project state and any customizations not yet pushed to source control.

Export or document saved searches, custom records and templates built specifically for testing that don’t exist in production. Record current integration tokens, endpoints and credentials that will need to be recreated. Confirm the refresh isn’t scheduled during a NetSuite upgrade window.

Stakeholders, Ownership and Approvals

A refresh touches more people than the person clicking the button. Before requesting one, identify who actually needs a say: the administrator running the refresh, the development team with in-progress script or workflow builds, the QA or UAT team mid-testing cycle, and any integration owner whose connected system points at that sandbox.

One person should own the full lifecycle of a given refresh, planning, communication, execution and post-refresh validation, rather than leaving it to whoever happens to have admin access that day. This does not need to be a full-time role. It needs to be a named responsibility so there is a single point of accountability when something needs checking.

Require a real sign-off step, not just a notification. A broadcast announcement that a refresh is happening is not the same as confirming every active team is actually ready for it, and a quick “confirm you have nothing at risk” check catches conflicts that a one-way announcement tends to miss.

Give stakeholders real lead time before a refresh, at least a week and ideally two for anything touching an active project milestone, not a same-day notice. A developer who learns about a refresh after it has already been requested has no chance to protect unsaved work.

Inventory of Integrations, Scripts, Workflows, Users and Credentials

Before requesting a refresh, build a real inventory of what is currently connected to or depending on the target sandbox, not a mental list. That inventory should cover:

  • Every integration platform connected to the sandbox (Celigo, Boomi, MuleSoft, or custom middleware) and its current endpoint configuration
  • Active TBA tokens and which integrations depend on each one
  • OAuth 2.0 authorized applications connected to the sandbox
  • SAML/SSO configuration if the sandbox uses it for tester login
  • Scheduled and Map/Reduce scripts, and their configured run frequency
  • Workflows currently in a testing or draft release status
  • Which users currently have sandbox access, and whether that access should carry over
  • Custom records, saved searches or templates that exist only in the sandbox for testing purposes

This inventory is what makes the post-refresh reconfiguration step later in this guide a checklist instead of a guessing exercise.

Data, Privacy and Outbound-Communication Safeguards

A refresh copies real production data, including real customer records, into the sandbox. Treat that data with the same handling discipline you would apply in production for anything sensitive: limit sandbox access to people who need it for the current testing cycle, and don’t export sandbox data to less secure locations just because it’s “only a test environment.”

A freshly refreshed sandbox that still has outbound email enabled is a real risk, and one of the easiest to prevent. If email preferences aren’t restricted immediately after activation, the first saved transaction or triggered workflow can send a real email, an invoice, a shipping notification, a password reset, to a real customer.

This should be the first thing checked after every refresh, before any other testing begins, not somewhere further down a checklist. The same caution applies to any other outbound integration: payment gateways, tax connectors and SMS or notification services should be re-pointed away from live endpoints or disabled before testing resumes.

What Changes During and After a Refresh

The refresh copies most of what makes an account function, but a specific set of items don’t survive the trip.

Oracle’s own documentation on data that is not copied from production to sandbox is explicit about this list. Knowing it before you refresh, not after something breaks, is the difference between a two-hour reconfiguration and a two-day scramble.

What’s ExcludedWhy It MattersWhat To Do
Website and web store domainsThe commerce site domain doesn’t carry over automaticallyConfigure a unique sandbox domain before testing storefront-dependent features
SAML single sign-on configurationPer Oracle’s guidance, copied SSO configuration is not guaranteed to work correctlyReconfigure SAML settings, or use standard login for sandbox testers
Token-based authentication (TBA) tokensExisting integration tokens don’t transferCreate new tokens in the sandbox for every integration after each refresh
OAuth 2.0 authorized applicationsConnected apps lose their authorizationReauthorize each OAuth application in the sandbox
Customer Center role assignmentsExternal customer logins won’t carry their role assignmentRestore via CSV import if customer-facing testing is in scope
System notes on recordsChange history isn’t available for sandbox recordsDon’t rely on sandbox system notes for audit-style testing
Deleted recordsAnything deleted in production won’t reappear as deleted in sandboxDon’t use sandbox to test deletion-dependent logic without verifying record state first
Hard-coded internal or external linksLinks built with a hardcoded production account ID still point at productionUse dynamic URL tags in scripts and saved searches instead of hardcoded links

Hardcoded production links are a quiet failure after a refresh that’s easy to miss. A Suitelet or saved search that references a specific record URL by account ID keeps pointing at production even after the refresh, because the link text itself didn’t change, only the environment did.

If a script clicks that link during sandbox testing, it can land the tester back in production without anyone intending it. Audit for hardcoded URLs before relying on a freshly refreshed sandbox for anything customer- or finance-facing.

A Step-by-Step Pre-Refresh Checklist

  1. Confirm no active development or testing is mid-cycle in the target sandbox, checked with every team using it
  2. Back up SuiteScript files, SDF project state, and any customizations not yet pushed to source control
  3. Export or document saved searches, custom records, and templates built specifically for testing
  4. Record current integration tokens, endpoints and credentials that will need to be recreated
  5. Notify all stakeholders, internal users, developers and any external consultants, with the planned date and expected impact, at least a week ahead
  6. Get sign-off from whoever owns the sandbox’s current test cycle, not just from IT
  7. Confirm the refresh isn’t scheduled during a NetSuite upgrade window

Refresh-Day Procedure

Submit the refresh request from Setup > Company > Company Management > Sandbox Accounts. Choose the source account (production, or another sandbox if your service tier allows it) and the access level for the resulting sandbox.

Default to administrators only immediately after a refresh, especially for anything beyond the simplest environment. That gives a controlled window to work through the post-refresh checklist below without business users stumbling into a half-reconfigured sandbox, submitting real-looking test transactions before email preferences are locked down, or reporting “bugs” that are really just unfinished reconfiguration.

Do not treat the request-to-activation window as a safe place to keep working. Anything changed in the sandbox between request and activation is lost the moment you activate. Activate promptly once the snapshot is ready, then move directly into post-refresh reconfiguration before opening access to anyone else.

Post-Refresh Reconfiguration

A refresh isn’t finished when activation completes. It’s finished once the sandbox is actually usable again, which means deliberately working through everything the copy didn’t bring with it or changed by virtue of being a different environment.

AreaWhat to Check
Email preferencesConfirm outbound email is restricted so testing doesn’t send real notifications, invoices, or marketing emails to actual customers
Integration tokens and OAuth appsRegenerate TBA tokens and reauthorize OAuth applications for every connected system
Integration platformsUpdate Celigo, Boomi, MuleSoft, or custom middleware endpoints to point at the sandbox account, and re-test each flow
Payment gateways and tax connectorsRe-point or disable live gateway and tax service connections so testing doesn’t touch real payment processors
SAML / SSOReconfigure single sign-on, or confirm testers know to use standard NetSuite login instead
DomainsSet a unique sandbox web store domain so commerce testing doesn’t collide with production URLs
Script deployment statusVerify scheduled and Map/Reduce scripts didn’t reactivate at production frequency
Workflow release statusConfirm any in-progress or testing-status workflows weren’t overwritten by the production version
Dashboard themeChange the sandbox color theme so it’s visually distinct from production at a glance
Hardcoded linksAudit saved bookmarks, Suitelet links, and hardcoded record URLs for stale production references
Customer Center rolesRestore role assignments via CSV import if customer-facing testing is part of the plan

Integration and Authentication Validation

Regenerating tokens and reauthorizing apps is necessary but not sufficient. For every integration connected to the sandbox, re-validate the actual data flow, not just the credentials. Confirm the integration platform is genuinely pointed at the sandbox endpoint and not still targeting production. Run at least one real transaction through each connected flow and confirm it completes correctly in the sandbox.

This is also where teams can discover an integration was more tightly coupled to production credentials than anyone realized. Treat re-validating every connected flow, not just re-entering credentials, as the standard after each refresh.

Our NetSuite integration monitoring guide covers what to watch for once an integration is confirmed working again.

Functional and Regression Testing

Once integrations are validated, run the same core functional tests you would run after any environment change: a representative order-to-cash flow, a representative procure-to-pay flow if relevant, and whatever scripts or workflows were flagged as in-progress before the refresh.

Confirm scheduled scripts run on their intended schedule rather than immediately or at production frequency. Confirm any workflow still in a testing state behaves as expected rather than reflecting the production version that just overwrote it.

Treat this as a real regression pass, not a spot check. A refresh changes the data underneath every customization at once, and a customization that worked against last month’s data can behave differently against current production data copied into the sandbox.

Common Failure Modes

  • Refreshing without checking who’s mid-work. One team’s convenient refresh timing is another team’s lost sprint.
  • Treating unlimited refreshes as license to skip planning. The removal of refresh limits didn’t remove the cost of losing unsaved work.
  • Not restricting email preferences immediately after activation. Real customers can receive test transactions.
  • Forgetting integration tokens and OAuth apps don’t survive the refresh. Integrations fail silently until someone notices data has stopped flowing.
  • Opening full sandbox access before reconfiguration and validation are complete. Business users start reporting bugs that are really just unfinished setup.
  • Ignoring hardcoded production links in scripts and saved searches. These keep pointing at production regardless of the refresh.
  • Refreshing during a scheduled NetSuite upgrade window. The request can fail outright and has to be rescheduled.
  • No documented log of what changed or who approved it. Every refresh becomes a fresh investigation instead of a repeatable process.

Recovery and Escalation Decisions

If a refresh reveals that something genuinely critical was lost, unsaved script work, a customization nobody backed up, treat it as a real incident rather than something to quietly work around. Document what was lost, when the refresh was requested, and who had access to the sandbox in the window between request and activation.

A refresh itself cannot be undone or rolled back once activated. The recovery path is rebuilding from source control, documented saved-search definitions, or a developer’s local copy, not attempting to reverse the refresh.

Escalate to NetSuite support directly when the refresh request itself fails, particularly if it fails near an upgrade window, or when the resulting sandbox shows data that doesn’t match the expected source account. For anything involving customer data sent in error during testing (the email safeguard failure described earlier), treat it as a real customer-communication incident with its own follow-up, not just a configuration fix.

Cascading Refresh Strategy for Multi-Sandbox Environments

For Standard tier accounts, source selection isn’t really a decision since every refresh pulls from production. Premium, Enterprise and Ultimate tiers can refresh a sandbox from another sandbox instead, which becomes genuinely useful once more than one sandbox environment is in play.

One pattern: a Premium sandbox for structured QA and UAT, and a separate development sandbox for active SuiteScript and SuiteFlow work. Refreshing the dev sandbox straight from production on the same cadence as the QA sandbox means developers are constantly rebuilding against a moving target.

Refreshing the dev sandbox from the QA sandbox instead, on a slower, more deliberate cadence, keeps development grounded in a known, already-validated dataset. It also means a developer’s environment reflects the same baseline the QA team is testing against, which reduces environment-drift conversations that trace back to two environments quietly diverging.

The cadence in practice: production refreshes into the QA/Premium sandbox on a set schedule, and that QA sandbox in turn refreshes into the development sandbox on its own, deliberately slower, schedule, rather than development pulling directly from production.

Ongoing Sandbox Governance

The technical steps of a refresh take minutes. Refreshes still go wrong for governance reasons, not technical ones, and now that refreshes are unlimited, governance is the only thing standing between efficient testing and chaos.

Keep a lightweight change log rather than a formal change management platform, unless your environment already has one for other production changes. At minimum, log what triggered each refresh, who approved it, what date it happened, and any known issues or reconfiguration still outstanding. This becomes genuinely useful the third or fourth time someone asks why the sandbox doesn’t match what they expected.

Because refreshes can now happen more frequently, manually working through the same post-refresh checklist every time becomes a real time cost and a real source of human error.

Teams running frequent refreshes get real value from scripting the repeatable parts of reconfiguration: a scheduled or on-demand SuiteScript that confirms email preferences are locked down, flags script deployments that reactivated at production frequency, and checks for known hardcoded URL patterns before anyone starts testing. If your team is comfortable with SuiteScript, our NetSuite SuiteScript guide covers the fundamentals needed to build this kind of validation script.

Illustrative Refresh Scenarios

The scenarios below are illustrative patterns built from the failure modes and governance gaps covered above, not reported client outcomes.

Example: An Integration Goes Quiet After a Refresh

  • Symptom: A Celigo integration connected to the sandbox stops syncing after a refresh, with no error visible to the requesting team.
  • Cause: OAuth tokens didn’t survive the refresh, and the integration team wasn’t part of the refresh notification.
  • Fix: Reauthorize the OAuth application in the sandbox and re-test the flow end to end, then add every team with an active integration to the standing pre-refresh notification list.

Example: A Customer Email Near-Miss

  • Symptom: A tester runs a standard order-to-invoice flow shortly after a refresh, and it sends a real invoice email to an actual customer.
  • Cause: Email preferences weren’t restricted before full access was opened to the testing team.
  • Fix: Restrict email preferences as the literal first item on the post-refresh checklist, checked before anyone beyond the coordinator gets access.

Example: Turning Unlimited Refreshes Into a Real Advantage

  • Symptom: A development sandbox is months out of date because refreshes were historically treated as a scarce, twice-a-year event.
  • Cause: The old refresh limits shaped the habit even after they stopped being the actual constraint.
  • Fix: Move to a monthly refresh cadence for the QA sandbox, cascading down to a development sandbox refreshed from QA rather than production, so testing against current data becomes the norm.

Final Recommendations

The removal of NetSuite’s sandbox refresh limits in 2026.1 is a genuinely useful change, but it shifts the real work from getting permission to refresh to managing a refresh well, and that work hasn’t gotten smaller.

Know exactly what a refresh wipes and what it doesn’t carry over before requesting one, not after something breaks. Build a pre-refresh checklist around communication and backup, and a post-refresh checklist around reconfiguration and validation, and use both every time.

Lock down email preferences before anyone else touches a freshly refreshed sandbox. Assign real ownership for the process, and keep a lightweight log so the third refresh isn’t starting from the same blank page as the first. Treat the refresh as a small project with a beginning, middle and end, not a button you press and walk away from.

Want a Refresh Process That Doesn’t Put Your Team’s Work at Risk?

Get a Sandbox Refresh Governance Review

Tell us how your team currently handles sandbox refreshes, and we’ll review your process against the checklist in this guide, flag the specific gaps likely to cause a lost afternoon or a customer-facing mistake, and outline what a repeatable refresh process would look like for your environment.

Request a Sandbox Governance Review

Frequently Asked Questions

Common questions about NetSuite sandbox refreshes and the 2026.1 policy change.

As of the NetSuite 2026.1 release (March 6, 2026), Oracle removed the previous limits on sandbox refresh frequency. With an active sandbox license, you can request a refresh whenever you need to, though a repeatable process still matters more than the ability to refresh.

A refresh copies a full snapshot of the source account, including configurations, records, transactions, user passwords, and customizations, completely replacing whatever existed in the target sandbox before.

Website and web store domains, SAML SSO configuration, TBA tokens, OAuth 2.0 authorized applications, Customer Center role assignments, system notes, and deleted records do not carry over. Hardcoded links referencing a specific production record also keep pointing at production after the refresh.

Restrict outbound email preferences immediately after activation, before granting access to anyone beyond the refresh coordinator. This should be the first item checked on the post-refresh checklist, since the first saved transaction or triggered workflow can otherwise send a real email to a real customer.

Only on Premium, Enterprise, or Ultimate service tiers. Standard tier sandboxes always refresh from production with no choice of source.

Continue exploring

Get In Touch

Our customer support team is available for help.

Let's Talk Business!