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

# Data Model Overview

> The objects RevyOps stores and how they relate to each other.

## Objects

RevyOps organizes data around six objects.

| Object            | What it is                                                                                                                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **People**        | The human behind one or more contact records. See [People](/data-model/people).                                                                                                         |
| **Contacts**      | One record from one source: an email address from your sequencer, a LinkedIn profile from HeyReach, a record synced from Close CRM. See [Contacts](/data-model/contacts).               |
| **Companies**     | The organization a contact belongs to, identified by domain. See [Companies](/data-model/companies).                                                                                    |
| **Emails**        | Individual outbound, inbound, and bounced email messages tied to a contact. See the [Emails API](/api-reference/emails/list-emails).                                                    |
| **Activities**    | Standard activity types (email, LinkedIn message, call, SMS, WhatsApp) or custom activity types your team defines, used for [Activities & Scoring](/user-guide/activities-and-scoring). |
| **Opportunities** | A deal record pulled in from a connected CRM (Close CRM or HubSpot). See [Opportunities](/user-guide/opportunities).                                                                    |

## How They Relate

```
Person
  └─ Contact (email)         ─┐
  └─ Contact (LinkedIn)       ├─ each Contact belongs to one Company (by domain)
  └─ Contact (synced from CRM)┘
       └─ Emails (sent to/from this Contact)
       └─ Activities (recorded against this Contact or its Company)

Company
  └─ Contacts at this company
  └─ Opportunities synced from Close CRM / HubSpot
  └─ Activities recorded against this Company
```

A few things to note about these relationships:

* A **Contact** always belongs to exactly one **Person**. Contacts for the same human, across different sources, are shown as one person. See [People](/data-model/people) for merging and splitting.
* A **Contact** can belong to at most one **Company**, resolved from its email domain or from explicit company data in a webhook payload.
* **Emails** and **Activities** are recorded against a Contact (and, for company-level activities, against a Company).
* **Opportunities** belong to a Company and are read-only: they arrive through the Close CRM and HubSpot sync rather than being created in RevyOps.

## Standard vs Custom Fields

Every object ships with a set of **standard fields**: the fields described on each object's page in this section (for example, a contact's email, name, and status). Standard fields are always present in API responses.

On top of standard fields, Contacts and Companies support **custom fields**: fields your workspace defines to hold your own data (industry, lead score, ICP tag, and so on). Custom fields:

* Are scoped to one workspace (or, if promoted, to the agency's master schema shared across client workspaces)
* Have a type: text, number, date, dropdown (single select), or dropdown (multi select)
* Appear in API responses as a list of `{field_name, field_value}` pairs, separate from the object's standard fields

See [Custom Fields](/user-guide/custom-fields) for how they're managed, and `GET /public/custom-fields/schema` for reading their definitions through the API.
