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개
  1. 3월 8일 오후 4: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