LinkedIn data, ready when you are.

People, companies, posts, jobs, comments, reactions and ads from LinkedIn.

Try in playground From $0.001 a record · $0.10 free

What you can get.

What the data looks like.

publicIdnameheadlinecompanyNamelocationfollowersconnectionsisOpenToWorkisHiringskillsurnavatarUrlisPremiumpositionsdetails
ananya-raoAnanya RaoHead of Marketing at PaylanePaylaneBengaluru, Karnataka, India8,421500falsetrue
  • Growth marketing, B2B SaaS, Brand strategy
urn:li:fsd_profile:885327295https://img.linkedin.com/ananya-rao.jpgfalse
  • Paylane · Head of Marketing · 2019-01 · current
  • {}
marcus-leeMarcus LeeVP Sales, EMEA | B2B SaaSNorthfoldLondon, England, United Kingdom15,230500falsefalse
  • Enterprise sales, Negotiation, Team leadership
urn:li:fsd_profile:302922555https://img.linkedin.com/marcus-lee.jpgfalse
  • Northfold · VP Sales · 2020-02 · current
  • {}
sofia-ortizSofia OrtizData Engineer · Python, dbt, AirflowKitebankAustin, Texas, United States2,104812truefalse
  • Python, dbt, Airflow
urn:li:fsd_profile:438143361https://img.linkedin.com/sofia-ortiz.jpgfalse
  • Kitebank · Data Engineer · 2021-03 · current
  • {}
15 fields, scroll sideways for all. Example rows: made-up names, real field names. Live calls return real data.

For developers

API reference.

One endpoint, POST /v1/linkedin. Open an operation to see its fields.

Read the docs
Profilesprofiles

Profile cards for up to ten people, by /in/<slug> vanity handle (a full profile URL is accepted and reduced to its slug). `include.posts` adds each person's recent posts to the same answer.

FieldTypeMeaning
subjects *list of string · 1-10 items/in/<slug> handles or profile URLs.
fieldslist of enumWhat each card carries: "profile" is the card itself (always), "positions" adds the person's work history. Omit for the card alone.profile · positions
includeobject
include.postsobject
include.posts.limitinteger · 1-50Recent posts to fetch per person, newest first; 1-50.

Response fields, each row of data

FieldType
publicIdstring
urnstring
namestring
firstNamestring
lastNamestring
headlinestring
aboutstring
locationstring
citystring
statestring
countrystring
profileUrlstring
avatarUrlstring
coverUrlstring
followersinteger
connectionsinteger
isPremiumboolean
isOpenToWorkboolean
isHiringboolean
isVerifiedboolean
isCreatorboolean
isInfluencerboolean
isOpenProfileboolean
skillslist of string
companyNamestring
positionslist of object
educationlist of object
certificationslist of object
languageslist of object
projectslist of object
publicationslist of object
courseslist of object
honorslist of object
volunteeringlist of object
recommendationslist of object
causeslist of string
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · profiles
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"profiles","subjects":["satyanadella"]}'

Example response rows

