Skip to content

Keep your contacts tidy

Documented Checked against the CLI's current help and source. Not run end to end. CLI 0.3.1, checked 2026-11-04.

I have the same person in twice. Can I fix that?

Add contacts, let ContactsQ point out the duplicates, merge them into one record you can still undo, and look anyone up by their number.

What you get: one clean record per person, built up from the terminal, with numbers and addresses kept masked. You need: a signed-in profile; merging needs an organisation admin (we ran every step as the owner). About 6 minutes.

add
quox contacts add "Priya Shah" --email [email protected] --organisation "Harbour Dental" --relationship customerID                          Name          Kind      Status    Relationship    Identifiersct_mw2qlxb8_2233421bc6bd    Priya Shah    person    active    customer        email:p•••@harbourdental.exampleⓆ CONTACTSQ │ contacts add │ ct_mw2qlxb8_2233421bc6bd
From a real run on the demo profile. The people and numbers are made up.

The name is split into given and family names for you. --organisation finds the organisation by name, or creates it, and links the two. Repeat --email or --phone to add several at once. Identifiers are stored encrypted and shown masked.

add again
quox contacts add "Priya Shah" --email [email protected] --phone +442079460958 --organisation "Harbour Dental" --job-title "Practice manager" --relationship customerID                          Name          Kind      Status    Relationship    Identifiersct_mw2qmopc_14ed3862e6b6    Priya Shah    person    active    customer        phone:•••••••958 email:p•••@example.comⓆ CONTACTSQ │ contacts add │ ct_mw2qmopc_14ed3862e6b6quox contacts find PriyaID                          Name          Kind      Status    Relationship    Identifiersct_mw2qlxb8_2233421bc6bd    Priya Shah    person    active    customer        email:p•••@harbourdental.examplect_mw2qmopc_14ed3862e6b6    Priya Shah    person    active    customer        phone:•••••••958 email:p•••@example.comⓆ CONTACTSQ │ contacts list │ 2 contacts
From a real run on the demo profile.
duplicates
quox contacts duplicatesA                                      B                                      Why         Suggested survivorct_mw2qlxb8_2233421bc6bd Priya Shah    ct_mw2qmopc_14ed3862e6b6 Priya Shah    name_org    ct_mw2qlxb8_2233421bc6bdⓆ CONTACTSQ │ contacts duplicates │ 1 pairs
From a real run on the demo profile.

A pair is suggested when two contacts share an identifier, or share a name at the same organisation (name_org, as here).

merge
quox contacts merge ct_mw2qlxb8_2233421bc6bd ct_mw2qmopc_14ed3862e6b6✖ Merging moves identifiers, history and facts onto the survivor. Re-run with --yes to confirm (undo: `quox contacts unmerge <merge-id>` within 30 days).quox contacts merge ct_mw2qlxb8_2233421bc6bd ct_mw2qmopc_14ed3862e6b6 --yesmerge_id        mg_mw2qmxcj_e2073ee962afsurvivor        ct_mw2qlxb8_2233421bc6bdmerged          ct_mw2qmopc_14ed3862e6b6undo_until      2026-12-04T23:18:36.883Zidentifiers     2provenance      1touchpoints     0edges           0edges_dropped   1leases          0facts           0Ⓠ CONTACTSQ │ contacts merge │ mg_mw2qmxcj_e2073ee962af (undo: quox co…
From a real run on the demo profile.

The first id is the one that stays. Without --yes the merge refuses and tells you what it would do. The counts say what moved onto the survivor: here the second contact’s two identifiers and where it came from. The merge can be undone until the undo_until date.

show and resolve
quox contacts show ct_mw2qlxb8_2233421bc6bdid             ct_mw2qlxb8_2233421bc6bdname           Priya Shahkind           personstatus         activerelationship   customeridentifiers    email:p•••@harbourdental.example phone:•••••••958 email:p...flagsgiven          Priyafamily         ShahⓆ CONTACTSQ │ contacts show │ ct_mw2qlxb8_2233421bc6bdquox contacts resolve +442079460958ID                          Name          Kind      Status    Relationship    Identifiersct_mw2qlxb8_2233421bc6bd    Priya Shah    person    active    customer        email:p•••@harbourdental.example phone:•••••••958 email:p...Ⓠ CONTACTSQ │ contacts resolve │ Priya Shah
From a real run on the demo profile.

resolve is caller ID: give it a phone number or an email address and it returns the contact it belongs to, and says if that number or address is suppressed. To add another number or address to a contact later, use quox contacts add-id <id> --phone <number> --label work.

Lee Grant was added earlier in the same way as Priya.

archive
quox contacts archive ct_mw2qm5dp_0622349d2bc6Ⓠ CONTACTSQ │ contacts archive │ archivedquox contacts find LeeNo results.Ⓠ CONTACTSQ │ contacts list │ 0 contactsquox contacts find Lee --status archivedID                          Name         Kind      Status      Relationship    Identifiersct_mw2qm5dp_0622349d2bc6    Lee Grant    person    archived    customer        email:l•••@example.com phone:•••••••123Ⓠ CONTACTSQ │ contacts list │ 1 contacts
From a real run on the demo profile.

Archiving takes a contact out of everyday searches without erasing anything. --status archived finds them again. To erase someone for good, see Handle a privacy request.

Every change was made to your organisation’s ContactsQ records. Numbers and addresses were stored encrypted and never printed in full. The merge has its own id, and that id is what quox contacts unmerge takes to reverse it.

quox contacts show <id> after each step shows the record as it stands, and quox contacts find <name> shows who is in your contacts.

quox contacts unmerge <merge-id> restores both contacts exactly as they were, within 30 days of the merge. It needs an organisation admin, like the merge.