Your AI Connector Docs

Custom Fields, Lead Profile & Notes

Every contact has the basics — name, phone, email, channel. But you usually know a lot more about the people you talk to: their company, their birthday, what they bought last time, which conference they came in from. This page covers the extra pieces of information you can attach to a contact, and where each one lives.


Overview

What Best for Where it lives
Custom Fields Short structured facts (company, position, birthday, plan, etc.), each with a type: text, number, date, dropdown or checkbox A list of key/value pairs on the contact
Notes (= Lead Profile) A free-form description of who this person is and why they matter — read by the AI when personalising replies A single text area on the contact
Status Tracking where a contact is in their journey, including marking them spam A single value on the contact

If you’ve used the app for a while: what used to be two separate things — a long-form “Lead Profile” and a stacking list of dated Notes — are now merged into one field, labelled Notes on the contact’s full record. There’s no longer a separate timestamped notes log with titles; everything you’d write about a contact goes in this one box. See Notes below for what that means in practice.


Defining Custom Fields

Custom fields are reusable across all your contacts. Once you create a field like company, it becomes part of your account’s schema and appears on every contact’s edit form.

Field types

Every custom field has a type, and the type decides what a field can hold and how it is entered — by you in the app, by an import or the API, and by the AI when it saves something it learned in a chat:

Type What it holds How it is entered
Text Anything — the default, and what every field created before September 2026 is A text box
Number A number such as 42 or 19.99 A number box
Date A calendar date, always stored as YYYY-MM-DD (for example 1990-02-01) A date picker with month and year dropdowns, so a birthday decades back is two picks
Dropdown Exactly one of the options you define (for example Newsletter, Referral, Ad) A dropdown of your options
Checkbox Yes or no A dropdown with Yes, No, or empty for not set

A typed field is validated everywhere it is written: the contact form won’t save February 1st into a Date field, the API answers with an error that names the field and what it expects, a file import skips that row and lists it on the result screen, and the AI is told the format up front and gets a correction back if it still sends something else. Values that arrive in a recognisable human form are converted for you — 01/02/1990 becomes 1990-02-01 following your account’s date format (day-first or month-first, from Settings → Account), yes becomes a ticked checkbox, newsletter is stored as Newsletter if that is how you spelled the option. Because every date is stored the same way, “birthday before 1990-01-01” in a smart list or an automation condition compares real dates instead of three spellings of the same day.

Creating and managing fields

  1. In the left sidebar, click Contacts.
  2. Open any contact and click Edit (or click New contact).
  3. In the Custom Fields section, type a name into Add a field, pick its type (Dropdown asks for the options), and click Add. The field is created for the whole account and appears on this contact straight away.
  4. To change a field’s type or options later, rename nothing — click Manage fields in the same section. The manager lists every field with its type; pick a new type, edit a dropdown’s options, or remove a field from the list.

Changing a type keeps existing values as they are. If birthday held 1 Feb 1990 as free text before you switched it to Date, that value stays until the next time it is edited (by you, the API, or the AI), at which point it has to be a real date. Nothing is rewritten behind your back. To convert the old values in one go, use Normalise existing values below.

Normalising existing values

After you give a field a type, older values keep the spelling they were saved with. A Date field can still hold 01/02/1990 on one contact and 1 February 1990 on another, and a smart list or automation date rule only matches dates stored as YYYY-MM-DD. Normalise existing values converts them all at once.

  1. Open Manage fields (see above). Every Date, Number, Dropdown and Checkbox field has a Normalise existing values link under it. Text fields don’t, because text is stored exactly as written.
  2. Click it. Nothing changes yet: the app checks your contacts and tells you how many values will change, shows one example (for example "01/02/1990" becomes "1990-02-01"), and lists the values it can’t read.
  3. Click Change N values to convert them, or Cancel to leave everything as it is.

Good to know:

  • Only values that can be read as the field’s type are changed. Dates written with slashes follow your account’s date format (day first or month first, from Settings → Account). A value that can’t be read, such as next spring in a Date field, is left untouched and shown in the list so you can fix it by hand on that contact.
  • Values that are already in the right format, and empty values, are not touched. Running it twice is harmless.
  • If you just changed a field’s type, click Save fields first. The link only appears once the new type is saved.
  • It works on all contacts of the account you are in. On an agency setup, run it inside the sub-account that owns the contacts.
  • The same action is available in the API as POST /users/me/custom-fields/{key}/normalize, with dry_run to preview.

Removing a field from the list hides it from the edit form and from the AI’s field picker; values already stored on contacts are kept, and adding the same name back shows them again. To wipe a field’s values from every contact for good, use the API’s Delete a custom field call.

Naming rules:

  • Field names must use lowercase letters, numbers, and underscores only, and must start with a letter or underscore (for example lead_source, not Lead Source).
  • Unaccented English letters only — spaces, capitals and accented or non-Latin characters are rejected. Even if the rest of your account is in another language, name the field cumpleanos or birthday, not cumpleaños. Only the name is restricted; the value you store in it (and a dropdown’s options) can be in any language.
  • An account can have up to 50 custom fields; a dropdown can have up to 100 options.
  • Pick the name carefully — once a field is used in a template or AI agent you cannot delete it without first removing those references.

