Contacts

Overview

Contacts are your hotline's phone book. Each contact holds a person's name, their phone numbers, a Personal ID and PIN they can type to identify themselves on the phone, any extra fields you defined, and the labels that group them.

Contacts matter for three things: the system greets a known caller by name in dynamic text-to-speech, an access check can let in only the people you list, and a broadcast dials the contacts in a label. You can build the list by hand, or import it from Excel in one go.


The Contact Card

Open Contacts in the sidebar and press New contact.

Basic Information

Phone Numbers

Press Add Phone Number for each number this person calls from. Rows can be dragged into order and collapsed.

Store numbers the way caller ID delivers them, country code first. A US or Canadian number is 1 plus the ten digits; a UK number starts 44.

Custom fields

This section only appears once you have defined at least one contact field in Settings (see Contact Fields below). Each field you defined shows here as its own input, typed the way you set it up: a text box, a searchable dropdown, a number box or a date picker.

Additional Information

Collapsed by default.

Organization

Collapsed by default.


The Contacts Table

The list page shows one row per contact. Use the column toggle in the toolbar to show or hide columns.

Column Notes
First Name Searchable and sortable. Shows the email underneath.
Last Name Searchable and sortable.
One column per custom field Off by default. Searchable.
Email Copy to the clipboard with one click.
Personal ID Copy to the clipboard with one click.
Phone Numbers Badges. Shows 2, then expands.
# of Numbers How many numbers this contact has. Sortable.
Labels Badges. Shows 2, then expands.
Active Off by default.
UUID, Created, Last Updated, Deleted All off by default.

Filters: Labels (pick several), Active Status (Active / Inactive) and Trashed.

Row actions: Edit, Delete, Restore, Force delete. Deleting moves the contact and all its phone numbers to the trash: "This contact and all its phone numbers will be moved to trash. You can restore it later from the Trashed filter." Bring it back with the Trashed filter and Restore. Force delete is permanent.

Drag to reorder. The table is sorted by your own order, and you can drag rows up and down to change it.

Global search. Press Ctrl+K (Cmd+K on a Mac) anywhere in the app and type a name, email, Personal ID or phone number to jump straight to a contact.


Labeling Several Contacts at Once

Tick the checkboxes next to the contacts you want, then open the bulk-actions menu.

The same menu also holds Delete, Force delete and Restore.


Import from Excel / CSV

Press Import from Excel / CSV on the Contacts page. This is the fastest way to load a membership list, a shul directory or a class roster.

What you can upload: an Excel .xlsx file or a CSV. The helper on the upload box says it plainly: "Excel (.xlsx) or CSV. The first row must be the column headings."

A few things worth knowing before you upload:

Matching your columns

After the upload you get one dropdown per field, and the system guesses which of your columns belongs where from the heading text:

Field Headings it recognizes Rules
First name name, first, full name, contact Must be mapped. Up to 255 characters.
Last name last, surname, family name Up to 255 characters.
Phone numbers phone, phone number, phones, mobile, cell, number, tel, telephone Several numbers in one cell are fine, separated by a comma, semicolon, slash, pipe or line break.
Email e-mail, email address, mail Must be a valid email.
Personal ID personal id, id, code, personal code, id number Non-digits are stripped. 1 to 10 digits.
Personal PIN pin, pin number, password Non-digits are stripped. 1 to 8 digits.
Labels label, group, groups, tags, tag A list in one cell, for example Students, Shiur A.
One per custom field the field's key, with or without underscores See the casting rules below.
Notes —
Address —
Active enabled, status Yes/no, true/false, 1/0.

If a guess is wrong, just change the dropdown. Anything you leave unmapped is ignored.

How phone numbers are cleaned up

Every phone cell is reduced to digits, so (917) 555-0000, 917-555-0000 and +1 917 555 0000 all become the same number. A bare 10-digit number that doesn't start with 0 gets a leading 1, because your numbers are stored with the country code. Anything shorter than 7 digits or longer than 15 is thrown away, which is what keeps an ID or amount column from being read as a phone number. Duplicates inside the same row are dropped.

