Enrich Agent - Installation and Usage Guide
Overview
PipeLaunch Enrich Agent is a modular Salesforce package that enables you to parse and store enriched profile data (Person and Company profiles) from PipeLaunch's data enrichment services. The architecture follows a Core + Addons design, allowing you to install only the components you need.

Installation
Prerequisites
- Salesforce Production or Sandbox org
- System Administrator access
- Knowledge of which data structure you want to use (standard Enrich Agent objects or integration with existing packages)
Installation Links
To receive installation links for the Enrich Agent packages, please contact our team:
📧 Email: support@pipelaunch.com
In your request, please specify:
- Which addons you're interested in (see Available Addons below)
- Your use case (Person enrichment, Company enrichment, or both)
Our team will provide you with the appropriate installation URLs for your needs.
Installation Steps
- Install Core Package First
- Click the installation link provided by our team
- Choose "Install for All Users" (recommended) or select specific profiles
- Approve third-party access to be able to load profile pictures from the PipeLaunch API
- Wait for installation to complete
- Install Addon Package(s)
- After Core is installed, install your chosen addon(s)
- Follow the same installation process as Core
- Each addon depends on Core and cannot be installed independently
- Assign Permission Set
- Navigate to Setup → Permission Sets
- Find and open the Enrich Agent permission set
- Click Manage Assignments
- Add users who need to create/edit enriched data
Core Package
What's Included in Core
The Core package provides the foundation for all enrichment operations:
JSON Parsing & Data Structures
- PersonProfileWrapper: Parses Person Profile JSON from PipeLaunch
- CompanyProfileWrapper: Parses Company Profile JSON from PipeLaunch
- Address, Email, Phone, and other wrappers: Handle nested data structures
Request/Response Models
- EnrichmentRecordCreationRequest: Standardized input for record creation
- EnrichmentRecordCreationResponse: Standardized output with success/error info
- EnrichmentFlowJsonRequest: Flow-friendly input model
- EnrichmentFlowCreateResponse: Flow-friendly output model
Matching Services
- CompanyMatchingService: Find existing Account/Company records based on name, website, LinkedIn URL, etc.
- CompanyMatchingFlowAction: Flow-accessible company matching
Core Permission Sets
Enrich Agent
Purpose: Full access for users who need to create and manage enriched data
Grants Access To:
- Create, read, update, delete enriched profile records
- Execute all Flow Actions
- Use all invocable methods
Enrich Agent Data Viewer
Purpose: Read-only access for users who only need to view enriched data
Grants Access To:
- Read enriched profile records
- View related data (education, employment, skills, etc.)
- No create/edit/delete permissions
Available Addons
Person Profile Addon
Purpose: Standard implementation for storing Person Profile data in custom Enrich Agent objects
Custom Objects Created:
EnrichAgentPersonProfile__c- Main profile recordEnrichAgentPersonProfileEducation__c- Education historyEnrichAgentPersonProfileExperience__c- Employment historyEnrichAgentPersonProfileLanguage__c- Languages spokenEnrichAgentPersonProfileSkill__c- Skills with endorsements
Best For:
- Organizations without existing ATS or recruiting packages
- Need for flexible custom profile data structure
- Want to track detailed endorsements and skills
Flow Action Available: ✅ Create PersonProfile Records from JSON
Seven20 Addon
Purpose: Integration with Seven20 ATS (Applicant Tracking System) managed package
Uses Existing Seven20 Objects:
seven20__Employment_History__c- Maps to experience dataseven20__Education_History__c- Maps to education data- Links to
seven20__Contact__crecords
Requirements:
- Seven20 package must be installed in your org
- Contact records must exist in Seven20 structure
Best For:
- Organizations already using Seven20 ATS
- Want to enrich existing candidate/contact records
- Need to maintain Seven20 data relationships
Flow Action Available: ✅ Create Seven20 Records from PersonProfile JSON
Company Profile Addon
Purpose: Standard implementation for storing Company Profile data in custom Enrich Agent objects
Custom Objects Created:
EnrichAgentCompanyProfile__c- Main company profileEnrichAgentCompanyProfileAddress__c- Company addresses- Additional company-specific fields
Best For:
- Organizations tracking detailed company data
- Account enrichment workflows
- Lead routing based on company attributes
Education Cloud Addon
Purpose: Integration with Salesforce Education Cloud
Target Recruit Addon
Purpose: Integration with Target Recruit ATS
Using Invocable Flow Actions
Enrich Agent provides Flow Actions that allow you to create enriched records directly from Salesforce Flows without writing code.
Available Flow Actions
1. Create PersonProfile Records from JSON
Addon: Person Profile
Category: Enrich Agent - Person Profile
Use Case: Parse PipeLaunch Person Profile JSON and create records in EnrichAgentPersonProfile__c and related objects.
Input Variables:
jsonData(Text, Required) - The Person Profile JSON string from PipeLaunchrelatedContactId(Text, Optional) - Salesforce Contact ID to link the profile torelatedAccountId(Text, Optional) - Salesforce Account ID to link the profile torelatedLeadId(Text, Optional) - Salesforce Lead ID to link the profile tooptionsJson(Text, Optional) - Configuration options (see Options section below)
Output Variables:
isSuccess(Boolean) - True if records were created successfullyenrichmentRecordId(Text) - ID of the created EnrichAgentPersonProfile__c recorderrorMessage(Text) - Error details if isSuccess is falsesummary(Text) - Human-readable summary of the operation
Example Flow:
1. Get JSON from PipeLaunch API (or Platform Event)
2. Action: Create PersonProfile Records from JSON
- jsonData: {!JsonFromAPI}
- relatedContactId: {!Contact.Id}
- optionsJson: {"PersonProfileRecordCreator":{"disableSkillCreation":false}}
3. Decision: Check {!isSuccess}
- True: Update Contact with enrichmentRecordId
- False: Send email with errorMessage
2. Create Seven20 Records from PersonProfile JSON
Addon: Seven20
Category: Enrich Agent - Seven20
Use Case: Parse PipeLaunch Person Profile JSON and create records in Seven20 objects (seven20__Employment_History__c, seven20__Education_History__c).
Input Variables:
jsonData(Text, Required) - The Person Profile JSON string from PipeLaunchrelatedContactId(Text, Required) - Seven20 Contact IDoptionsJson(Text, Optional) - Configuration options
Output Variables:
isSuccess(Boolean) - True if records were created successfullyerrorMessage(Text) - Error details if isSuccess is falsesummary(Text) - Human-readable summary of the operationenrichmentRecordId(Text) - Always null (Seven20 doesn't create a main profile record)
Example Flow:
1. Get JSON from PipeLaunch API
2. Action: Create Seven20 Records from PersonProfile JSON
- jsonData: {!JsonFromAPI}
- relatedContactId: {!Seven20Contact.Id}
3. Decision: Check {!isSuccess}
- True: Log success
- False: Create task for manual review
3. Enrich Agent: Find Matching Company (BETA)
Package: Core
Category: Enrichment
Use Case: Find existing Account or custom company records based on company name, website, LinkedIn URL, or domain before creating duplicates.
Input Variables:
companyName(Text) - Company name to search forwebsite(Text) - Company website URLlinkedinUrl(Text) - Full LinkedIn company URLlinkedinId(Text) - LinkedIn company IDlinkedinSlug(Text) - LinkedIn company slugdomain(Text) - Company domain (e.g., "pipelaunch.com")objectName(Text, Default: "Account") - Object to search (Account or custom object API name)fieldMappingJson(Text, Optional) - Custom field mapping JSONrecordTypeIds(Text, Optional) - Comma-separated Record Type IDs to filter by
Output Variables:
matchesCount(Number) - Total number of matches foundbestMatchId(Text) - Record ID of the best matchbestMatchScore(Number) - Confidence score (0-100)bestMatchMessage(Text) - Explanation of why this was the best matchmatchIds(Text) - Comma-separated list of all matching record IDs
Example Flow:
1. Get company data from enrichment source
2. Action: Find Matching Company
- companyName: {!CompanyName}
- website: {!Website}
- objectName: "Account"
3. Decision: Check {!matchesCount} > 0
- True: Update existing Account {!bestMatchId}
- False: Create new Account
Configuration Options (optionsJson)
Options allow you to control record creation behavior. Pass options as a JSON string to the optionsJson parameter.
Person Profile Options
PersonProfileRecordCreator Options
Control the standard Person Profile addon behavior:
{
"PersonProfileRecordCreator": {
"isDisabled": false,
"duplicationBehavior": "AVOID_DUPLICATES",
"disableCompanyMatching": false,
"disableEducationCreation": false,
"disableExperienceCreation": false,
"disableLanguageCreation": false,
"disableSkillCreation": false
}
}
Options Explained:
isDisabled- Skip this creator entirely (useful when using multiple addons)duplicationBehavior- "AVOID_DUPLICATES" (default) or "CREATE_DUPLICATES"disableCompanyMatching- Don't try to match employment/education to existing AccountsdisableEducationCreation- Don't create education recordsdisableExperienceCreation- Don't create employment recordsdisableLanguageCreation- Don't create language recordsdisableSkillCreation- Don't create skill records
Example: Create Only Main Profile (No Related Records)
{
"PersonProfileRecordCreator": {
"disableEducationCreation": true,
"disableExperienceCreation": true,
"disableLanguageCreation": true,
"disableSkillCreation": true
}
}
Example: Allow Duplicate Records
{
"PersonProfileRecordCreator": {
"duplicationBehavior": "CREATE_DUPLICATES"
}
}
Seven20PersonProfileRecordCreator Options
Control the Seven20 addon behavior:
{
"Seven20PersonProfileRecordCreator": {
"isDisabled": false,
"duplicationBehavior": "AVOID_DUPLICATES"
}
}
Combined Options
You can configure multiple creators at once:
{
"PersonProfileRecordCreator": {
"disableSkillCreation": true
},
"Seven20PersonProfileRecordCreator": {
"duplicationBehavior": "CREATE_DUPLICATES"
}
}
Working from Signals Logs
PipeLaunch Signals can trigger enrichment events that your Salesforce org receives via Platform Events or API callbacks. Here's how to build a Flow that processes these signals.
Scenario: Person Profile Enrichment from Signal
Setup:
- PipeLaunch Signals detects a new LinkedIn profile visit
- Signals enriches the profile and sends JSON to your Salesforce org
- Your Flow receives the data and creates records
Flow Design Pattern
START: Platform Event Received (or Record-Triggered Flow)
│
├─ Get Variables
│ ├─ JSON Data from Signal
│ ├─ Contact/Lead ID (if known)
│ └─ Signal Type
│
├─ Decision: Is this a Person Profile Signal?
│ │
│ ├─ YES:
│ │ ├─ Action: Create PersonProfile Records from JSON
│ │ │ └─ Input: jsonData, relatedContactId, optionsJson
│ │ │
│ │ ├─ Decision: Was Creation Successful?
│ │ │ ├─ YES:
│ │ │ │ ├─ Update Contact/Lead with enrichmentRecordId
│ │ │ │ └─ Log success to custom object
│ │ │ └─ NO:
│ │ │ ├─ Create Task for manual review
│ │ │ └─ Send email notification
│ │ │
│ │ └─ END
│ │
│ └─ NO: Check other signal types
│
END
Example: Auto-Enrichment Flow
Trigger: When a Lead or Contact is created with a LinkedIn URL
Steps:
- Record-Triggered Flow on Lead/Contact (After Save)
- Criteria: LinkedIn URL is not blank AND Enrich Agent Profile lookup is blank
- Call PipeLaunch API (via HTTP Callout or middleware)
- Get enriched JSON response
- Action: Create PersonProfile Records from JSON
- jsonData: {!APIResponse}
- relatedContactId: {!$Record.Id}
- Update {!$Record} with the enrichmentRecordId
- Post Chatter message to record owner
Example: Batch Enrichment from Signals Log
If you maintain a custom object to log incoming Signals:
Object: Signal_Log__c
Fields:
JSON_Data__c(Long Text Area)Contact__c(Lookup)Status__c(Picklist: Pending, Processed, Failed)
Flow: Scheduled Flow (runs daily)
- Get Records: Signal_Log__c WHERE Status = Pending
- Loop through records
- For each record:
- Action: Create PersonProfile Records from JSON
- Decision on success:
- Update Status = Processed
- Or Status = Failed with error message
- Send summary email to admin
Best Practices
1. Test in Sandbox First
Always test your Flows and enrichment processes in a Sandbox before deploying to Production.
2. Use Duplicate Prevention
Unless you have a specific reason to create duplicates, always use "duplicationBehavior": "AVOID_DUPLICATES" (the default).
3. Selective Record Creation
If you don't need all related records (skills, languages, etc.), disable their creation to reduce API limits and storage:
{
"PersonProfileRecordCreator": {
"disableLanguageCreation": true,
"disableSkillCreation": true
}
}
4. Company Matching
Use the Find Matching Company action BEFORE creating employment/education records to ensure proper Account linkage.
5. Error Handling
Always check isSuccess in your Flow and handle failures gracefully:
- Create tasks for manual review
- Log errors to a custom object
- Send notifications to administrators
6. Permission Set Assignment
- Assign Enrich Agent permission set only to users who need to create data
- Use Enrich Agent Data Viewer for reporting users
- Automated processes (Flow, Apex) run in system context and don't need permission sets
7. Monitor API Limits
Enrichment creates multiple records per operation. Monitor your org's:
- DML statements
- SOQL queries
- API calls (if calling external enrichment services)
Troubleshooting
"Failed to parse JSON"
Cause: The JSON string is invalid or doesn't match the expected PersonProfileWrapper structure.
Solution:
- Validate JSON format using a JSON validator
- Check that the JSON comes from PipeLaunch in the correct format
- Review error message for specific parsing issues
"No matching company found"
Cause: Company matching couldn't find an existing Account/Company record.
Solution:
- Verify the company name/website in the JSON
- Check that matching criteria are not too strict
- Create the company record first, then re-run enrichment
"FLS Error" or "Insufficient Privileges"
Cause: User or automated process lacks field-level or object-level permissions.
Solution:
- Ensure Enrich Agent permission set is assigned
- For Flows, confirm the Flow runs in System Mode or user has proper access
- Check Field-Level Security on custom objects
Records Created in Wrong Addon
Cause: Multiple addons installed and wrong Flow Action used.
Solution:
- Use Create PersonProfile Records for standard Enrich Agent objects
- Use Create Seven20 Records for Seven20 integration
- Check the Flow Action category to confirm correct addon
Support
For questions, issues, or feature requests:
📧 Email: support@pipelaunch.com
Please include:
- Your Salesforce org ID
- Installed package versions
- Description of the issue
- Any error messages or screenshots
- Example JSON (with sensitive data redacted)
Additional Resources
Version: 1.0
Last Updated: November 2025
Document Owner: PipeLaunch Support Team
Updated on: 20/11/2025
