Import from a spreadsheet
Add or update hundreds of sites and devices at once from CSV files: the columns, an example, and how errors are handled.
Updated 10 November 2026
Sites and devices can be imported from CSV files on the Admin → Sites and Admin → Devices pages. Import the sites first: every device names its site.
How it works
- Check only reads the whole file and tells you what it would add and update, without saving anything.
- Import saves it, all or nothing: if any row has a problem, nothing is saved, and you get a list of the rows to fix (by line number and column).
- Existing rows are updated, new ones added: sites are matched on their
code, devices on theirmgmt_host. Running the same file twice changes nothing. - Up to 5 000 rows per file. From Excel, save as CSV UTF-8; older "CSV (comma delimited)" files work too.
- Column names aren't case-sensitive, and their order doesn't matter.
Sites
Required: code, name, lat, lon.
| Column | What it is |
|---|---|
code |
A short, unique code, e.g. TWR-NORTH. |
name |
The site's name. |
lat, lon |
Its position in decimal degrees, e.g. -25.86 and 28.19. In South Africa the latitude is negative. |
kind |
tower (default), pop, datacenter, office, relay or customer. |
power_type |
grid, grid_battery, solar_battery, generator, hybrid or unknown (default). |
battery_nominal_v |
12, 24 or 48, for a site with a battery. |
structure_height_m |
The mast's height in metres. |
ground_elevation_m |
The ground's height above sea level. |
address, contact_name, contact_phone |
For your technicians. |
tags |
Your own labels, separated by ;. |
code,name,lat,lon,kind,power_type,battery_nominal_v
POP,Head office POP,-25.8601,28.1902,pop,grid_battery,48
TWR-NORTH,Rietfontein tower,-25.7412,28.2208,tower,grid_battery,24
TWR-EAST,Bronkhorstspruit tower,-25.8095,28.7418,tower,solar_battery,24
Devices
Required: site_code, name, mgmt_host.
| Column | What it is |
|---|---|
site_code |
The code of an existing site. |
name |
The device's name. |
mgmt_host |
Its management address. |
kind |
routeros (default), snmp or ping_only. |
role |
core_router, router, backhaul, ap, switch, cpe or other (default). |
criticality |
critical, high, normal (default) or low. |
api_port |
Leave it empty for the usual port (8728 for RouterOS, 161 for SNMP). |
credential_profile |
Empty = default. |
collector |
A collector's name. Empty = your only collector, if you have one. |
notes |
Anything for your team. |
site_code,name,mgmt_host,kind,role
POP,POP-CORE,10.0.0.1,routeros,core_router
TWR-NORTH,TWR-NORTH-RTR,10.0.1.1,routeros,router
TWR-NORTH,TWR-NORTH-SEC1,10.0.1.11,snmp,ap
TWR-NORTH,TWR-NORTH-UPS,10.0.1.20,snmp,other
TWR-EAST,TWR-EAST-CAM,10.0.2.30,ping_only,other
What each field does is in device settings. Your plan's device limit applies to imports too: a row that would go over it is reported as an error.
Then
Open the map to check the positions, then accept the link suggestions in Links. Battery monitoring needs one more setting per site, its power device (how).