CSV import

The fastest way to get existing asset data into Tether. Upload a spreadsheet and Tether creates or updates assets in bulk, auto-creating categories and locations that don't yet exist.

Before you import

Test with a small batch first

Upload 5–10 rows first to confirm the column mapping works correctly before importing your full dataset.

Column reference

The first row of your CSV must be a header row. Column names are case-insensitive. Only asset_tag is required — all others are optional and can be omitted entirely.

Column nameRequiredFormat / accepted valuesNotes
asset_tagYesAny string, unique per tenantPrimary key. If a record with this tag already exists, it is updated. If it does not exist, it is created.
nameNoAny stringDefaults to the asset tag if omitted
manufacturerNoAny stringe.g. Apple, Dell, Lenovo
modelNoAny stringe.g. MacBook Pro 16, Latitude 7440
serialNoAny stringManufacturer serial number
categoryNoAny stringIf the category doesn't exist in this tenant, it is created automatically
locationNoAny stringIf the location doesn't exist in this tenant, it is created automatically
statusNoavailable, deployed, maintenance, retiredDefaults to available if blank or omitted
assigned_toNoPerson's name or emailIf the person doesn't exist as an employee in this tenant, they are created. If status is blank and this field is set, status defaults to deployed.
purchase_dateNoYYYY-MM-DD, MM/DD/YYYY, or DD/MM/YYYYDate the asset was purchased
purchase_costNoNumeric (strips $, commas, spaces)e.g. $1,499.00 or 1499 — both work
warranty_expiryNoSame date formats as purchase_dateAssets within 30 days of expiry appear on the dashboard
notesNoAny stringFree-form notes

Example CSV

csv
asset_tag,name,manufacturer,model,category,location,status,assigned_to,purchase_cost,warranty_expiry IT-0001,MacBook Pro 16,Apple,M3 Max,Laptop,Head Office,deployed,Sarah Chen,3499,2027-03-01 IT-0002,Dell Latitude 7440,Dell,7440,Laptop,Remote,deployed,Marcus Webb,1450,2027-06-12 IT-0003,UltraSharp 27,Dell,U2724DE,Monitor,Head Office,available,,620,2027-01-20 IT-0004,iPhone 15 Pro,Apple,A2848,Phone,Remote,deployed,Sarah Chen,1099,2026-02-15 IT-0005,PowerEdge R760,Dell,R760,Server,Warehouse,available,,8200,2028-09-01

Create vs update behaviour

Import uses an upsert pattern based on the asset_tag column:

The import response tells you exactly how many were created vs updated:

json
{{ "created": 3, "updated": 2, "errors": [] }}
Import does not delete existing assets

Importing a CSV only creates or updates records — it never deletes assets that aren't in the file. If you need to remove assets, delete them manually or via the API.

Error handling

Tether validates each row individually. If a row has an error (e.g. an invalid status value or an unrecognisable date format), that row is skipped and added to the errors list in the response. Valid rows in the same file are still imported.

json
{{ "created": 8, "updated": 1, "errors": [ {{"row": 4, "error": "Invalid status 'in use'. Must be: available, deployed, maintenance, retired"}}, {{"row": 7, "error": "purchase_cost must be numeric, got 'TBD'"}} ] }}

Fix the errored rows and re-import just those rows, or correct them manually after the initial import.

How to import

1

Navigate to the correct client

Make sure you are on the client's subdomain (or switch to them as MSP staff). All imported assets go into the current tenant.

2

Open the import screen

Go to Assets → Import in the sidebar.

3

Upload your CSV

Click Choose File, select your CSV, then click Import. Files up to 50 MB are accepted (configurable in nginx with client_max_body_size).

4

Review the results

The result summary shows how many assets were created, updated, and any rows with errors. Fix errors and re-import if needed.

Large imports may take several seconds

A CSV with 1,000+ rows can take 5–15 seconds to process. Do not close the browser tab while the import is running. The request will time out after 60 seconds — for very large datasets, split into batches of ~500 rows.

Last updated: May 2026