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.

Identities are the lookup key

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.

FieldMeaning
ChannelThe communication channel: email, phone, whatsapp, twitter, linkedin, or other
IdentifierThe address, number, or handle for that channel
PrimaryWhether this is the primary identity for its channel (one per channel)
VerifiedSet when you mark the identity as confirmed
Outbound sending today

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.
Merging is permanent

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).

Automatic de-duplication

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:

TypeInverse (shown on the other contact)
manager_ofreports_to
reports_tomanager_of
colleaguecolleague
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 manual

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.

Multi-hop graph traversal

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:

StatWhat it counts
MessagesTwo-way messages in the unified message log
ThreadsConversation threads involving the contact
By channelMessage count per channel
First / last contactEarliest and most recent timestamps across messages and activities
What feeds the timeline today

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:

ActivityLabelWhen it's recorded
createdContact CreatedA contact record is created
email_sentEmail SentA campaign or transactional email is sent to the contact
email_openedEmail OpenedThe contact opens a tracked email
email_clickedLink ClickedThe contact clicks a tracked link
email_bouncedEmail BouncedA send to the contact bounces
email_complainedSpam ComplaintThe contact marks an email as spam
topic_subscribedSubscribed to TopicThe contact is added to a topic
topic_unsubscribedUnsubscribed from TopicThe contact is removed from a topic
topic_confirmedTopic ConfirmedThe contact confirms a double opt-in topic
doi_attestedDOI AttestedContact-level consent is attested from an external platform on import
property_updatedProperty UpdatedA custom property value changes
inbound_receivedInbound ReceivedThe contact sends you an inbound message (e.g. an email reply)
inbound_repliedInbound RepliedAn 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.

Not yet active: inbound_replied

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