Sites
Bulk Import Sites
Importing sites in bulk from Excel makes it possible to import thousands of sites with their hierarchy structure in minutes. Compared to manually creating sites one by one, it's a convenient and efficient method.
Before getting started Before getting started
Before we actually start and download the Excel template, there are a couple of important notes with bulk importing sites into 21RISK:
- You can import the site name, hierarchy levels (level1 through level6), and address information.
- Site names must be unique - you cannot import a site with a name that already exists.
- Hierarchy levels must be contiguous - you cannot skip levels (e.g., having level1 and level3 but not level2).
- Hierarchy names must be consistent - if "Europe" is used at level2 in one row, it cannot be used at level1 or level3 in another row.
- You must have permission to create sites.
Custom Columns Custom Columns
Great news - site custom columns are fully supported when bulk importing sites 🎉
If you have created site custom columns , they will automatically appear in the Excel template when you download it. This means you can populate custom column values for all your sites in one go, making bulk imports even more powerful.
Note: Custom columns must be created before downloading the template. If you add new custom columns after downloading, you'll need to download a fresh template to see them.
Download the template Download the template
To download the template for bulk import, navigate to "Sites" after logging in to 21RISK.
Now, let's click on the "Search" button in the left side of the screen, or click "Ctrl/Cmd + K"
This should bring up the command palette in the middle of the screen, where you can now search for "bulk import sites". Click on the first result.
This should now take you to a page with the title "Import Sites", with 2 cards. One for downloading the Excel template, and another one for uploading. Let's proceed by downloading the Excel template, by clicking on the button with the text "Download template".
This will download a template Excel sheet with 2 sheets:
- A sheet with some general instructions for importing
- The actual sheet with the data for the import i.e. "data-to-import"
Fill out the template Fill out the template
Now it's time to fill out the template. Open the "data-to-import" sheet and you'll see the following columns:
| Column | Required | Description |
|---|---|---|
| name | Yes | The name of the site (must be unique) |
| level1 | No | Top-level hierarchy (e.g., "Supply Chain", "Retail") |
| level2 | No | Second-level hierarchy (e.g., "Europe", "Americas") |
| level3 | No | Third-level hierarchy (e.g., "South", "North") |
| level4 | No | Fourth-level hierarchy |
| level5 | No | Fifth-level hierarchy |
| level6 | No | Sixth-level hierarchy |
| address_address | No | Full address string |
| address_countryCode | No | ISO country code (e.g., "US", "DK", "SE") |
| address_country | No | Country name |
| address_region | No | Region/state |
| address_district | No | District |
| address_cityPlace | No | City |
| address_postcode | No | Postal/ZIP code |
| address_locality | No | Locality |
| address_neighborhood | No | Neighborhood |
| address_street | No | Street name |
| address_streetNumber | No | Street number |
| address_markerLatitude | No | Latitude coordinate. Supports decimal (e.g., 55.676098) or DMS format (e.g., 69°13'14.1"N) |
| address_markerlongitude | No | Longitude coordinate. Supports decimal (e.g., 12.568337) or DMS format (e.g., 18°04'34.8"E) |
| insuranceActive | No | Set to "true" to include the site in the insurance board (leave empty or "false" to exclude) |
| c_sites_priority | No | Example select column - Use the predefined options (e.g., "Critical", "High", "Medium", "Low") |
| c_sites_sap_code | No | Example ID column - Unique identifier for external system integration |
| c_sites_sqm | No | Example number column - Numeric value (e.g., 15000) |
| c_sites_last_audit | No | Example date column - Date in ISO format (YYYY-MM-DD) |
| c_sites_notes | No | Example text column - Free-form text value |
Note: Custom columns appear in the template with the prefix c_sites_ followed by the column name. The examples above are just illustrations - your actual columns will depend on what you've configured in site custom columns .
One row per site. In this example, we will import 3 sites with different hierarchy structures:
Here's what this example creates:
- Barcelona will be placed under Supply Chain → Europe → South → Iberia
- Stockholm will be placed under Sweden (a single level)
- Kyiv will be created at the root level (no hierarchy)
The hierarchy levels (Supply Chain, Europe, South, Iberia, Sweden) will be automatically created as parent sites if they don't already exist.
If you have custom columns in your template, they will appear at then end. For "options" custom columns, Excel data validation will make sure you select the correct type.
Important: Hierarchy levels must be contiguous. You cannot skip levels.
✅ Valid: level1: "Europe", level2: "UK", level3: "London"
❌ Invalid: level1: empty, level2: empty, level3: "London"
Important: Hierarchy names must be consistent across all rows.
✅ Valid: Row 1 has level2: "Europe" , Row 2 has level2: "Europe"
❌ Invalid: Row 1 has level1: "Europe" , Row 2 has level2: "Europe"
Tip: If you have latitude and longitude coordinates, include them in the import to enable map features for your sites. You can use either decimal format (e.g., 55.676098) or DMS format (e.g., 69°13'14.1"N) - both will be automatically converted.
Upload and validate the template Upload and validate the template
With data in our spreadsheet, we are now ready to validate with our "What-if" scenario. Go back into 21RISK, and upload the spreadsheet and click "Upload template".
Skip Second Row Option: If your Excel file has old header references, descriptions, or example data in row 2 that you don't want to import, enable the "Skip second row" checkbox before uploading. Column headers will still be read from row 1, but data processing will start from row 3. This is useful when working with templates that have legacy header formats or instructional text in the second row.
This should now take you to a page with the title "Bulk import what-if analysis". This will show all the sites that will be created if you proceed with the import.
The table shows sites sorted by hierarchy depth:
- Depth 0 : Root-level sites and top-level hierarchy (e.g., "Supply Chain", "Sweden", "Kyiv")
- Depth 1 : Second-level hierarchy (e.g., "Europe")
- Depth 2 : Third-level hierarchy (e.g., "South")
- And so on...
The import runs in a transaction - it will either succeed completely or fail completely. No partial imports will occur.
You should now validate that the import looks correct. If you find something that looks out of place, make changes to the Excel template, and re-upload.
If the sites look correct, let's proceed to import by clicking the "Import now" button at the bottom of the page.
This will now take you to the "Sites" table where you can confirm the import worked.
To see the hierarchy structure, switch to the tree view by clicking the tree view button.
Good job - you have now successfully imported sites from Excel using our bulk import flow 🎉
Troubleshooting Troubleshooting
If you encounter errors during upload, here are common causes and solutions:
| Error | Cause | Solution |
|---|---|---|
| "Hierarchy levels must be contiguous" | You have a gap in the levels (e.g., level1 and level3 filled, but level2 empty) | Fill in all levels from level1 up to your deepest level |
| "Hierarchy name used at different levels" | A hierarchy name like "Europe" is used at level1 in one row and level2 in another | Ensure each hierarchy name is always used at the same level |
| "Site name already exists" | A site with that name already exists in your organization | Use a unique name or update the existing site manually |
| "Duplicate site names in file" | The same site name appears multiple times in your import file | Ensure each site name is unique |