Drips × Connect The Dots
Play 1 · Live

Contact LinkedIn enrichment & warm intro email

When a Contact is created or LinkedIn_Profile__c is updated, CTD enriches the record and emails the account owner with warm paths, optional Claude draft links, and ghost-email share via CTD API from Claude.

Flow Contact_LinkedIn_CTD_API_Enrichment Async after commit May 2026

End-to-end flow

Record-triggered on Contact. Apex: paths callout, reachable-person callout, six-field DML, then email.

Apex order: paths callout (2a) → reachable-person callout (2b) → Contact DML, six fields (3b) → Messaging.sendEmail (3a). No callouts after uncommitted DML.

CTD APIs

Named Credential CTD_API_NC · Enterprise key · https://api.ctd.ai

②a Global paths
Method
GET
Path
/enterprise/atc-paths-api/public/v2/global/paths
Query
person_linkedin_url, degree[]=first, degree[]=second
Apex
CTDContactPathsEmailBuilder
Example response

Play 1 uses up to 5 paths from paths[] for the owner email: recommended intro, alternates, connector names, overlap context, and per-path Claude draft links. Sample shows 8 paths returned; Apex displays the top 5.

Expand to load example…
②b Reachable person
Method
GET
Path
/enterprise/atc-paths-api/public/v1/reachable-person
Query
person_linkedin_url
Apex
CTDContactReachablePersonEnricher
Example response

Play 1 maps six fields on Contact from person: total_paths, total_2nd_degree_paths, ctd_score, ctd_score_scaled, ctd_score_label, is_target_person. Other fields are returned for context but not written to Salesforce.

{
  "person": {
    "name": "Drew Sechrist",
    "linkedin_id": "drewsechrist",
    "title": "Co-Founder & CEO",
    "company_name": "Connect The Dots",
    "company_linkedin_url": "https://www.linkedin.com/company/connect-the-dots-ai",
    "location": "San Francisco, California, United States",
    "is_target_person": true,
    "ctd_score": 10009.5834633,
    "ctd_score_scaled": 3,
    "ctd_score_label": "strong",
    "person_ctd_url": "https://app.ctd.ai/people/d9ccfe12-db14-46ba-9d89-e4329f00c9b9",
    "company_ctd_url": "https://app.ctd.ai/companies/e04461e9-4a24-4468-8307-c4c3ec60de56",
    "total_paths": 1628,
    "total_2nd_degree_paths": 265,
    "total_strong_paths": 222,
    "current_roles": [
      {
        "title": "Co-Founder & CEO",
        "company_name": "Connect The Dots",
        "domain_names": [],
        "ctd_url": "https://app.ctd.ai/companies/e04461e9-4a24-4468-8307-c4c3ec60de56",
        "is_current": true,
        "is_primary": true,
        "when_started": "2019-01-22T23:00:00.000Z",
        "when_ended": null,
        "company_industry": null
      }
    ],
    "former_roles": [
      {
        "title": "CRO",
        "company_name": "Rocketrip",
        "domain_names": [],
        "ctd_url": "https://app.ctd.ai/companies/59842941-63f4-4c38-b773-b0bedce8526c",
        "is_current": false,
        "is_primary": false,
        "when_started": "2016-07-14T22:00:00.000Z",
        "when_ended": "2017-06-14T22:00:00.000Z",
        "company_industry": null
      },
      {
        "title": "Investor, Advisor, Traveler, Student",
        "company_name": "Investor, Advisor, Traveler, Student",
        "domain_names": [],
        "ctd_url": null,
        "is_current": false,
        "is_primary": false,
        "when_started": "2014-11-30T23:00:00.000Z",
        "when_ended": "2016-05-31T22:00:00.000Z",
        "company_industry": null
      },
      {
        "title": "CEO",
        "company_name": "Koozoo",
        "domain_names": [],
        "ctd_url": "https://app.ctd.ai/companies/301d2070-05c6-40ba-ba73-4d2c7feb1ba9",
        "is_current": false,
        "is_primary": false,
        "when_started": "2010-03-31T22:00:00.000Z",
        "when_ended": "2014-11-30T23:00:00.000Z",
        "company_industry": null
      },
      {
        "title": "VP, High Tech Vertical",
        "company_name": "Salesforce",
        "domain_names": [],
        "ctd_url": "https://app.ctd.ai/companies/250e1b51-203f-4056-8c7a-b451734abc7b",
        "is_current": false,
        "is_primary": false,
        "when_started": "1999-11-01T23:00:00.000Z",
        "when_ended": "2010-04-01T22:00:00.000Z",
        "company_industry": null
      }
    ]
  }
}

Salesforce Contact fields

Written by automation

SalesforceAPI fieldMeaning
CTD_Total_Paths__ctotal_pathsPath count
CTD_Total_2nd_Degree_Paths__ctotal_2nd_degree_paths2nd-degree paths
CTD_Score__cctd_scoreRaw score
CTD_Score_Scaled__cctd_score_scaledScaled (1–3)
CTD_Score_Label__cctd_score_labelweak / medium / strong
CTD_Is_Target_Person__cis_target_personTarget persona

Trigger input: LinkedIn_Profile__c

Show on Contact page

FieldAEWhy
CTD_Total_Paths__cShowPath signal
CTD_Score_Label__cShowPlain language
CTD_Is_Target_Person__cShowICP fit
CTD_Total_2nd_Degree_Paths__cOptionalPower users
CTD_Score__cOptionalRaw numeric
CTD_Score_Scaled__cOptionalScaled 1–3

Email to owner

GreetingHi {Owner.FirstName},
SubjectWarm intro to {target} at {account}
To{!$Record.Owner.Email} in prod
CTADraft in Claude per path → share ghost email via CTD API

Components

FlowContact_LinkedIn_CTD_API_Enrichment
ApexCTDContactPathsEmailAction
Perm setCTD_Contact_Enrichment_Fields
Packagesf-flow-ctd-email/

How to run & verify

Account executive

  1. Create or update Contact LinkedIn URL
  2. Check inbox for warm intro email
  3. Read Our recommendation
  4. Click Draft intro email (Claude) and polish the ghost email
  5. In Claude, share the ghost email with the connector via CTD API (connector sends from CTD)

Admin test

  1. Re-save LinkedIn on a test Contact
  2. Confirm CTD Path Enrichment fields
  3. Confirm email + Claude links
  4. Check Flow run history if needed

Production checklist

  • Flow toAddress{!$Record.Owner.Email}
  • Enterprise API key + CTD_API_NC configured
  • Permission set assigned to AEs
  • Org email deliverability confirmed

Step-by-step deploy guide (Miller) →