Get In Touch
Our customer support team is available for help.
NetSuite Development

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.
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.
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.
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.
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.
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.
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:
This inventory is what makes the post-refresh reconfiguration step later in this guide a checklist instead of a guessing exercise.
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.
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 Excluded | Why It Matters | What To Do |
|---|---|---|
| Website and web store domains | The commerce site domain doesn’t carry over automatically | Configure a unique sandbox domain before testing storefront-dependent features |
| SAML single sign-on configuration | Per Oracle’s guidance, copied SSO configuration is not guaranteed to work correctly | Reconfigure SAML settings, or use standard login for sandbox testers |
| Token-based authentication (TBA) tokens | Existing integration tokens don’t transfer | Create new tokens in the sandbox for every integration after each refresh |
| OAuth 2.0 authorized applications | Connected apps lose their authorization | Reauthorize each OAuth application in the sandbox |
| Customer Center role assignments | External customer logins won’t carry their role assignment | Restore via CSV import if customer-facing testing is in scope |
| System notes on records | Change history isn’t available for sandbox records | Don’t rely on sandbox system notes for audit-style testing |
| Deleted records | Anything deleted in production won’t reappear as deleted in sandbox | Don’t use sandbox to test deletion-dependent logic without verifying record state first |
| Hard-coded internal or external links | Links built with a hardcoded production account ID still point at production | Use 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.
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.
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.
| Area | What to Check |
|---|---|
| Email preferences | Confirm outbound email is restricted so testing doesn’t send real notifications, invoices, or marketing emails to actual customers |
| Integration tokens and OAuth apps | Regenerate TBA tokens and reauthorize OAuth applications for every connected system |
| Integration platforms | Update Celigo, Boomi, MuleSoft, or custom middleware endpoints to point at the sandbox account, and re-test each flow |
| Payment gateways and tax connectors | Re-point or disable live gateway and tax service connections so testing doesn’t touch real payment processors |
| SAML / SSO | Reconfigure single sign-on, or confirm testers know to use standard NetSuite login instead |
| Domains | Set a unique sandbox web store domain so commerce testing doesn’t collide with production URLs |
| Script deployment status | Verify scheduled and Map/Reduce scripts didn’t reactivate at production frequency |
| Workflow release status | Confirm any in-progress or testing-status workflows weren’t overwritten by the production version |
| Dashboard theme | Change the sandbox color theme so it’s visually distinct from production at a glance |
| Hardcoded links | Audit saved bookmarks, Suitelet links, and hardcoded record URLs for stale production references |
| Customer Center roles | Restore role assignments via CSV import if customer-facing testing is part of the plan |
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.
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.
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.
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.
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.
The scenarios below are illustrative patterns built from the failure modes and governance gaps covered above, not reported client outcomes.
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.
Common questions about NetSuite sandbox refreshes and the 2026.1 policy change.
Our customer support team is available for help.
Need help with NetSuite?
Chat with our team.