Skip to main content
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 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:
FieldDescription
ContactThe specific contact linked to the opportunity.
RoleThe contact’s role on this opportunity (e.g., Decision Maker, Influencer, Economic Buyer, Technical Evaluator).
PrimaryWhether 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 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.
{{ 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):
{{ 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.
{{ opportunity_roles.first.role }}
{{ opportunity_roles.first.is_primary }}
{{ opportunity_roles.first._opportunity.name }}
{{ opportunity_roles.first._opportunity.amount }}

When to use which

PathUse when…
company._opportunitiesYou 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_rolesYou 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.