API Anything

LinkedIn APIunofficial

LinkedIn read operations over the Voyager API: your own mini profile, a member profile, a company, people search, company search. Needs login: `api-anything login linkedin --profile <browser/profile>` imports your session.

all live 5 operations, checked by the installs that call them.

Try it

Set up API Anything for your agents:

npx -y api-anything setup

Then ask your agent, which finds this site by itself, or call it from a shell:

api-anything pull linkedin
api-anything login linkedin    # signs in with your browser's cookies
api-anything call linkedin getCompany universalName=microsoft

Operations

OperationMethodLoginWritesStatus
getCompany(universalName) -> name, universalName, tagline, description, industry, staffCount, website, headquarters, url

A company/organization by its universal name (the last path segment of linkedin.com/company/<name>).

GET needed no Live0 confirmations
getMe() -> firstName, lastName, occupation, publicIdentifier

The signed-in member's own mini profile (name, headline, public identifier). Confirms the imported session is live.

GET needed no Live1 confirmation · 100% success; last worked
getProfile(publicId) -> firstName, lastName, headline, summary, publicIdentifier, countryCode, websites, influencer, creator, entityUrn

A member's profile by public id (the last path segment of linkedin.com/in/<publicId>): name, headline, about text, country, websites.

GET needed no Live0 confirmations
searchCompanies(keywords) -> name, subtitle, followers, description, url, universalName

Company search (the first 10 results of linkedin.com/search/results/companies/?keywords=...): name, subtitle (industry, and location when set), followers, description, url (linkedin.com/company/<universalName>/), universalName (getCompany's arg).

GET needed no Live0 confirmations
searchPeople(keywords) -> name, headline, location, url, publicId, distance

People search (the first 10 results of linkedin.com/search/results/people/?keywords=...): name, headline, location, url (linkedin.com/in/<publicId>?...), publicId (getProfile's arg), network distance.

GET needed no Live0 confirmations; last worked

Notes

Needs an account: there is no logged-out LinkedIn. Read-only: no posting, messaging, or connection requests.

  • The imported session is your everyday Chrome's session. If LinkedIn logs it out, your browser is logged out too. Keep automated traffic light; LinkedIn may revoke a session that looks like a bot. Use api-anything login linkedin --window for an independent session.
  • If more than one browser profile is signed in to LinkedIn, login linkedin without --profile refuses and lists the candidates (profile, display name, the Chrome profile's Google email, which is not the LinkedIn account's). Those can be two different LinkedIn members: ask the user which one, pass --profile "<Browser>/<Profile>", then run getMe and check the name before anything else.
  • Search first when you only know a name: a company's universal name often differs from its brand (anthropic is an unrelated investment fund; the AI company is anthropicresearch; Boston Dynamics is boston-dynamics).
  • In keywords, apostrophes and non-ASCII letters work. A search with no matches returns ok with [].
  • An unknown or restricted publicId is expected to return input, but that has not been verified live against LinkedIn. An unknown name in getCompany returns input.
  • getProfile has no location name (only countryCode), follower count or experience list. Its summary is the About text; getMe's occupation is the headline.
  • getCompany returns name, universalName, tagline (when set), description, industry, staffCount, website, headquarters ({country, geographicArea, city, ...}) and url.
  • searchPeople's distance is DISTANCE_2, DISTANCE_3, ...

About these operations

Each operation is a request learned from LinkedIn's own web pages: API Anything replays it over plain HTTP and falls back to a browser when it must. Read them as JSON.

← All shared sites