Scrape public LinkedIn posts, no account

Point one call at a profile or company and get its recent public posts, with reactions, author, and date.

Public, logged-out data Clean JSON, one call 3,000 free / month
tldr.txt
one call: GET /v1/linkedin?type=posts&url=<profile or company>
public posts only, no login, no cookie, nothing of yours to ban
each post: headline, url, postType, datePublished, likes, author, image, text, hashtags
one test call returned 16 posts in 1,366ms of server time
1 credit per successful call, an empty result is free, credits never expire
→ competitors are either fragile browser bots or login-based tools; this is a clean logged-out API
ONE CALL

One call, a profile or a company

Everything runs through GET /v1/linkedin?type=posts with your key in the x-api-key header. Pass a person's /in/ URL or a company's /company/ URL in url. Both work.

Pass a URL, get posts

Give it a profile or company url and it returns that page's recent public posts. On our test call, one profile came back with 16 posts.

comments=true

Add comments=true to include a comment count per post. Use limit to set how many posts you want back, up to 100.

THE SHAPE

What comes back per post

Every post in the array is the same shape. Nine fields, described below with what to expect.

FieldWhat it is
headlineThe post's title or headline text. For an article-type post this carries the content.
urlA direct link to the post.
postTypeThe kind of post, for example article.
datePublishedWhen it was published, as an ISO timestamp like 2026-07-12T17:14:33Z.
likesThe reaction count on the post.
authorThe poster, with a name and a url.
imageThe post's image, when it has one.
textThe post body. For an article-type post this is null, because the headline carries it.
hashtagsPresent only when the post uses hashtags, otherwise empty.

Honest note: for an article-type post the text field is null, since the headline holds the content, and hashtags is empty when the post has none. We never promise a field that the post itself does not carry.

THE REAL RESPONSE

What you get

I ran this call on 2026-07-15 against the public profile at linkedin.com/in/williamhgates. It returned 16 posts in 1,366ms of server time. Here is the request and the first post, trimmed only where the array repeats.

# the request curl "https://crustapi.com/v1/linkedin?type=posts&url=https://www.linkedin.com/in/williamhgates" \ -H "x-api-key: YOUR_KEY"
{ "type": "posts", "url": "https://www.linkedin.com/in/williamhgates", "tookMs": 1366, "count": 16, "posts": [ { "headline": "\"AIDS-free\" generation is no empty promise", "url": "https://www.linkedin.com/pulse/aids-free-generation-...", "postType": "article", "datePublished": "2026-07-12T17:14:33Z", "likes": 2745, "author": { "name": "Bill Gates", "url": "https://www.linkedin.com/in/williamhgates" }, "image": "https://media.licdn.com/dms/image/...", "text": null, "hashtags": [] } // 16 posts total ] }

This is an article-type post, so text is null and the headline carries it, and it uses no hashtags, so that array is empty. Something look off? Email support@crustapi.com.

Run this exact call free
3,000 credits a month. No card, no contract.
Get started →
WHO IT'S FOR

Who this is for

A few honest fits, tied to what the endpoint actually returns.

Social listening

Creator analytics

Competitive research

THE MATH

What it costs

One credit per successful call. An empty result returns 200 with a note and costs nothing. Purchased credits never expire, so a paused project does not burn what you already bought.

FREE EVERY MONTH
3,000 credits

Every account gets 3,000 free credits a month, no card. It resets monthly and does not stack.

WHEN YOU NEED MORE
1 credit / call

Packs are pay-as-you-go and never expire. Empty results are free, so dead URLs do not cost you.

The pack ladder: 25k $49 · 100k $149 · 500k $549 · 2.5M $1,999 · 10M $6,500, ex-tax. The bigger the pack, the lower the per-call rate. This endpoint is part of the wider LinkedIn data API, which also covers profiles, companies, jobs, and people search from the same key.

hiQ v. LinkedIn (CFAA). The Ninth Circuit held in 2019, reaffirmed on April 18, 2022, that scraping data from a public website is not access "without authorization" under the Computer Fraud and Abuse Act, because a public page has no login gate to circumvent (EFF). The honest caveat: hiQ ultimately lost on contract, not on hacking. A court found it had breached LinkedIn's User Agreement, which binds people who signed in and agreed to it, including by using fake accounts, and it settled for $500,000 and shut down (Privacy World). The public-scraping-is-not-hacking point stands; the loss was for violating a contract hiQ had agreed to.

Meta v. Bright Data (Jan 23, 2024). A federal court ruled that the Facebook and Instagram Terms do not bar logged-off scraping of public data (Bright Data, TechCrunch).

The gate framing. Courts treat the two situations differently. Reading a public, logged-out page is like walking through an open door, there is no login gate to breach, whereas logging in, or creating fake accounts to do so, crosses an authorization gate. CrustAPI uses no accounts and no fake profiles.

Keep one thing in mind. The Bright Data rulings are district-court decisions, persuasive but not nationwide binding precedent, and each turned on those platforms' specific terms. So the fair way to say it is that courts have sided with public-data scrapers, not that scraping is settled law. This is background, not legal advice; check your own use with a lawyer.

BEFORE YOU ASK

Common questions

# posts from a profile or a company URL curl "https://crustapi.com/v1/linkedin?type=posts&url=https://www.linkedin.com/in/USERNAME" -H "x-api-key: YOUR_KEY"

Full parameter reference at /docs#linkedin. Part of the LinkedIn data API.

WORKS WITH YOUR STACK

Try it on your own URLs

Point the endpoint at the profiles and companies whose posts you actually care about. The free tier is real, and the JSON decides, not this page.

Get 3,000 free credits
No credit card required