Contacts: lists, imports and exports
People and website visitors, exact totals, filters and saved contact views, bulk actions, duplicates and merge, CSV import, and exporting contacts and conversations, in the app and through the API.
Last updated
People and website visitors
On a busy website most contacts are anonymous visitors: a chat session with no email, phone, external or channel identity and no conversation. The Contacts list shows People by default (everyone else, plus anyone your team added by hand, through the API or a CSV import), with Website visitors and All as chips beside it. Presets, saved views and filters apply to people. Through the API the default audience stays all:
curl "$KOMMIO_URL/contacts?audience=people&sort=last_activity&dir=desc" -H "Authorization: Bearer $KOMMIO_KEY"
curl "$KOMMIO_URL/contacts/count?audience=visitors" -H "Authorization: Bearer $KOMMIO_KEY"Response 200 OK
{ "count": 48210, "capped": false }The totals of the whole workspace, its people and its visitors are exact and cost the same on any workspace size. A narrower count (a filter, a tag, a search) counts up to 10,000 and then answers capped: true, shown as "10,000+".
Filters, views and columns
- Filters: tags, created, last activity, which identities a contact has (email, phone, external id, website visitor) and contact attributes. They use the same condition language as conversation views;
GET /views/lists the fields and operators.schema?object=contact - Saved contact views: + Save view keeps the filters as a chip, personal or shared with the team (
views:manage). Through the API, a view has"object": "contact". - Columns are chosen per person, custom attributes included, and remembered. Name, created and last activity sort on any workspace size; an attribute sorts lists of up to 5,000 contacts.
- Conversations shows how many of the contact's conversations you may see, with the waiting ones, for example "12 · 1 open".
- Preview: clicking a row opens the contact beside the list with its tags, identities, attributes, recent conversations and notes.
jandkmove along the list,Enteropens the profile andEsccloses it.
A person's own filters and views may not match on an attribute they see masked or hidden (roles and personal data).
Bulk actions
Select rows, or with the whole page selected, Select all that match: Add tag and Remove tag (contacts:write), Export CSV (contacts:export), Merge for two (contacts:merge) and Delete (contacts:delete).
- Up to 200 selected contacts are done at once; larger selections, and every "all that match", run in the background in batches, with the requester's permissions as they are when it runs, and only on contacts they may see. A bar shows the progress.
- Every changed contact gets its own audit entry, so its activity shows it.
- Delete is the GDPR erasure: names, identities, attributes, notes and tags go, and so does everything the customer wrote: their messages, files, email headers, rating comments and visitor context, including those of contacts merged into them. Conversations stay as the team's records (replies, notes, ratings and activity) with the contact's name, emails and phones replaced by
[erased], the same in the audit trail. Finished exports of the workspace are withdrawn, and the contact's chat session and follow-up links stop working. Very long histories finish in the background. What channels or other systems already received, and backups, are outside Kommio's reach. It first shows how many contacts and conversations it affects, and erasing more than one needs that number typed.
# tag every person who matches a saved view
curl -X POST "$KOMMIO_URL/contacts/bulk" -H "Authorization: Bearer $KOMMIO_KEY" -H "Content-Type: application/json" \
-d '{"action": "tag_add", "tag_ids": [4], "selection": {"all_matching": true, "view_id": 12, "audience": "people"}}'Possible duplicates
Contacts that share an email (lower case, without a "+tag", Gmail's dots ignored) or a phone number in international format are listed as possible duplicates, with their number on a chip (contacts:merge). Compare and merge shows them side by side: choose the contact to keep and, where values differ, which value it keeps. Not a duplicate is remembered, and the group shows again only if another contact joins it. A sensitive attribute you do not see in clear cannot be chosen.
Tags, notes and activity
A contact carries the workspace's tags, notes your team keeps about the customer (private: a role that cannot see private notes neither sees nor writes them), and an activity timeline: created, imported, edited, identities added or removed, merges, tags, notes, conversations started and resolved, and the changes the customer's own site made at sign-in.
CSV import
Contacts › Import (contacts:import and contacts:write; Administrators and Supervisors by default):
Upload
A CSV file with a header row, separated by commas, semicolons or tabs, in UTF-8, up to 100 MB and 1,000,000 rows. Kommio suggests a mapping from the column names.
Map
Each column becomes name, first name, last name, company, email, phone, external id, tags or a contact attribute, or is ignored. Several emails or phones in one cell are split on
;or,, and values are converted to the attribute's type.Choose how rows match
Pick the identities that match a row to an existing contact: email, phone, external id. A matched contact is updated, or skipped if you prefer. A row whose identities belong to two different contacts fails with a reason instead of merging anything.
Preview
A dry run of the first 1,000 rows shows how many would be new, updated, skipped or fail, and which rows fail.
Import
The import runs in the background in batches and resumes where it stopped if interrupted. Failed rows download as CSV with the line and the reason.
A tags column creates missing tags only for someone allowed to manage tags. Attributes that another system owns cannot be imported. Uploaded files are deleted after seven days.
Exports
Every export is redacted exactly as the app shows it to the person exporting, with their permissions at the moment it runs: private notes, emails, phones and sensitive attributes are masked or left out as their role says. Every export is audited.
| What | How | Needs |
|---|---|---|
| One conversation | More actions › Export as text, HTML or JSON, or GET /conversations/ | Seeing the conversation |
| A conversation view | Export in the inbox header, or POST /exports with the list's filters: JSON Lines, one conversation per line | conversations:export (Administrator only by default) |
| Contacts | Export CSV on a selection, or POST /contacts/ | contacts:export |
Exports of a view or of contacts run in the background and can be downloaded by the person who asked for seven days. The HTML transcript is a self-contained page whose own security policy forbids scripts; files are listed by name, never embedded. In a CSV, cells a spreadsheet would read as a formula get a leading apostrophe.
Every claim on these pages is covered by a test in the repository, and the API reference is generated from the same contract every server serves at /api/openapi. Corrections to [email protected].