Skip to main content

Hello Guys, 

 

How to handle multiple inbound interests for an existing Lead/Contact without creating duplicates?

The Scenario: A prospect (Lead or Contact) exists in the CRM but submits a new webform for a different product/service (captured in a custom "Inbound Request" object).

The Conflict: * If we use a single Lead record, we risk overwriting the original "Lead Source" and "Status," making it hard for Sales to track new, active interests vs. old, dead ones.

• If we create duplicate Leads, we fragment the Customer 360 view, break Account Engagement (Pardot) syncing/scoring, and create massive data debt.

The Goal: Find a way to route the new request to the right specialist and track Marketing Campaign ROI (Attribution) for each specific interest, while keeping a unique "Identity" record and using the standard Salesforce "Convert" button.

What is the best architectural approach to balance Sales UX, Marketing Attribution, and Data Integrity?

2 respostas
  1. 8 de mar., 16:45

    Best Architectural Approach for Multiple Inbound Interests

    This is a classic Salesforce challenge, and you're right to be concerned about data integrity vs. sales UX. Here's the recommended architecture that balances all three goals:

    Recommended Solution: Custom "Inbound Request" Object Pattern

    Core Architecture

    1. Single Lead/Contact Record (Identity Layer)

    • Maintain one Lead or Contact record per person (your "identity" record)
    • Use duplicate matching rules to prevent creation of duplicate Leads/Contacts
    • Keep the original Lead Source and Status intact on this record

    2. Custom "Inbound Request" Object (Interest Layer)

    • Create a child object related to Lead/Contact: Inbound_Request__c
    • Each web form submission creates a new Inbound Request record, not a new Lead
    • This object captures:
      • Product/Service of interest
      • Campaign attribution (via Campaign Member)
      • Request date/time
      • Lead Source for this specific request
      • Status (New, Contacted, Qualified, Dead, Converted)
      • Assigned specialist/owner

    3. Campaign Members (Attribution Layer)

    • Link each Inbound Request to a Campaign for marketing attribution
    • Use Campaign Member to track ROI per product/interest
    • Maintain full marketing funnel visibility

    How It Works

    Scenario: Existing Lead Submits New Form

    1. Web form submitted → Apex/Flow checks for existing Lead/Contact by email
    2. Match found → Create new Inbound_Request__c record linked to existing Lead
    3. Campaign Member created → Link to the campaign for this specific product
    4. Assignment rules fire → Route Inbound Request to appropriate specialist based on product/service
    5. Sales works the request → Specialist updates Inbound Request status, not Lead status
    6. Conversion → When ready, use standard Lead Convert (or custom conversion for Contacts)

    Benefits of This Approach

    No duplicate Leads

    → Single identity record per person 

    Preserve Lead Source

    → Original attribution stays intact 

    Track multiple interests

    → Each Inbound Request = one interest 

    Proper routing

    → Assignment rules on Inbound Request object 

    Marketing attribution

    → Campaign Members per request 

    Sales UX

    → Clear view of active vs. old interests 

    Standard Convert button → Still works on the Lead record

    Object Schema

    HTML

     

    Lead/Contact (Identity)

    ├── Inbound_Request__c (Interest 1)

    │ ├── Campaign_Member__c → Campaign A

    │ ├── Product__c: "Service A"

    │ ├── Status__c: "Dead"

    │ └── Lead_Source__c: "Webinar 2024"

    ├── Inbound_Request__c (Interest 2)

    │ ├── Campaign_Member__c → Campaign B

    │ ├── Product__c: "Service B"

    │ ├── Status__c: "New"

    │ └── Lead_Source__c: "Web Form 2025"

    └── Inbound_Request__c (Interest 3)

    ├── Campaign_Member__c → Campaign C

    ├── Product__c: "Service C"

    ├── Status__c: "Qualified"

    └── Lead_Source__c: "Referral"

    Key Fields on Inbound_Request__c

    FieldTypePurpose

    Lead__c / Contact__c | Lookup | Link to identity record 

    Product_Service__c | Picklist | What they're interested in 

    Request_Status__c | Picklist | New, Contacted, Qualified, Dead, Converted 

    Lead_Source__c | Text | Source for

    this

    request 

    Campaign__c | Lookup | Marketing campaign attribution 

    Assigned_Specialist__c | Lookup (User) | Who's working this request 

    Request_Date__c | DateTime | When submitted 

    Notes__c | Long Text | Specialist notes

    Automation & Routing

    1. Web-to-Lead/Web-to-Case Flow:

    HTML

     

    Web Form Submission

    Check for existing Lead/Contact (by email)

    If exists → Create Inbound_Request__c (linked to existing)

    If new → Create Lead + Inbound_Request__c

    Create Campaign Member

    Assignment Rule: Route Inbound_Request to specialist based on Product__c

    Email notification to specialist

    2. Lead Conversion:

    • When specialist qualifies the request, they can convert the Lead (standard button)
    • Post-conversion: Inbound Request links to the new Contact/Opportunity
    • Historical requests remain visible on Contact record

    Sales UX: What Reps See

    Lead/Contact Record:

    • Related List: "Inbound Requests" (all interests, current and historical)
    • Quick view: Which requests are active vs. dead
    • Original Lead Source preserved

    Inbound Request Record:

    • Clear status per interest
    • Specialist assignment
    • Campaign attribution
    • Product/service details

    Reports & Dashboards:

    • Active requests by product
    • Conversion rates per campaign
    • Specialist workload
    • Marketing ROI by product line

    Marketing Attribution

    Use Campaign Influence or custom reporting:

    • Each Inbound Request → Campaign Member
    • Track first touch, last touch, multi-touch attribution
    • Report on ROI per product/campaign
    • Maintain full funnel visibility

    Alternative Considerations

    Why NOT use Opportunities for this?

    • Opportunities imply qualified sales stage
    • Inbound Requests may be early-stage inquiries
    • You want to track interest before opportunity

    Why NOT use Cases?

    • Cases are for support, not sales inquiries
    • Doesn't integrate well with Lead conversion
    • Marketing attribution is harder

    Why NOT use multiple Leads?

    • Fragments Customer 360 view (your concern)
    • Breaks Pardot/Account Engagement scoring
    • Creates massive data debt
    • Duplicate management nightmare

    Implementation Checklist

    1. ✅ Create Inbound_Request__c custom object
    2. ✅ Build web-to-lead/form handler (Apex/Flow)
    3. ✅ Configure duplicate matching rules (Lead/Contact)
    4. ✅ Set up assignment rules on Inbound Request
    5. ✅ Create Campaign Member automation
    6. ✅ Build related lists on Lead/Contact layouts
    7. ✅ Train sales team on new process
    8. ✅ Build reports/dashboards for visibility
    9. ✅ Integrate with Pardot/Account Engagement

    Copado DevOps Consideration

    When deploying this solution through Copado:

    • Metadata: Custom object, fields, flows, assignment rules
    • Data: May need data templates for testing in sandboxes
    • Testing: Use Copado Robotic Testing to automate form submission scenarios
    • Quality Gates: PMD checks on Apex handlers, flow best practices

    This architecture gives you the best of all worlds: clean data, proper attribution, sales efficiency, and the ability to use standard Salesforce features like Lead conversion. It's a proven pattern used by many organizations facing the same challenge.

0/9000