Tricky points to know
The Contacts module contains a few subtle behaviors that can surprise the first time. This page groups them to avoid bad surprises and unnecessary support tickets.
1. Contact without email or phone
You can create a contact with only a last name and first name. No contact method is technically mandatory.
Consequence: this contact will be unreachable for all your campaigns (SMS, email, push). They will exist in your base, count in your stats, appear in the map if you give them an address, but will never receive communication.
How to audit: in the advanced search, Contact details section, activate the filters:
- Has an email = No
- Has a phone = No
You get the list of contacts to complete (or to archive if they are no longer relevant).
2. Three distinct states: new, archived, deleted
A contact can be in one of these states:
| State | Description | Visibility |
|---|---|---|
| New | Automatic flag on any contact that has just been created or reactivated. Disappears at the first access in a profile. | Visible everywhere, with a "new" badge. |
| Archived | Voluntarily hidden contact (for example a congregant who has moved). | Hidden by default from current lists. To see them, activate the Archived = Yes filter in advanced search. |
| Deleted | Soft delete — the contact is in the "trash". | Hidden from all views. Manually recoverable. |
3. Merge: irreversible and c1 disappears in favor of c2
The merge of two contacts (from the profile, Merge contacts modal) is definitive. The opened contact (c1) is overwritten by the contact chosen in the menu (c2) — c1 disappears.
Good use of merge:
- You find two profiles of the same Yossi Cohen? Open the one that is more recent or more complete, and merge it with the other.
- If you hesitate, first export both profiles to CSV before merging.
4. Hazkara vs Birthday: two distinct types
A contact's reminders can be of two types stored in the same field:
- ANNIV — birthday of a living person.
- HAZKARA — annual commemoration of a deceased.
Both have the same structure but are functionally distinct: the hazkara is used for death reminders, the birthday for birth reminders. Don't mix them in usage — the interface exposes them via two different modals (Add a hazkara vs Add a birthday).
5. Custom fields: no uniqueness
Two contacts can have the same value in the same custom
field, and it's deliberate. Example: a text field car
can have the value Renault on a hundred different contacts — it's
expected.
Consequence on search:
- Include filter on a common text field → many results, normal.
- Equal filter on a single value of a text field → returns all contacts with exactly this value, not one. Don't confuse with a search by unique identifier.
6. Primary email/phone vs secondary
A contact has two levels of contact details:
| Field | Type | Usage |
|---|---|---|
email (string) | Primary email | The one used by default for campaigns |
emails[].email (array) | Secondary emails | Additional addresses (personal, business, former) |
tel (string) | Primary phone | The one used by default for SMS |
tels[].number (array) | Secondary phones | Additional numbers |
Practical consequences:
- The Email contains filter matches any of the emails (primary or secondary).
- The Has an email filter returns Yes as soon as there is at least one email (primary or secondary).
- During an import with mapping to Primary email, you overwrite the existing primary email; to add an email without overwriting, map to Secondary email.
7. Addresses and geolocation: primary vs secondary
A contact can have:
- A primary address (fields
adresse,postal,ville,pays). - Secondary addresses (
adresses[]array, e.g.: office, second home).
Each address has its own geolocation memorized. The primary address
is identified internally by MAIN, the secondary ones by their
unique identifier.
Consequences on the map:
- A contact will appear as many times as geolocated addresses.
- Its route (tour) is attached to a specific address, not to the contact as a whole: the same contact can be on route A for their home and route B for their office.
8. Search: insensitive to case and accents
Text search and filters are insensitive to case and
accents. This is made possible by the French MongoDB collation
(locale: fr, strength: 1).
Concretely:
| You type | Also finds |
|---|---|
cohen | Cohen, COHEN, Cöhen |
elie | Élie, ÉLIE, élie |
michael | Michaël, MICHAËL, Mickaël (close but different) |
Be careful still: michael ≠ mickael (one has an h, the other a
k). The normalization does not correct spelling, only case and
diacritics.
9. CSV export: dynamic columns depending on your organization
When you export the results of a search, the columns may vary according to the active filters:
- Always present: Last name, First name, Email, Phone, Address, Postal code, City, Country.
- Added if financial filter active: Total donation (€), Number of donations.
For more advanced exports (custom fields, categories,
families…), go through the Exploration module
(/app/explorer) which allows you to build a custom export.
10. Saved filters: nested structure
A saved search stores its filters in a complex nested structure (object with sub-objects, Include/Exclude/Equal modes, date ranges, number ranges…).
Consequences:
- When you load a search, the filter panel completely re-initializes, which may take a fraction of a second.
- If you modify even a single filter, the modified badge appears immediately.
- The technical export or sharing of filters (URL, copy-paste) is not supported — go through a shared saved search.
11. Deceased contacts: linked fields
Marking a contact as deceased activates several linked fields:
deceased(boolean) — true if deceased.deceasedDate— date of death.deceasedHour— time of death.deceasedPere,deceasedMere,deceasedLocation— additional info used for hazkara reminders.
A hazkara reminder is automatically prepared: it is synchronized with the date of death and calculated according to the Hebrew calendar.
12. Multiple organizations possible (rare case)
Technically, a contact can belong to multiple organizations
(organisation field that can be an array). This is an
exceptional case reserved for pooling scenarios (for example
two communities sharing a common contact file).
If this is not your case, ignore this point. If you are in this configuration, know that modifications made from one organization propagate to all the others that share the contact.
13. Deletion of a category: without propagation
Deleting a category at the organization level (Preferences) does not remove this category from the contacts that carry it. The contacts keep the category's string in their profile, but it no longer appears in the autocompleted lists.
Consequence: you may no longer see the category in the search by selection, but it still exists in the profiles.
To clean up: group action for massive category deletion from advanced search, or individual cleanup in each profile.
Recap: the 5 most frequent
If you only have to remember five pitfalls:
- Archived ≠ deleted — an archived is just hidden, not erased.
- Irreversible merge — the opened contact disappears in favor of the selected one.
- Reactivatable soft delete — a "deleted" contact reappears automatically if you try to recreate it.
- Primary email ≠ all emails — distinguish
email(string) fromemails[](array). - Search insensitive to case + accents — handy but does not correct spelling.