A useful sandbox needs enough related records to exercise a workflow. For a small sales demo, start with 12 Accounts, give each Account two Contacts, and add one Opportunity. You get 48 records with a relationship structure you can inspect before increasing the volume.

This guide includes the complete Snowfakery recipe. You can generate a local JSON file with the free command-line tool, or edit the recipe and run it from Orgbit Desktop.

Download the sandbox starter recipe ↓

About the examples: screenshots show the real Orgbit interface in its browser preview, populated with fictional orgs and a synthetic recipe. We validated local generation with Snowfakery 4.2.1. No Salesforce records were created for this guide; loading depends on your org’s fields, permissions, and automation.

Start with a small, inspectable dataset

You will need Snowfakery for local generation. To load from Orgbit, the desktop setup also checks Salesforce CLI and CumulusCI. Use a disposable sandbox or scratch org with access to Account, Contact, and Opportunity.

Object Recipe count Resulting records
Account 12 12
Contact 2 per Account 24
Opportunity 1 per Account 12
Total 48

The Account names begin with Orgbit Demo Account, so you can find this tutorial’s data later. Contact names are generated, and email addresses use example.com. The recipe does not copy production records or read an existing Salesforce org.

The date and Opportunity stage are explicit. Change CloseDate if your scenario needs another date, and confirm that Prospecting is valid for the target org’s sales process.

Create the recipe in Orgbit

Open Recipes → New recipe, name it Sandbox starter, and replace the starting YAML with the downloaded file’s contents. Orgbit saves recipe edits automatically; the generated local filename can differ from the download’s name.

Here is the full recipe:

# Synthetic Salesforce demo data. No existing org data is read.
# 12 Accounts + 24 Contacts + 12 Opportunities = 48 records.
- object: Account
  count: 12
  fields:
    Name: Orgbit Demo Account ${{id}}
    Description: Synthetic Orgbit tutorial data
  friends:
    - object: Contact
      count: 2
      fields:
        FirstName:
          fake: FirstName
        LastName:
          fake: LastName
        Email: contact-${{id}}@example.com
        AccountId:
          reference: Account
    - object: Opportunity
      count: 1
      fields:
        Name: ${{Account.Name}} - Starter deal
        StageName: Prospecting
        CloseDate: 2026-12-15
        Amount: 12500
        AccountId:
          reference: Account
Sandbox starter recipe in Orgbit: 12 Accounts, two Contacts per Account, and one Opportunity per Account, totaling 48 records
The Objects view calculates nested totals from the recipe. Synthetic data in the browser preview; click the image for full size.

Check the relationships and counts

The Contact and Opportunity definitions live under the Account’s friends block. Each time an Account is generated, that block generates its related records. Their AccountId fields reference the parent Account.

Open Dependencies to inspect that structure. The recipe has three object definitions, but generates 48 records. A Contact count of 2 means two for each Account, not two for the entire run.

Orgbit dependency view connecting the Account to its Contact and Opportunity children
The dependency view explains which records belong together. The sample has 24 Contacts and 12 Opportunities under 12 Accounts.

To scale this recipe to 400 records, change the Account count to 100: 100 Accounts + 200 Contacts + 100 Opportunities. Keep the first run small enough to inspect individual records.

Generate locally before loading

In the desktop app, Dry run executes Snowfakery and reports generated counts in the CLI log. For this self-contained recipe it does not connect to Salesforce. The browser preview cannot execute CLI commands.

You can also validate the downloaded recipe directly:

snowfakery sandbox-starter.recipe.yml \
  --output-format json \
  --output-file sandbox-starter.json

Our local run produced exactly 12 Accounts, 24 Contacts, and 12 Opportunities. Every Contact and Opportunity referenced an Account in that output. The JSON uses local numeric identifiers; these are not Salesforce record IDs.

A successful dry run checks data generation. It does not validate Salesforce picklists, required custom fields, permissions, or validation rules. Add any fields your org requires before attempting a load. The generated contact names can change between runs even though the recipe’s counts remain the same.

Choose the sandbox and load once

In Orgbit Desktop, select the intended sandbox in the workspace selector and check the TARGET beside Generate & load. CumulusCI handles loading the generated records into that environment.

Review the sandbox’s flows and integrations before loading: synthetic records can still trigger automation. Run Generate & load once, inspect the log, then verify the data with SOQL.

This is an insert recipe. Repeating it can add another batch with the same demo names; it does not reset the sandbox or update a previous batch. If a load fails partway through, inspect the error and existing records before rerunning.

Keep the recipe for your next environment

Choose Make seed template to include the recipe under Seed templates. Use Export to keep a YAML copy with the project’s setup notes. The template stores the recipe; it does not authorize access to another Salesforce org.

For a reusable team example, record the expected counts, required fields, valid stages, and cleanup approach alongside the YAML. If you work across clients, the multiple-org workflow helps keep the target environment explicit.

For more recipe syntax and output options, see the Snowfakery documentation and its Salesforce integration guide.