Guides

Leadpipe + Salesforce: Complete Integration Guide

Send identified website visitors to Salesforce automatically. Map visitor data to leads, trigger workflows, and track pipeline from anonymous traffic.

Nicolas Canal Nicolas Canal · · 11 min read
Leadpipe + Salesforce: Complete Integration Guide

Salesforce already has your accounts, contacts, and pipeline. What it doesn’t have is the 97% of website visitors who never filled out a form. Leadpipe fixes that by identifying anonymous visitors and sending their data directly into Salesforce as leads, contacts, or tasks - automatically, in real time.

This guide walks you through the complete integration: webhook setup, field mapping, deduplication, workflow rules for high-intent visitors, and lead assignment. Whether you’re connecting through the API or using Zapier, you’ll have identified visitors flowing into Salesforce within 30 minutes.


Why Connect Leadpipe to Salesforce

Your sales team lives in Salesforce. If visitor data doesn’t show up there, it doesn’t exist to them.

Here’s what changes when you connect Leadpipe’s visitor identification to Salesforce:

Before LeadpipeAfter Leadpipe
97% of visitors are anonymous sessions in GA30-40% of visitors are identified with name, email, company
Reps only work inbound form fillsReps get warm leads who browsed pricing but didn’t convert
No attribution for “dark funnel” pipelineEvery identified visitor tied to source, pages, and duration
Manual lead entry from spreadsheetsAutomatic lead creation with full context

The speed advantage: Leads created from webhook triggers hit Salesforce within seconds of identification. Your reps can respond while the visitor is still thinking about your product.


What You’ll Need

Before starting, make sure you have:

  • Leadpipe account - Start free with 500 leads
  • Salesforce edition with API access (Professional+ or Enterprise)
  • Salesforce admin access to create fields and workflow rules
  • ~30 minutes for initial setup

Not using Salesforce? We also have a Zoho CRM integration guide.

You have two integration paths:

PathBest ForDifficulty
Webhook + ZapierNon-technical teams, quick setupEasy
Webhook + Custom MiddlewareHigh-volume teams, custom logicModerate

We’ll cover both. Start with Zapier if you want to be live in 15 minutes.


Step 1: Configure Leadpipe Webhooks

Leadpipe webhooks send visitor data to any endpoint the moment a visitor is identified. You’ll point this at either Zapier or your own middleware.

In Leadpipe:

  1. Go to Settings > Integrations > Webhooks
  2. Click Add Webhook
  3. Enter your destination URL (Zapier catch hook or custom endpoint)
  4. Select trigger type:
    • First Match - fires once per visitor on first identification (recommended for CRM)
    • Every Update - fires on every page view from identified visitors
  5. Save and send a test event

Use First Match for Salesforce. You want one clean lead record per visitor, not a new record for every page view. If you need behavioral data, use Every Update to update existing records (more on deduplication below).

Webhook Payload

Every webhook sends this data. These are the fields you’ll map to Salesforce:

{
  "email": "sarah.chen@acmecorp.com",
  "first_name": "Sarah",
  "last_name": "Chen",
  "company_name": "Acme Corp",
  "company_domain": "acmecorp.com",
  "job_title": "VP of Marketing",
  "linkedin_url": "linkedin.com/in/sarahchen",
  "page_url": "/pricing",
  "visit_duration": 245,
  "pages_viewed": ["/", "/features", "/pricing"],
  "city": "San Francisco",
  "state": "California",
  "country": "US"
}

For the full field reference, see the webhook payload guide.


Step 2: Map Leadpipe Fields to Salesforce Lead Fields

Here’s the complete field mapping from Leadpipe webhook data to Salesforce Lead object fields:

