Audience Data: Identities, Relationships & Timeline
Unify a contact across email, phone, and messaging channels, merge duplicates, map relationships, and read the cross-channel interaction timeline.
Every contact in Owlat is more than an email address. Open any contact and you'll find six tabs: Activity, Timeline, Knowledge, Files, Identities, and Relationships. This guide focuses on three of them — Identities, Relationships, and Timeline — which let you unify a person across channels, link them to other contacts, and read their cross-channel message history (it also references the Activity tab). For the basics of creating and organizing contacts, start with Contacts.
You'll find these tabs on any contact's detail page under Audience > Contacts. Click a contact, then switch between the Identities, Relationships, and Timeline tabs.
Contact identities
A contact is identified by one or more channel identities — a channel plus an identifier, such as email: jane@example.com or phone: +14155550123. This is how Owlat recognizes the same person whether they reply by email, send an SMS, or message you on WhatsApp.
Every contact has at least one identity. When a contact is created — by an inbound message, a CSV import, a form submission, a transactional send, or the API — Owlat records a primary identity for the channel they arrived on. For email contacts, that identity also keeps the contact's email field in sync, so nothing about existing email workflows changes. Contacts created from a phone, SMS, WhatsApp, or generic channel have no email at all — their identity is the phone number or handle instead.
Behind the scenes, Owlat resolves "who is this?" by looking up the (channel, identifier) pair, not by scanning email addresses. That's what makes emailless contacts and multi-channel unification possible. See Audience Internals for the resolution mechanics.
Viewing and adding identities
The Identities tab (titled Channel Identities) lists every identity linked to the contact. Each row shows the identifier, its channel, a Primary badge if it's the primary identity for that channel, and a Verified badge once you've confirmed it.
To add an identity:
Open the Identities tab
On the contact detail page, switch to the Identities tab and click Add Identity.
Pick a channel and enter the identifier
Choose a channel — Email, Phone, WhatsApp, Twitter/X, LinkedIn, or Other — and enter the matching identifier (an email address, a phone number, or a handle).
Optionally mark it primary
Tick Set as primary to make this the primary identity for its channel. Setting a new primary automatically clears the previous primary for that same channel.
Save
Click Add. If the same (channel, identifier) is already linked to another contact, the add is rejected — that pair can only belong to one contact.
You can also verify an identity (mark it as confirmed) or remove one using the actions that appear when you hover over a row.
| Field | Meaning |
|---|---|
| Channel | The communication channel: email, phone, whatsapp, twitter, linkedin, or other |
| Identifier | The address, number, or handle for that channel |
| Primary | Whether this is the primary identity for its channel (one per channel) |
| Verified | Set when you mark the identity as confirmed |
Identities let Owlat recognize a contact across channels. Today, outbound delivery is wired end-to-end for email (campaigns and transactional). For SMS, WhatsApp, and generic channels, outbound is sent per-contact — from the Send a message composer on a contact's Timeline tab, or by AI agent replies — once you've configured that channel's provider credentials. There's no bulk campaign or transactional sending on those channels yet.
Merging duplicate contacts
The same person can end up as two contact records — for example, one created from a newsletter signup and another from an inbound reply on a different address. The Identities tab surfaces these as Merge Suggestions.
A suggestion appears when another contact shares an identifier with the one you're viewing. Each suggestion shows the candidate contact and which identifiers matched. Click Merge to combine them.
When you merge a source contact into the one you're viewing:
- All of the source's identities move over (duplicates that already exist on the target are dropped).
- All relationships pointing to or from the source are repointed to the target.
- All conversation threads and unified messages are reassigned to the target.
- Missing first name and last name on the target are filled in from the source.
- The source contact is then deleted.
The source contact is deleted at the end of a merge and the action can't be undone. The target keeps its own primary identities — a merge never demotes the target's primaries. Merging requires the contacts: manage permission (owners and admins).
Beyond manual Merge Suggestions, Owlat also auto-merges unambiguous duplicates on a schedule. A cron runs every 6 hours and folds together any contacts that share an exact identifier on a strong channel — email, phone, sms, or whatsapp — into the oldest (canonical) contact, processing up to 20 merges per run. Weak or social channels (twitter, generic, chat handles) are never auto-merged, since handle collisions there aren't reliable enough for an unattended merge.
The relationship graph
Relationships connect one contact to another with a typed, directional link — for example, "Jane is the manager of Sam." This builds a lightweight CRM-style graph on top of your audience.
Open the Relationships tab to see every relationship for a contact, in both directions. Each entry shows the related contact (linked to their detail page), the relationship label, the direction (a relationship pointing to another contact versus one pointing from them), and a confidence percentage.
Adding a relationship
Open the Relationships tab
On the contact detail page, switch to Relationships and click Add Relationship.
Identify the other contact
Type the related contact's name or email in the Related contact field and pick them from the results.
Choose a type and confidence
Pick a relationship type and set a confidence level with the slider. The slider moves in 10% steps (0–100% in increments of 10) and defaults to 80%.
Save
Click Add Relationship. Adding the same pairing and type again won't create a duplicate — it only raises the stored confidence if your new value is higher.
The built-in relationship types are:
| Type | Inverse (shown on the other contact) |
|---|---|
manager_of | reports_to |
reports_to | manager_of |
colleague | colleague |
client | — |
vendor | — |
partner | — |
advisor | — |
investor | — |
friend | — |
other | — |
When you view the relationship from the other contact's side, Owlat inverts the label automatically where an inverse is defined — so a manager_of link reads as reports_to from the report's perspective.
Relationships are created by hand from the Relationships tab — there is no production path that extracts them from conversations or the Knowledge Graph. The Knowledge Graph does extract people and facts from conversations automatically, but it links them to a contact as knowledge entries, not as typed contact-to-contact relationships.
The backend can also walk the relationship graph outward by several hops (a contact's relationships, their relationships, and so on). That traversal isn't surfaced in the contact UI yet — the Relationships tab shows direct (one-hop) links only.
The unified cross-channel timeline
The Unified Timeline tab shows the contact's unified multi-channel message log — two-way messages across email, SMS, WhatsApp, chat, and generic channels, each marked Received (inbound) or Sent (outbound). Messages are sorted newest-first.
Channel-filter pills (All, Email, SMS, WhatsApp, Chat, Generic) let you narrow the feed; selecting a specific channel shows only the message rows for that channel.
The Timeline does not merge in the activity log. Lifecycle and engagement events (sends, opens, clicks, subscriptions, and more) live on the separate Activity tab.
Communication stats
Alongside the timeline, a Communication card summarizes the contact's message history:
| Stat | What it counts |
|---|---|
| Messages | Two-way messages in the unified message log |
| Threads | Conversation threads involving the contact |
| By channel | Message count per channel |
| First / last contact | Earliest and most recent timestamps across messages and activities |
The Timeline shows the unified multi-channel message log across email, SMS, WhatsApp, chat, and generic channels. The non-email channels are populated by inbound traffic on the channels you've connected (via inbound channel webhooks). Once you've configured a channel's provider credentials, outbound SMS, WhatsApp, and generic messages (sent from the Timeline composer or by AI agent replies) are dispatched through the provider and recorded as Sent rows in the timeline alongside inbound traffic. Email engagement events (sends, opens, clicks, and inbound replies) are recorded in the activity log, which appears on the separate Activity tab.
Activity types and what they record
The activity log (shown on the Activity tab) records lifecycle and engagement events. Owlat tracks the following activity types:
| Activity | Label | When it's recorded |
|---|---|---|
created | Contact Created | A contact record is created |
email_sent | Email Sent | A campaign or transactional email is sent to the contact |
email_opened | Email Opened | The contact opens a tracked email |
email_clicked | Link Clicked | The contact clicks a tracked link |
email_bounced | Email Bounced | A send to the contact bounces |
email_complained | Spam Complaint | The contact marks an email as spam |
topic_subscribed | Subscribed to Topic | The contact is added to a topic |
topic_unsubscribed | Unsubscribed from Topic | The contact is removed from a topic |
topic_confirmed | Topic Confirmed | The contact confirms a double opt-in topic |
doi_attested | DOI Attested | Contact-level consent is attested from an external platform on import |
property_updated | Property Updated | A custom property value changes |
inbound_received | Inbound Received | The contact sends you an inbound message (e.g. an email reply) |
inbound_replied | Inbound Replied | An automated reply is sent back to the contact |
Each activity carries type-specific metadata — for example, an email_clicked activity records the clicked link, and a topic_subscribed activity records the topic. The Activity tab uses this metadata to render a one-line description under each event.
inbound_received is recorded live whenever a contact replies into the Team Inbox. The inbound_replied type is reserved for logging automated replies but isn't written by any live path yet, so you won't see it on real contacts today.
Exporting a contact's data
The contact detail page has an Export data button that produces a complete GDPR data-subject-access bundle for one person — everything the instance holds about them, in a single contact-<id>-data-export.json download. The bundle includes the contact record plus all of their channel identities, topic memberships, property values, activities, email and transactional sends, automation runs, form submissions, inbound and unified messages, conversation threads, and linked knowledge entries. High-volume collections are capped at 1000 rows each, with a truncated flag set when more exist. This is the export you answer an access request with — the org-wide CSV export (on the Contacts list) only covers the base contact rows. Exporting a contact's full data requires the organization: manage permission (owners and admins).
Permissions
Reading a contact's identities, relationships, and timeline is available to any team member with audience access. Changing them — adding or removing identities, verifying an identity, merging contacts, or creating and deleting relationships — requires the contacts: manage permission, which is granted to owners and admins. See Team & Permissions for the full permission matrix.
Next steps
- Contacts — create, import, and organize your audience
- Communication Channels — connect email, chat, SMS, and WhatsApp
- Team Inbox — triage inbound replies as a team
- Knowledge Graph — structured facts linked to contacts
- Audience Internals — how contact resolution and identities work under the hood