Documentation
Asset Ingestion
Import assets from CSV, JSON and Nmap XML files and follow the ingestion queue and upload history.
Overview
Asset Ingestion brings discovery exports and inventory files into the asset record. Uploaded files are parsed, normalized and reconciled against your existing assets, so a device that is already known is updated instead of duplicated. Every import is recorded with its outcome. Use it to load an inventory from another tool, to import Nmap results from an isolated network, or to seed DeviceQuest with a spreadsheet.
Open it from the sidebar under Discover > Ingestion.
Screen tour
The page has three parts: Start an import, the Ingestion queue and Recent uploads.
- Drop a file to ingest: drag a file onto the panel, or click anywhere on it to browse.
- Accepted files:
.csv,.json,.xmland.nmap, up to 50 MB. - Select file: opens the file browser.
- Expected: a reminder of the identifier keys each record needs.
Under the panel, the source tiles open a dedicated upload page for one format: CSV inventory, JSON payload and Nmap XML. Each page shows guidance for that format, for example Upload CSV Import, and has a Back to ingestion link. The Cloud sync tile opens the cloud connector wizard on the Cloud Resources page, where you connect an AWS, Azure or GCP account for continuous synchronization.
Import a file
- Drop a file on the panel, or click Select file and choose it.
- Wait while the panel shows Uploading
… . - Read the result:
- Imported
with the number of assets created and updated and the number of observations processed. Click View asset inventory to see them, or Upload another file. - Parsed
, but nothing was imported : every row parsed, but no row carried an identifier. Add one of the identifier keys and try again. - No assets were imported from this file. with the reasons, for example
row 3: missing one of hostname, ip_address, mac_address, serial_number, or arn. Click Try again.
- Imported
- Imported
: the file was ingested. - Counts: how many assets were created and updated, and how many observations were processed. Re-uploading a file updates the same assets, as in this example: 0 created · 2 updated.
- View asset inventory: opens the asset inventory.
- Upload another file: resets the panel for the next file.
Nothing is written until the file parses. The panel rejects a file before uploading it when the extension is outside the allowed list (Unsupported file type “.txt”. Allowed: .csv, .json, .xml, .nmap) or the file is larger than 50 MB (File exceeds the maximum size of 50 MB.).
File formats
DeviceQuest chooses the parser from the file extension: .json for JSON, .xml and .nmap for Nmap XML, and CSV for everything else.
Identifier keys
Every CSV row and JSON record needs at least one of these identifier keys, so DeviceQuest can match it to an existing asset or create a new one:
| Key | Also accepted as |
|---|---|
hostname | name, host, host_name, dns |
ip_address | ip, ipv4, ipv6, address |
mac_address | mac, macaddress |
serial_number | serial, serialnumber |
arn | — |
Key names are case-insensitive, and spaces and hyphens are read as underscores, so IP Address and ip-address both work. Some other keys have a meaning too:
| Key | Also accepted as | Meaning |
|---|---|---|
asset_type | type | device (default), vm, hypervisor, cloud, user, software or saas. |
os_name | os, operating_system | Operating system. |
vendor | manufacturer | Manufacturer. |
asset_id | id | An existing DeviceQuest asset ID (UUID) to update. |
Every other column or key is stored as an asset attribute. Records with the same identifiers always map to the same asset, so you can upload an updated file again safely.
CSV
A header row, then one asset per row.
hostname,ip_address,mac_address,os,manufacturer,asset_type,location
web-01,10.20.0.21,02:00:5e:10:00:21,Ubuntu 24.04,Dell,device,Rack A3
db-01,10.20.0.22,02:00:5e:10:00:22,Rocky Linux 9,HPE,device,Rack A4
JSON
One asset object, an array of asset objects, or an object with an assets array. Identifiers can also be nested in an identifiers or primary_identifiers object. String, number and boolean values are imported.
{
"assets": [
{
"hostname": "web-01",
"ip_address": "10.20.0.21",
"os": "Ubuntu 24.04",
"asset_type": "device",
"owner": "platform-team"
},
{
"identifiers": { "serial_number": "CZ1234ABCD" },
"manufacturer": "HPE",
"type": "hypervisor"
}
]
}
Nmap XML
The XML report that Nmap writes with -oX, for example:
nmap -sV -oX scan.xml 10.20.0.0/24
Each <host> becomes an asset. DeviceQuest reads the host name, the IPv4 or IPv6 address, the MAC address with its vendor, the host status, and every open port with its service, for example open_port_tcp_22.
<?xml version="1.0"?>
<nmaprun>
<host>
<status state="up"/>
<address addr="10.20.0.21" addrtype="ipv4"/>
<address addr="02:00:5E:10:00:21" addrtype="mac" vendor="Dell"/>
<hostnames><hostname name="web-01"/></hostnames>
<ports>
<port protocol="tcp" portid="22">
<state state="open"/>
<service name="ssh" product="OpenSSH" version="9.6"/>
</port>
</ports>
</host>
</nmaprun>
Ingestion queue
- Pending: items awaiting a worker.
- Processing: items being parsed now.
- Failed: items that failed and need review. Nothing stuck when the count is zero.
- Total: all items in the queue.
- Refresh: reloads the queue and the upload history. The As of time shows when the counts were fetched.
The queue counts ingestion work from all sources across your tenant (All sources · tenant-wide). While the counts are unavailable, the panel shows Queue status unavailable. with a Retry button.
Recent uploads
- Status filters: All, Completed, Partial, Failed, Processing and Pending, with counts.
- File: the file name, its type, size and upload time.
- Rows: how many rows were ingested.
- Status: the outcome. For anything other than completed, the error message appears under the badge.
- View asset inventory: opens the asset inventory.
The list shows your 20 most recent uploads and refreshes after every import. When there are none, it reads No uploads yet.
Statuses
| Status | Meaning | Next possible status |
|---|---|---|
| Pending | The upload is waiting to be processed. | Processing |
| Processing | The file is being parsed and ingested. | Completed, Partial, Failed |
| Completed | Every record was ingested. | — |
| Partial | Some records were ingested and some were skipped. The message lists the skipped rows. | — |
| Failed | No records were ingested. The message explains why. | — |