Customers
Contacts
Manage emails and phone numbers across your customers and branches in one place.
Contacts are the email addresses and phone numbers you use to reach your customers. The Contacts page gives you a single view of every contact across your wholesaler — attached to a customer, attached to a specific branch, or unattached.
Quick Overview: Open Contacts from the main menu, search by value or by customer, and create or edit individual contacts inline. For large lists, use the bulk importer.
What a Contact Is
| Field | Notes |
|---|---|
| Type | email or phone |
| Value | The address or number (phones are normalized to international form) |
| Description | A short label (e.g. "Accounts payable", "Warehouse manager") |
| Linked to | A customer, a customer branch, or nothing (an unattached contact) |
| Creator | The user who created the contact (from the UI or via the importer) |
Unattached contacts cover cases like a phone number that called you before you matched it to a customer, or a generic mailbox you want to keep on file.
Finding a Contact
Open the Contacts page from the main menu. The list shows the most recent contacts first.
Search and Filters
| Filter | What It Does |
|---|---|
| Type | Show only emails or only phones |
| Contact | Free-text search on the value or the linked customer's name / dms_id |
| Customer | Pick a specific customer or branch — narrows to contacts linked to that record |
| Description | Free-text search on the description field |
Phone search matches by the end of the number — useful when a customer reads back "ending in 4567". Email search matches anywhere in the address.
Adding a Contact
- Click Create Contact at the top of the list
- Pick the type (email or phone)
- Enter the value — emails are validated, phones are normalized to international form
- Pick the customer or branch to link the contact to
- Add a description (optional)
- Click Save
The form always asks for a customer or branch. To add an unattached contact, use the bulk importer.
Editing or Deleting
Use the actions at the end of each row:
- Edit — Change type, value, description, or who the contact is linked to
- Delete — Removes the contact (soft delete; the system remembers it and can restore it on re-import)
If you try to save a contact that matches one you previously deleted, you'll be prompted to Restore the old one instead of creating a duplicate.
Bulk Import
For more than a handful of contacts, use the importer.
- Open the Contacts list
- Click the import action and choose Import contacts
- Upload a CSV with the columns below
- Map columns, review, and run
| Column | Required | What It Does |
|---|---|---|
type | Yes | email or phone |
value | Yes | The address or number |
description | No | Free-text label |
customer_dms_id | No | Identifier from your source system — links to a customer |
customer_branch_dms_id | No | When set, links to a specific branch under the referenced customer (requires customer_dms_id) |
How Rows Resolve
| Row pattern | Result |
|---|---|
| Both dms_id columns empty | Unattached contact |
customer_dms_id matches a customer | Linked to that customer |
customer_dms_id + customer_branch_dms_id both match | Linked to that branch |
customer_branch_dms_id set but doesn't resolve | Row is rejected (no silent fallback) |
What Re-Importing Does
The importer is idempotent. Re-running the same file:
- Does nothing for rows that already exist
- Updates the description if the file's value is different from what's stored
- Restores a contact you previously deleted
- Cleans up any unattached contact whose value gets linked to a customer
You'll never end up with duplicates from re-importing.
Permissions
| Action | Required Permission |
|---|---|
| View Contacts list | View customer contacts |
| Create a contact | Create customer contacts |
| Edit a contact | Update customer contacts |
| Delete a contact | Delete customer contacts |