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 new column’s type (text, number, date, true/false, and so on). 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 Reference ID, the identifier each record carries from its origin system. Its field name in an API call is ref_id. Everything else is flexible.
- Reference 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 either
Reference IDorref_id; both work the same. - 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 field becomes a tidy, typed column. See records of any shape.
Deduplication
Section titled “Deduplication”Admire matches records on the Reference ID within a source: re-sending a record with a Reference 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. Over the API every record needs a Reference ID. In a CSV without one, Admire matches rows by their position in the file, so uploading a different file replaces earlier rows instead of adding to them. Include a Reference ID whenever re-uploads should update the right rows.
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 so the file is safe to re-upload.
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 matching 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.