Skip to content

Profile lookup

Get a LinkedIn profile, contact details, skills, and recent activity.

Get a person’s professional profile using their LinkedIn username, profile URL, or Envo ID. Use separate endpoints for contact details, company interests, and recent activity.

Replace YOUR_API_KEY with your API key, then run:

Terminal window
curl --get 'https://api.envoapi.com/v1/profiles/details/by-username' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data-urlencode 'username=kentcdodds'

The username is the part after /in/ in a LinkedIn profile URL. For example, https://www.linkedin.com/in/kentcdodds/ has the username kentcdodds.

Choose the endpoint that matches what you have. All three return the same response format.

Input GET endpoint Required parameter
Username /v1/profiles/details/by-username username=kentcdodds
Profile URL /v1/profiles/details/by-url url=https://www.linkedin.com/in/kentcdodds/
Envo ID /v1/profiles/details/by-id publicId from an API response

Send one input per request. Use --data-urlencode for query values, including URLs and usernames with non-English characters.

Profile details include a name, headline, location, work experience, education, and a skills preview. Here is part of a captured response; other fields are omitted:

{
"data": {
"publicId": "profile_sTOcVMQEyEidfhjzz8cayHJDdupxWm2pZNhA1Ml",
"username": "kentcdodds",
"fullName": "Kent C. Dodds",
"headline": "Software Engineer and Educator"
},
"meta": {
"skills": { "hasMore": true }
}
}
  • data contains the profile. Save publicId to look it up by Envo ID later.
  • meta.creditCost is the number of credits charged for this request.
  • null means data is missing or incomplete. An empty list is [].
  • meta.sections, when present, shows whether each section is complete, empty, incomplete, or unavailable.
  • data.skills is a list of names. meta.skills.hasMore is true when more skills are available, false when complete, or null when unknown.

Contact details and company interests are not included. See the full profile response example for all fields.

Use these endpoints when you need one section. Each link includes request and response examples.

Section GET endpoint Response field
Contact details /v1/profiles/contact/by-username data
Work experience /v1/profiles/experience/by-username data.positions
Education /v1/profiles/education/by-username data.education
Skills /v1/profiles/skills/by-username data.skills
Certifications /v1/profiles/certifications/by-username data.certifications
Courses /v1/profiles/courses/by-username data.courses
Company interests /v1/profiles/company-interests/by-username data.companyInterests
Volunteer experience /v1/profiles/volunteer-experience/by-username data.volunteerExperience

Send username with each request. To use a profile URL, change /by-username to /by-url and send url instead. Company interests also supports /by-id with publicId.

Work experience is in data.experience in profile details, but data.positions in the separate experience response. For contact details, use the contact endpoint; includeContact is not supported.

These two sections return one page per request. Start with start=0:

Terminal window
curl --get 'https://api.envoapi.com/v1/profiles/skills/by-username' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data-urlencode 'username=cassidoo' \
--data-urlencode 'start=0'

This captured meta.paging example shows that the next page starts at 10:

{
"start": 0,
"count": 10,
"returned": 10,
"hasMore": true,
"nextStart": 10
}

Set start to meta.paging.nextStart for the next request. Stop when hasMore is false. The API sets the page size to 10; do not send count. Each successful page uses credits.

These endpoints accept a LinkedIn username:

Data GET endpoint Response field
Posts /v1/profiles/posts data.posts
Comments /v1/profiles/comments data.comments
Reactions to posts /v1/profiles/reactions data.reactions
Similar profiles /v1/profiles/similar data.profiles

For example, get recent posts:

Terminal window
curl --get 'https://api.envoapi.com/v1/profiles/posts' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data-urlencode 'username=satyanadella'

Posts, comments, and reactions use cursor pagination:

  1. Leave out cursor on the first request.
  2. While meta.paging.hasMore is true, copy meta.paging.nextCursor into the next request’s cursor parameter.
  3. Keep the same endpoint, account, and username. Copy the cursor unchanged.

Continue even if a page is short or empty. Reactions to comments are excluded, so a reactions page may be empty while more results are available. Each successful page uses credits, including empty pages.

Cursors expire within 15 minutes. If you get 400 cursor_expired, start again without a cursor. See Pagination and Errors for more help.