LinkedIn Person profile API

POST

API health

24h health
89%
24h average time
19.11 s
  • Healthy / normal
  • Available
  • Limited
  • Mostly down
Available

Look up one LinkedIn member by username or profile link for their headline, about section, current company, experience, education, and follower and connection counts. Email can be empty and does not imply consent to be contacted; the call never opens a connection or sends a message.

LinkedIn Person profile reads one member's public profile from their username or profile link and returns the display name, headline, about section, location, current company, follower and connection counts, verification and Premium status, avatar, and email addresses when they are public. Recruiters use it to check a candidate's background, and sales teams use it to enrich a lead with the person's current role and company before they reach out.

headline and about are written by the member, so treat them as self-description rather than verified facts. email comes back only when it is public or authorized, so expect null most of the time; emails lists every address found, and email is the first of them. display_name can differ from username, and avatar_url can be a sized link that expires, so download the image if you need to keep it.

Price $0.56 per 1,000 requests ($0.000556 per call). Failed calls and empty results are not charged. Synchronous. For slow jobs add "mode": "async" to the body, take the job_id and poll.

AI prompt

Paste this into your AI assistant. It already holds this endpoint's parameters, response fields and an example request, so the assistant can ask what you need and then write the scraper.

Please help me write a data collection script with the EveryInfra LinkedIn Person profile endpoint (linkedin/person_profile).

Endpoint contract:
- Request: POST https://api.everyinfra.com/api/v1/social with the header Authorization: Bearer <API key>. Read the key from the EVERYINFRA_API_KEY environment variable and never hard-code it.
- In the request body, set platform to linkedin and action to person_profile, and put the parameters inside params.
- Required parameters:
  - username: Specifies the username handle from a LinkedIn /in/ profile path or a full personal profile URL for person_profile, or an account path for followers.
- Optional parameters:
  - location: Specifies location text for person profiles in profile_search or job locations in jobs. When keyword in the jobs action is already a full search URL, the URL's embedded criteria take precedence and location is ignored.
  - locations: Accepts a location array as a compatibility alias. Prefer location: this array is not guaranteed to behave the same way, and it is not a way to run cross-country batch searches.
  - name: Provides a compatibility identifier that holds company identifiers in company_profile or serves as a person query term in select person_profile lookups.