Filling In Custom Fields on a Contact

  1. In the left sidebar, click Contacts.
  2. Click a contact’s row to open the quick-view panel, then click Edit — or click New contact to start a fresh one.
  3. In the contact form, find the Custom Fields section. Every field on your account is listed with the control that matches its type: a text or number box, a date picker, a dropdown of your options, or a Yes/No dropdown for a checkbox field.
  4. Fill in the values, then click Save on the form to store them. A value that does not fit the field’s type is flagged on the spot and the form does not save until it is fixed.

Fields that already have a value show up on the quick-view panel and the full contact record as read-only rows — to change a value, reopen Edit.

Clearing a value: once a field holds something, a small × appears inside its box on the edit form. Click it to clear that value for this contact only; the field itself stays on your account and on every other contact. Removing a field from every contact and your account’s schema entirely still isn’t possible while it’s referenced by a template or AI agent.


Letting the AI Fill Custom Fields For You

Your AI Agent can save information straight into custom fields as it comes up in the conversation — a birthday, a partner’s name, a dietary requirement, a table preference — so you can use it later in a broadcast or a follow-up. This is off by default, and it only ever writes into fields you have explicitly picked.

Two things have to be in place, and both are needed — this is the most common reason people find that nothing was saved:

1. Create the fields first. The AI can only write into fields that already exist on your account. Add them from a contact’s edit form (see Filling In Custom Fields on a Contact above), or straight from the Agent in step 4 below, which is the quick way on a new account that has no contacts yet, — for example customer_birthday, partner_name, dietary_notes. Remember the naming rules: lowercase letters, numbers and underscores only.

2. Give the Agent permission and pick the fields.

  1. Click AI Agents in the sidebar and open the Agent.
  2. Go to the AI abilities tab.
  3. Under Contact updates, turn on Allow AI to collect extra info.
  4. A card titled Collect extra info during booking appears, listing your custom fields. Turn on the toggle next to each field the AI is allowed to fill in — creating a field is not enough on its own, and any field left off is silently ignored. Need a field that is not in the list, or starting with none at all? Click Manage custom fields on the same card, add the field with its type, and save: it appears in the list right away, switched off, and it is available on every contact from then on.
  5. Click Save, then Publish the Agent. Changes sit in the draft until you publish, so an unpublished change won’t affect live conversations. Publishing pushes every pending draft change live, not only this one, so glance over the other tabs first if you’ve been editing.

Good to know:

  • The AI is told each field’s type. For a Date field it converts whatever the contact says (“el 1 de febrero del 90”) into 1990-02-01 before saving; for a Dropdown it can only pick one of your options; for a Checkbox it saves yes or no. If it still sends something that doesn’t fit, the save is refused with the expected format and the AI asks again or corrects itself — an unparseable value never lands on the contact.
  • It works throughout the conversation, not only when booking. Despite the card’s wording — bookings are where the feature started — the AI saves a value the moment the contact mentions it, whether or not an appointment is involved. You don’t need bookings switched on at all.
  • Each field can be marked required. Required only means “must be collected before the AI confirms an appointment” — it never blocks a normal conversation, and it does nothing on an Agent that doesn’t take bookings.
  • The AI saying it “noted” something is not the same as saving it. If the field isn’t created and switched on, the AI can still reply politely that it has taken note, but nothing lands on the contact. Check the contact record to confirm a value actually saved.
  • Tell the Agent when to ask. In the Agent’s instructions, describe when each field applies (“if the guest mentions an allergy or diet, save it to dietary_notes”). The AI reads that in plain language, so it won’t interrogate everyone with the same list.
  • Nothing is backfilled. Only conversations from the moment you publish are captured — details already mentioned in past chats are not filled in retroactively.
  • Set this up on the account that owns the contacts. Custom fields belong to a single account, so on an agency setup create them inside the sub-account whose Agent is doing the talking, not on the parent agency account.
  • Free-form notes belong in a field too. The conversational AI cannot write into a contact’s Lead profile / Notes box (see below) — that one is for you and your team, though Automations and the API can write it. If you want the AI itself to record something like “asked for a coeliac dish”, make it a custom field such as dietary_notes.

What the AI Can Read During a Conversation

If you’re deciding where a piece of information should live so the AI can act on it while chatting, this is the difference that matters:

  • Custom fields: the AI reads them on every reply. All of a contact’s custom field values are available to the AI throughout the conversation — however the field was filled in (by you, by the AI earlier, through an import or the API). So a rule in your Agent’s instructions like “greet returning customers by their preferred_barber” works, because the AI can see the value at that moment.
  • Tags: the AI does not see them while chatting. Tagging runs as a separate step after the AI’s reply is sent — the AI applies tags based on your descriptions, but it is not shown which tags a contact already carries during the conversation. Instructions like “if the contact has the VIP tag, offer the discount” will not work.

