> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts

> The contact model: identity, consent, tags, custom properties, predictive scores and the activity feed.

A **contact** is a person you can reach. It's the unit everything else in Senderz revolves around.

## What a contact holds

<CardGroup cols={2}>
  <Card title="Identity" icon="user">
    Email, phone, first/last name, timezone and locale.
  </Card>

  <Card title="Consent" icon="circle-check">
    Per-channel state (email / SMS / push) with timestamp and source.
  </Card>

  <Card title="Tags" icon="tag">
    Free-form labels for grouping and segmentation.
  </Card>

  <Card title="Custom properties" icon="sliders">
    Anything from the property catalog that isn't a native column — stored in
    a flexible JSON bag.
  </Card>

  <Card title="Predictive scores" icon="wand-magic-sparkles">
    Purchase likelihood, churn risk, VIP likelihood and responsive channel,
    scored daily.
  </Card>

  <Card title="RFM tier" icon="ranking-star">
    Recency / frequency / monetary tier derived from order behaviour.
  </Card>
</CardGroup>

## The property catalog

Contact properties come from a single catalog shared by the UI and the CSV importer. Each property has a **scope**:

<ParamField path="native">Has its own column on the contact (name, phone, timezone, locale…).</ParamField>
<ParamField path="custom">Lands in the custom-properties JSON bag (city, date of birth, job title…).</ParamField>
<ParamField path="computed">Read-only, set by analytics rollups (RFM, predictive scores). Never imported.</ParamField>

The catalog carries **aliases**, so common inbound headers (Shopify `Accepts Marketing`, Klaviyo `$timezone`) resolve to the right property automatically on import.

## The contact profile

Open any contact to see a two-pane profile:

* **Left** — identity, channel-consent badges and tags.
* **Right** — notes (autosaved), recent products viewed/carted, an editable properties panel, and a unified **activity feed**.

## Activity feed

The activity feed unifies five sources into one timeline, newest first:

<Steps>
  <Step title="Consent changes">
    Every subscribe/unsubscribe with its source and channel.
  </Step>

  <Step title="Messages">
    Campaign and flow sends to this contact.
  </Step>

  <Step title="Engagement">
    Delivered, opened, clicked, bounced, complained, unsubscribed, orders.
  </Step>

  <Step title="Store events">
    Product views, cart adds, checkouts — with product thumbnails inline.
  </Step>

  <Step title="Audit">
    Actions taken on the contact.
  </Step>
</Steps>

## Storefront product events

When your store's pixel is connected, identified visitors' product activity (viewed, added to cart, checkout started, collection viewed, search) is captured with rich product metadata — image, price, product ID. This powers the "recent products" card and browse-abandonment flows.

<Note>
  Product-event metadata (image, price, handle) is kept separate from the
  tight analytics fact store, so product detail never bloats your KPI
  aggregates.
</Note>

## Managing contacts via the API

Create, upsert, update, look up and blacklist contacts through the [Public API](/en/api-reference/profiles). Every write is confined to your workspace by row-level security, and every consent change is logged.
