---
title: "Linkbreakers + Salesforce: offline lead capture for enterprise sales teams"
description: "Sign in with Salesforce and every person who scans your QR codes and gives their email becomes a Salesforce Contact or Lead, with their form answers in fields, added to a campaign, optionally with an opportunity for your sales team, and opted out of email unless they consented. Setup, the one-time package install, what is synced, and the Assistant and MCP tools."
canonical: "https://linkbreakers.com/help/article/linkbreakers-salesforce-integration-offline-lead-capture-for-enterprise"
last-updated: 2026-11-09
---

# Linkbreakers + Salesforce: offline lead capture for enterprise sales teams

> Sign in with Salesforce and every person who scans your QR codes and gives their email becomes a Salesforce Contact or Lead, with their form answers in fields, added to a campaign, optionally with an opportunity for your sales team, and opted out of email unless they consented. Setup, the one-time package install, what is synced, and the Assistant and MCP tools.

:::try-ai-prompt {"prompt":"Connect Salesforce, add synced people to my Trade show campaign, create an opportunity in the Prospecting stage for each one, and use my form's Consent field as their marketing consent","description":"Connect Salesforce with the Assistant.","target":"assistant"}:::

## Short answer

Linkbreakers connects to Salesforce directly. Once per Salesforce org, an admin installs the Linkbreakers package from the link on the integration page. Then, in the dashboard, open **Integrations**, pick **Salesforce** and select **Connect with Salesforce**: you sign in to Salesforce and allow Linkbreakers, with no key to copy. From then on, every person who goes through one of your links or QR codes and whose email Linkbreakers knows, for example after a lead form, is created or updated in Salesforce as a Contact, or as a Lead if you choose, with their name, phone and form answers in fields. You can add them to a campaign and have Linkbreakers create an opportunity for each one in the stage you choose. People who did not consent are created with Email Opt Out ticked.

No Zapier, Make or webhook is needed. The integration is available on every plan.

## Quick summary

- An admin installs the Linkbreakers package once per org, then you sign in with Salesforce: production or a sandbox
- People are matched on email and created or updated as Contacts, or as Leads
- Visitors known only by their phone number are not synced: Salesforce people are matched on email
- Form answers go to writable Contact and Lead fields, by API name
- Optionally added to one active campaign
- Optionally an opportunity in the stage you choose, one open opportunity per contact
- Consent sets Email Opt Out: a new person who did not consent is opted out, and nobody who opted out is opted back in without consenting
- Only people's visits: bots, link previews and AI agents never reach Salesforce
- Also set up from the Assistant, the MCP server or the REST API

## How it works

A person is synced when a visitor goes through a step of a link's workflow and Linkbreakers knows their email. That is usually right after a [lead form](/help/article/how-to-add-a-lead-capture-form-to-a-qr-code), but it can also come from the chat bot or any step that saves visitor data. Linkbreakers sends the person to Salesforce from its servers, once per step, at the moments the connection covers (all of them by default).

Linkbreakers looks the email up in Salesforce. By default it updates the first Contact with that email, or creates one. If you chose leads, it updates the open (not converted) Lead with that email; someone who is already a Contact stays a Contact and is updated there; anyone else becomes a new Lead. Then Linkbreakers adds the person to your campaign and creates their opportunity if you asked for one.

## Connect Salesforce

1. **Install the Linkbreakers package, once per org.** In Linkbreakers, open **Integrations** in the dashboard and pick **Salesforce**. A Salesforce admin opens **install in production** (or **in a sandbox**) and chooses **Install for All Users**. Salesforce lets an outside app sign in to an org only once it is installed there, so without it the sign-in is refused.
2. **Give the Salesforce user what the sync needs.** The user you sign in with needs API access and permission to create and edit Contacts, Leads, Campaign members and Opportunities: whatever they can do, the sync can do.
3. **Allow consent to be recorded.** New Salesforce orgs give no profile edit access to the **Email Opt Out** field. In Salesforce, open **Setup > Object Manager > Contact > Fields & Relationships > Email Opt Out > Set Field-Level Security** and tick **Edit** for that user's profile, then do the same for **Lead**.
4. Back on the Linkbreakers Salesforce page, under **Sign in to**, keep **Production**, or choose **Sandbox** for a sandbox org (test.salesforce.com).
5. Select **Connect with Salesforce**, sign in and allow Linkbreakers. You come back to the page, connected to your org.
6. Under **Add contacts to a campaign**, choose an active campaign, or **No campaign: contacts only**.
7. Set the options and the delivery setting below, then save.

