How to import assets from a spreadsheet
In short: On the Assets page in the portal, click Import Assets, download the example file, put your list into it, and upload it back. The assets are created in the background.
When you’d do this: When you’re getting started and have a list of assets to bring in (properties, vehicles, cabinets, sites) and typing them in one at a time would take all day. For one or two, use Create Asset instead.
Before you start
Sort out your asset types first. Every row has to name an
asset type, and it has to match one of yours exactly:
Property, not Properties or property. A few typical types are already set up
for you; if your list needs one that isn’t there, add it before you import rather
than fixing rows afterwards. See How to manage asset types.
Start from the example file, not a blank spreadsheet. The import modal has a Download example CSV file link. That file already has the headings Keyhive looks for, so replacing its rows with your own is the quickest way to get a file that works first time.
If Keyhive is connected to an outside system, your assets arrive from there automatically and there’s nothing to import. See Assets that sync from an outside system.
Steps
-
Click Assets in the sidebar.
-
Click Import Assets at the top of the list.
-
Click Download example CSV file. It saves a small file with the headings filled in and a couple of example rows underneath.

-
Put your list in. Open the file in your spreadsheet program, delete the example rows, and fill in one row per asset. Keep the headings as they are:
name(required). What your team calls the asset: an address, a registration, a unit name.asset_type_name(required). The asset type, spelled exactly as it is in Keyhive.description(optional). Anything that helps someone know they’ve got the right one: a door code, a floor, a colour.key_number(optional). The hook, drawer or slot the keys hang on, if you use numbers.
-
Fill in the key / hook numbers, if you use them. Putting a key / hook number in now saves you pairing them up later. If an asset needs more than one hook, separate them with commas:
52, 53. The numbers have to already exist in Keyhive; anything it doesn’t recognise is skipped quietly, and the row still imports without it. See How to import key / hook numbers from a spreadsheet if you haven’t added yours yet.Save the file as a CSV. That’s the format it already came in, so Save is usually enough.
-
Upload it. Back in the modal, drop the file onto the upload box or click to choose it. Because you kept the headings, Keyhive matches your columns up for you. Check each one has landed on the right heading before you go on.
-
Decide what happens to key sets you already have. Below the upload box, Existing key sets on asset controls how the imported key / hook number is applied to an asset that already has key sets. It only matters when you’re importing over assets that are already in Keyhive. For a first import, or a file of new assets only, there’s nothing for it to act on.
- Leave unchanged (the default): existing key sets are left exactly as they are, and the imported number isn’t applied to them.
- Assign key / hook number (keep current set name): gives them the imported number and leaves their names alone.
- Assign key / hook number (clear set name): gives them the imported number and empties their names.
- Assign key / hook number (rename A, B, C…): gives them the imported number and renames them in order, so an asset with three key sets ends up with A, B and C.
-
Click Import. The import runs in the background, so you can carry on working. When it finishes you’ll get a notification telling you how many rows went in, and how many didn’t.
Good to know
- A name that already exists is updated, not duplicated. Keyhive matches rows to existing assets on the name, exactly as written, so re-importing a corrected file updates the same assets rather than creating a second copy of each. The flip side: a name that doesn’t match (a changed word, a missing postcode, an extra space) creates a new asset instead. And blank cells overwrite, so an empty description column wipes descriptions you already have.
- You can import in batches. There’s no need to get everything into one file. Bring in a section at a time and check it looks right before doing the next.
- Rows that fail don’t stop the rest. The most common cause is an asset type name that doesn’t match one of yours.
- Already have your assets in and just need the numbers? There’s a quicker round trip. See How to bulk assign key / hook numbers to assets.