Updating instead of duplicating

For each row the importer looks for an existing contact, in this order:

  1. A phone number in the row that already belongs to a contact on your account — that contact is updated.
  2. Otherwise, a matching email address — that contact is updated.
  3. Otherwise, a new active contact is created.

So re-importing a corrected list updates the people you already have rather than doubling them up. Phone numbers that are already in use anywhere on the account are not created a second time, so numbers never duplicate either.

Blank cells never wipe what you already have. If a row leaves the email or a custom field empty, the value already on the contact stays. To clear a value, edit the contact.

Labels in the sheet

Label names are matched ignoring case, so shiur a finds Shiur A. A label that doesn't exist yet is created automatically. Labels in the sheet are added to the contact; labels the contact already has are never removed by an import.

Custom fields in the sheet

Each field is cast to fit the type you gave it in Settings:

When it finishes

You get a notification: "Your contact import has completed and 412 rows imported." plus, if anything went wrong, "3 rows failed to import." Failed rows are listed with the reason, so you can fix them and re-upload just those.


Download to Excel

Press Download to Excel on the Contacts page and give the file a name (it suggests contacts). The columns come out in this order:

First name, Last name, Phone numbers (comma-separated), Email, Personal ID, Labels (comma-separated), one column per custom field, Notes, Address, Active (Yes / No).

The headings are exactly the ones the importer recognizes, so export, edit and re-import round-trips cleanly. That is the easiest way to do bulk work:

  1. Download to Excel.
  2. Fix names, add phone numbers, fill in a custom field, add labels in the Labels column.
  3. Save and import the file back.

Every row is matched on its phone number (or email), so your edits land on the existing contacts.


How a Caller Is Matched to a Contact

When a call comes in, the system works out who is calling in this order:

  1. Someone who identified themselves at an access check. If the caller entered their phone number or Personal ID at an access check and passed verification, they are that contact for the rest of the call, no matter which phone they dialed from. Exams, list joins and later checks all count for that person.
  2. Caller ID. Otherwise, the caller's number is matched against the phone numbers on your contacts. The match tolerates a leading + and a leading 1, so a number stored as 18455551234 is still found when the carrier delivers +18455551234.
  3. Nobody. If neither matches, the call runs anonymously. Name placeholders fall back to "there", and a label-based access check finds no labels.

This is why it pays to store numbers with the country code and to turn on Let unrecognized callers identify themselves on an access check when your callers ring from numbers you don't have on file.


Contact Fields

Extra fields are defined once, on the Settings page, under Contact fields. Think of them as columns you add to every contact: which yeshiva someone learns in, a membership number, a seat number, a renewal date.

Press Add a field and fill in:

Drag the rows to reorder them, collapse the ones you are not working on, and press save. You get "Contact fields saved — Your contacts now have these extra fields."

Renaming is safe. Each field quietly keeps a stable internal key from the first time you saved it, so changing the Field name later never orphans the values already stored on your contacts. It does mean the placeholder keeps its original spelling; check the Contacts table heading against your text-to-speech script after a rename.

Where your fields show up

Once defined, a contact field appears everywhere a contact does:

Fields in dynamic text-to-speech

Every contact field is also a {placeholder} you can drop into any dynamic text-to-speech script. A field named Yeshiva becomes {yeshiva}; a field named Seat Number becomes {seat_number}. An empty field simply reads as nothing.

These built-in placeholders are always available too:

Placeholder What it says
{first_name} The caller's first name, or "there" if unknown
{last_name} The caller's last name
{full_name} First and last name, or "there" if unknown
{phone_number} The number the caller is calling from
{called_number} The number they dialed
{account_name} Your account name
{date} Today's date, for example September 23, 2026
{day} The day of the week, for example Wednesday
{time} The current time, for example 9:41 AM

Dates and times use your account timezone. A placeholder the system doesn't recognize is left in the script exactly as typed, so a typo is easy to spot. Full details are in Recordings, uploads & text-to-speech.


Tips