Contact Fields
Design the shape of every guest record — per channel — so your campaigns target the right people and your team sees consistent context on every chat.
TL;DR
- What it is — a builder for the custom fields that appear on every guest record for a given channel. Pick the fields, their types, and which ones are required.
- Who it's for — account owners and admins, before a campaign launch or when onboarding a new channel.
- Top outcome — clean, structured guest data that actually makes segmentation and reporting reliable — instead of a grab-bag of free-text that nobody trusts.
At a glance
| Plan tier | All paid tiers. |
| Who can design templates | Account Owner and Admin. |
| Channels | One active template per channel. A WhatsApp number and an Email inbox can have completely different templates. |
| Integrations | Consumed by the Contacts workspace (rendering and editing), Bulk Import (column mapping and validation), Campaigns (audience filters and message variables), and Home / Unified Inbox (the guest-details panel on every conversation). |
| Top limits | One active template per channel. No cap on fields per template. No cap on options within a dropdown. |
| API | Yes — available under the partner API. |
How to find it
Breadcrumb: Settings → Contacts.
Direct URL: https://app.lodgestory.com/crm/settings/contacts
The sidebar also has a Contacts entry that opens the workspace module for viewing and editing contact records. The Settings → Contacts path is where you design the shape; the workspace Contacts is where the data lives.
[SCREENSHOT: contact-fields-nav.png — Settings sidebar with Contacts highlighted]
What is Contact Fields?
The problem it solves
A contact is only as useful as the data you have on it. If every channel uses free-text custom fields without any structure, two things happen. First, the data drifts — one team member writes "VIP: yes", another writes "Tier: Gold", a third uses "vip = Y/N". Second, your campaigns target the wrong people because the segment was built against the first team member's convention.
Contact Fields fixes this by making your guest-record shape explicit, per channel, and enforced every time data is written. You design the fields once, pick the types, mark the required ones, and Lodgestory validates every contact against the shape — on single create, on edit, on bulk import. Downstream, your campaigns, merges, and reports all read against the same structure.
What you get
- A template per channel. Each channel — a WhatsApp number, an email inbox, a web chat — has its own independent template. A B2C hospitality WhatsApp template can diverge from a B2B email template without stepping on each other.
- Eight field types. Text, long text, number, dropdown, checkbox, radio, date, and multi-select — all with a drag-and-drop builder and a live preview.
- Validation at the data boundary. Required-field enforcement, option-list membership checks, and type validation — all applied when contact data is written, so bad data never lands.
- Live preview. Every change in the builder shows up instantly in the right-hand preview, rendered the same way it will appear on a real guest record.
- Drag-to-reorder. Reorder fields with the grip handle; the order is the order your team sees everywhere downstream.
- Retire cleanly. Toggle a template inactive to retire it. Existing contacts keep their values; new contacts don't see it in the picker.
How it's different
- Per-channel, not workspace-wide. Each channel runs its own template. Multi-brand operators can capture different data per brand without compromise.
- Shape-enforced everywhere. The same template drives the contact detail drawer in the Contacts workspace, the column mapper in Bulk Import, and the audience-filter builder in Campaigns. Design once, consistent everywhere.
- Eight types with a live preview. Most custom-field editors are a JSON configuration screen for engineers. Lodgestory's builder is a proper form designer — drag to add, click to edit, preview the form side by side.
- One active template per channel. No confusing multi-template hierarchy. Each channel has the template it has; updating replaces it in place.
Customer scenarios
- Pre-campaign data readiness. Marketing wants to launch a VIP-tier promotion. The admin opens Contact Fields, picks the WhatsApp channel, adds a Dropdown field called VIP tier with options None, Silver, Gold, Platinum, and marks it required. A bulk import tags the existing VIP list. The campaign can now filter audience by tier. Total time: about ten minutes.
- Multi-brand hospitality onboarding. A group with three brands runs three WhatsApp channels. Brand A captures Booking reference and Loyalty number. Brand B captures Check-in date and Property code. Brand C captures Event attended and Guest VIP status. Each channel carries its own template; the same guest on two brands has separate, appropriate data on each.
- Data hygiene sweep. An audit shows that the current template has 14 fields, half of which are unused. The admin removes the dead fields. Future contacts skip them. Existing contact records keep their old values silently — no migration needed — and the detail drawer stops rendering the retired fields on edit.
How it fits with the rest of Lodgestory
This module is upstream of every part of Lodgestory that cares about guest data:
- Contacts — the template renders as the custom-fields section of the guest detail drawer and as the column picker in the list.
- Bulk Import — the CSV column mapper reads the template's field list; validation runs against the template's types and required flags.
- Campaigns — custom-field values are available as variables inside messages and as filter criteria in audience builders.
- Home / Unified Inbox — the contact section of the guest-details panel renders template fields for the conversation's contact.
[SCREENSHOT: contact-fields-landing.png — Template list with the builder open on the right]
Core concepts
| Term | What it means |
|---|---|
| Template | A named set of custom fields attached to one channel. One active template per channel. |
| Field | One entry in a template — a label, a type, a required flag, and (for some types) an options list. |
| Required field | A field that must have a value on every contact saved. Empty, null, or blank values are rejected. |
| Options | The allowed values for a dropdown, multi-select, checkbox group, or radio group. |
| Active template | The single template currently serving a channel's detail drawer, import mapping, and audience filters. |
Quick Start — design and deploy a template in five minutes
Step 1 — Open Contact Fields
Settings → Contacts.
[SCREENSHOT: contact-fields-qs-1-list.png]
Step 2 — Click Create Contact Template
The screen switches to the builder — a two-pane layout with template configuration on the left and a live preview on the right.
Step 3 — Pick the channel
In the left pane, open the Channel dropdown and pick the channel this template applies to. The dropdown lists your connected channels with their display names and numbers.
[SCREENSHOT: contact-fields-qs-3-channel-picker.png]
Step 4 — Add your first field
Click + Add Field in the left pane. A dialog opens with:
- Field type — text, long text, number, dropdown, checkbox, radio, date, or multi-select.
- Label — what your team sees on every guest record.
- Placeholder — optional hint text inside the input.
- Required — if on, the field must have a value on every contact.
- Options — for dropdown, multi-select, checkbox, and radio: the allowed values.
Start with a Text field labelled Booking reference. Click Add Field. The new field appears in both the field list on the left and the preview on the right.
[SCREENSHOT: contact-fields-qs-4-add-field.png]
Step 5 — Add a dropdown
Click + Add Field again. Pick Dropdown, label it VIP tier, mark it Required, and add options None, Silver, Gold, Platinum. Add Field.
[SCREENSHOT: contact-fields-qs-5-dropdown.png]
Step 6 — Reorder
Drag the VIP tier row above Booking reference using the grip handle. The preview updates instantly.
Step 7 — Save
Click Save Template. You're returned to the template list; a toast confirms the save.
What's next
- Match your CSV column headers to the new template in Bulk Import.
- Target the new fields in a Campaign.
- Preview how they render on real guest records in Contacts.
How it works
Each channel has one active template. That template drives every surface that displays or captures custom contact data — the detail drawer, the import mapper, the campaign audience builder, and the guest-details panel in the inbox.
- An admin opens Settings → Contacts and either creates a new template or edits the existing one on a channel.
- They drag and drop fields in the builder. The right-hand preview shows exactly how the template will render on a real guest record.
- Saving replaces the channel's active template with the new version.
- From that moment on, every contact-write action — creating a guest, editing one, importing a CSV, a campaign filter — uses the new template's shape.
- Required fields must have a value. Dropdowns must match one of the template's options. Numeric fields must parse as numbers. Date fields must parse as dates.
- Existing contacts that were created under an older template keep their old values silently; they continue to render on the detail drawer using the new template. If an old value isn't defined in the new template any more, it stops displaying on edit (but isn't deleted).
Features in depth
The template list
Each template shows as a card with:
- Template name (or a placeholder if you haven't given it one).
- The channel it's attached to.
- The number of fields.
- The date it was last edited.
- Edit and Preview actions.
Edit opens the builder. Preview opens a read-only render of what the template looks like on a real guest record.
The builder
A two-pane layout.
Left pane:
- Channel picker — required.
- Field list — every field with a drag handle, an edit pencil, and a delete trash can.
- + Add Field — opens the field dialog.
- Save Template — writes your changes.
Right pane:
- Live preview — renders the template exactly as your team will see it on a real guest record.
Unsaved changes stay in your browser. Navigating away without saving loses them — we don't autosave.
Add and edit field dialog
The dialog fields:
- Field type (required) — one of the eight types.
- Label (required) — the human-readable name your team sees. Also used as the column header when importing CSVs.
- Placeholder — hint text inside the input.
- Required (toggle) — when on, empty values are rejected at save time.
- Options — visible only for dropdown, multi-select, checkbox, and radio. A dynamic list you can add to and remove from.
Changing a field's type clears its options if the new type doesn't need them. Saving the dialog updates the left-hand list and the right-hand preview.
Drag-to-reorder
Each row in the field list has a grip handle. Drag rows up and down to set the order. Save the template to persist the new order; reordering alone doesn't save.
Live preview
The right-hand preview renders the template using the same components your team sees on real guest records:
- Text — a standard input.
- Long text — a multi-line area.
- Number — a numeric input.
- Date — a date picker.
- Dropdown — a select with your options.
- Multi-select — a select that accepts multiple values.
- Checkbox — a stack of checkboxes, one per option.
- Radio — a radio group, one button per option.
Empty states tell you when something's missing:
- "Pick a channel to see the preview" until you've selected a channel.
- "Add some fields to see the preview" while the field list is empty.
Template preview
The Preview button on a template card opens a full-page render of the template with a submit button at the bottom. Useful as a final sanity check before a campaign launch. The submit button is a no-op on this view.
Retiring a template
Toggle a template inactive to retire it. Inactive templates disappear from the template list by default; the channel they were on becomes template-less (no custom fields on its contacts) unless you save a new one.
Roles and permissions
| Action | Account Owner | Admin | User |
|---|---|---|---|
| View templates | Yes | Yes | Yes (read only) |
| Create a template | Yes | Yes | No |
| Edit a template | Yes | Yes | No |
| Retire / reactivate a template | Yes | Yes | No |
| Preview a template | Yes | Yes | Yes |
Connections
- Contacts — the template renders as the custom-fields section on every guest record.
- Bulk Import — the CSV column mapper reads your template's fields; validation is enforced against the template's types and required flags.
- Campaigns — use template fields as variables inside messages and as criteria in audience filters.
- Home / Unified Inbox — the guest-details panel on every conversation renders the template fields for that conversation's contact.
- Connections — templates attach to channels; you need at least one channel connected to create a template.
Limits a user will run into
| Limit | Value |
|---|---|
| Active templates per channel | One at a time |
| Fields per template | No cap (practical limit: around 30 before the detail drawer gets long) |
| Options per field | No cap (practical limit: around 50 before pickers get unwieldy) |
| Templates per workspace (total, including retired) | No cap |
| Field label length | Practically limited by what looks reasonable in the form |
| CSV bulk import using this template | 5,000 contacts per request, 250 per batch — see Bulk Import |
Errors and FAQ
You might see
- "Pick a channel" — the builder needs a channel before saving.
- "Couldn't save template" — check your network and retry. If the error persists, open the field dialog to confirm every field has a valid type and label.
- "Field '<label>' is required" (when saving a contact) — a template field flagged required is empty on this contact. Supply the value, or mark the field optional in the template.
- "<label> must be one of: <options>" — a dropdown, multi-select, checkbox, or radio value doesn't match any option in the template. Pick from the list, or edit the template to add the new value.
- "<label> must be a valid email address" or "a valid phone number" — the value fails the email or phone format check.
FAQ
Why is my template editable, but my contacts don't show the new field?
The detail drawer renders the template currently attached to the contact. If a contact was created before this template existed, it may still be attached to an older one. Edit the contact to re-attach the current template, or re-import with the right template in mind.
Why isn't a newly-required field being enforced on older contacts?
Required-field validation runs when a contact is written — created or edited. Existing contacts keep whatever they had. To enforce the new requirement on your existing base, edit those contacts (the validator will surface missing values on save), or re-import them.
I renamed an option in a dropdown — why did my campaign filters break?
Options are stored as the strings you type. Renaming "Gold" to "Premium" means every contact with the old "Gold" value still carries "Gold" — which no longer matches "Premium". Before renaming, either export contacts with the old value and re-import with the new one, or add the new option alongside, migrate contacts, and then remove the old option.
Can I have two active templates on one channel?
No — one active template per channel. This is how the detail drawer, import mapper, and campaign filters know which shape to use.
Does Lodgestory auto-create a default template when a new channel is connected?
No. A newly connected channel has no template. Contacts created on that channel use only the standard fields (first name, last name, phone, email) until you add a template.
Can I export or import templates as JSON?
Yes, through the partner API. A file-based export from the UI is on the roadmap.
Can I version-control my templates?
Not directly today. updatedAt on each template tells you the last change, but Lodgestory doesn't keep a full version history. If you want snapshots, use the partner API to fetch and archive the template structure before major edits.
What happens to contacts if I delete a template outright?
Contacts that were attached to the deleted template lose that attachment; their existing field values stay on the record but don't render on edit until the contact is re-attached to another template. Deleting a template is a clean operation for retirement — it doesn't wipe contact data.
The builder shows eight types — are there any others?
The eight types cover every typical use case. If you need more specialised types (for example strict email or phone format validation on a field), get in touch with support — we can set those up against your workspace.
API
Contact Fields is available via the Lodgestory partner API for organisations that want to manage templates programmatically. Ask your Lodgestory point of contact for credentials and the current reference; endpoints cover creating templates, updating the field list on an existing template, listing active templates for your workspace, and retiring a template by toggling active.
Changelog
- April 2026 — General availability. Per-channel templates, eight field types, drag-and-drop builder with live preview, inline validation at save time, cleanup-free template retirement.
Related modules and next steps
- Contacts — the workspace where your template's fields render and where validation happens.
- Bulk Import — CSV flows that read your template for column mapping and validation.
- Campaigns — downstream consumer for audience filters and variable interpolation over contact data.
- Connections — where channels are added — the prerequisite for picking a channel here.
- Home / Unified Inbox — where your template's fields show up on every conversation's contact panel.
Updated about 4 hours ago