data · made-up names, real field names
[
  {
    "publicId": "ananya-rao",
    "name": "Ananya Rao",
    "headline": "Head of Marketing at Paylane",
    "companyName": "Paylane",
    "location": "Bengaluru, Karnataka, India",
    "followers": 8421,
    "connections": 500,
    "isOpenToWork": false,
    "isHiring": true,
    "skills": [
      "Growth marketing",
      "B2B SaaS",
      "Brand strategy"
    ],
    "urn": "urn:li:fsd_profile:885327295",
    "avatarUrl": "https://img.linkedin.com/ananya-rao.jpg",
    "isPremium": false,
    "positions": [
      {
        "companyName": "Paylane",
        "title": "Head of Marketing",
        "startedOn": "2019-01",
        "isCurrent": true
      }
    ],
    "details": {}
  },
  {
    "publicId": "marcus-lee",
    "name": "Marcus Lee",
    "headline": "VP Sales, EMEA | B2B SaaS",
    "companyName": "Northfold",
    "location": "London, England, United Kingdom",
    "followers": 15230,
    "connections": 500,
    "isOpenToWork": false,
    "isHiring": false,
    "skills": [
      "Enterprise sales",
      "Negotiation",
      "Team leadership"
    ],
    "urn": "urn:li:fsd_profile:302922555",
    "avatarUrl": "https://img.linkedin.com/marcus-lee.jpg",
    "isPremium": false,
    "positions": [
      {
        "companyName": "Northfold",
        "title": "VP Sales",
        "startedOn": "2020-02",
        "isCurrent": true
      }
    ],
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try profiles in the playground Examples and pricing for profiles
Posts by a personposts

A person's recent posts with engagement. (Company-page posts are not served yet. Asking today is declined with a reason, never guessed at.)

FieldTypeMeaning
subject *string · ≤400 charsOne /in/<slug> handle or profile URL.
limitinteger · 1-50

Response fields, each row of data

FieldType
urnstring
bodystring
kindstring
postedAtstring
permalinkstring
mediaUrlstring
mediaTypestring
likesinteger
commentsinteger
repostsinteger
authorobject
mentionslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · posts
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"posts","subject":"satyanadella","limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "author": {
      "handle": "ananya-rao",
      "type": "person"
    },
    "body": "We cut onboarding from 14 days to 3. Here is what changed, step by step.",
    "kind": "text",
    "postedAt": "2026-10-14T09:12:00Z",
    "likes": 1284,
    "comments": 96,
    "reposts": 41,
    "urn": "urn:li:activity:2164259024",
    "permalink": "https://www.linkedin.com/we-cut-onboarding-from-14-days-to-3-here-1000",
    "mediaUrl": "https://www.linkedin.com/we-cut-onboarding-from-14-days-to-3-here-1000",
    "details": {}
  },
  {
    "author": {
      "handle": "ananya-rao",
      "type": "person"
    },
    "body": "We're hiring two product marketers in Bengaluru. DM me.",
    "kind": "image",
    "postedAt": "2026-10-08T06:40:00Z",
    "likes": 412,
    "comments": 58,
    "reposts": 19,
    "urn": "urn:li:activity:2872631718",
    "permalink": "https://www.linkedin.com/we-re-hiring-two-product-marketers-in-be-1001",
    "mediaUrl": "https://www.linkedin.com/we-re-hiring-two-product-marketers-in-be-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try posts by a person in the playground Examples and pricing for posts by a person
Companiescompanies

Company pages for up to ten /company/<slug> handles or URLs.

FieldTypeMeaning
subjects *list of string · 1-10 items/company/<slug> handles or URLs.

Response fields, each row of data

FieldType
universalNamestring
urnstring
namestring
industrystring
sizeBucketstring
employeesCountinteger
followersinteger
websitestring
linkedinUrlstring
hqLocationstring
hqStreetstring
hqCitystring
hqStatestring
hqPostalCodestring
hqCountrystring
aboutstring
foundedinteger
specialitieslist of string
logoUrlstring
pageTypestring
isVerifiedboolean
isActiveboolean
jobsUrlstring
callToActionUrlstring
locationslist of object
employeesByLocationlist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · companies
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"companies","subjects":["microsoft"]}'

Example response rows

