LinkedIn Profile & Company Posts Scraper Links & Tagged Account avatar

LinkedIn Profile & Company Posts Scraper Links & Tagged Account

Pricing

$19.99/month + usage

Go to Apify Store
LinkedIn Profile & Company Posts Scraper Links & Tagged Account

LinkedIn Profile & Company Posts Scraper Links & Tagged Account

Linkedin Profile And Company Posts Scraper extracts public LinkedIn posts from profiles and company pages. Collect structured post data including content, timestamps, reactions, and URLs for lead generation, analytics, recruitment, and competitor research. Scalable and API-ready 🚀

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

ScrapAPI

ScrapAPI

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

1

Monthly active users

10 days ago

Last modified

Share

LinkedIn Profile & Company Posts Scraper — Outbound Links & Tagged Accounts

Scrape posts from LinkedIn company and profile pages, and get — for every post — the outbound links it sends people to, the link-preview card LinkedIn shows underneath it, the people/companies/showcase pages it tags, and the hashtags it uses. Built on top of the base LinkedIn Profile & Company Posts Scraper: every base output field is still there, unchanged, plus six new fields read from the same page HTML the base already downloads.

Why use this actor

  • See where a post's traffic really goes. LinkedIn wraps every link in its own redirect address (linkedin.com/redir/redirect?url=… or linkedin.com/signup/cold-join?session_redirect=…); this actor decodes both wrappers and gives you the real destination URL and domain.
  • See who a post tags. People, companies and LinkedIn showcase pages mentioned in a post's own text, each as a display name, a real LinkedIn URL, and a type.
  • See the campaign hashtags a post uses, each with a working /feed/hashtag/… URL.
  • Optionally unmask lnkd.in short links to the page they actually open (one extra request per masked link, off by default).
  • Filter live to only the posts that tag a given account, or that link to a given domain.
  • Bulk URLs, proxy fallback, live saving — identical to the base actor (direct → datacenter → residential proxy fallback; posts land in the dataset as soon as they're scraped).

Input

FieldTypeRequiredDescription
urlsarrayYesCompany or profile URLs to scrape, one per line.
maxPostsintegerNoMax posts to collect per URL (default 10, 1–500).
targetTypestringNocompany, profile, or both (default both).
proxyConfigurationobjectNoApify proxy settings. Default: no proxy; the actor falls back to datacenter then residential if LinkedIn blocks it.
includePostLinksbooleanNoReturn outboundLinks and linkPreview (default true).
includeTaggedAccountsbooleanNoReturn taggedAccounts (default true).
includeHashtagsbooleanNoReturn hashtags (default true).
resolveShortLinksbooleanNoOpen each masked lnkd.in link once to find its real destination (default false — costs one extra request per masked link).
mentionsAccountsarrayNoKeep only posts that tag one of these accounts — a name, a slug, or a full LinkedIn URL. Empty = keep every post (default).
linkDomainsarrayNoKeep only posts whose links point at one of these domains. Empty = keep every post (default).

Example input

{
"urls": [
"https://www.linkedin.com/company/google/",
"https://www.linkedin.com/in/ajjames"
],
"maxPosts": 10,
"targetType": "both",
"proxyConfiguration": { "useApifyProxy": false },
"includePostLinks": true,
"includeTaggedAccounts": true,
"includeHashtags": true,
"resolveShortLinks": false,
"mentionsAccounts": [],
"linkDomains": []
}

Output

One dataset row per post. Every base field is unchanged (see the base actor's own docs for the full list — urn, text, url, postedAtISO, authorType, authorFullName, numLikes, numComments, images, author{…}, and the rest), plus six new fields:

{
// ...all base fields, unchanged...
"outboundLinks": [
{
"url": "https://blog.google/innovation-and-ai/technology/families/kids-summer-screen-time-tips/",
"asWritten": "https://www.linkedin.com/redir/redirect?url=...&urlhash=Xz2p",
"source": "card", // "card" = the link-preview card | "text" = a link inside the post text
"domain": "blog.google",
"resolved": false // true only when this URL came from an lnkd.in lookup
}
],
"linkPreview": { // null when the post has no preview card
"url": "https://stripe.com/blog/mapping-the-ai-economy",
"title": "Mapping the AI economy",
"subtitle": "stripe.com", // LinkedIn's own subtitle text, verbatim
"domain": "stripe.com",
"image": "https://media.licdn.com/dms/image/...",
"pointsToLinkedIn": false // true when the card points at a LinkedIn Pulse article, not an outside site
},
"taggedAccounts": [
{ "name": "YouTube", "url": "https://www.linkedin.com/company/youtube", "type": "company" }
],
"hashtags": [
{ "tag": "#MadeByGoogle", "url": "https://www.linkedin.com/feed/hashtag/madebygoogle" }
],
"hasOutboundLink": true, // convenience boolean, not the purpose
"taggedAccountCount": 1 // convenience count, not the purpose
}

Every added field is present on every row for a stable shape: [] for the three arrays, null for linkPreview, false/0 for the two convenience fields when there is nothing to report.

How to run

  1. Open Apify ConsoleActors.
  2. Select this actor.
  3. Set urls (and optionally the other fields above).
  4. Click Start.
  5. Check Log for progress and proxy fallback messages.
  6. Use the Dataset in the Output tab, or the default table view, which surfaces hasOutboundLink and taggedAccountCount alongside the base columns.

Honest limits

  • These fields are real, but sparse — not every post carries one. Across sampled company feeds: in-text links on roughly 22 of 49 posts, tagged accounts on 18 of 49, link-preview cards on 8 of 49, hashtags on 7 of 49. Posts with none come back with empty lists/null, not fabricated placeholders. Both filters default to empty for exactly this reason — a default run must never return an empty dataset.
  • Frequency swings hard by account. Some company pages carry a link card on most of their posts, others carry none at all. Don't expect a fixed hit rate.
  • The base's attributes field still comes back empty ([]) — that is correct, not a bug. It is the base actor's own dead mentions extractor, preserved untouched. The real tagged-account data lives in the new taggedAccounts field.
  • lnkd.in resolution is opt-in, costs one extra request per masked link, and is not guaranteed to succeed. It tries once, never retries, and never escalates the proxy tier. In our own testing, LinkedIn's lnkd.in shortener returned HTTP 403 to it more often than not; when that happens (or on any timeout or non-match) the masked lnkd.in address is returned exactly as written, with resolved: false — never a guess.
  • Profile pages that lead with Pulse/newsletter articles return empty new fields for those specific rows. A Pulse article's own URL carries no activity id, so it cannot be matched to a feed card — the fields are left empty rather than guessed. Posts joined to a real feed card (both on company pages and on profile pages that surface short-form posts) do get real data.
  • About 10 posts per account per run, logged out — this is a base-actor ceiling (LinkedIn publishes roughly ten posts to a signed-out visitor), unchanged by this variant. Setting maxPosts higher will not produce more rows.
  • Domains are parsed from links LinkedIn published. The preview card's subtitle is returned verbatim, including the "<Account> on LinkedIn" string LinkedIn itself uses when the card points at a Pulse article rather than an outside site (pointsToLinkedIn: true in that case).
  • The destination page is never opened. This actor returns the address a post links to; it does not crawl, title-fetch, or download anything from that page.
  • Nothing is computed or compared across runs. No score, ranking, or "changed since last run" — every value is read live, in this run.
  • Logged out only. No login, no cookie, no API key.
  • Personal data. Tagged accounts are real people and companies — handle exports in line with GDPR and LinkedIn's terms.

Cautions

  • Data is from publicly available pages only.
  • You are responsible for compliance with applicable laws (privacy, data protection, terms of use).