A briefing for the brief-curious.
Extract a public LinkedIn post with one GET request. Use the same domain as this page. No client API key is required; the server connects to ScrapingBee.
Robot in a hurry? Read the plain-text agent briefing. Humans may read it too. We don’t check.
Read a post. Discreetly.
GET /api/post?url=ENCODED_LINKEDIN_POST_URL
Pass a full HTTPS post URL from linkedin.com/posts/…, linkedin.com/feed/update/…, or lnkd.in/…. URL-encode the entire link.
const link = 'https://lnkd.in/p/ey3k6ZpB'; const response = await fetch( '/api/post?url=' + encodeURIComponent(link) ); const data = await response.json(); if (!response.ok) throw new Error(data.error.message); console.log(data.author.name, data.text, data.image_url);
For requests outside the browser, prefix the path with this app’s origin. The extractor’s “Copy API link” button copies the full URL.
What’s in the envelope
| Field | What you get |
|---|---|
url | Canonical LinkedIn post URL. |
author | name, profile_url, and image_url; unavailable values are null. |
text | Full publicly available post text, with line breaks. |
published_at | Publication time, or null. |
like_count | Total reactions, including likes and other reaction types; null if unavailable. |
comment_count | Reported total comment count; null if unavailable. |
comments | Visible comments with author, text, like_count, and published_at. |
comments_returned | Number of comment objects returned. |
comments_complete | True only when the returned count matches the reported total. |
image_url | First original post image URL, or null. |
image_urls | All post images found in the public page. |
fetched_at | UTC timestamp when the post was extracted. |
warnings | Limitations affecting the extracted data. |
Photographic evidence
GET /api/image?url=ENCODED_LINKEDIN_POST_URL
This endpoint redirects (HTTP 302) to the first original image. It returns 404 if no image is available. For AI vision APIs, pass image_url from the JSON directly. LinkedIn image URLs may expire; fetch the post again for a fresh URL. This is the post’s media, not a screenshot.
When the mission gets awkward
{
"error": {
"code": "INVALID_URL",
"message": "Enter a public LinkedIn post URL."
}
}400 | Missing or unsupported URL. |
404 | No public image (image endpoint only). |
422 | Post unavailable, private, deleted, or blocked by sign-in. |
429 | ScrapingBee credit or concurrency limit. |
502 | ScrapingBee could not load the page within the cost limit. |
503 | Server key or cost configuration needs attention. |
504 | Upstream request timed out. |
Availability and caching
LinkedIn often shows only a subset of comments to signed-out visitors. An empty comments array does not mean the post has no comments. Check comment_count, comments_returned, and warnings. No login-only content is accessed.
Successful responses are cached at Vercel’s edge for 15 minutes and in each warm server instance for up to 15 minutes. Fresh requests can take up to two minutes. The default ScrapingBee cost cap is one credit per scrape. Some posts may fail at this limit. This is a public endpoint backed by the owner’s ScrapingBee credits.
Provider details: ScrapingBee documentation.