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.
- linkedin.com
all live 5 operations, checked by the installs that call them.
Try it
Set up API Anything for your agents:
npx -y api-anything setupThen 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=microsoftOperations
| Operation | Method | Login | Writes | Status |
|---|---|---|---|---|
getCompany(universalName) -> name, universalName, tagline, description, industry, staffCount, website, headquarters, urlA company/organization by its universal name (the last path segment of linkedin.com/company/<name>). |
GET | needed | no | Live0 confirmations |
getMe() -> firstName, lastName, occupation, publicIdentifierThe 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, entityUrnA 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, universalNameCompany 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, distancePeople 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 --windowfor an independent session. - If more than one browser profile is signed in to LinkedIn,
login linkedinwithout--profilerefuses 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 rungetMeand check the name before anything else. - Search first when you only know a name: a company's universal name often differs from its brand (
anthropicis an unrelated investment fund; the AI company isanthropicresearch; Boston Dynamics isboston-dynamics). - In
keywords, apostrophes and non-ASCII letters work. A search with no matches returnsokwith[]. - An unknown or restricted
publicIdis expected to returninput, but that has not been verified live against LinkedIn. An unknown name ingetCompanyreturnsinput. getProfilehas no location name (onlycountryCode), follower count or experience list. Itssummaryis the About text;getMe'soccupationis the headline.getCompanyreturnsname,universalName,tagline(when set),description,industry,staffCount,website,headquarters({country, geographicArea, city, ...}) andurl.searchPeople'sdistanceisDISTANCE_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.