The access Salesforce grants is encrypted when it is stored and never shown. Linkbreakers renews it every week, so a connection whose links go quiet for a while does not expire. Disconnecting deletes it; you can also revoke it in Salesforce at any time.

## What gets synced

| Linkbreakers | Salesforce |
|---|---|
| Email | Email (the match) |
| First name, last name | First Name, Last Name |
| Phone | Phone |
| Form answers and other visitor data | Writable Contact or Lead fields with the same API name, or the one you map them to |
| The campaign you chose | A campaign member |
| Marketing consent | Email Opt Out |

An answer goes to the field with the same API name, such as `Company__c` or `LeadSource`, or to the field you map it to on the Salesforce page. Values are sent as the field takes them: a date as a date, a whole number for an integer field, and text cut to the field's length. Fields Linkbreakers cannot write, such as formulas, lookups and addresses, are left out. **Test connection** lists the field keys Linkbreakers can write to. To add one, create it in Salesforce under **Setup > Object Manager > Contact (and Lead) > Fields & Relationships**.

Salesforce requires a last name, and a Lead requires a company. A visitor who gave no last name gets the part of their email before the @, and a Lead with no company answer gets `[not provided]`, Salesforce's own placeholder.

## Options

**Contact or lead.** Under **What Salesforce gets for each person**:

- **The contact only**: a Contact
- **The contact and a lead**: a Lead instead of a Contact, unless the person is already a Contact
- **The contact and a deal**: a Contact and an Opportunity in the stage you choose (Salesforce has one opportunity pipeline). Its **Title** is the opportunity name, `{link}: {name}` by default, where `{link}` is the link's name and `{name}` the person's name or email. The close date is set 30 days after it is created, and the person is its primary contact

While a contact has an open opportunity, no new one is created: a visitor who goes through several steps gets one opportunity, not one per step. Once it is won or lost, a new visit creates a new one. The opportunity and its contact role are created together, or not at all.

**Campaign.** Only active campaigns are offered. Someone already in the campaign stays there.

**Marketing consent.** Choose the answer where people agree to hear from you: the **Linkbreakers consent** (a Consent field on your form, or the marketing consent goal of the [chat bot](/help/article/how-to-add-an-ai-chat-bot-to-a-qr-code)), or any other answer, such as a checkbox of your own. You can also tick **Add to the campaign only those who consented**: everyone is synced, only those who said yes join the campaign.

Salesforce has no tags Linkbreakers sets, and no double opt-in.

## Marketing consent in Salesforce

Consent is the **Email Opt Out** field (`HasOptedOutOfEmail`) on the Contact or Lead:

- **A new person who said yes** to your consent answer is created with Email Opt Out unticked
- **A new person who did not say yes** is created with Email Opt Out ticked, whatever your org's default. With no consent answer chosen, nobody has said yes, so every new person is opted out
- **An existing person who said yes** has Email Opt Out unticked
- **An existing person who did not say yes** is left as they are, so someone who opted out stays opted out

If the Salesforce user cannot edit Email Opt Out, people still sync, and the page shows that consent was not recorded until you give that access (step 3 above).

The Linkbreakers consent field is never pre-ticked, and each answer is kept on the visitor's profile with the wording they agreed to and when.

## Which visitors and which links

The Salesforce page has the same three settings as the other Linkbreakers integrations:

- **Where**: every link, or only some links, directories and tags
- **When**: the moments of a visit (Entry, Interaction, Routing, Exit), or specific steps
- **What is sent**: all visitor data, only some, or just the visit. Email and phone are always sent

Only visits by people are synced. Visits past your plan's tracked visits allowance are not synced.

## What is not synced

