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?
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
- Web form submitted → Apex/Flow checks for existing Lead/Contact by email
- Match found → Create new Inbound_Request__c record linked to existing Lead
- Campaign Member created → Link to the campaign for this specific product
- Assignment rules fire → Route Inbound Request to appropriate specialist based on product/service
- Sales works the request → Specialist updates Inbound Request status, not Lead status
- 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 recordObject 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
thisrequest
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
- ✅ Create Inbound_Request__c custom object
- ✅ Build web-to-lead/form handler (Apex/Flow)
- ✅ Configure duplicate matching rules (Lead/Contact)
- ✅ Set up assignment rules on Inbound Request
- ✅ Create Campaign Member automation
- ✅ Build related lists on Lead/Contact layouts
- ✅ Train sales team on new process
- ✅ Build reports/dashboards for visibility
- ✅ 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.