QuickBooks Online sandbox: create one, log in, reset it, and fill it with realistic data
A QuickBooks Online (QBO) sandbox is a throwaway company that Intuit gives every developer account. It behaves like a real QBO company, accepts the same API calls, and never touches anyone's real books. This guide collects the things people ask about sandboxes in one place: how to get one, how to log in to it, how to reset it, and how to fill it with data that looks like a real business.
Intuit's own documentation is the source of truth for the portal itself, and it changes from time to time. Where this guide describes portal screens, it reflects Intuit's sandbox docs as of September 2026; check them if a menu has moved.
What a sandbox is (and isn't)
A sandbox is a full QBO company with its own chart of accounts, customers, transactions and reports. Intuit seeds a new US sandbox with a small sample company (a handful of customers, invoices and expenses) so that there is something to click on. It differs from a production company in a few ways that matter for testing:
- It is tied to your developer account, not to a paying QBO subscription, and it is free.
- Your app talks to it through the sandbox API host,
sandbox-quickbooks.api.intuit.com, using your app's Development keys. Production keys and production companies are a separate world. - Intuit caps how many sandboxes a developer account can have (see their docs for the current number), and each sandbox belongs to one country, which decides its currency, tax setup and available features.
- Rate limits apply in the sandbox just as they do in production, so a tool that loads thousands of records has to pace itself.
The sample data is fine for a first API call. It is not enough to test pagination, aging reports, partial payments, payroll expenses or anything that depends on volume. That is the gap the last section of this guide fills.
Create a sandbox
You need a free Intuit developer account. Sign up at developer.intuit.com; a US sandbox company is usually created for you as part of that. To see it, or to add another:
- Sign in to the developer portal and open your Dashboard.
- Open the Sandbox section (it is listed with your apps and account settings).
- Choose Add a sandbox company and pick a country. The sandbox appears in the list with its company name and a realm ID, the number that identifies the company in every API call.
If the button is disabled, you have reached the cap for your account; delete a sandbox you no longer need and try again.
Log in to a sandbox
Sandbox companies have their own sign-in address: app.sandbox.qbo.intuit.com. Use the same Intuit account you use for the developer portal. The regular qbo.intuit.com address only shows production companies, which is why a freshly created sandbox seems to be missing when people look for it there.
Once you are in, it is ordinary QuickBooks: customers, invoices, reports, the chart of accounts. Anything your app creates through the API shows up here immediately, which makes the sandbox UI the quickest way to check what a test run actually did.
Connect an app to it
API access goes through an app in your developer account. Create one from the dashboard with the Accounting scope (com.intuit.quickbooks.accounting). Every app has two sets of keys:
- Development keys authorize sandbox companies only. This is what you want for testing.
- Production keys authorize real companies, and Intuit only issues them after an app review.
Under Keys & credentials, the Development tab lists the client ID and client secret and the redirect URIs Intuit will send users back to after OAuth. Whatever tool you connect has to appear in that list. For the EasyTestData CLI, add:
http://localhost:8085/callback
Then run the OAuth flow once. The CLI opens your browser, you pick the sandbox company, and the tokens are stored locally in .easytestdata.json (keep that file out of version control):
export QBO_CLIENT_ID=...
export QBO_CLIENT_SECRET=...
npx easytestdata auth
Development keys cannot authorize a production company, so there is no way to point this at real books by accident. EasyTestData adds a second guard on top: its QBO client refuses any API host other than the sandbox one, and the tests use the production address only to prove that the check rejects it.
Reset a sandbox
Sooner or later a sandbox fills up with leftovers from old test runs. You have two options, and they are not the same thing.
Reset it in the developer portal
In the Sandbox section of the dashboard, each sandbox has a Reset action that deletes all data in the company. It is the nuclear option: transactions, customers, vendors, items, accounts you added, everything. Two things to know before you click it, as of September 2026 per Intuit's docs:
- The reset wipes the company, and Intuit's sample data is not restored once it has been deleted. If you want the sample company back, create a new sandbox instead.
- Your app's OAuth connection to the sandbox may need to be made again afterwards. Plan to re-run the authorization step.
Clear only what a tool created
If you only want to remove the data a test run added, and keep anything you set up by hand, clear by tag instead. Everything EasyTestData creates carries a tag (EZTD by default) in a document number, memo or note field, so it can find its own records later:
npx easytestdata purge --mode generated
Purge deletes the transactions it added, makes its customers, vendors, employees and items inactive (accounts stay), and never touches records you made by hand (details). There is also --mode all, which deletes every transaction in the sandbox company and makes all customers, vendors, employees and items inactive, without the portal reset; use it when you want an empty ledger but want to keep your chart of accounts. The reset and refill guide walks through both paths step by step.
Fill it with realistic data
An empty or sample-data sandbox tells you very little about how your integration behaves with a real customer's books. EasyTestData generates a year of financially coherent activity for a chosen industry, so invoices tie to payments, bills to bill payments, and revenue and expenses add up to targets you set. You can do this from the terminal or from a web app.
With the CLI
Pick an industry template and a scenario, and pin the seed and start date so the same command produces the same books every time:
npx easytestdata load --template saas --scenario rapid-growth --seed 42 --start-date 2025-09-01 --dry-run
npx easytestdata load --template saas --scenario rapid-growth --seed 42 --start-date 2025-09-01
The dry run prints what would be created: for this command, 90 customers, 1,080 invoices, 952 payments, 24 payroll runs and 2,854 transactions in total, from September 2025 to August 2026. The real run creates the accounts and lists first, then each transaction type in dependency order, pacing itself under QBO's rate limit. Smaller scenarios such as quick-demo (three months) or healthy-small load much faster; the playground shows the counts for any combination before you commit to one.
If you leave out --seed, the CLI draws a random one and prints it with the summary, so you can always reproduce a run you liked. The CLI page lists every flag.
With EasyTestData Cloud or the app on your computer
The same engine runs behind a web app. On EasyTestData Cloud you sign in, connect your sandbox with a Connect button (Cloud provides the Intuit app, so there are no keys to copy), pick a template and scenario, and watch the load progress live. It is free, with limits that only exist to prevent abuse of the shared service. If you would rather keep everything on your own computer, npx easytestdata ui gives you the same web app with no limits and no account.
Check the result
Log in at app.sandbox.qbo.intuit.com and open the customer list, the A/R aging summary and the Profit and Loss report for the generated period. You should see a spread of paid, partially paid and open invoices, payroll expenses twice a month, and a company that looks like the industry you picked. Run your integration against it, then purge by tag and try another scenario.
Common questions
Can I have more than one sandbox? Yes, up to Intuit's cap per developer account. A second sandbox is handy for testing another country or keeping a clean one for demos.
Can EasyTestData touch a production company? No. Development keys only authorize sandboxes, and the client refuses any host but the sandbox API. The FAQ has the details.
Does the generated profit match the P&L report? Almost; the report lands a little below the target, and the FAQ explains why.
Start with the playground
You do not need a sandbox or an account to see what EasyTestData generates. Open the playground, pick a template and scenario, and it builds the year of books in your browser and prints the matching CLI command to load it into your sandbox.