data · made-up names, real field names
[
  {
    "universalName": "paylane",
    "name": "Paylane",
    "industry": "Financial Services",
    "sizeBucket": "201-500",
    "employeesCount": 342,
    "followers": 48210,
    "website": "https://paylane.example",
    "hqLocation": "Bengaluru, Karnataka, India",
    "founded": 2017,
    "specialities": [
      "Payments",
      "Payouts",
      "APIs"
    ],
    "urn": "urn:li:fsd_company:70566685",
    "logoUrl": "https://img.linkedin.com/paylane.jpg",
    "details": {
      "tagline": "Payments for every shop",
      "employeesBySkill": [
        {
          "skill": "Sales",
          "count": 120
        },
        {
          "skill": "Python",
          "count": 85
        }
      ],
      "employeesByFunction": [
        {
          "function": "Engineering",
          "count": 210
        }
      ]
    }
  },
  {
    "universalName": "northfold",
    "name": "Northfold",
    "industry": "Software Development",
    "sizeBucket": "51-200",
    "employeesCount": 128,
    "followers": 15904,
    "website": "https://northfold.example",
    "hqLocation": "London, England, United Kingdom",
    "founded": 2019,
    "specialities": [
      "Finance automation",
      "Close management"
    ],
    "urn": "urn:li:fsd_company:1275972461",
    "logoUrl": "https://img.linkedin.com/northfold.jpg",
    "details": {
      "tagline": "Freight, simplified",
      "employeesBySkill": [
        {
          "skill": "Sales",
          "count": 90
        },
        {
          "skill": "Python",
          "count": 65
        }
      ],
      "employeesByFunction": [
        {
          "function": "Engineering",
          "count": 160
        }
      ]
    }
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try companies in the playground Examples and pricing for companies
Search peoplesearchPeople

People search. With `company`: that company's people, filtered (employees-of-X). Without it: a GLOBAL search. Give `query` (e.g. "fintech founder") and/or titles. Find founders/leadership via titles (free text: "Founder", "CEO") and/or seniority bands (cxo, owner_partner); functions and tenure narrow further.

FieldTypeMeaning
companystring · ≤400 charsA /company/<slug> handle or company URL: search only that company's people. Omit for a global search (then give query and/or titles).
querystring · ≤300 chars
titleslist of stringCurrent job titles, free text ("Founder", "Head of Marketing"); any match.
pastTitleslist of stringTitles the person held before, free text. Global search only.
pastCompanieslist of stringCompany names the person worked at before. Global search only.
schoolslist of stringSchool or university names the person attended. Global search only.
locationslist of string
industrieslist of stringLeaf names or " > " paths. Validated against LinkedIn's 434-node taxonomy.
companySizeslist of enumHeadcount bands of the person's current employer: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+. Global search only.1-10 · 11-50 · 51-200 · 201-500 · 501-1000 · 1001-5000 · 5001-10000 · 10001+
senioritylist of enumSeniority bands: cxo, owner_partner, vice_president, director, experienced_manager, entry_manager, strategic, senior, entry, in_training. Any match.in_training · entry · senior · strategic · entry_manager · experienced_manager · director · vice_president · cxo · owner_partner
functionslist of enumJob functions: marketing, sales, engineering, finance, operations, product_management, human_resources … Any match.accounting · administrative · arts_and_design · business_development · community_and_social_services · consulting · education · engineering · entrepreneurship · finance · healthcare_services · human_resources · information_technology · legal · marketing · media_and_communication · military_and_protective_services · operations · product_management · program_and_project_management · purchasing · quality_assurance · real_estate · research · sales
yearsAtCompanylist of enumTenure at the current company, in bands: lt_1y, 1_2y, 3_5y, 6_10y, gt_10y.lt_1y · 1_2y · 3_5y · 6_10y · gt_10y
yearsOfExperiencelist of enumTotal career length, the same bands as yearsAtCompany.lt_1y · 1_2y · 3_5y · 6_10y · gt_10y
recentlyChangedJobsbooleantrue: only people who started a new role recently.
recentlyPostedbooleantrue: only people who posted on LinkedIn recently. Global search only.
personNameslist of stringPerson-name / current employer / HQ / language filters (global search honours all).
currentCompanieslist of stringNames of the person's current employer(s). Global search only.
companyHqLocationslist of stringWhere the current employer is headquartered. Cities, regions or countries as written on LinkedIn ("Bengaluru", "United States").
profileLanguageslist of stringLanguages listed on the profile, by name ("English", "Hindi").
limitinteger · 1-50

Response fields, each row of data

FieldType
publicIdstring
urnstring
namestring
firstNamestring
lastNamestring
headlinestring
aboutstring
locationstring
citystring
statestring
countrystring
profileUrlstring
avatarUrlstring
coverUrlstring
followersinteger
connectionsinteger
isPremiumboolean
isOpenToWorkboolean
isHiringboolean
isVerifiedboolean
isCreatorboolean
isInfluencerboolean
isOpenProfileboolean
skillslist of string
companyNamestring
positionslist of object
educationlist of object
certificationslist of object
languageslist of object
projectslist of object
publicationslist of object
courseslist of object
honorslist of object
volunteeringlist of object
recommendationslist of object
causeslist of string
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · searchPeople
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"searchPeople","company":"stripe","titles":["Head of Data"],"limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "publicId": "priya-nair",
    "name": "Priya Nair",
    "headline": "Head of Marketing · Ledgerly",
    "companyName": "Ledgerly",
    "location": "Bengaluru, Karnataka, India",
    "followers": 5120,
    "connections": 500,
    "isOpenToWork": false,
    "isHiring": false,
    "skills": [
      "Demand generation",
      "Fintech"
    ],
    "urn": "urn:li:fsd_profile:1103731855",
    "avatarUrl": "https://img.linkedin.com/priya-nair.jpg",
    "isPremium": false,
    "positions": [
      {
        "companyName": "Ledgerly",
        "title": "Head of Marketing",
        "startedOn": "2019-01",
        "isCurrent": true
      }
    ],
    "details": {}
  },
  {
    "publicId": "arjun-mehta",
    "name": "Arjun Mehta",
    "headline": "Marketing Director at Coinmint",
    "companyName": "Coinmint",
    "location": "Bengaluru, Karnataka, India",
    "followers": 3380,
    "connections": 500,
    "isOpenToWork": false,
    "isHiring": true,
    "skills": [
      "Performance marketing",
      "Payments"
    ],
    "urn": "urn:li:fsd_profile:1983785629",
    "avatarUrl": "https://img.linkedin.com/arjun-mehta.jpg",
    "isPremium": false,
    "positions": [
      {
        "companyName": "Coinmint",
        "title": "Marketing Director",
        "startedOn": "2020-02",
        "isCurrent": true
      }
    ],
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try search people in the playground Examples and pricing for search people
Search companiessearchCompanies

Company search by keyword and structured filters.

FieldTypeMeaning
querystring · ≤300 chars
locationslist of string
companySizeslist of enumHeadcount bands: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+; any match.1-10 · 11-50 · 51-200 · 201-500 · 501-1000 · 1001-5000 · 5001-10000 · 10001+
industrieslist of stringIndustry names, leaf or " > " path, from LinkedIn's own taxonomy.
limitinteger · 1-50

Response fields, each row of data

FieldType
universalNamestring
urnstring
namestring
industrystring
sizeBucketstring
employeesCountinteger
followersinteger
websitestring
linkedinUrlstring
hqLocationstring
hqStreetstring
hqCitystring
hqStatestring
hqPostalCodestring
hqCountrystring
aboutstring
foundedinteger
specialitieslist of string
logoUrlstring
pageTypestring
isVerifiedboolean
isActiveboolean
jobsUrlstring
callToActionUrlstring
locationslist of object
employeesByLocationlist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · searchCompanies
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"searchCompanies","query":"fintech","locations":["London"],"limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "universalName": "ledgerly",
    "name": "Ledgerly",
    "industry": "Software Development",
    "sizeBucket": "11-50",
    "employeesCount": 38,
    "followers": 4120,
    "website": "https://ledgerly.example",
    "hqLocation": "Berlin, Germany",
    "founded": 2021,
    "specialities": [
      "Accounting software",
      "SMBs"
    ],
    "urn": "urn:li:fsd_company:4164023981",
    "logoUrl": "https://img.linkedin.com/ledgerly.jpg",
    "details": {
      "tagline": "Payments for every shop"
    }
  },
  {
    "universalName": "coinmint",
    "name": "Coinmint",
    "industry": "Financial Services",
    "sizeBucket": "51-200",
    "employeesCount": 96,
    "followers": 12800,
    "website": "https://coinmint.example",
    "hqLocation": "Berlin, Germany",
    "founded": 2018,
    "specialities": [
      "Crypto custody"
    ],
    "urn": "urn:li:fsd_company:1700968753",
    "logoUrl": "https://img.linkedin.com/coinmint.jpg",
    "details": {
      "tagline": "Freight, simplified"
    }
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try search companies in the playground Examples and pricing for search companies
Jobsjobs

Job listings search: `query` is the job-title anchor, the rest narrow it.

FieldTypeMeaning
query *string · ≤300 chars
locationslist of string
companieslist of stringHiring company names, as written on LinkedIn; any match.
industrieslist of stringIndustry names, leaf or " > " path, from LinkedIn's own taxonomy.
workplacelist of enumremote · hybrid · onsite
employmentTypelist of enumfull_time · part_time · contract · internship · temporary
experienceLevellist of enumLevels: internship, entry, associate, mid_senior, director, executive.internship · entry · associate · mid_senior · director · executive
postedWithinenum1h · 1d · 7d · 30d
salaryMininteger · 40-1000Thousands of USD a year, 40 and up; filtered in LinkedIn's $20k bands.
easyApplybooleantrue: only listings that take applications on LinkedIn itself.
under10Applicantsbooleantrue: only listings with fewer than ten applicants so far.
sortenumUnset = the platform's default order.relevance · newest
limitinteger · 1-50

Response fields, each row of data

FieldType
jobIdstring
titlestring
companyNamestring
locationstring
citystring
statestring
countrystring
employmentTypestring
workplaceTypestring
isRemoteAllowedboolean
experienceLevelstring
industrieslist of string
functionslist of string
salaryTextstring
listedAtstring
expiresAtstring
applicantsinteger
urlstring
applyUrlstring
applicantTrackingSystemstring
descriptionstring
descriptionHtmlstring
companyUrnstring
companySlugstring
companyUrlstring
companyLogoUrlstring
companyWebsitestring
companyDescriptionstring
companyEmployeesinteger
companyFollowersinteger
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · jobs
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"jobs","query":"data engineer","locations":["Berlin"],"postedWithin":"7d","limit":10}'

Example response rows

data · real rows, business data
[
  {
    "jobId": "4430707116",
    "title": "Product Manager (Manufacturing) - Hybrid",
    "companyName": "MacLean Power Systems",
    "location": "Manteca, California, United States",
    "employmentType": "full_time",
    "listedAt": "2026-08-22T15:42:18+00:00",
    "applyUrl": "https://jobs.dayforcehcm.com/en-US/mlp/CANDIDATEPORTAL/jobs/15691?src=LinkedIn",
    "description": "MPS in Stockton, CA is seeking a talented Product Manager (Overhead High Voltage Switchgear). In this role you will be responsible for managing product portfolios, providing technical and commercial support to customers, and developing strategic and tactical plans encompassing the market and competitive analysis for our Stockton facility.\n\nThis role is Hybrid 3-2, and our facility is located in Stockton, CA.\n\nWhat You’ll Do\n\nOversee the implementation of technical product solutions for clients a",
    "details": {}
  },
  {
    "jobId": "4419567749",
    "title": "Sr. Engineering and Product Manager",
    "companyName": "Justrite Safety Group",
    "location": "Broomfield, Colorado, United States",
    "employmentType": "full_time",
    "listedAt": "2026-08-22T15:22:45+00:00",
    "applyUrl": "https://recruiting2.ultipro.com/JUS1001JUSTM/JobBoard/2d5c8dc9-71e2-46d7-aa3d-305883f6102b/OpportunityDetail?opportunityId=12d54091-fc20-4284-8485-92c704543815&source=LinkedIn",
    "description": "About Justrite Safety Group\n\nAt Justrite Safety Group, we're more than just a collection of industrial safety companies; we're a dynamic organization dedicated to protecting people, property, and the planet. Our ever-growing portfolio of companies collaborates to deliver advanced industrial safety solutions that set the standard for excellence.\n\nAs our business continues to grow, we continue to look for top talent to join our team as we lead the charge in revolutionizing industrial safety, ensur",
    "details": {}
  }
]

Rows from an earlier run. The rows show the most used fields; a live row carries every field in the table above.

Try jobs in the playground Examples and pricing for jobs
Search postssearchPosts

Search LinkedIn POSTS by keyword. The content itself, not people or companies. `query` is the search ("layoffs fintech", a product name, a hashtag). Narrow by who is mentioned, the content type (videos, images, documents…), how recent, and sort by relevance or date.

FieldTypeMeaning
query *string · ≤300 charsWords the posts must contain. Always needed, even with mentioning (a mention-only ask is refused, verified 2026-09-23): to list all that tags a company or person, use their name as the query.
mentioninglist of stringOnly posts that tag these people or companies: /in/<slug> or /company/<slug> handles, or their URLs.
contentTypeenumWhat kind of post: videos, images, jobs, live_videos, documents, collaborative_articles. Omit or "all" for every kind.all · videos · images · jobs · live_videos · documents · collaborative_articles
postedWithinenumany · 1h · 1d · 7d · 30d · 3m · 6m · 1y
sortenumrelevance · newest
includeRepostsbooleantrue: reposts of other people's posts count as hits too.
includeQuotePostsbooleantrue: posts that quote another post count as hits too.
limitinteger · 1-50

Response fields, each row of data

FieldType
urnstring
bodystring
kindstring
postedAtstring
permalinkstring
mediaUrlstring
mediaTypestring
likesinteger
commentsinteger
repostsinteger
authorobject
mentionslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · searchPosts
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"searchPosts","query":"AI agents","postedWithin":"7d","limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "author": {
      "handle": "marcus-lee",
      "type": "person"
    },
    "body": "Layoffs in fintech this quarter: what I'm hearing from 40 sales leaders.",
    "kind": "text",
    "postedAt": "2026-10-15T08:00:00Z",
    "likes": 3120,
    "comments": 402,
    "reposts": 210,
    "urn": "urn:li:activity:31086471",
    "permalink": "https://www.linkedin.com/layoffs-in-fintech-this-quarter-what-i-m-1000",
    "mediaUrl": "https://www.linkedin.com/layoffs-in-fintech-this-quarter-what-i-m-1000",
    "details": {}
  },
  {
    "author": {
      "handle": "leila-haddad",
      "type": "person"
    },
    "body": "If you were part of the fintech layoffs, I'm sharing 25 open roles below.",
    "kind": "text",
    "postedAt": "2026-10-13T15:30:00Z",
    "likes": 1840,
    "comments": 233,
    "reposts": 512,
    "urn": "urn:li:activity:3331202746",
    "permalink": "https://www.linkedin.com/if-you-were-part-of-the-fintech-layoffs--1001",
    "mediaUrl": "https://www.linkedin.com/if-you-were-part-of-the-fintech-layoffs--1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try search posts in the playground Examples and pricing for search posts
Comments on a postpostComments

Comments on up to ten LinkedIn POSTS, by post URL. `includeReplies` pulls nested replies; `postedWithin` limits how far back to read.

FieldTypeMeaning
subjects *list of string · 1-10 itemsPost URLs.
includeRepliesbooleantrue: nested replies come back under their parent comment, not only top-level comments.
postedWithinenumany · 1d · 7d · 30d
limitinteger · 1-100

Response fields, each row of data

FieldType
commentIdstring
commentUrlstring
postUrlstring
postUrnstring
commenterProfileIdstring
commenterHandlestring
commenterNamestring
commenterHeadlinestring
commenterUrlstring
commenterAvatarUrlstring
commenterTypestring
commenterFollowersinteger
isAuthorboolean
editedboolean
likesinteger
repliesinteger
reactionslist of object
bodystring
commentedAtstring
mentionslist of string
postAuthorstring
postAuthorHandlestring
postAuthorUrlstring
postAuthorHeadlinestring
postAuthorAvatarUrlstring
postAuthorProfileIdstring
postAuthorTypestring
postTextstring
postPostedAtstring
postMediaUrlstring
postLikesinteger
postCommentsinteger
postRepostsinteger
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · postComments
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"postComments","subjects":["https://www.linkedin.com/posts/<post-id>"],"limit":25}'

