# Sync CRM contacts to Reply from the extension

> Pull records and list views out of HubSpot or Salesforce into the CRM Sync tab, save them into your Reply account, and send them on to a list or a sequence.

**CRM Sync in the extension reads HubSpot and Salesforce. Open a record or a list view in the CRM with the extension running, and the fields on screen are collected into the CRM Sync tab, where Save writes them to Reply and Move to files them into a list or a sequence. Because the extension reads what the CRM page displays, the fields you want must be visible in that view.**

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

## Goal

CRM records available for outreach in Reply (either one person you happen to be looking
at, or a whole list view) without an export file in between. This is the browser route;
the server-side alternatives are described under [integrations](/capabilities/integrations/).

## Preconditions

The extension signed in, and a CRM session in the same browser. Two CRMs are read this
way: [HubSpot](/integrations/hubspot/) and [Salesforce](/integrations/salesforce/).
Copper is not among them: the extension itself says as much, with "The CRM Sync feature
currently supports Hubspot, Salesforce only." Copper still connects to Reply as a
[native integration](/integrations/copper/), which runs from the platform rather than from
the browser. Custom fields transfer only when a field of the same name already exists on
the Reply side.

## Steps

1. Open the record or the list view you want in your CRM. Salesforce works the same whether your org runs Classic or Lightning: one flow serves both, and what differs is which fields each interface puts on screen for the extension to read.
2. Give the CRM page a moment with the extension open. Collection starts on its own when a contact page or a list loads; to repeat it yourself, click **Find emails** in the extension.
3. Prepare the CRM view first if fields are missing. In HubSpot the extension reads the default fields present in the **About** section of the record, and for a list view the email column has to be switched on before anything can be collected. In Salesforce the fields have to be on the record layout, and mapping matters: the **City** field is not taken across, while **Mailing Address** is read into Country and State, falling back to **Other Address** when the mailing one is empty.
4. Switch to the **CRM Sync** tab in the extension and read what came over. When it is empty you see "No results found" with "Try opening a page with contacts for CRM sync." underneath: that points at the CRM page, not at the extension.
5. Click **Save** to write the collected people into Reply. New people are created; people Reply already knows are opened and enriched with what the CRM had.
6. Click **Move to** and pick an existing list or sequence, or type a name to create a list as you go. Use the select-all control at the top to act on everything the page produced instead of one row at a time.
7. Decide how often you want this to happen without you asking. You can always trigger collection by hand with **Find emails**; check the extension's **Settings** screen to see what your account does automatically for list views.

## Expected result

The CRM Sync tab lists the people from the page, with the fields the CRM view exposed, and
after saving they exist in Reply carrying the CRM data as their own. Anyone already in your
account keeps their record and gains whatever the CRM knew that Reply did not.

## Verification

Pick one synced person and open them in the Reply web app. The custom fields you care about
should hold the CRM values; where one is empty, the cause is almost always that no Reply
field of that name exists yet, or that the field was not shown on the CRM page you synced
from.

## What happens next

Contacts landed this way behave like any others. See
[Save contacts from the extension into Reply](/how-to/save-contacts-from-the-extension/)
for what the destination dialog does with list membership and sequences. For a two-way,
always-on connection rather than page-by-page collection, use the platform integration and
the [sync a CRM with Reply](/workflows/sync-reply-with-a-crm/) workflow.

## Common mistakes

- Expecting Copper records here. That sync ran in an older version of the extension and no longer does; the native Copper integration is the supported route.
- Syncing a Salesforce **Recently Viewed** list. It is not collected, so open a real list view instead.
- Assuming custom fields arrive because they exist in the CRM. They need a Reply field with an identical name waiting for them, and list views bring across standard fields only.
- Reading a sudden empty result as a broken account. When a CRM redesigns its own pages the extension can stop recognizing the fields until a new version ships; updating the extension is the fix, and there is nothing to change on your side.
- Looking for the tab in a branded build that does not carry it. Some partner-distributed versions ship without CRM Sync altogether.

## Related

- [HubSpot](/integrations/hubspot/) · [Salesforce](/integrations/salesforce/) · [Copper](/integrations/copper/)
- [CRM sync stopped](/troubleshooting/crm-sync-stopped/)
- [Contact did not sync to CRM](/troubleshooting/contact-did-not-sync-to-crm/)
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm/)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) – move CRM records in bulk instead of page by page
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) – scripted syncs on a schedule
