Skip to main content
Access LinkedIn profile data, posts, and engagement signals for social selling and research.
MethodDescription
canvas.linkedin.profiles()Scrape profile data from LinkedIn URLs
canvas.linkedin.posts()Get recent posts from profiles
canvas.linkedin.findUrls()Find LinkedIn URLs by name + company
canvas.linkedin.reactions()Get people who reacted to posts

canvas.linkedin.profiles()

Scrape detailed profile information from LinkedIn profile URLs.
const profiles = await canvas.linkedin.profiles({
  urls: ["https://linkedin.com/in/johndoe"],
  fields: ["headline", "jobTitle", "companyName", "topSkills"],
});

Parameters

urls
string[]
required
LinkedIn profile URLs to scrape.
fields
string[]
Fields to return. Defaults to all. Options: firstName, lastName, fullName, headline, about, connections, followers, email, profilePic, jobTitle, companyName, companyIndustry, companyWebsite, companySize, jobDuration, jobDurationYears, country, addressFull, addressLocal, mobileNumber, topSkills, totalSkills, recentExperience, totalExperience, education

Returns

FieldTypeDescription
fullNamestringFull name
headlinestringProfile headline
jobTitlestringCurrent job title
companyNamestringCurrent company
aboutstringAbout section
topSkillsstring[]Top skills
emailstringEmail (if public)
mobileNumberstringPhone (if public)

canvas.linkedin.posts()

Get recent posts from LinkedIn profiles.
const posts = await canvas.linkedin.posts({
  urls: profiles.map(p => p.linkedinUrl),
  postsPerProfile: 5,
  includeComments: true,
});

Parameters

urls
string[]
required
LinkedIn profile URLs to get posts from.
postsPerProfile
number
default:"20"
Posts to fetch per profile (max 100).
includeReposts
boolean
default:"false"
Include reposts/shares.
includeComments
boolean
default:"false"
Include top 10 comments per post.

Returns

FieldTypeDescription
postTextstringPost content
postLinkstringDirect link to post
postedAgostringWhen posted
numLikesnumberLike count
numCommentsnumberComment count
numSharesnumberShare count
isRepostbooleanWhether it’s a repost

canvas.linkedin.findUrls()

Find LinkedIn profile URLs for people by name and company.
const withUrls = await canvas.linkedin.findUrls({
  people: contacts.map(c => ({
    firstName: c.first_name,
    lastName: c.last_name,
    company: c.company,
  })),
});

Parameters

people
object[]
required
People to find URLs for. Each needs firstName + lastName (or fullName) and company.

Returns

Original person data plus linkedinUrl field.

canvas.linkedin.reactions()

Get people who reacted to LinkedIn posts. Great for finding engaged prospects.
const reactors = await canvas.linkedin.reactions({
  postUrls: ["https://linkedin.com/posts/competitor_announcement-123456"],
  maxPerPost: 100,
});

// Enrich these engaged prospects
const contacts = await canvas.contacts.enrich({ people: reactors });

Parameters

postUrls
string[]
required
LinkedIn post URLs to get reactions from.
maxPerPost
number
default:"50"
Max reactions per post (max 500).

Returns

FieldTypeDescription
linkedinUrlstringProfile URL
namestringPerson’s name
headlinestringProfile headline
reactionTypestringType of reaction

Example: Content-Based Lead Gen

Find prospects who engage with competitor or industry content:
// Get posts from industry influencers
const posts = await canvas.linkedin.posts({
  urls: ["https://linkedin.com/in/industry-leader"],
  postsPerProfile: 10,
});

// Get reactors from top posts
const topPosts = posts.filter(p => p.numLikes > 100).slice(0, 3);

const allReactors = [];
for (const post of topPosts) {
  const reactors = await canvas.linkedin.reactions({
    postUrls: [post.postLink],
    maxPerPost: 50,
  });
  allReactors.push(...reactors);
}

// Dedupe and return
const unique = [...new Map(allReactors.map(r => [r.linkedinUrl, r])).values()];
return unique;