- Visitors without an email, including those known only by their phone. They are skipped, not counted as failures
- Answers with no matching writable field
- Accounts, tasks and other objects than Contacts, Leads, Campaign members and Opportunities
- Anything back from Salesforce but campaigns, fields and opportunity stages

## Set it up from the Assistant, MCP or the API

**Assistant**: in the dashboard, ask "Connect Salesforce and add new people to my Trade show campaign". It gives you the package install link if your org needs it, then a sign-in link.

**MCP server**: an agent connected to the [Linkbreakers MCP server](/help/article/mcp-server-setup) has `contact_integration_tool_info` (the package install links), `contact_integration_oauth_start` (the sign-in link), `contact_integration_lists` (the campaigns), `contact_integration_fields`, `contact_integration_pipelines` (the opportunity stages), `contact_integration_update`, `contact_integration_test`, `contact_integration_get`, `contact_integrations_list` and `contact_integration_disconnect`, with the tool `CONTACT_TOOL_SALESFORCE`. Salesforce never takes a key: the person opens the sign-in link, and Linkbreakers finishes the connection when they come back.

**REST API**, with a token that has the `integrations:write` scope:

```bash
curl -X POST https://api.linkbreakers.com/v1/integrations/contacts/CONTACT_TOOL_SALESFORCE/oauth/start \
  -H "Authorization: Bearer $LINKBREAKERS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"environment": "CONTACT_OAUTH_ENVIRONMENT_PRODUCTION"}'

curl -X PATCH https://api.linkbreakers.com/v1/integrations/contacts/CONTACT_TOOL_SALESFORCE \
  -H "Authorization: Bearer $LINKBREAKERS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contactListId": "701...", "options": {"consentAttributeKey": "$marketingConsent", "recordKind": "CONTACT_RECORD_KIND_DEAL", "pipelineId": "OPPORTUNITY", "stageId": "Prospecting"}}'
```

The sign-in link (`signInUrl`) works once, for 15 minutes, for the member who asked for it.

## When to use Salesforce flows or webhooks

The native connection writes Contacts, Leads, campaign members, opportunities and Email Opt Out. To assign owners, start a cadence or notify reps, build a Salesforce flow that starts when a campaign member or an opportunity is created. For objects the connection does not write, send [Linkbreakers webhooks](/help/article/how-do-webhooks-work-in-linkbreakers) to Zapier, Make or n8n.

## Limits and caveats

- **Email required.** Phone-only visitors are skipped
- **The package must be installed** in the org once, by an admin, before anyone signs in
- **One Salesforce org and one campaign per workspace**
- **Fields must exist** with a writable type, or the answer is left out
- **One open opportunity per contact**, by design. Opportunities are created for Contacts, not Leads
- **No retries.** A record Salesforce refuses, for example over a required field, a validation rule or a duplicate rule, is reported as the last error on the page, not sent again
- **One way.** Nothing is read back from Salesforce but campaigns, fields and opportunity stages

## Frequently asked questions

### Do I still need Zapier to send QR code leads to Salesforce?

No. Linkbreakers creates and updates Salesforce Contacts or Leads, campaign members and opportunities directly once you sign in.

### Why does an admin have to install a package first?

Salesforce lets an outside app sign in to an org only once that app is installed there. The Linkbreakers package holds nothing but that app. Install it once per org, for all users.

### Can I connect a sandbox?

Yes. Install the package with the sandbox link, choose **Sandbox** under **Sign in to**, then connect.

### Will someone who opted out of email be opted back in?

No. An existing person's Email Opt Out is unticked only when they consent through your form or chat bot. A visit without consent leaves it as it is.

### Will a visitor who fills two forms create two opportunities?

No. While the contact has an open opportunity, no new one is created.

### What happens when I disconnect Salesforce?

Visitors stop being synced and the stored access is deleted. Contacts, Leads and opportunities already in Salesforce stay there.

## Sources

- Linkbreakers Salesforce integration page, API and MCP tools, checked in the product on 2026-11-09.
- Salesforce REST API documentation: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/

## Last reviewed

2026-11-09 by Laurent Schaffner.