Leadpipe FieldSalesforce Lead FieldField TypeNotes
emailEmailStandardPrimary dedup key
first_nameFirstNameStandard
last_nameLastNameStandardRequired in Salesforce
company_nameCompanyStandardRequired in Salesforce
company_domainWebsiteStandardUse for account matching
job_titleTitleStandardCritical for ICP filtering
linkedin_urlLinkedIn_URL__cCustomCreate custom field
page_urlLast_Page_Viewed__cCustomCreate custom field
visit_durationVisit_Duration__cCustom (Number)Seconds on page
pages_viewedPages_Viewed__cCustom (Long Text)Join array as comma-separated
cityCityStandard
stateStateStandard
countryCountryStandard

Custom Fields to Create in Salesforce

Before connecting, create these custom fields on the Lead object:

  1. LinkedIn_URL__c (URL) - stores the visitor’s LinkedIn profile
  2. Last_Page_Viewed__c (Text, 255) - the page that triggered identification
  3. Visit_Duration__c (Number) - seconds spent on site
  4. Pages_Viewed__c (Long Text Area) - full page journey
  5. Lead_Source_Detail__c (Text, 255) - set to “Leadpipe Visitor ID”
  6. Intent_Level__c (Picklist) - High / Medium / Low (set via workflow)

To create custom fields: Setup > Object Manager > Lead > Fields & Relationships > New


This is the fastest way to get Leadpipe data into Salesforce. No code required.

Create the Zap

Trigger: Webhooks by Zapier (Catch Hook)

  1. In Zapier, create a new Zap
  2. Select Webhooks by Zapier as the trigger
  3. Choose Catch Hook
  4. Copy the webhook URL
  5. Paste it into Leadpipe’s webhook settings (Step 1)
  6. Send a test event from Leadpipe
  7. Zapier will capture the test payload and show you the available fields

Filter: Only High-Quality Leads (Optional but Recommended)

Add a Filter step to prevent low-quality visitors from cluttering Salesforce:

Only continue if:
  email - Does not contain - gmail.com, yahoo.com, hotmail.com
  AND
  company_name - Exists
  AND
  visit_duration - Greater than - 30

This ensures you’re only creating leads for visitors with business emails who spent meaningful time on your site. You can adjust thresholds based on your traffic patterns.

Action: Salesforce - Find or Create Lead

  1. Select Salesforce as the action app
  2. Choose Find or Create Record
  3. Object Type: Lead
  4. Search by: Email (this handles deduplication)
  5. Map fields using the table from Step 2
  6. Set Lead Source to “Website Visitor - Leadpipe”
  7. Set Lead Status to “New” (or your equivalent)

Why “Find or Create”? If a visitor is already in Salesforce (existing customer, previous form fill), you don’t want duplicates. The Find step checks for an existing record by email first. If found, you can update it instead of creating a duplicate.

Handling Duplicates with Every Update Triggers

If you’re using Every Update webhooks to track return visits, add a second Zap:

  1. Trigger: Catch Hook (same webhook, or a separate one)
  2. Action: Salesforce - Find Record (by email)
  3. Action: Salesforce - Update Record
    • Update Last_Page_Viewed__c with new page
    • Update Visit_Duration__c with cumulative time
    • Add a Task: “Return visit - viewed [page_url]”

This gives your reps a running log of engagement without creating duplicate leads.


Step 4: Workflow Rules for High-Intent Visitors

Not all visitors deserve the same response. Someone who read a blog post is different from someone who spent 4 minutes on your pricing page. Salesforce workflow rules let you automate the right response based on intent signals.

Rule 1: Pricing Page Visitor - Create Task

When: Lead created with Last_Page_Viewed__c contains “/pricing”

Then:

  • Create Task: “Hot lead - visited pricing page”
  • Priority: High
  • Due Date: Today
  • Assigned To: Lead owner
  • Send email alert to lead owner
Workflow Rule Setup:
  Object: Lead
  Rule Criteria: Last_Page_Viewed__c CONTAINS "/pricing"
  Immediate Actions:
    - New Task (Subject: "Pricing page visitor - respond within 1 hour")
    - Email Alert (to Lead Owner)

This ensures high-intent visitors don’t sit in a queue. Your rep gets a task and an email the moment someone browsing pricing is identified.

Rule 2: Long Session Duration - Set Priority

