# Salesforce integration

> Two-way lead and contact sync with Salesforce, plus activity logging: the two connection paths, and the records Salesforce will not let Reply update.

**Leads and contacts sync both ways as separate objects, and emails, tasks, calls and notes are logged from Reply to Salesforce. There are two connection paths; the standard one and a managed package. A converted lead can never be updated, which surprises most teams.**

_Status: Reviewed – written against Reply's product documentation on 2026-09-22, not yet confirmed against the running product._

## At a glance

| | |
| --- | --- |
| **Availability** | Available. Included on plans that offer CRM integrations – check yours in Billing |
| **Direction** | Two-way for leads and contacts · Reply → Salesforce for emails, tasks, calls and notes |
| **Sync timing** | Automatic on a regular cycle, with some variation between runs, plus a manual sync |
| **What you need** | A Salesforce user with API access and read/write permission on the objects you sync |
| **Surfaces** | **Setup:** in the app only – integration configuration is not in the public API. **Once connected:** the contacts that sync are readable and writable through the API and MCP, and sync activity raises webhook events |
| **Does not** | Update a converted lead · sync opportunities as objects · offer Salesforce's own system fields for mapping · bring Salesforce activity back into Reply |

## Availability

Available on plans that include CRM integrations. On the Salesforce side you need a user with API access, not every Salesforce edition or licence type includes it, and that is the most common blocker before anything else can be tried.

Ownership can be mapped, so a record created by Reply lands with the right Salesforce owner rather than the connecting user.

## How to connect Salesforce

Reply offers **two connection paths**. Choose one deliberately:

| Path | When to use it |
| --- | --- |
| **Standard connection** | The default. Authorize Reply as a connected app and sync through the Salesforce API |
| **Managed package** | When your Salesforce org restricts direct API connections, or your admin prefers an installed package with its own scoped key |

### Before you start

- Confirm your Salesforce user has API access
- Decide whether leads, contacts, or both are in scope
- Decide the owner mapping, so synced records are not all attributed to one person
- If you plan to use the managed package, have your Salesforce admin install it first

### Connect

1. Go to **Execution → Integrations**.
2. Click **Connect** next to Salesforce.
3. Log in to Salesforce in the pop-up window, as the user whose permissions the sync should use.
4. Configure the sync steps once you are returned to Reply.

### Set up what syncs

Leads and contacts are separate steps. The generic mechanics are the same for every CRM. See [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm/). What follows is Salesforce-specific.

## What to expect

### What syncs

| Data | Direction | When | Notes |
| --- | --- | --- | --- |
| Leads | ↔ | Every cycle | A separate object from contacts, with its own step |
| Contacts | ↔ | Every cycle | A separate object from leads, with its own step |
| Contact statuses | Reply → Salesforce | Every cycle | Arrive as Salesforce **lead statuses** |
| Inbox categories | Reply → Salesforce | Every cycle | Also arrive as **lead statuses** |
| Emails | Reply → Salesforce | Every cycle | Arrive as **lead tasks** or **contact tasks**, depending on the object |
| Tasks, calls and notes | Reply → Salesforce | Every cycle | Also arrive against the lead or the contact, created once and not updated |

### After you connect

The first sync brings across records matching your filters. Later cycles re-examine a rolling recent window, so a record edited a few days ago is still picked up.

Above a certain volume the sync switches to Salesforce's bulk processing, which behaves slightly differently: larger batches, and errors reported per batch rather than per record. You do not configure this; it happens automatically.

### What doesn't sync

- **A converted lead cannot be updated.** Once Salesforce converts a lead, Reply can no longer write to it; the sync records the refusal and moves on. This is Salesforce's rule, not Reply's, and it is the single most common source of "some records just stopped updating".
- **Opportunities** are never synced as objects.
- **Salesforce system fields** (record identifiers, view and reference timestamps, conversion fields, photo URLs and similar) are never offered for mapping.
- **Activity in the other direction.** Work logged in Salesforce does not appear in Reply.
- **Contacts with a placeholder email address** when the identifier is email.

## Common problems

- **Some records stopped updating** – check whether those leads have been converted. [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm/)
- **A contact never arrives** – a required Salesforce field left empty, or a value longer than the field allows. [Full guide](/troubleshooting/contact-did-not-sync-to-crm/)
- **Emails and tasks are missing** – the activity steps are separate and have to be enabled individually. [Full guide](/troubleshooting/activity-not-logged-in-crm/)
- **Nothing has synced at all** – check the connection first; a Salesforce password change is enough to break it. [Full guide](/troubleshooting/crm-sync-stopped/)

## Pause or disconnect

Turn the integration off to stop syncing while keeping steps and mappings. Disconnecting removes the authorization; records already synced remain in both systems. If you connected through the managed package, removing the package also ends the connection.

## FAQ

### Does Reply sync leads or contacts?

Both, as separate objects with separate steps. You can enable one, the other, or both.

### Why did a record stop updating?

Most often because the lead was converted. Salesforce does not allow updates to a converted lead.

### What is the managed package for?

It is an alternative connection path for orgs that restrict direct API connections, or where an admin prefers an installed package.

### Can Reply create opportunities?

No. Opportunities are not synced as objects.

## Need help connecting Salesforce?

If the connection fails or data isn't syncing the way you expect, the Reply support
team can check your integration settings with you. Open the
[Reply Help Center](https://support.reply.io/) and send the team a message.

To get an answer faster, include:

- which integration and which sync step is affected
- what you expected to sync, and what happened instead
- the error text from the integration's **Logs**, or a screenshot of it

Don't send passwords, API keys, or access tokens.

## Related

- [CRM and integrations](/capabilities/integrations/) – everything Reply connects to
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm/) – how sync works for every CRM
- [Why did a contact not sync to my CRM?](/troubleshooting/contact-did-not-sync-to-crm/)
- [Why did my CRM sync stop?](/troubleshooting/crm-sync-stopped/)

## Build with Reply

- REST API: [Contacts](https://docs.reply.io/api-reference/introduction) – read and write the contacts that sync
- Webhooks: [Webhook events](https://docs.reply.io/api-reference/introduction) – react to Reply events in your own systems
- MCP: [docs.reply.io/mcp](https://docs.reply.io/mcp/overview) – let an assistant read and update synced contacts, though not the integration's own settings
