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 (case-insensitive) — you cannot import a site with a name that already exists, even if the casing differs (e.g., "London" and "london" are considered the same).
- 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, case-insensitive) |
| 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_search | No | Address search query (e.g., "Stockholm, Sweden"). Automatically populates all address fields and coordinates |
| 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"
How address data works How address data works
There are three ways to populate address information for your sites during bulk import. You can pick the approach that fits your data best — and even mix approaches across different rows in the same import.
Important: You cannot combine address_search with address_markerLatitude / address_markerlongitude on the same row. Each row must use one approach or the other. Providing both will result in a validation error.
Option 1: Search by address or place name Option 1: Search by address or place name
Use the address_search column to type what you know about the location — a city name, a full street address, a landmark, or even a postal code — and 21RISK will look it up for you.
For example, entering Stockholm, Sweden will automatically populate the country, region, city, postal code, street, latitude, longitude, and all other address fields.
If you have also filled in some individual address fields in the same row (e.g., address_street or address_postcode ), those values will not be overwritten. The lookup only fills in fields you have left empty — so you always stay in control of your data.
Pros: Quickest to fill in — just type a name or address without needing coordinates or structured fields. Works with city names, street addresses, landmarks, and more.
Cons: Results depend on the search query. An ambiguous or misspelled query may resolve to the wrong location. Always review the what-if preview to verify.
Option 2: Look up address from GPS coordinates Option 2: Look up address from GPS coordinates
Enter latitude and longitude in the address_markerLatitude and address_markerlongitude columns. 21RISK will then automatically look up the full address — country, city, postal code, street, and more — based on those coordinates.
Coordinates can be entered in either decimal format (e.g., 55.676098 ) or DMS format (e.g., 69°13'14.1"N ) — both are supported and will be automatically converted.
Just like with address search, the lookup will never overwrite fields you have already filled in. It only fills in the gaps. For example, if you provide coordinates for a site in New York and also enter address_street: "My Custom Street" , the street field will keep your value — everything else is resolved automatically.
Pros: Pinpoint precision — you control exactly where the site is placed on the map. Ideal when you have coordinates from a surveying tool, GPS device, or another system.
Cons: Requires you to already have accurate latitude/longitude values. The reverse address lookup may not perfectly match the physical street address in all regions.
Option 3: Enter address fields manually Option 3: Enter address fields manually
Fill in any combination of the individual address fields ( address_address , address_countryCode , address_street , etc.) directly in the spreadsheet. No lookup is performed — the values you enter are used exactly as provided.
You can optionally include address_markerLatitude and address_markerlongitude alongside the manual fields to place the site on the map.
Pros: Full control — no automated lookup can change or misinterpret your data. Best when your address data comes from an authoritative source.
Cons: Most manual effort. You need to fill in each field yourself, and there is no validation that the address is real or that the coordinates match the address.
Advanced tip: You don't have to use the 21RISK template. If you already have an Excel file with your site data, just make sure row 1 contains the correct column headers (e.g., name , level1 , level2 , address_search , etc.) and your data starts from row 2. If row 2 in your existing sheet contains old headers, descriptions, or example data that you want to keep, simply enable "Skip second row" when uploading — 21RISK will read column names from row 1 and start importing data from row 3. This way you can plug 21RISK's column mapping right into sheets you already maintain, without copy-pasting data into a new template.
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".
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 |
|---|---|---|
| "Cannot provide both address_search and latitude/longitude" | A row has both address_search and address_markerLatitude / address_markerlongitude filled in | Use either address_search or coordinates per row, not both |
| "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 |