Can ZoomInfo integrate with Salesforce, and what do you need first?
Yes. A ZoomInfo admin connects it in the Admin Portal under Integrations > Connections > Salesforce tile > Connect. From then on, users can export Account, Contact and Lead records into your org (ZoomInfo Help Center).
The AppExchange package, ZoomInfo - GTM Intelligence Platform, installs the Native App, ZoomInfo's interface inside Salesforce. Enrich, ZoomInfo's tool for refreshing the records already in Salesforce, needs that package in place first (ZoomInfo Enrich for Salesforce guide).
Before you connect, ZoomInfo's Salesforce integration guide asks for these prerequisites:
- REST API access. It comes with the Unlimited, Performance, Developer, Enterprise and Force.com editions. On Professional or any other edition, you buy REST API access first.
- Bulk API access for any export of 200 records or more. The Bulk API is the Salesforce interface for moving large batches in one job.
- A connecting user with ZoomInfo admin access and these Salesforce rights: API access, view setup and configuration, run reports, read the org ID, read/write on Account, Contact, Lead, Campaign and Campaign Member, plus read-only access to Opportunity and User.
I build the lists, write the copy and run the sending, but the CRM stays with the client. So the technical detail below comes from the vendors' own documentation. Where that documentation disagrees with itself, I say so.
What syncs between ZoomInfo and Salesforce, in which direction?
ZoomInfo's integrations page calls this a bi-directional sync. In practice the traffic is uneven. The rows below come from the integration guide and the Engage guide.
| Direction | What moves | When | Product |
|---|---|---|---|
| ZoomInfo -> Salesforce | Accounts, contacts and leads | When a user exports, from the platform or the Chrome Extension | Core integration |
| Salesforce -> ZoomInfo | Your CRM records | Hourly import, on by default | Core integration (import) |
| ZoomInfo -> Salesforce | Engagement activity (emails, calls, meetings), logged as tasks or events | Its own CRM writeback setting | ZoomInfo Copilot |
| Engage <-> Salesforce | Leads and contacts copy over after an email, a dial or an add to a Salesflow (an Engage sequence). Two fields write back if mapped: Contact Email Opt Out and CRM Lead Status | After one of those actions | ZoomInfo Engage |
Most of your Salesforce data only travels into ZoomInfo, where it feeds Advanced Search Filters, Copilot Signals, automation and scoring. That import is the useful half for list building: start from your past and current clients, then search for companies that look like them.
The guide sets a 20 million record limit for the account, contact, lead and opportunity object types, and its filters let a user pick up to 10 owners per object type.
Should you connect with a service account or user accounts?
ZoomInfo's default and preferred option is a service account, and its integration guide recommends a dedicated Salesforce integration user to run it.
| Service account | User accounts | |
|---|---|---|
| Who connects | The admin, once | The admin first, then each user under Settings > Integrations |
| Whose login runs the export | The service account | Each rep's own Salesforce credentials |
| Who reconnects if the Summer '26 OAuth change breaks the link | Only the ZoomInfo admin | Every user |
| Setup effort | One user mapping page to check | One connection per rep |
With a service account, Created By and Last Modified By on every exported record show the primary connected admin, the person who made the first connection.
Salesforce's Summer '26 release adds stricter OAuth security requirements. ZoomInfo's Help Center writes: "We do not anticipate that these changes will disrupt your current ZoomInfo-Salesforce integration." It adds that a reconnect may be needed.
My advice: take the service account and match every rep's ZoomInfo email to their Salesforce email. Choose user accounts only if each export must run under the rep's own login.
How many Salesforce API calls does each export use?
Call costs per ZoomInfo's integration guide and Enrich guide:
| Action | Record count | API used | Call cost |
|---|---|---|---|
| Export from ZoomInfo | 199 or fewer | REST | 1 call if all records are new or all are updates, 2 for a mix |
| Export from ZoomInfo | 200 to 100,000 (the admin sets a per-user cap) | Bulk | 1 call per 10,000 records if all are new or all are updates, 2 for a mix (the guide counts 1 million records as 100 Bulk calls) |
| Instant Enrich | Each new record | Salesforce API | 2 calls per record enriched |
The Native App skips the Bulk API for exports, so the guide caps it at 5,000 records per export. The import from Salesforce draws on your allowance too. My team's first list is at least 20,000 contacts, so for us the platform and Bulk route is the only practical one.
A planning example. A rep exports 1,000 contacts, 400 already in Salesforce -> a mix, so 2 Bulk calls. Instant Enrich on 500 new leads a day -> 1,000 calls a day.
Salesforce's 2024 guide to API limits says paid editions such as Enterprise start at 100,000 requests per 24 hours, growing with your licenses. Under Salesforce's formula (at the time of writing), an Enterprise org with 15 Salesforce licenses at 1,000 calls each gets 100,000 + 15,000 = 115,000 calls a day.
Before go-live, have your admin check these call costs against your org's actual daily limit.
Why do large exports end up with the wrong record owner?
ZoomInfo's integration guide says Salesforce runs your lead assignment rules on an export only when it holds 25 net new records or fewer. From 26 up, the rules stay off. The records go to the rep who clicked export, or to the primary connected admin if that rep's two emails differ.
Take a rep who exports 30 leads from a colleague's territory. All 30 stay with that rep until someone catches it. So my team gives each rep and account its own territory before any list goes out, and no two people ever work the same leads.
The same guide has a second passage that puts the cut-off at 200 records, with rules skipped from 201. I found no other source that settles it.
Salesforce's REST API Developer Guide gives no 25 or 200 record limit either. It says that if the Assignment Rule header is not sent, REST API defaults to using the active assignment rules. Test both sizes in your own org before you trust either.
Two ways around it:
- Keep exports at 25 net new records or fewer whenever routing has to work.
- Run the big export, then reassign the new records with your own rule right after they land.
Which settings stop duplicates and wasted credits?
Defaults and options below are from the integration guide and the Enrich guide.
| Setting | Default | Choose | Why |
|---|---|---|---|
| Field update option | Complete if missing | Keep it on standard fields. Use Overwrite only on custom fields built for ZoomInfo | ZoomInfo fills only empty fields, so what reps typed stays |
| Account association for contacts | Manual | Keep manual | The user confirms the account before the contact lands |
| Duplicate checking | Two options | Standard ZoomInfo checking (read/write on the object fields) or your own Salesforce duplicate rules (needs the Author Apex permission) | Decide before the first export |
| Scheduled Enrich credit usage | No limit | Limit credits per job run, or use "Only Enrich records currently owned" | Jobs start at 12:00 AM ET, while nobody is watching |
| Enrich batch size | 10K (1K, 500, 200 also offered) | Keep the default | Smaller batches mean more API calls |
| Minimum Accuracy Score | Your choice | Set one | Records below it are marked No Match, "Below selected Accuracy Score" |
| Buying committee per account | Your choice | Set the hard cap (up to 10) | Each contact exported or enriched costs one credit |
Credits are where the money leaks. Before anything gets exported, I filter out generic titles like Assistant, Manager and Associate, and target the titles that actually sign deals in that niche.
Run this checklist in one sitting before the first export:
- Confirm REST API in your edition and Bulk API access.
- Connect the integration user as the service account and check the user mapping page.
- Run Test Mapping, which exports and deletes one test record.
- Set a per-user export cap and a credit limit on every scheduled job.
- Export 25 or fewer net new leads, then about 30, then 201 or more, and check who owns each batch.
- On package v1.51 or later, put the Instant Enrich certificate renewal in your calendar: it expires after one year (Enrich guide).
Does a clean sync give you a list worth emailing?
Which CRM a client runs makes no difference to me, and your prospects never see it anyway. What matters is that no lead gets lost in it. On my engagements the client pays for tools and data directly, so the ZoomInfo seats and the Salesforce org stay theirs.
ZoomInfo is one list source for my team, next to Sales Navigator, Apollo, UpLead and RocketReach. That mix beats a scraped list, and it beats cheap freelancer lists, which bring low opens and high bounces. If you are still deciding on ZoomInfo itself, the ZoomInfo alternatives post compares the options, and Clay vs ZoomInfo settles that head-to-head.
A record that synced cleanly can still hold a dead address. My team checks every address through NeverBounce or DeBounce before a single email goes out, and bounces stay below 0.5%. A bounce-heavy send wipes out weeks of mailbox warmup. Our deliverability and infrastructure FAQ explains the sending side, and the lists and targeting FAQ covers how we build lists.
Same message, two companies. One got 7.5% replies. The other got 2%. What moved the reply rate was the foundations underneath it, and the list is one of them.
Instantly's 2026 benchmark report, built on its own platform data, lists 3.43% as the average reply rate and 5.5% as the top-quartile mark. It is one platform's cold email data, so read it loosely. Even so, 7.5% clears the top-quartile mark and 2% sits under the average.
Copy cannot fix a bad list, and neither can a sync. Feed it a bad list and you get a bad list in a tidier CRM.
Setting up ZoomInfo with Salesforce and worried about duplicates and record owners? Book a call and tell me how you plan to connect it. I will share what I would check.
Questions admins ask after setup
Does testing Enrich in a Salesforce sandbox use credits?
Yes. ZoomInfo's Enrich guide says sandbox runs are charged credits exactly like production runs. Test on a small slice of a few hundred records, and give the sandbox job the same credit limit you use in production.
Who can disconnect ZoomInfo from Salesforce?
Only the primary connected admin, meaning the person who made the first connection. Secondary admins can change mapping, export settings and filters, or switch exports off, yet the disconnect button stays with the primary. A secondary admin who uses Change User on the service account becomes the primary admin. For Enrich, switch every job off with its Status toggle, then click Disconnect.
What happens to a contact who changes companies?
Scheduled Enrich has a Person Has Moved setting, on by default, that enriches the record with the person's new organization. Turn it off and the contact is skipped, with its Enrich Status reading Company Match Only. In both cases Enrich does not attach the contact to the new company's account. Someone on your team has to make that link by hand.
Do you need the Native App to use the integration?
For exports, no. Once the connection is live, Salesforce shows up as an export option in the ZoomInfo platform and the Chrome Extension. The Native App is optional, and Enrich needs it.
Set ownership, duplicates and credit caps before the first export. Then fix the list, because the sync will carry whatever you give it.