When: Lead created with Visit_Duration__c greater than 120

Then:

  • Set Intent_Level__c to “High”
  • Set Rating to “Hot”

Visitors who spend 2+ minutes on your site are actively researching, not casually browsing.

Rule 3: Return Visitor - Escalate

When: Lead updated with new task containing “Return visit”

Then:

  • Set Intent_Level__c to “High”
  • Create Task: “Return visitor - follow up immediately”
  • Send Slack notification (via Salesforce-Slack integration)

Return visitors have 3-5x higher conversion rates than first-time visitors. They’re comparing you to alternatives. Speed matters here.

Rule 4: Target Account Match - Fast Track

When: Lead created with Company matching your target account list

Then:

  • Assign to named account owner (not round-robin)
  • Create Task with Priority: Urgent
  • Set Lead Status to “Working”

If you maintain a target account list in Salesforce, this rule ensures identified visitors from those accounts get VIP treatment.


Step 5: Lead Assignment Rules

Default round-robin assignment works, but you can get smarter with Leadpipe data.

Assignment Based on Visitor Data

SignalAssignment Logic
page_url contains “/enterprise”Assign to enterprise sales team
company_name matches target accountAssign to named account owner
country = “US”Assign to US team
country = “UK” or “DE”Assign to EMEA team
job_title contains “VP” or “Director”Assign to senior AE
visit_duration > 180Assign to top-performing rep

Setup in Salesforce

Setup > Lead Assignment Rules > New Rule

Create criteria-based entries in priority order. The first matching rule wins, so put your most specific rules (target accounts, enterprise pages) at the top.

Example rule entries:

  1. Target account match → Named account owner
  2. Enterprise page + VP/Director title → Enterprise AE
  3. Pricing page + US → US sales team (round-robin)
  4. Pricing page + EMEA → EMEA sales team (round-robin)
  5. All others → General SDR queue

Step 6: The Direct API Path (Advanced)

For teams with developer resources or high webhook volume, you can skip Zapier and push leads directly to Salesforce via its REST API.

Architecture

Leadpipe Webhook → Your Middleware (Node.js/Python) → Salesforce REST API

Sample Node.js Middleware

const express = require('express');
const jsforce = require('jsforce');

const app = express();
app.use(express.json());

// Salesforce connection
const conn = new jsforce.Connection({
  loginUrl: 'https://login.salesforce.com'
});

app.post('/leadpipe-webhook', async (req, res) => {
  const visitor = req.body;

  // Skip personal emails
  const personalDomains = ['gmail.com', 'yahoo.com', 'hotmail.com'];
  const emailDomain = visitor.email?.split('@')[1];
  if (personalDomains.includes(emailDomain)) {
    return res.status(200).json({ skipped: true, reason: 'personal email' });
  }

  try {
    await conn.login(SF_USERNAME, SF_PASSWORD + SF_TOKEN);

    // Check for existing lead
    const existing = await conn.query(
      `SELECT Id FROM Lead WHERE Email = '${visitor.email}' LIMIT 1`
    );

    if (existing.records.length > 0) {
      // Update existing lead
      await conn.sobject('Lead').update({
        Id: existing.records[0].Id,
        Last_Page_Viewed__c: visitor.page_url,
        Visit_Duration__c: visitor.visit_duration
      });
    } else {
      // Create new lead
      await conn.sobject('Lead').create({
        Email: visitor.email,
        FirstName: visitor.first_name,
        LastName: visitor.last_name || 'Unknown',
        Company: visitor.company_name || visitor.company_domain || 'Unknown',
        Title: visitor.job_title,
        Website: visitor.company_domain,
        City: visitor.city,
        State: visitor.state,
        Country: visitor.country,
        LinkedIn_URL__c: visitor.linkedin_url,
        Last_Page_Viewed__c: visitor.page_url,
        Visit_Duration__c: visitor.visit_duration,
        Pages_Viewed__c: visitor.pages_viewed?.join(', '),
        LeadSource: 'Website Visitor - Leadpipe',
        Lead_Source_Detail__c: 'Leadpipe Webhook'
      });
    }

    res.status(200).json({ success: true });
  } catch (err) {
    console.error('Salesforce error:', err);
    res.status(500).json({ error: err.message });
  }
});