- Returns one object. Main fields: username, display_name, headline, about (Long-form About text of the profile (pe…), location, current_company, current_company_url (LinkedIn page URL of the current compan…), current_company_logo_url (Logo URL of the current company), follower_count, connection_count (Number of connections (person_profile,…), email (Email address), is_verified; 36 fields in total, full list at https://api.everyinfra.com/api/v1/social/catalog?platform=linkedin.
- Example request body:
{
  "platform": "linkedin",
  "action": "person_profile",
  "params": {
    "username": "williamhgates"
  }
}
- Price: $0.56 per 1,000 requests; failed and empty results are not charged.
- For dozens or hundreds of targets, add "mode": "async" to the body: you get a job_id at once and poll GET https://api.everyinfra.com/api/v1/jobs/{job_id} for the result.
- On 422, fix the request using the suggested parameter names and allowed values in the error; on 429 or 503, wait for Retry-After and try again.

Before writing code, ask me which targets I need, how many, which fields, and what output format I want; then confirm the plan and the rough cost with me.

Request parameters

NameInTypeRequiredDefaultDescription
AuthorizationheaderstringYes-Bearer followed by your API key. Create it in the console; never put it in a URL or a code repository.
platformbodystringYeslinkedinPlatform identifier, fixed value.
actionbodystringYesperson_profileCapability identifier, fixed value.
usernamebody.paramsNot declaredYes-Specifies the username handle from a LinkedIn /in/ profile path or a full personal profile URL for person_profile, or an account path for followers. In the followers action, it returns the total follower count rather than a list of followers.
locationbody.paramsNot declaredNo-Specifies location text for person profiles in profile_search or job locations in jobs. When keyword in the jobs action is already a full search URL, the URL's embedded criteria take precedence and location is ignored.
locationsbody.paramsNot declaredNo-Accepts a location array as a compatibility alias. Prefer location: this array is not guaranteed to behave the same way, and it is not a way to run cross-country batch searches.
namebody.paramsNot declaredNo-Provides a compatibility identifier that holds company identifiers in company_profile or serves as a person query term in select person_profile lookups. It cannot replace the required company or username parameters, nor does it guarantee exact matching against display names.

Code samples

bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "linkedin",
  "action": "person_profile",
  "params": {
    "username": "williamhgates"
  }
}'

[OpenAPI definition (JSON)]Samples read the key from the EVERYINFRA_API_KEY environment variable; copied code never contains your key.

Response example

Real response

Captured September 26, 2026 at 08:56 (UTC) by calling this API with the parameters in the code sample above. results and count are that call's real response with personal information (names, handles, avatars, profile links, contact details) removed. id, billing and quota differ on every call, so only their shape is shown.

json
{
  "id": "req_…",
  "platform": "linkedin",
  "action": "person_profile",
  "results": {
    "username": "williamhgates",
    "display_name": "(已隐去)",
    "headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
    "about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
    "location": "Seattle, Washington, United States",
    "current_company": "Gates Foundation",
    "follower_count": 40680117,
    "connection_count": 8,
    "email": "(已隐去)",
    "is_verified": true,
    "is_premium": true,
    "avatar_url": "https://media.licdn.com/(已隐去)",
    "url": "https://linkedin.com/in/williamhgates",
    "platform": "linkedin"
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}

Response fields

Business data is in results. The table lists the fields a record can contain; values the platform does not show are never made up.

FieldMeaning
usernameUsername (@handle).
display_nameDisplay name; can differ from username.
headlineKeeps the platform's own meaning
aboutLong-form About text of the profile (person_profile, profile_search).
locationLocation description passed through as is; the format varies by platform.
current_companyKeeps the platform's own meaning
current_company_urlLinkedIn page URL of the current company.
current_company_logo_urlLogo URL of the current company.
follower_countFollowers. null means not disclosed, not 0.
connection_countNumber of connections (person_profile, profile_search).
emailEmail address. On person_profile and profile_search it is a work address inferred from public information and then validated; on employees it is present only when the source gives one. May be empty, and it does not mean the person agreed to marketing contact.
is_verifiedWhether the platform verified the account. null means it cannot be determined.
is_premiumKeeps the platform's own meaning
is_top_voiceWhether the profile carries the LinkedIn Top Voice badge.
is_creatorWhether the profile runs in creator mode.
is_influencerKeeps the platform's own meaning
open_to_workKeeps the platform's own meaning
top_skillsSkill tags shown at the top of the profile.
top_education_schoolSchool highlighted at the top of the profile.
creator_hashtagsHashtags the creator chose for creator mode.
creator_websiteExternal link the creator chose for creator mode.
primary_localePrimary locale of the account (e.g. en-US).
account_created_atAccount creation time; null when the source omits it.
avatar_urlAvatar image link. Some platforms return sized CDN links that can expire.
background_picture_urlProfile background banner image URL.
urlLink to the record on the platform.
experienceWork-history list (person_profile, profile_search): each entry carries title, company, company page URL, date range and duration text, plus location, description, employment_type and skills when the source gives them.
educationEducation list (person_profile, profile_search): each entry carries school, school page URL, date range and duration text.
featuredProfile Featured section list: each entry carries type, title, description, link and image; posts also carry like_count and comment_count.
first_nameFirst name (person_profile).
last_nameLast name (person_profile).
countryCountry or region: a full name or an ISO code depending on the platform, not normalized.
cityCity name in the platform's language, not normalized.
country_codeKeeps the platform's own meaning
is_memorializedWhether the account is memorialized (the person has died).
platformSource platform identifier, the same as platform in the request (for example xiaohongshu, tiktok).
emailsContact email addresses (a record can have several), passed through as is with duplicates removed.

FAQ

Where do I find the username?

Open the person's LinkedIn profile: the username is the part after /in/ in the address, such as williamhgates in linkedin.com/in/williamhgates. You can pass that full profile link instead. A display name does not identify a member, and name is only a search hint that may match a different person.

Can I look someone up without knowing their username?

Not with this capability, which needs username or a profile link. LinkedIn Profile search finds people by current job title, optionally in a given location, and returns their profile links; pass the link of the right match here. It is not an exact lookup by name or email.

Do location, locations and name filter the profile?

No. They are optional hints that can help locate the profile, and they never narrow or replace username. Once the profile is identified they play no part, so do not rely on them to confirm you have the right person; compare headline and current_company instead.

Errors and billing

401
Missing or invalid key. Authentication runs before parameter checks, so unauthenticated requests never see the parameter schema.
422
Wrong parameter name or value. The error lists the parameters and allowed values this capability accepts and the closest match; it happens before any charge.
402
Insufficient balance. Top up first.
429
The account's per-minute request limit was reached (all of its API keys count together; a key's own lower limit applies first). Wait for Retry-After and try again; a rate package in the console raises the limit.
503
Could not complete right now. Any charge for the call goes back to your balance automatically, and the billing receipt in the response states the actual outcome, including when it is not yet known. Do not resend blindly.
200 empty
The request completed without data and is not charged (billing.reason = empty_result_refunded).

Official references

Used only to check objects and terms. They do not imply authorization or endorsement of EveryInfra by the platform.