Articles on: Enrich Agent

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)



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


  1. 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


  1. 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


  1. 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 record
  • EnrichAgentPersonProfileEducation__c - Education history
  • EnrichAgentPersonProfileExperience__c - Employment history
  • EnrichAgentPersonProfileLanguage__c - Languages spoken
  • EnrichAgentPersonProfileSkill__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 data
  • seven20__Education_History__c - Maps to education data
  • Links to seven20__Contact__c records


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 profile
  • EnrichAgentCompanyProfileAddress__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 PipeLaunch
  • relatedContactId (Text, Optional) - Salesforce Contact ID to link the profile to
  • relatedAccountId (Text, Optional) - Salesforce Account ID to link the profile to
  • relatedLeadId (Text, Optional) - Salesforce Lead ID to link the profile to
  • optionsJson (Text, Optional) - Configuration options (see Options section below)


Output Variables:


  • isSuccess (Boolean) - True if records were created successfully
  • enrichmentRecordId (Text) - ID of the created EnrichAgentPersonProfile__c record
  • errorMessage (Text) - Error details if isSuccess is false
  • summary (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 PipeLaunch
  • relatedContactId (Text, Required) - Seven20 Contact ID
  • optionsJson (Text, Optional) - Configuration options


Output Variables:


  • isSuccess (Boolean) - True if records were created successfully
  • errorMessage (Text) - Error details if isSuccess is false
  • summary (Text) - Human-readable summary of the operation
  • enrichmentRecordId (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 for
  • website (Text) - Company website URL
  • linkedinUrl (Text) - Full LinkedIn company URL
  • linkedinId (Text) - LinkedIn company ID
  • linkedinSlug (Text) - LinkedIn company slug
  • domain (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 JSON
  • recordTypeIds (Text, Optional) - Comma-separated Record Type IDs to filter by


Output Variables:


  • matchesCount (Number) - Total number of matches found
  • bestMatchId (Text) - Record ID of the best match
  • bestMatchScore (Number) - Confidence score (0-100)
  • bestMatchMessage (Text) - Explanation of why this was the best match
  • matchIds (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 Accounts
  • disableEducationCreation - Don't create education records
  • disableExperienceCreation - Don't create employment records
  • disableLanguageCreation - Don't create language records
  • disableSkillCreation - 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:


  1. PipeLaunch Signals detects a new LinkedIn profile visit
  2. Signals enriches the profile and sends JSON to your Salesforce org
  3. 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:


  1. Record-Triggered Flow on Lead/Contact (After Save)
  2. Criteria: LinkedIn URL is not blank AND Enrich Agent Profile lookup is blank
  3. Call PipeLaunch API (via HTTP Callout or middleware)
  4. Get enriched JSON response
  5. Action: Create PersonProfile Records from JSON
    • jsonData: {!APIResponse}
    • relatedContactId: {!$Record.Id}
  1. Update {!$Record} with the enrichmentRecordId
  2. 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)


  1. Get Records: Signal_Log__c WHERE Status = Pending
  2. Loop through records
  3. For each record:
    • Action: Create PersonProfile Records from JSON
    • Decision on success:
      • Update Status = Processed
      • Or Status = Failed with error message
  1. 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