Example response rows

data · made-up names, real field names
[
  {
    "commenterHandle": "priya-nair",
    "commenterName": "Priya Nair",
    "commenterHeadline": "Product Lead at Ledgerly",
    "body": "This matches what we saw. Did churn move too?",
    "likes": 34,
    "replies": 3,
    "commentedAt": "2026-10-14T10:02:00Z",
    "postAuthor": "Ananya Rao",
    "isAuthor": false,
    "commentId": "3095264851",
    "commentUrl": "https://www.linkedin.com/priya-nair-1000",
    "postUrl": "https://www.linkedin.com/priya-nair-1000",
    "postUrn": "urn:li:activity:1393902121",
    "commenterProfileId": "3708772264",
    "commenterUrl": "https://www.linkedin.com/priya-nair-1000",
    "postAuthorUrl": "https://www.linkedin.com/priya-nair-1000",
    "details": {}
  },
  {
    "commenterHandle": "tom-becker",
    "commenterName": "Tom Becker",
    "commenterHeadline": "Founder, Brightdesk",
    "body": "Saving this for our next planning week.",
    "likes": 12,
    "replies": 0,
    "commentedAt": "2026-10-14T10:40:00Z",
    "postAuthor": "Ananya Rao",
    "isAuthor": false,
    "commentId": "2364499118",
    "commentUrl": "https://www.linkedin.com/tom-becker-1001",
    "postUrl": "https://www.linkedin.com/tom-becker-1001",
    "postUrn": "urn:li:activity:492950413",
    "commenterProfileId": "1378818087",
    "commenterUrl": "https://www.linkedin.com/tom-becker-1001",
    "postAuthorUrl": "https://www.linkedin.com/tom-becker-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try comments on a post in the playground Examples and pricing for comments on a post
Comments by a personprofileComments

A profile's OWN commenting activity. The comments up to ten people left across LinkedIn, by /in/<slug> handle, newest first.

FieldTypeMeaning
subjects *list of string · 1-10 items/in/<slug> handles or profile URLs.
postedWithinenumany · 1d · 7d · 30d
limitinteger · 1-100

Response fields, each row of data

FieldType
commentIdstring
commentUrlstring
postUrlstring
postUrnstring
commenterProfileIdstring
commenterHandlestring
commenterNamestring
commenterHeadlinestring
commenterUrlstring
commenterAvatarUrlstring
commenterTypestring
commenterFollowersinteger
isAuthorboolean
editedboolean
likesinteger
repliesinteger
reactionslist of object
bodystring
commentedAtstring
mentionslist of string
postAuthorstring
postAuthorHandlestring
postAuthorUrlstring
postAuthorHeadlinestring
postAuthorAvatarUrlstring
postAuthorProfileIdstring
postAuthorTypestring
postTextstring
postPostedAtstring
postMediaUrlstring
postLikesinteger
postCommentsinteger
postRepostsinteger
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · profileComments
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"profileComments","subjects":["satyanadella"],"limit":25}'

Example response rows

data · made-up names, real field names
[
  {
    "commenterHandle": "marcus-lee",
    "commenterName": "Marcus Lee",
    "commenterHeadline": "VP Sales, EMEA | B2B SaaS",
    "body": "Strong take. Discovery calls are where most deals are lost.",
    "likes": 48,
    "replies": 5,
    "commentedAt": "2026-10-15T07:30:00Z",
    "postAuthor": "Emma Novak",
    "isAuthor": false,
    "commentId": "3190665176",
    "commentUrl": "https://www.linkedin.com/marcus-lee-1000",
    "postUrl": "https://www.linkedin.com/marcus-lee-1000",
    "postUrn": "urn:li:activity:1646120582",
    "commenterProfileId": "1150986638",
    "commenterUrl": "https://www.linkedin.com/marcus-lee-1000",
    "postAuthorUrl": "https://www.linkedin.com/marcus-lee-1000",
    "details": {}
  },
  {
    "commenterHandle": "marcus-lee",
    "commenterName": "Marcus Lee",
    "commenterHeadline": "VP Sales, EMEA | B2B SaaS",
    "body": "Congrats on the launch, team!",
    "likes": 9,
    "replies": 1,
    "commentedAt": "2026-10-12T16:05:00Z",
    "postAuthor": "Daniel Kim",
    "isAuthor": false,
    "commentId": "4239718143",
    "commentUrl": "https://www.linkedin.com/marcus-lee-1001",
    "postUrl": "https://www.linkedin.com/marcus-lee-1001",
    "postUrn": "urn:li:activity:3776163747",
    "commenterProfileId": "3190281601",
    "commenterUrl": "https://www.linkedin.com/marcus-lee-1001",
    "postAuthorUrl": "https://www.linkedin.com/marcus-lee-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try comments by a person in the playground Examples and pricing for comments by a person
Reactions on a postpostReactions

Reactions on up to ten LinkedIn POSTS, by post URL. Who reacted and how. `reactionTypes` filters to specific reactions (Like, Celebrate…).

FieldTypeMeaning
subjects *list of string · 1-10 itemsPost URLs.
reactionTypeslist of enumKeep only these reactions: like, celebrate, support, love, insightful, funny. Omit for all of them.like · celebrate · support · love · insightful · funny
limitinteger · 1-100

Response fields, each row of data

FieldType
reactorProfileIdstring
reactorHandlestring
reactorNamestring
reactorHeadlinestring
reactorUrlstring
reactorAvatarUrlstring
reactorLocationstring
reactionTypestring
postUrnstring
postUrlstring
postAuthorstring
postAuthorHandlestring
postAuthorUrlstring
postAuthorHeadlinestring
postAuthorProfileIdstring
postAuthorTypestring
postTextstring
postPostedAtstring
postMediaUrlstring
postLikesinteger
postCommentsinteger
postRepostsinteger
reactedAtstring
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · postReactions
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"postReactions","subjects":["https://www.linkedin.com/posts/<post-id>"],"reactionTypes":["like"],"limit":25}'

Example response rows

data · made-up names, real field names
[
  {
    "reactorHandle": "priya-nair",
    "reactorName": "Priya Nair",
    "reactorHeadline": "Product Lead at Ledgerly",
    "reactorLocation": "Mumbai, India",
    "reactionType": "LIKE",
    "postAuthor": "Ananya Rao",
    "reactedAt": "2026-10-14T09:30:00Z",
    "reactorProfileId": "4155200177",
    "reactorUrl": "https://www.linkedin.com/priya-nair-1000",
    "postUrn": "urn:li:activity:492783029",
    "postUrl": "https://www.linkedin.com/priya-nair-1000",
    "postAuthorUrl": "https://www.linkedin.com/priya-nair-1000",
    "details": {}
  },
  {
    "reactorHandle": "daniel-kim",
    "reactorName": "Daniel Kim",
    "reactorHeadline": "Engineering Manager at Kitebank",
    "reactorLocation": "Seoul, South Korea",
    "reactionType": "PRAISE",
    "postAuthor": "Ananya Rao",
    "reactedAt": "2026-10-14T09:41:00Z",
    "reactorProfileId": "1968241913",
    "reactorUrl": "https://www.linkedin.com/daniel-kim-1001",
    "postUrn": "urn:li:activity:3363527946",
    "postUrl": "https://www.linkedin.com/daniel-kim-1001",
    "postAuthorUrl": "https://www.linkedin.com/daniel-kim-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try reactions on a post in the playground Examples and pricing for reactions on a post
Reactions by a personprofileReactions

A profile's OWN reactions. What up to ten people reacted to across LinkedIn, by /in/<slug> handle, newest first.

FieldTypeMeaning
subjects *list of string · 1-10 items/in/<slug> handles or profile URLs.
postedWithinenumany · 1d · 7d · 30d
limitinteger · 1-100

Response fields, each row of data

FieldType
reactorProfileIdstring
reactorHandlestring
reactorNamestring
reactorHeadlinestring
reactorUrlstring
reactorAvatarUrlstring
reactorLocationstring
reactionTypestring
postUrnstring
postUrlstring
postAuthorstring
postAuthorHandlestring
postAuthorUrlstring
postAuthorHeadlinestring
postAuthorProfileIdstring
postAuthorTypestring
postTextstring
postPostedAtstring
postMediaUrlstring
postLikesinteger
postCommentsinteger
postRepostsinteger
reactedAtstring
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · profileReactions
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"profileReactions","subjects":["satyanadella"],"limit":25}'

Example response rows

data · made-up names, real field names
[
  {
    "reactorHandle": "sofia-ortiz",
    "reactorName": "Sofia Ortiz",
    "reactorHeadline": "Data Engineer · Python, dbt, Airflow",
    "reactorLocation": "Austin, Texas, United States",
    "reactionType": "LIKE",
    "postAuthor": "Tom Becker",
    "postText": "We open-sourced our data quality checks.",
    "reactedAt": "2026-10-15T14:10:00Z",
    "reactorProfileId": "3680798353",
    "reactorUrl": "https://www.linkedin.com/sofia-ortiz-1000",
    "postUrn": "urn:li:activity:3845499993",
    "postUrl": "https://www.linkedin.com/sofia-ortiz-1000",
    "postAuthorUrl": "https://www.linkedin.com/sofia-ortiz-1000",
    "details": {}
  },
  {
    "reactorHandle": "sofia-ortiz",
    "reactorName": "Sofia Ortiz",
    "reactorHeadline": "Data Engineer · Python, dbt, Airflow",
    "reactorLocation": "Austin, Texas, United States",
    "reactionType": "EMPATHY",
    "postAuthor": "Leila Haddad",
    "postText": "Today is my last day at Coinmint.",
    "reactedAt": "2026-10-12T18:22:00Z",
    "reactorProfileId": "3776001972",
    "reactorUrl": "https://www.linkedin.com/sofia-ortiz-1001",
    "postUrn": "urn:li:activity:1372690733",
    "postUrl": "https://www.linkedin.com/sofia-ortiz-1001",
    "postAuthorUrl": "https://www.linkedin.com/sofia-ortiz-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try reactions by a person in the playground Examples and pricing for reactions by a person
Ads by a companyadsLibrary

Ads from the LinkedIn Ad Library, by Ad Library URL. An advertiser's page (all their live ads) or a single ad's detail URL.

FieldTypeMeaning
subject *string · ≤400 charsAn Ad Library URL. An advertiser page or one ad's detail page.
limitinteger · 1-100

Response fields, each row of data

FieldType
adIdstring
adUrlstring
advertiserUrlstring
paidBystring
headlinestring
bodystring
formatstring
mediaTypestring
mediaUrlstring
clickUrlstring
impressionsinteger
targetingLocationstring
startedstring
endedstring
daysActiveinteger
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · adsLibrary
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"adsLibrary","subject":"https://www.linkedin.com/ad-library/search?companyIds=<company-id>","limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "paidBy": "Northfold",
    "headline": "Close your books 3x faster",
    "body": "Finance teams at 400+ companies close in 2 days.",
    "format": "SINGLE_IMAGE",
    "mediaType": "image",
    "impressions": "10k-50k",
    "targetingLocation": "United Kingdom",
    "started": "2026-09-02",
    "daysActive": 44,
    "adId": "3114963231",
    "adUrl": "https://www.linkedin.com/finance-teams-at-400-companies-close-in--1000",
    "advertiserUrl": "https://www.linkedin.com/finance-teams-at-400-companies-close-in--1000",
    "mediaUrl": "https://www.linkedin.com/finance-teams-at-400-companies-close-in--1000",
    "clickUrl": "https://www.linkedin.com/finance-teams-at-400-companies-close-in--1000",
    "details": {}
  },
  {
    "paidBy": "Northfold",
    "headline": "The 2026 finance team benchmark",
    "body": "Download the report: 1,200 teams surveyed.",
    "format": "DOCUMENT",
    "mediaType": "document",
    "impressions": "50k-100k",
    "targetingLocation": "Europe",
    "started": "2026-09-20",
    "daysActive": 26,
    "adId": "3288908810",
    "adUrl": "https://www.linkedin.com/download-the-report-1-200-teams-surveyed-1001",
    "advertiserUrl": "https://www.linkedin.com/download-the-report-1-200-teams-surveyed-1001",
    "mediaUrl": "https://www.linkedin.com/download-the-report-1-200-teams-surveyed-1001",
    "clickUrl": "https://www.linkedin.com/download-the-report-1-200-teams-surveyed-1001",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try ads by a company in the playground Examples and pricing for ads by a company
Historyhistoryfree

The stored time series. Free, reads what captures already wrote.

FieldTypeMeaning
subjects *list of string · 1-10 itemsHandles or URLs of the chosen entity kind.
entityenumWhose series: "people" (/in/ handles) or "companies" (/company/ handles).people · companies
metricstringpeople: followers | connections; companies: followers | employees_count
daysinteger · 1-730

Response fields, each row of data

FieldType
subject
metric
points[].date
points[].value

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

Try history in the playground

Guides and ideas.

More in social.

All platforms