Curly

LinkedIn Post Scraper API for posts and public comments.

Send exact public post URLs from people or companies and receive structured post, author, media, engagement, and first-comment data.

  • Up to 100 post URLs
  • No login or cookies
  • $0.50 per 1,000 results

Mix person and company posts in one run. Up to 100 unique post URLs are accepted.

curl -X POST \
  "https://api.apify.com/v2/acts/curly~linkedin-post-scraper/run-sync-get-dataset-items?format=json" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
  "postUrls": [
    "https://www.linkedin.com/posts/openai_example-activity-7487581078262681600-example"
  ]
}'

Keep the Apify token in a server environment variable. Never place it in public browser code.

Post detail by URL, not publishing or feed discovery.

  • Verify exact posts by canonical URL

    Resolve known public /posts/ URLs into stable identities, author attribution, publication time, content, media, and outbound links.

  • Measure comment-batch completeness

    Compare the public comment count with comments_returned and comments_truncated before treating the collected discussion as complete.

  • Keep post detail separate from discovery

    Extract a person or company post you already selected instead of mixing URL verification with company-feed or topic-search behavior.

A LinkedIn post data API for exact public URLs.

Curly accepts public LinkedIn /posts/ URLs from people or companies and returns one dataset item per accessible post.

It rejects profile pages, company pages, search pages, and /feed/update/ URLs because those are different surfaces and intents.

Know which public post and comment fields can be returned.

Fields reflect the public post-detail response at run time. Missing data remains null or empty rather than being inferred.

FieldsPurposeAvailability
post_id, post_urn, attributed_urn, post_urlStable post identity and canonical sourceSuccessful results
headline, text, published_atPost content and exact publication timeWhen public
authorPerson or company type, name, URL, image, and followersWhen public
content_type, media, articleDocument, image, video, or linked-article contentWhen attached
hashtags, mentions, external_urlsStructured entities and outbound linksWhen present
reaction_count, comment_count, repost_countPublic engagement countersWhen exposed
comments_returned, comments_truncatedReturned batch size and completeness signalSuccessful results
commentsFirst public comments with author, text, time, and reactionsWhen LinkedIn exposes comments publicly

Plan the integration with a complete post response.

This representative result shows the nested author, media, engagement, and public-comment structures used by the dataset.

[
  {
    "post_id": "7487581078262681600",
    "post_urn": "urn:li:activity:7487581078262681600",
    "attributed_urn": "urn:li:ugcPost:7487581077159677953",
    "post_url": "https://www.linkedin.com/posts/openai_example-activity-7487581078262681600-example",
    "author": {
      "type": "company",
      "name": "OpenAI",
      "url": "https://www.linkedin.com/company/openai",
      "image_url": "https://media.licdn.com/example-company-logo.png",
      "follower_count": 11360000
    },
    "headline": "An example public company post.",
    "text": "Example public post text...",
    "published_at": "2026-07-27T18:54:01.561Z",
    "content_type": "document",
    "is_repost": false,
    "original_author": null,
    "media": [{
      "type": "document",
      "url": "https://media.licdn.com/example-document-manifest.json",
      "thumbnail_url": "https://media.licdn.com/example-cover.png",
      "title": "Example document",
      "alt_text": "Accessible document"
    }],
    "article": null,
    "hashtags": [],
    "mentions": [],
    "external_urls": [],
    "reaction_count": 280,
    "comment_count": 55,
    "repost_count": null,
    "comments_returned": 10,
    "comments_truncated": true,
    "comments": [{
      "comment_id": "7487618419475759104",
      "author": {
        "type": "person",
        "name": "Example Commenter",
        "url": "https://www.linkedin.com/in/example-commenter"
      },
      "text": "Example public comment.",
      "published_at": "2026-07-27T21:22:24.427Z",
      "relative_time": "2h",
      "reaction_count": 7
    }],
    "scraped_at": "2026-07-28T12:00:00.000Z",
    "source": "linkedin_post"
  }
]

Post scraper API versus publishing and discovery APIs.

The broad LinkedIn Post API usually means creating or managing posts through an official integration. Curly instead extracts public data from post URLs you already know.

OptionStarting inputAccessBest for
Official LinkedIn Posts APIAuthorized authors and post payloadsRestricted LinkedIn product accessCreating and managing posts
Curly Post Scraper APIKnown public /posts/ URLsApify API tokenExtracting post detail and first public comments
Curly Company Posts APIKnown company pagesSeparate Curly endpointCollecting multiple posts by company
Curly Top Content APITopicsSeparate Curly endpointDiscovering ranked public posts by topic

Route exact post records into downstream workflows.

Use the post ID or canonical URL as a stable key, then schedule runs, receive webhooks, or export datasets through Apify.

Ready to extract public posts by API?

Open the Curly Actor to create a token, test person and company post URLs, schedule runs, or connect the dataset.

Open API on Apify

Common LinkedIn Post Scraper API questions.