app.listen(3000);

This gives you full control over deduplication logic, field mapping, and filtering. You can also add enrichment steps (like calling the Leadpipe API for additional data) before pushing to Salesforce.


Deduplication Strategy

Duplicates are the biggest risk when pushing external data into Salesforce. Here’s a layered approach:

Layer 1: Leadpipe Trigger Selection

Use First Match webhooks. This sends one payload per visitor, eliminating webhook-level duplicates.

Layer 2: Email-Based Lookup

Always search Salesforce for an existing Lead or Contact by email before creating a new record. This catches:

  • Existing customers (already in Salesforce as Contacts)
  • Previous form fills (already Leads)
  • Visitors identified on previous sessions

Layer 3: Salesforce Duplicate Rules

As a safety net, configure Salesforce’s native duplicate detection:

Setup > Duplicate Management > Duplicate Rules

Create a rule on the Lead object:

  • Match on Email (exact match)
  • Action: Block or Alert (depending on your preference)

Layer 4: Domain-Level Dedup (Optional)

For account-based teams, you may want to prevent multiple leads from the same company:

IF company_domain matches existing Account.Website
  → Link to existing Account instead of creating new Lead

This is especially useful if you’re using Salesforce’s Account-Contact-Opportunity model and want visitors attached to existing accounts.


Reporting: Track Pipeline from Identified Visitors

Once leads are flowing in, build these reports to measure ROI:

Report 1: Identified Visitor Pipeline

Type: Leads with Lead Source = “Website Visitor - Leadpipe”

Columns:

  • Lead Name, Company, Title
  • Intent Level, Last Page Viewed
  • Status, Converted (Y/N)
  • Created Date

This shows your total pipeline generated from visitor identification.

Report 2: Conversion by Intent Level

Type: Summary report grouped by Intent_Level__c

Track conversion rates (Lead to Opportunity) by intent level. You should see high-intent visitors (pricing page, long duration) converting at 3-5x the rate of low-intent visitors.

Report 3: Speed to Response

Type: Leads with task completion time

Measure the gap between lead creation and first rep activity. Teams that respond within 1 hour see 7x higher qualification rates.

Dashboard

Create a Salesforce dashboard with:

  • Leads created this week (by Leadpipe)
  • Intent level breakdown (pie chart)
  • Top pages driving leads (bar chart by Last_Page_Viewed__c)
  • Conversion rate vs. form fills (comparison)
  • Average response time (gauge)

Common Mistakes to Avoid

Sending every visitor to Salesforce. Not every identified visitor is a lead. Filter out personal emails, bot traffic, and visitors with less than 15 seconds on site. Your reps will ignore a noisy queue.

Skipping deduplication. Without email-based lookup, you’ll create duplicate leads for return visitors and existing contacts. Always search before creating. If your Salesforce is already suffering from data quality issues, see our guide on why your Salesforce is full of bad data and how to fix it.

Using Every Update without logic. Every Update webhooks fire on every page view. Without logic to update existing records (not create new ones), you’ll flood Salesforce with duplicates.

Not setting Lead Source. If you don’t tag leads as “Website Visitor - Leadpipe,” you can’t measure ROI or compare to other channels.

Round-robin for target accounts. If a visitor from your #1 target account is identified, it should go to the named account owner, not the next rep in the queue.


What’s Next

Once you have visitors flowing into Salesforce, consider these extensions:

  • Add Clay enrichment between Leadpipe and Salesforce for additional data points (revenue, employee count, tech stack)
  • Set up Slack alerts in parallel so reps get instant notifications alongside the Salesforce record
  • Build an AI SDR workflow that drafts personalized outreach based on the visitor’s page journey
  • Connect to your ad platforms to measure which campaigns generate the highest-intent identified visitors