The rule of thumb: anything the AI should read and act on mid-conversation goes in a custom field. Tags are for everything that happens around the conversation — filtering and segmenting contacts, targeting broadcasts, and firing tag webhooks into your other systems the moment the AI applies one.


Bulk-Loading Custom Fields

The import wizard maps spreadsheet columns straight onto custom fields. A column whose header is a field’s name (capitals and accents don’t matter) is matched for you, any other column can be pointed at a field by hand, and New custom field creates a field from a column during the import.

Adding brand-new contacts? Put one column per custom field in your file and import it. New contacts arrive with those fields already filled in.

Filling in contacts you already have?

  1. Export your contacts: the contacts CSV export has one column per custom field.
  2. Fill in the values in your spreadsheet. Keep the phone number column as it is, because that is how contacts are matched.
  3. Import the file with Update existing contacts switched on in the Review step. Each row updates only the custom fields that have a value in the file; empty cells leave the current value alone.

The API’s bulk contact-import endpoint takes the same values as a custom_fields object on each record, if you’d rather do it from your own tooling (see API Access).


Notes (= Lead Profile)

On a contact’s full record (click Open full record from the quick-view panel), the Notes panel is a single free-text box — the same underlying field also referred to as “Lead Profile” elsewhere. In the contact’s Edit form the very same box is labelled Lead profile, described as “Internal notes about this contact”, so don’t go hunting for a second field. Write anything relevant to the conversation: business type, pain points, company size, recent activity, anything that helps personalise outreach.

How the AI uses it: in a message template — a broadcast message, a follow-up, an AI Agent’s instructions — you can include a placeholder like {{personal_context|write a one-line opener that references their business}}. When that template is sent to a specific contact, the AI reads their Notes and writes a personalised line using what’s there. If a contact has no Notes, the placeholder is simply removed from the message.

The AI does not write this for you — you or your team fill it in. Think of it as the cheat sheet you’d want a sales rep to read before picking up the phone. If you want the AI itself to record something it learns in a conversation, use a custom field instead — see Letting the AI Fill Custom Fields For You.

Editing is straightforward: type in the box, then click Save note (or Discard to drop unsaved changes). There’s no separate title or date per entry — it’s one running text block per contact, so if you want a dated log, prefix each addition with the date yourself.

Next to Notes, the contact side panel in Chats has a Research section. It shows the brief an Agent writes automatically when Research new contacts before the first reply is on, and a Research now button to run or refresh it by hand.


Status

Every contact has a Status badge showing where they are in their journey:

Status What it means
New Just came in, not yet engaged.
Engaged Actively in conversation.
Lead Showing buying interest.
Customer Converted.
Churned Was a customer, no longer active.
Spam Hidden from your main lists; the AI bot will not engage with them, Do Not Disturb is turned on, and they’re excluded from broadcasts.

Click the Status badge directly in the contacts table to change it inline — for any status except Spam, which you set through the bulk Mark as spam action (and its confirmation) since it has those extra side effects. Unmarking spam is available the same way, as Unmark as spam.


Assigning a Contact to a Team Member

Ownership assignment — giving one teammate a contact so others don’t reply by accident — is set from the Chats screen rather than the Contacts page: open the conversation and use the assignee control there. See Chat Interface for the full walkthrough. Only account owners and users with the right permission can change an assignment.


Using Custom Fields in Broadcasts and Templates

Custom fields earn their keep inside outgoing messages. Anywhere you can write a message — broadcast messages, WhatsApp templates, AI Agent instructions — you can drop in a placeholder like:

Hey {{first_name}}, hope things are going well at {{company}}!

When the message goes out, {{first_name}} and {{company}} are replaced with the values from each contact. If a contact doesn’t have that field filled in, the placeholder is left blank.

Some tips:

  • Use lowercase, underscore-style names — the placeholder must match the field name exactly ({{company}}, not {{Company}}).
  • Typed fields render the way you’d write them — a Date field comes out in your account’s date format (01/02/1990 or 02/01/1990, per Settings → Account), a Checkbox as Yes or No, a Dropdown as the option’s exact wording.
  • Built-in fields work too — {{first_name}}, {{last_name}}, {{email}}, and {{phone_number}} work without setting them up as custom fields.
  • Combine with Notes — for AI-personalised lines, use {{personal_context|your instruction}} instead of a fixed custom field; the AI writes something fresh based on the contact’s Notes.
  • You can’t delete a field that’s in use — if a template uses {{company}}, the system blocks deleting company until you remove it from those templates.

Need Help?

A good rule of thumb for what goes where:

  • A short, structured fact you’ll filter or merge on → custom field.
  • A paragraph of context for the AI or your team to read → Notes.
  • Who owns the conversation → the assignee, set from Chats.

Still stuck? Reach out to support and we’ll help you set it up.


Next Steps