Skip to main content

Find LinkedIn URL

Search for a LinkedIn profile URL using various identifying parameters.

Method

services.person.linkedin.findUrl(params);

Parameters

name
string
Full name of the person
title
string
Job title or position
company
string
Current or past company name
keyword
string
Additional keywords to refine search
email
string
Email address associated with the profile

Returns

Returns a Promise<string | undefined> containing the LinkedIn profile URL if found.

Example

// Find LinkedIn profile for a prospect in your spreadsheet
const name = ctx.thisRow.get("Name");
const company = ctx.thisRow.get("Company");
const title = ctx.thisRow.get("Title");

const linkedinUrl = await services.person.linkedin.findUrl({
   name,
   title,
   company,
});

ctx.thisRow.set({ "LinkedIn URL": linkedinUrl });

Enrich LinkedIn Profile

Get comprehensive information from a LinkedIn profile including work experience, education, skills, and more.

Method

services.person.linkedin.enrich(params);

Parameters

url
string
required
The LinkedIn profile URL to enrich

Returns

Returns a Promise with a comprehensive profile object containing:
full_name
string
Complete name of the person
name_first
string
First name
name_last
string
Last name
headline
string
Professional headline from LinkedIn
job_title
string
Current job title
company_id
number
ID of current company
description
string
Profile summary/about section
picture_url
string
Profile picture URL
websites_linkedin
string
The LinkedIn profile URL
follower_count
number
Number of LinkedIn followers
connections_count
number
Number of LinkedIn connections
skills
string[]
Array of skills listed on the profile
location_raw_address
string
Full location string
location_city
string
City
location_state
string
State or region
location_country
string
Country name
experience
array
Array of work experience entries
education
array
Array of education entries
certifications
array
Professional certifications
languages
array
Languages and proficiency levels
recommendations
array
LinkedIn recommendations received
awards
array
Awards and honors
courses
array
Courses completed
member_publications
array
Published works
member_patents
array
Patents filed or granted

Example

// Enrich a prospect's LinkedIn profile
const linkedinUrl = ctx.thisRow.get("LinkedIn URL");

const profile = await services.person.linkedin.enrich({
   url: linkedinUrl,
});

// Store key information for sales context
ctx.thisRow.set({
   "Full Name": profile.full_name,
   Headline: profile.headline,
   Location: `${profile.location_city}, ${profile.location_country}`,
   "Current Title": profile.job_title,
   Skills: profile.skills?.slice(0, 5).join(", "),
   Connections: profile.connections_count,
});

// Find current role for personalization
const currentJob = profile.experience?.find((job) => job.date_to === null);
if (currentJob) {
   ctx.thisRow.set({
      "Current Company": currentJob.company_name,
      "Time in Role": currentJob.duration,
   });
}

Best Practices

Optimize Your Searches: When using findUrl, provide as many parameters as possible to increase accuracy and reduce ambiguous results.
Data Freshness: The last_updated field indicates when the profile was last refreshed. Consider re-enriching profiles that are older than 30 days for critical use cases.

Common Patterns

Complete Prospect Enrichment Flow

// Find and enrich a prospect's LinkedIn profile in one workflow
const name = ctx.thisRow.get("Name");
const company = ctx.thisRow.get("Company");

// Step 1: Find LinkedIn URL
const url = await services.person.linkedin.findUrl({
   name,
   company,
});

if (!url) {
   ctx.thisRow.set({ Status: "LinkedIn Not Found" });
   return;
}

// Step 2: Enrich the profile
const profile = await services.person.linkedin.enrich({ url });

// Step 3: Store enriched data for sales outreach
ctx.thisRow.set({
   "LinkedIn URL": url,
   "Full Name": profile.full_name,
   Title: profile.job_title,
   Location: profile.location_city,
   Headline: profile.headline,
   "Years of Experience": Math.floor((profile.total_experience_duration_months || 0) / 12),
   Status: "Enriched",
});

Extract Current Job for Personalization

const linkedinUrl = ctx.thisRow.get("LinkedIn URL");
const profile = await services.person.linkedin.enrich({ url: linkedinUrl });

// Find current position (where date_to is null)
const currentJob = profile.experience?.find((job) => job.date_to === null);

if (currentJob) {
   ctx.thisRow.set({
      "Current Role": currentJob.title,
      "Current Company": currentJob.company_name,
      "Started Role": currentJob.date_from,
      "Time in Role": currentJob.duration,
      "Seniority Level": currentJob.management_level,
   });

   // Calculate if they're new in role (good timing for outreach)
   const isNewInRole = currentJob.duration_months && currentJob.duration_months < 6;
   ctx.thisRow.set({ "New in Role": isNewInRole });
}

Qualify Prospects by Experience Level

const linkedinUrl = ctx.thisRow.get("LinkedIn URL");
const profile = await services.person.linkedin.enrich({ url: linkedinUrl });

// Calculate experience metrics for qualification
const totalYears = Math.floor((profile.total_experience_duration_months || 0) / 12);
const currentJob = profile.experience?.find((job) => job.date_to === null);
const seniorityLevel = currentJob?.management_level || "Individual Contributor";

// Qualify based on experience
let qualification = "Not Qualified";
if (totalYears >= 10 && seniorityLevel.includes("Director")) {
   qualification = "High Priority";
} else if (totalYears >= 5 && seniorityLevel.includes("Manager")) {
   qualification = "Medium Priority";
}

ctx.thisRow.set({
   "Years of Experience": totalYears,
   Seniority: seniorityLevel,
   Qualification: qualification,
});