LinkedIn API
Read-only live access to public LinkedIn profiles, activity, and public job postings. Job search and detail fields are limited to what LinkedIn exposes in unauthenticated HTML; LinkedIn may require sign-in or block a serving HTTP request.
Endpoint health
Loading verification…
Connect your agent
Connect through MCP so your agent can find this API, read its docs, and call its endpoints.
Add the server from your terminal.
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcpIn Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.
Then ask your agent to use the LinkedIn API for your task.
Call it over HTTP
Get an API keySign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.
curl --request GET --get 'https://api.agent-data.dev/linkedin-com/v1/jobs/search' \
--header "Authorization: Bearer $AGENT_DATA_API_KEY" \
--data-urlencode 'keywords=software engineer' \
--data-urlencode 'location=Seattle'Endpoints
Inputs and response fields for every endpoint in this API.
GETSearch jobs/v1/jobs/search
Search live public LinkedIn job cards with bounded offset pagination.
Input
keywordsRequiredQuery · stringKeyword phrase used by LinkedIn's public job search.
Example: software engineer
locationRequiredQuery · stringLocation phrase used by LinkedIn's public job search.
Example: Seattle
limitOptionalQuery · integer, min: 1, max: 60, default: 10Number of records to return from the public result window.
Example: 10
offsetOptionalQuery · integer, min: 0, max: 60, default: 0Zero-based offset within LinkedIn's currently exposed public result window.
Example: 0
early_applicantOptionalQuery · boolean, default: falseRequest LinkedIn's observed early-applicant filter.
Example: false
easy_applyOptionalQuery · boolean, default: falseRequest LinkedIn's observed Easy Apply filter.
Example: false
Response
itemsobject[]items[].titlestringitems[].job_idstringitems[].job_urlstring (uri)items[].summary?string | nullitems[].employerstringitems[].locationstringitems[].posted_atstringitems[].posted_time?string | nulllimitintegeroffsetintegerkeywordsstringlocationstringtotal_hint?string | nullnext_offset?integer | nullFields marked ? are optional.
GETGet job details/v1/jobs/{job_ref}
Fetch live public details for one LinkedIn job posting.
Input
job_refRequiredPath · stringNumeric LinkedIn job ID or public /jobs/view/<id> URL. URL values may be URL-encoded by the caller.
Example: 4455931376
Response
titlestringjob_idstringjob_urlstring (uri)employer?string | nulllocation?string | nullposted_at?string | nullseniority?string | nulldescriptionstringcompensation?object | string | integer | number | nullapplication_url?string (uri) | nullemployment_type?string | nullexperience_months?integer | nullFields marked ? are optional.
GETGet profile details/v1/profiles/details
Fetch live public profile details from LinkedIn's public HTML.
Input
profileRequiredQuery · stringLinkedIn /in/<identifier> URL or profile identifier.
Example: https://www.linkedin.com/in/satyanadella/
Response
namestringabout?string | nullheadline?string | nulllocation?string | nulleducation?object[]education[].degree?string | nulleducation[].schoolstringeducation[].date_range?string | nullprofile_urlstring (uri)current_role?string | nullcurrent_company?string | nullwork_experience?object[]work_experience[].role?string | nullwork_experience[].company?string | nullwork_experience[].location?string | nullwork_experience[].date_range?string | nullFields marked ? are optional.
GETGet profile activity/v1/profiles/activity
Fetch a cursor-paged slice of public profile activity from LinkedIn's public HTML.
Input
profileRequiredQuery · stringLinkedIn /in/<identifier> URL or profile identifier.
Example: https://www.linkedin.com/in/satyanadella/
cursorOptionalQuery · string | nullOpaque cursor returned as next_cursor for the next page.
Response
itemsobject[]items[].textstringitems[].activity_idstringitems[].author_namestringitems[].activity_urlstring (uri)items[].published_atstringitems[].activity_typestringitems[].author_profile_urlstring (uri)next_cursor?string | nullFields marked ? are optional.
For the next page, pass next_cursor from the response as cursor. Leave it empty on the first call.
Don’t see the endpoint you need?
Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.
An account is required to submit an extension. Prepare your request, then sign in to build.