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

# Opportunity Contact Roles

> Understand how contacts are linked to opportunities through Opportunity Contact Roles (OCRs).

An **Opportunity Contact Role (OCR)** is a Salesforce concept that links a specific contact to a specific opportunity, defining the contact's role in the deal. OCRs are synced from Salesforce into Conversion and are visible on the [Relationships tab](/product-docs/records/opportunities/opportunity-record#relationships-tab) of an opportunity record.

***

## What is an OCR?

Opportunities belong to a company, and contacts also belong to a company. But not every contact at a company is involved in every deal. An OCR lets you specify exactly which contacts are participating in a given opportunity and what role they play.

Each OCR carries its own data:

| Field       | Description                                                                                                     |
| :---------- | :-------------------------------------------------------------------------------------------------------------- |
| **Contact** | The specific contact linked to the opportunity.                                                                 |
| **Role**    | The contact's role on this opportunity (e.g., Decision Maker, Influencer, Economic Buyer, Technical Evaluator). |
| **Primary** | Whether this contact is the primary contact for the opportunity. Each opportunity can have one primary contact. |

***

## Why relationships need their own fields

You might wonder why OCR data (like role and primary status) doesn't just live on the contact record or the opportunity record. The reason is that these values are specific to the **combination** of a contact and an opportunity. They don't belong to either entity alone.

Consider this scenario:

* **Vasav Jain** is a Decision Maker on the **Dremio - Enterprise** opportunity.
* **Vasav Jain** is also a Technical Evaluator on the **Dremio - Starter Plan** opportunity.

Vasav's role is different depending on which opportunity you're looking at. If "role" were just a field on the contact, you could only store one value and it would be wrong for at least one of the opportunities.

***

## Many-to-many relationship

OCRs create a **many-to-many relationship** between contacts and opportunities:

* A single **contact** can be assigned to **multiple opportunities**.
* A single **opportunity** can have **multiple contacts** assigned to it.

This is different from the company-to-opportunity relationship, which is one-to-many (a company can have many opportunities, but each opportunity belongs to one company).

Because OCRs form a many-to-many relationship, be aware of these edge cases:

* **A contact with multiple OCRs.** If a contact is assigned to several opportunities, any logic that iterates over their opportunity roles will return all of them. Make sure your workflow or personalization logic accounts for this if you only want to reference a specific deal. For example, use filters or conditions to target the right opportunity by stage, name, or other criteria.
* **Multiple primary contacts.** Each opportunity can have one primary contact, but a single contact can be the primary on multiple opportunities simultaneously. Do not assume that `is_primary` is unique across a contact's roles. It is unique per opportunity, not per contact.
* **Contacts without OCRs at a company with opportunities.** A contact may belong to a company that has opportunities, but if the contact has no OCR assignments, their direct opportunity roles will be empty. However, they can still access company-level opportunity data.
* **Duplicate roles.** A contact could theoretically have the same role on two different opportunities at the same company. Ensure your logic doesn't assume role uniqueness across opportunities.

***

## Accessing OCR data in personalization

When using [Liquid templating](/product-docs/liquid/overview) in workflows and emails, you can reference opportunity data through two distinct paths, depending on whether you need company-level or contact-level access:

### Company opportunities

Access all opportunities associated with the contact's company using `company._opportunities`. This returns up to 10 of the most recently created opportunities, regardless of whether the contact has an OCR on them.

```liquid theme={null}
{{ company._opportunities.first.name }}
{{ company._opportunities.first.stage }}
{{ company._opportunities.first.amount }}
```

You can also access the contact's role on a company opportunity (if an OCR exists):

```liquid theme={null}
{{ company._opportunities.first._role.role }}
{{ company._opportunities.first._role.is_primary }}
```

### Contact opportunity roles

Access only the opportunities where the contact has a direct OCR assignment using `opportunity_roles`. This returns up to 10 of the most recently created OCRs, along with the contact's role and primary status.

```liquid theme={null}
{{ opportunity_roles.first.role }}
{{ opportunity_roles.first.is_primary }}
{{ opportunity_roles.first._opportunity.name }}
{{ opportunity_roles.first._opportunity.amount }}
```

### When to use which

| Path                     | Use when...                                                                                                                                                                                  |
| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `company._opportunities` | You want to reference any deal at the contact's company, regardless of whether the contact is directly involved. Useful for account-level messaging (e.g., "Your company has an open deal"). |
| `opportunity_roles`      | You want to reference only the deals where this specific contact has a role. Useful for contact-level personalization (e.g., "As the Decision Maker on the Acme deal...").                   |

For the full Liquid reference including iteration, filters, and conditionals, see [Liquid Templating](/product-docs/liquid/overview).

***
