Uploading & ingesting data
There are two ways to get records into an artifact source: upload a file, or send data through the API.
Admire is built to make this trivial. When records arrive, it detects the columns automatically and infers each column’s type (text, number, date, true/false, and so on), widening a type later if new data needs it. You don’t define a schema by hand. The point is to get data in, connect it to your people, and visualize it for coaching with as little setup as possible.
Core concepts
Section titled “Core concepts”A source has one column that matters for loading: the ref_id, the identifier each record carries from its origin system (shown as Reference ID in the interface). Everything else is flexible.
ref_id: the stable, unique key for a record within the source. It powers deduplication (below), so the same record updates in place instead of piling up duplicates on re-upload. In a CSV, name this column eitherref_idorReference ID; both are recognized and behave identically.- Every other column is optional and can be any type. You don’t pre-declare them; Admire creates and types columns from the data as it arrives. There’s no required timestamp, owner, or status column. Include whatever your data has.
- From JSON, any path can become a column. When you ingest JSON, a column can route to any field, including a nested one (for example
$.author.login), so any part of a payload becomes a tidy, typed column. See arbitrary JSON rows.
Deduplication
Section titled “Deduplication”Admire deduplicates on the ref_id within a source: re-sending a record with a ref_id it has already seen updates the existing row instead of creating a duplicate. That’s what makes repeated syncs, and re-uploading a corrected file, safe to run as often as you like. (If a record arrives without a ref_id, Admire still loads it, but it can’t recognize it as the same record later, so provide one whenever you want re-uploads to stay idempotent.)
CSV upload
Section titled “CSV upload”Upload a CSV directly. Admire reads the header row, adds any new columns to the source automatically, and infers each one’s type, so you can start from a spreadsheet without defining the schema by hand. Include a Reference ID (or ref_id) column to get dedup-safe re-uploads.
A simple file might look like this:
| Reference ID | Assignee Email | Created At | Priority | Status | Resolution Minutes |
|---|---|---|---|---|---|
| TKT-10231 | maya.chen@acme.com | 2026-05-02 | high | closed | 124 |
| TKT-10232 | david.okafor@acme.com | 2026-05-02 | normal | closed | 47 |
| TKT-10233 | maya.chen@acme.com | 2026-05-03 | low | open |
Here Reference ID becomes the dedup key, Created At is detected as a date, Resolution Minutes as a number, and the rest as text. Blank cells are simply left empty.
API ingestion
Section titled “API ingestion”For ongoing or automated feeds, send records through the API, up to 500 records per call. This is the route for syncing data from another system on a schedule. Each record carries its own ref_id, so scheduled syncs keep rows up to date rather than duplicating them. Over the API, supply ref_id directly as a field on each record (the Reference ID header is a convenience for CSV uploads), and key the rest of the record by each column’s stable reference.
With data loaded, query it to power reports and metrics.