{
  "data": {
    "id": "6mcBv8W2JMWmL2Vco",
    "actId": "lB0DRaOyItRbrC6LU",
    "userId": "9Um4NEFR7z42j35AD",
    "startedAt": "2026-08-16T17:54:26.187Z",
    "finishedAt": "2026-08-16T17:54:29.931Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3600,
      "runTimeSecs": 3.6,
      "computeUnits": 0.004,
      "imageSizeBytes": 562033664
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Post Scraper input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"startUrls\": {\n      \"title\": \"Post URLs\",\n      \"type\": \"array\",\n      \"description\": \"Paste one or more public LinkedIn post URLs.\",\n      \"editor\": \"stringList\",\n      \"minItems\": 1,\n      \"uniqueItems\": true,\n      \"items\": {\n        \"type\": \"string\",\n        \"pattern\": \"^https://([a-z]{2,3}\\\\.)?linkedin\\\\.com/posts/[^/?#]+(?:[/?#].*)?$\"\n      },\n      \"prefill\": [\n        \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\"\n      ]\n    }\n  },\n  \"required\": [\n    \"startUrls\"\n  ]\n}",
    "readme": "# LinkedIn Post Scraper\n\n## 📊 What does LinkedIn Post Scraper do?\n\nLinkedIn Post Scraper turns known public LinkedIn post URLs into clean post\nrows. Use it for content research, author research, campaign tracking, reports,\nand scheduled post checks.\n\nEach input creates one row. A successful row can contain stable post and author\nidentity, post text, publish time, public engagement counts, author details,\nand public media details.\n\nThis Actor reads public LinkedIn post pages. It does not sign in, use customer\nLinkedIn accounts, collect private data, or reveal hidden post details.\n\nWith LinkedIn Post Scraper, you can:\n\n- 🆔 Collect typed activity IDs, UGC post IDs, post URNs, and author IDs.\n- 📝 Save public post text, headlines, and publish times.\n- 📊 Collect public likes, comments, reposts, and author follower counts.\n- 🎬 Save public media details, thumbnails, captions, and transcripts when\n  LinkedIn shows them.\n- 📦 Export rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n- 🔄 Send post rows to an API, webhook, spreadsheet, or data pipeline.\n\n## 📦 What LinkedIn post data can I extract?\n\nOne dataset row represents one attempted public LinkedIn post input.\n\n| Data group         | Example fields                                                                            |\n| ------------------ | ----------------------------------------------------------------------------------------- |\n| 🔗 Post identity   | `inputUrl`, `url`, `activityId`, `ugcPostId`, `postUrn`, `postType`                       |\n| 🆔 Author identity | `authorId`, `authorUrn`, `authorPublicIdentifier`, `authorUrl`                            |\n| 🧑 Author details  | `authorName`, `authorType`, `authorImageUrl`, `authorFollowersCount`                      |\n| 📝 Post details    | `headline`, `text`, `publishedAt`                                                         |\n| 📊 Public counts   | `likesCount`, `commentsCount`, `repostsCount`                                             |\n| 🎬 Media details   | `durationMs`, `width`, `height`, `contentUrl`, `thumbnailUrl`, `captionUrl`, `transcript` |\n| 🚦 Row state       | `status`, `statusReason`, `observedAt`                                                    |\n\nMissing public values stay `null`. The Actor does not guess hidden values or\nchange missing counts to zero.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run the Actor in Apify Console or connect it through:\n\n- Apify API\n- Python SDK\n- JavaScript SDK\n- Webhooks\n- Scheduled runs\n- Apify integrations\n\nThis lets you send fresh post rows to a spreadsheet, database, warehouse, or\ninternal service.\n\n## 🎯 Why scrape LinkedIn posts?\n\n| Use case            | How the data helps                                               |\n| ------------------- | ---------------------------------------------------------------- |\n| 🔎 Content research | Review public post text, media, authors, and engagement.         |\n| 📈 Post monitoring  | Compare public post snapshots from scheduled runs.               |\n| 🧑 Author research  | Connect posts with stable public author identity when available. |\n| 📣 Campaign reports | Save public engagement counts for known campaign posts.          |\n| 🧱 Data pipelines   | Load clean post rows into a database or internal tool.           |\n\n## 💵 Pricing Event\n\nThis Actor uses pay-per-result pricing. One paid result means one successfully\nresolved public post row. Failed, private, deleted, missing, or unsupported\nposts are not paid results.\n\n| Apify plan | Price per 1,000 successful posts |\n| ---------- | -------------------------------: |\n| Free       |                            $3.50 |\n| Starter    |                            $3.00 |\n| Scale      |                            $2.75 |\n| Business   |                            $2.50 |\n\nPlatform usage is included. Use Apify's maximum charge setting to limit paid\nresults before a run.\n\n## 🚀 How do I use LinkedIn Post Scraper?\n\n1. Open **LinkedIn Post Scraper** in Apify Console.\n2. Add one or more public LinkedIn post URLs.\n3. Click **Start**.\n4. Open the **Output** tab while the run is active to see completed rows.\n5. Download the dataset or connect it to your workflow.\n\n## ⬇️ Input\n\n### 🔗 LinkedIn post URLs\n\nAdd public LinkedIn post URLs to `startUrls`.\n\n```json\n{\n  \"startUrls\": [\n    \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\"\n  ]\n}\n```\n\nThe Actor supports standard and country LinkedIn domains with a `/posts/`\npath. Tracking parameters can remain in the input URL. The output includes the\nclean post URL when the post is available. The clean URL uses the standard\n`www.linkedin.com` host and has no query string or fragment.\n\nExact duplicate input strings are checked once. Different URL forms for the\nsame post can create separate attempts.\n\nResults are saved as soon as each post finishes.\n\n## ⬆️ Output sample\n\nThe sample below shows the exact field order. Public values vary by post and\nrun time.\n\n<!-- OUTPUT_SAMPLE_START -->\n\n```json\n{\n  \"inputUrl\": \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\",\n  \"url\": \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\",\n  \"activityId\": \"7333162625675038720\",\n  \"ugcPostId\": null,\n  \"postUrn\": \"urn:li:activity:7333162625675038720\",\n  \"postType\": \"VideoObject\",\n  \"authorName\": \"Tim Ferriss\",\n  \"authorType\": \"Person\",\n  \"authorId\": \"15499\",\n  \"authorUrn\": \"urn:li:member:15499\",\n  \"authorPublicIdentifier\": \"timferriss\",\n  \"authorUrl\": \"https://www.linkedin.com/in/timferriss\",\n  \"authorImageUrl\": \"https://media.licdn.com/dms/image/v2/D4E03AQFJUaA3RAZDIw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1687979278495?e=2147483647&v=beta&t=jU3Gf5QEuNbTGOvCToR36R3NEIvZFbzySzZzySeGofw\",\n  \"authorFollowersCount\": 1538200,\n  \"headline\": \"\\\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\\\" — Kevin Rose\",\n  \"text\": \"\\\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\\\" — Kevin Rose\",\n  \"publishedAt\": \"2025-05-27T16:10:13.501Z\",\n  \"likesCount\": 60,\n  \"commentsCount\": 10,\n  \"repostsCount\": null,\n  \"durationMs\": 43000,\n  \"width\": 720,\n  \"height\": 1280,\n  \"contentUrl\": \"https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/mp4-720p-30fp-crf28/B4DZcSgOoFGUBM-/0/1748362198190?e=2147483647&v=beta&t=5uuNhUZ1SMfCepiAg5rgM8UcJHrv1_CaWw0dQpcXMPc\",\n  \"thumbnailUrl\": \"https://media.licdn.com/dms/image/v2/D4D05AQGulHZiCPUQxA/videocover-high/B4DZcSgOoFGUBo-/0/1748362192116?e=2147483647&v=beta&t=a0_ktMIjBTUTKt_Teat8e4cE4-I9ckXCAAz59Ln_iQg\",\n  \"captionUrl\": \"https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/video-auto-caption-srt-acs-singleton/B4DZcSgOoFGUEE-/0/1748362211491?e=2147483647&v=beta&t=kUV4b-IXm1eu5KoIfEbhgoSd82sx16X-i8y6Yv1khAU\",\n  \"transcript\": \"I took my whole genome, dumped it into AI and we worked out a playbook together on where we could find mental doctors to and which methylated B vitamins I could give to help fix the broken cycle because I have the MTHFR genetic mutation. It's a very fancy way of saying 1 biomarker completely jacked up. My dad died of heart disease. I don't want to have heart disease. How can we fix this ****? We work through a way for me to supplement and start adding on supplements. I'm 8 weeks. In and for the first time, my homocysteine is at normal levels after many years of trying to figure this out, and I was working through this process in tandem with my AI.\",\n  \"status\": \"ok\",\n  \"statusReason\": null,\n  \"observedAt\": \"2026-08-13T14:05:36.171Z\"\n}\n```\n\n<!-- OUTPUT_SAMPLE_END -->\n\n### 📌 Run summary\n\nThe `OUTPUT` record contains:\n\n- `actorName`: stable Actor output name;\n- `schemaVersion`: public output contract version;\n- `startedAt` and `finishedAt`: run times;\n- `inputCount`: number of unique input strings;\n- `usefulRows`: number of successful post rows;\n- `failedRows`: number of failed post rows;\n- `datasetId`: ID of the result dataset;\n- `stopReason`: why the Actor stopped.\n\n## 🎯 Status and quality fields\n\n- `ok`: the Actor found a public post and saved its public data.\n- `failed`: the public post could not be read or did not expose enough data.\n- `invalid_url`: the input is not a supported LinkedIn post URL.\n\nFailed rows keep the same field order as successful rows. Unknown values stay\n`null`. Check `statusReason` for a safe explanation.\n\n`activityId` contains only an activity ID. `ugcPostId` contains only a UGC post\nID. `postUrn` keeps the typed post URN shown by LinkedIn. These values can be\ndifferent. The stable `authorId` and `authorUrn` identify the author when\nLinkedIn shows them. The public author identifier and profile URL can change.\n\n## 🔒 Source boundary\n\nThis Actor reads only public LinkedIn post pages available without a customer\naccount. It does not:\n\n- sign in to LinkedIn;\n- use customer passwords, saved browser data, or accounts;\n- open private posts or hidden post sections;\n- collect private contact details;\n- guess values that LinkedIn does not show.\n\n## ⚠️ Limits and interpretation\n\n- LinkedIn can show different public fields by post, visitor region, and time.\n- Private, deleted, missing, or login-limited posts can return failed rows.\n- A public count, author field, caption, transcript, or media field can be\n  missing.\n- Public media, image, thumbnail, and caption links can change or expire.\n- Results are post snapshots. Use scheduled runs to build history.\n- LinkedIn can change its public pages. A later change can require an Actor\n  update.\n\n## ❓ FAQ\n\n### Does this Actor need a LinkedIn login or API key?\n\nNo. It reads public post pages without a customer LinkedIn account.\n\n### Why is a field `null`?\n\nLinkedIn did not show that value publicly for the post at run time. The Actor\ndoes not guess the value or change a missing count to zero.\n\n### Why did I receive a failed row?\n\nThe post can be private, missing, deleted, limited to signed-in visitors, or\nunavailable at run time. Check `statusReason` and confirm that the input is a\npublic LinkedIn `/posts/` URL.\n\n### How are duplicate posts handled?\n\nThe Actor checks an exact duplicate input string once per run. Different URL\nforms for the same post can create separate attempts.\n\n## 🏠 Related Actors\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on LinkedIn\n\n- [LinkedIn Profile Scraper](https://apify.com/chronometrica/linkedin-profile-scraper)\n  — collect public profile identity, headlines, and visible profile facts.\n- [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n\n## 🛟 Support\n\nFor help, share the run ID, public post URL, expected result, and actual result.\nState whether the issue affects one row or the full run. Never share a LinkedIn\npassword, saved browser data, or private token.\n\nUse public data in line with applicable laws, LinkedIn rules, and Apify rules.\n",
    "changelog": "# Changelog\n\n## 1.0.0\n\nFirst public release.\n",
    "actorDefinition": {
      "$schema": "https://apify.com/schemas/v1/actor.ide.json",
      "actorSpecification": 1,
      "name": "linkedin-post-scraper",
      "title": "LinkedIn Post Scraper",
      "description": "Extract public LinkedIn post text, author details, publish time, likes, comments, reposts when shown, media links, captions, and transcripts from known post URLs.",
      "seoTitle": "LinkedIn Post Scraper – Text, Metrics & Media",
      "seoDescription": "Scrape public LinkedIn posts by URL. Extract text, author IDs, dates, likes, comments, reposts, media, captions, and transcripts. No login required.",
      "categories": [
        "SOCIAL_MEDIA",
        "AUTOMATION",
        "DEVELOPER_TOOLS"
      ],
      "version": "1.0",
      "buildTag": "latest",
      "defaultMemoryMbytes": 256,
      "maxMemoryMbytes": 256,
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 1800,
        "memoryMbytes": 128
      },
      "exampleRunInput": {
        "contentType": "application/json; charset=utf-8",
        "body": "{\n  \"startUrls\": [\n    \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\"\n  ]\n}"
      },
      "input": {
        "title": "LinkedIn Post Scraper input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "startUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Paste one or more public LinkedIn post URLs.",
            "editor": "stringList",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^https://([a-z]{2,3}\\.)?linkedin\\.com/posts/[^/?#]+(?:[/?#].*)?$"
            },
            "prefill": [
              "https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX"
            ]
          }
        },
        "required": [
          "startUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Post Scraper output",
        "description": "Post rows are in the default dataset. OUTPUT contains a short run summary.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Post results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "output": {
            "type": "string",
            "title": "Run summary",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/OUTPUT"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "inputUrl": {
                "title": "Input URL",
                "type": "string"
              },
              "url": {
                "title": "Post URL",
                "type": [
                  "string",
                  "null"
                ]
              },
              "activityId": {
                "title": "Activity ID",
                "type": [
                  "string",
                  "null"
                ]
              },
              "ugcPostId": {
                "title": "UGC Post ID",
                "type": [
                  "string",
                  "null"
                ]
              },
              "postUrn": {
                "title": "Post URN",
                "type": [
                  "string",
                  "null"
                ]
              },
              "postType": {
                "title": "Post Type",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorName": {
                "title": "Author",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorType": {
                "title": "Author Type",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorId": {
                "title": "Author ID",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorUrn": {
                "title": "Author URN",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorPublicIdentifier": {
                "title": "Author Public Identifier",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorUrl": {
                "title": "Author URL",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorImageUrl": {
                "title": "Author Image",
                "type": [
                  "string",
                  "null"
                ]
              },
              "authorFollowersCount": {
                "title": "Author Followers",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "headline": {
                "title": "Headline",
                "type": [
                  "string",
                  "null"
                ]
              },
              "text": {
                "title": "Post Text",
                "type": [
                  "string",
                  "null"
                ]
              },
              "publishedAt": {
                "title": "Published At",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "likesCount": {
                "title": "Likes",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "commentsCount": {
                "title": "Comments",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "repostsCount": {
                "title": "Reposts",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "durationMs": {
                "title": "Duration (ms)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "width": {
                "title": "Width",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "height": {
                "title": "Height",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "contentUrl": {
                "title": "Media URL",
                "type": [
                  "string",
                  "null"
                ]
              },
              "thumbnailUrl": {
                "title": "Thumbnail URL",
                "type": [
                  "string",
                  "null"
                ]
              },
              "captionUrl": {
                "title": "Caption URL",
                "type": [
                  "string",
                  "null"
                ]
              },
              "transcript": {
                "title": "Transcript",
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "title": "Status",
                "type": "string",
                "enum": [
                  "ok",
                  "failed",
                  "invalid_url"
                ]
              },
              "statusReason": {
                "title": "Status Reason",
                "type": [
                  "string",
                  "null"
                ]
              },
              "observedAt": {
                "title": "Observed At",
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "inputUrl",
              "url",
              "activityId",
              "ugcPostId",
              "postUrn",
              "postType",
              "authorName",
              "authorType",
              "authorId",
              "authorUrn",
              "authorPublicIdentifier",
              "authorUrl",
              "authorImageUrl",
              "authorFollowersCount",
              "headline",
              "text",
              "publishedAt",
              "likesCount",
              "commentsCount",
              "repostsCount",
              "durationMs",
              "width",
              "height",
              "contentUrl",
              "thumbnailUrl",
              "captionUrl",
              "transcript",
              "status",
              "statusReason",
              "observedAt"
            ],
            "additionalProperties": false
          },
          "views": {
            "overview": {
              "title": "Posts",
              "transformation": {
                "fields": [
                  "inputUrl",
                  "url",
                  "activityId",
                  "ugcPostId",
                  "postUrn",
                  "authorName",
                  "authorId",
                  "authorUrn",
                  "headline",
                  "text",
                  "publishedAt",
                  "likesCount",
                  "commentsCount",
                  "repostsCount",
                  "status",
                  "statusReason",
                  "observedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "inputUrl": {
                    "label": "Input",
                    "format": "link"
                  },
                  "url": {
                    "label": "Post",
                    "format": "link"
                  },
                  "activityId": {
                    "label": "Activity ID"
                  },
                  "ugcPostId": {
                    "label": "UGC Post ID"
                  },
                  "postUrn": {
                    "label": "Post URN"
                  },
                  "authorName": {
                    "label": "Author"
                  },
                  "authorId": {
                    "label": "Author ID"
                  },
                  "authorUrn": {
                    "label": "Author URN"
                  },
                  "headline": {
                    "label": "Headline"
                  },
                  "text": {
                    "label": "Post"
                  },
                  "publishedAt": {
                    "label": "Published",
                    "format": "date"
                  },
                  "likesCount": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "commentsCount": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "repostsCount": {
                    "label": "Reposts",
                    "format": "number"
                  },
                  "status": {
                    "label": "Status"
                  },
                  "statusReason": {
                    "label": "Status reason"
                  },
                  "observedAt": {
                    "label": "Observed",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "changelog": "# Changelog\n\n## 1.0.0\n\nFirst public release.\n",
      "readme": "# LinkedIn Post Scraper\n\n## 📊 What does LinkedIn Post Scraper do?\n\nLinkedIn Post Scraper turns known public LinkedIn post URLs into clean post\nrows. Use it for content research, author research, campaign tracking, reports,\nand scheduled post checks.\n\nEach input creates one row. A successful row can contain stable post and author\nidentity, post text, publish time, public engagement counts, author details,\nand public media details.\n\nThis Actor reads public LinkedIn post pages. It does not sign in, use customer\nLinkedIn accounts, collect private data, or reveal hidden post details.\n\nWith LinkedIn Post Scraper, you can:\n\n- 🆔 Collect typed activity IDs, UGC post IDs, post URNs, and author IDs.\n- 📝 Save public post text, headlines, and publish times.\n- 📊 Collect public likes, comments, reposts, and author follower counts.\n- 🎬 Save public media details, thumbnails, captions, and transcripts when\n  LinkedIn shows them.\n- 📦 Export rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n- 🔄 Send post rows to an API, webhook, spreadsheet, or data pipeline.\n\n## 📦 What LinkedIn post data can I extract?\n\nOne dataset row represents one attempted public LinkedIn post input.\n\n| Data group         | Example fields                                                                            |\n| ------------------ | ----------------------------------------------------------------------------------------- |\n| 🔗 Post identity   | `inputUrl`, `url`, `activityId`, `ugcPostId`, `postUrn`, `postType`                       |\n| 🆔 Author identity | `authorId`, `authorUrn`, `authorPublicIdentifier`, `authorUrl`                            |\n| 🧑 Author details  | `authorName`, `authorType`, `authorImageUrl`, `authorFollowersCount`                      |\n| 📝 Post details    | `headline`, `text`, `publishedAt`                                                         |\n| 📊 Public counts   | `likesCount`, `commentsCount`, `repostsCount`                                             |\n| 🎬 Media details   | `durationMs`, `width`, `height`, `contentUrl`, `thumbnailUrl`, `captionUrl`, `transcript` |\n| 🚦 Row state       | `status`, `statusReason`, `observedAt`                                                    |\n\nMissing public values stay `null`. The Actor does not guess hidden values or\nchange missing counts to zero.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run the Actor in Apify Console or connect it through:\n\n- Apify API\n- Python SDK\n- JavaScript SDK\n- Webhooks\n- Scheduled runs\n- Apify integrations\n\nThis lets you send fresh post rows to a spreadsheet, database, warehouse, or\ninternal service.\n\n## 🎯 Why scrape LinkedIn posts?\n\n| Use case            | How the data helps                                               |\n| ------------------- | ---------------------------------------------------------------- |\n| 🔎 Content research | Review public post text, media, authors, and engagement.         |\n| 📈 Post monitoring  | Compare public post snapshots from scheduled runs.               |\n| 🧑 Author research  | Connect posts with stable public author identity when available. |\n| 📣 Campaign reports | Save public engagement counts for known campaign posts.          |\n| 🧱 Data pipelines   | Load clean post rows into a database or internal tool.           |\n\n## 💵 Pricing Event\n\nThis Actor uses pay-per-result pricing. One paid result means one successfully\nresolved public post row. Failed, private, deleted, missing, or unsupported\nposts are not paid results.\n\n| Apify plan | Price per 1,000 successful posts |\n| ---------- | -------------------------------: |\n| Free       |                            $3.50 |\n| Starter    |                            $3.00 |\n| Scale      |                            $2.75 |\n| Business   |                            $2.50 |\n\nPlatform usage is included. Use Apify's maximum charge setting to limit paid\nresults before a run.\n\n## 🚀 How do I use LinkedIn Post Scraper?\n\n1. Open **LinkedIn Post Scraper** in Apify Console.\n2. Add one or more public LinkedIn post URLs.\n3. Click **Start**.\n4. Open the **Output** tab while the run is active to see completed rows.\n5. Download the dataset or connect it to your workflow.\n\n## ⬇️ Input\n\n### 🔗 LinkedIn post URLs\n\nAdd public LinkedIn post URLs to `startUrls`.\n\n```json\n{\n  \"startUrls\": [\n    \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\"\n  ]\n}\n```\n\nThe Actor supports standard and country LinkedIn domains with a `/posts/`\npath. Tracking parameters can remain in the input URL. The output includes the\nclean post URL when the post is available. The clean URL uses the standard\n`www.linkedin.com` host and has no query string or fragment.\n\nExact duplicate input strings are checked once. Different URL forms for the\nsame post can create separate attempts.\n\nResults are saved as soon as each post finishes.\n\n## ⬆️ Output sample\n\nThe sample below shows the exact field order. Public values vary by post and\nrun time.\n\n<!-- OUTPUT_SAMPLE_START -->\n\n```json\n{\n  \"inputUrl\": \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\",\n  \"url\": \"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX\",\n  \"activityId\": \"7333162625675038720\",\n  \"ugcPostId\": null,\n  \"postUrn\": \"urn:li:activity:7333162625675038720\",\n  \"postType\": \"VideoObject\",\n  \"authorName\": \"Tim Ferriss\",\n  \"authorType\": \"Person\",\n  \"authorId\": \"15499\",\n  \"authorUrn\": \"urn:li:member:15499\",\n  \"authorPublicIdentifier\": \"timferriss\",\n  \"authorUrl\": \"https://www.linkedin.com/in/timferriss\",\n  \"authorImageUrl\": \"https://media.licdn.com/dms/image/v2/D4E03AQFJUaA3RAZDIw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1687979278495?e=2147483647&v=beta&t=jU3Gf5QEuNbTGOvCToR36R3NEIvZFbzySzZzySeGofw\",\n  \"authorFollowersCount\": 1538200,\n  \"headline\": \"\\\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\\\" — Kevin Rose\",\n  \"text\": \"\\\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\\\" — Kevin Rose\",\n  \"publishedAt\": \"2025-05-27T16:10:13.501Z\",\n  \"likesCount\": 60,\n  \"commentsCount\": 10,\n  \"repostsCount\": null,\n  \"durationMs\": 43000,\n  \"width\": 720,\n  \"height\": 1280,\n  \"contentUrl\": \"https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/mp4-720p-30fp-crf28/B4DZcSgOoFGUBM-/0/1748362198190?e=2147483647&v=beta&t=5uuNhUZ1SMfCepiAg5rgM8UcJHrv1_CaWw0dQpcXMPc\",\n  \"thumbnailUrl\": \"https://media.licdn.com/dms/image/v2/D4D05AQGulHZiCPUQxA/videocover-high/B4DZcSgOoFGUBo-/0/1748362192116?e=2147483647&v=beta&t=a0_ktMIjBTUTKt_Teat8e4cE4-I9ckXCAAz59Ln_iQg\",\n  \"captionUrl\": \"https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/video-auto-caption-srt-acs-singleton/B4DZcSgOoFGUEE-/0/1748362211491?e=2147483647&v=beta&t=kUV4b-IXm1eu5KoIfEbhgoSd82sx16X-i8y6Yv1khAU\",\n  \"transcript\": \"I took my whole genome, dumped it into AI and we worked out a playbook together on where we could find mental doctors to and which methylated B vitamins I could give to help fix the broken cycle because I have the MTHFR genetic mutation. It's a very fancy way of saying 1 biomarker completely jacked up. My dad died of heart disease. I don't want to have heart disease. How can we fix this ****? We work through a way for me to supplement and start adding on supplements. I'm 8 weeks. In and for the first time, my homocysteine is at normal levels after many years of trying to figure this out, and I was working through this process in tandem with my AI.\",\n  \"status\": \"ok\",\n  \"statusReason\": null,\n  \"observedAt\": \"2026-08-13T14:05:36.171Z\"\n}\n```\n\n<!-- OUTPUT_SAMPLE_END -->\n\n### 📌 Run summary\n\nThe `OUTPUT` record contains:\n\n- `actorName`: stable Actor output name;\n- `schemaVersion`: public output contract version;\n- `startedAt` and `finishedAt`: run times;\n- `inputCount`: number of unique input strings;\n- `usefulRows`: number of successful post rows;\n- `failedRows`: number of failed post rows;\n- `datasetId`: ID of the result dataset;\n- `stopReason`: why the Actor stopped.\n\n## 🎯 Status and quality fields\n\n- `ok`: the Actor found a public post and saved its public data.\n- `failed`: the public post could not be read or did not expose enough data.\n- `invalid_url`: the input is not a supported LinkedIn post URL.\n\nFailed rows keep the same field order as successful rows. Unknown values stay\n`null`. Check `statusReason` for a safe explanation.\n\n`activityId` contains only an activity ID. `ugcPostId` contains only a UGC post\nID. `postUrn` keeps the typed post URN shown by LinkedIn. These values can be\ndifferent. The stable `authorId` and `authorUrn` identify the author when\nLinkedIn shows them. The public author identifier and profile URL can change.\n\n## 🔒 Source boundary\n\nThis Actor reads only public LinkedIn post pages available without a customer\naccount. It does not:\n\n- sign in to LinkedIn;\n- use customer passwords, saved browser data, or accounts;\n- open private posts or hidden post sections;\n- collect private contact details;\n- guess values that LinkedIn does not show.\n\n## ⚠️ Limits and interpretation\n\n- LinkedIn can show different public fields by post, visitor region, and time.\n- Private, deleted, missing, or login-limited posts can return failed rows.\n- A public count, author field, caption, transcript, or media field can be\n  missing.\n- Public media, image, thumbnail, and caption links can change or expire.\n- Results are post snapshots. Use scheduled runs to build history.\n- LinkedIn can change its public pages. A later change can require an Actor\n  update.\n\n## ❓ FAQ\n\n### Does this Actor need a LinkedIn login or API key?\n\nNo. It reads public post pages without a customer LinkedIn account.\n\n### Why is a field `null`?\n\nLinkedIn did not show that value publicly for the post at run time. The Actor\ndoes not guess the value or change a missing count to zero.\n\n### Why did I receive a failed row?\n\nThe post can be private, missing, deleted, limited to signed-in visitors, or\nunavailable at run time. Check `statusReason` and confirm that the input is a\npublic LinkedIn `/posts/` URL.\n\n### How are duplicate posts handled?\n\nThe Actor checks an exact duplicate input string once per run. Different URL\nforms for the same post can create separate attempts.\n\n## 🏠 Related Actors\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on LinkedIn\n\n- [LinkedIn Profile Scraper](https://apify.com/chronometrica/linkedin-profile-scraper)\n  — collect public profile identity, headlines, and visible profile facts.\n- [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n\n## 🛟 Support\n\nFor help, share the run ID, public post URL, expected result, and actual result.\nState whether the issue affects one row or the full run. Never share a LinkedIn\npassword, saved browser data, or private token.\n\nUse public data in line with applicable laws, LinkedIn rules, and Apify rules.\n"
    },
    "buildNumber": "1.0.60",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.004
    }
  }
}