{
  "data": {
    "id": "TlgvwYEC6d1fur7Dm",
    "actId": "ENtqoTbxwWPCmRg9X",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-23T11:45:46.655Z",
    "finishedAt": "2026-10-23T11:46:02.119Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 15378,
      "runTimeSecs": 15.378,
      "computeUnits": 0.017086666666666667,
      "imageSizeBytes": 369700864
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Engagement Timeline Scraper Input\",\n  \"description\": \"Collect a LinkedIn profile's recent public activity: posts and reposts, comments, and reactions. No cookie or login is needed.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"required\": [\n    \"profileUrls\"\n  ],\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"Public LinkedIn profile URLs or usernames. Accepts https://www.linkedin.com/in/name, country subdomains, and bare usernames.\",\n      \"editor\": \"stringList\",\n      \"minItems\": 1,\n      \"maxItems\": 500,\n      \"prefill\": [\n        \"https://www.linkedin.com/in/satyanadella/\"\n      ]\n    },\n    \"activityTypes\": {\n      \"title\": \"Activity Types\",\n      \"type\": \"array\",\n      \"description\": \"Which public activity tabs to collect. Posts includes reposts; comments includes replies. The legacy value shares is accepted and returned as posts/reposts.\",\n      \"editor\": \"select\",\n      \"uniqueItems\": true,\n      \"default\": [\n        \"posts\",\n        \"comments\",\n        \"reactions\"\n      ],\n      \"prefill\": [\n        \"posts\"\n      ],\n      \"items\": {\n        \"type\": \"string\",\n        \"enumSuggestedValues\": [\n          \"posts\",\n          \"comments\",\n          \"reactions\",\n          \"shares\"\n        ],\n        \"enumTitles\": [\n          \"Posts and reposts\",\n          \"Comments\",\n          \"Reactions\",\n          \"Shares (legacy alias for posts)\"\n        ]\n      }\n    },\n    \"includePostDetails\": {\n      \"title\": \"Include Post Details\",\n      \"type\": \"boolean\",\n      \"description\": \"Open each target post for full text, exact dates, engagement totals, media, and comment timestamps. Turn off for a faster card-only run.\",\n      \"editor\": \"checkbox\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"minDate\": {\n      \"title\": \"Minimum Date\",\n      \"type\": \"string\",\n      \"description\": \"Keep posts and comments whose exact activity date is on or after this date. Reactions have no public event date and are kept.\",\n      \"editor\": \"datepicker\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"maxDate\": {\n      \"title\": \"Maximum Date\",\n      \"type\": \"string\",\n      \"description\": \"Keep posts and comments whose exact activity date is on or before this date. Reactions have no public event date and are kept.\",\n      \"editor\": \"datepicker\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"maxActivitiesPerProfile\": {\n      \"title\": \"Max Activities Per Profile\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum records per profile across the selected activity types. Public profiles show one pageful per tab.\",\n      \"default\": 50,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"editor\": \"number\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max Items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum activity records for the whole run. Error rows do not count toward this limit.\",\n      \"default\": 500,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"editor\": \"number\"\n    }\n  }\n}",
    "readme": "# LinkedIn Profile Engagement Timeline Scraper\n\nCollect a LinkedIn profile's **recent public activity** in one run: the posts and reposts they published, the comments they left on other people's posts, and the reactions they gave. Each record carries the target post's author, text, URL, and engagement totals, so a like or comment arrives with the context it needs.\n\nNo cookie, login, or LinkedIn account is required. The actor reads the public version of the profile page that LinkedIn serves to logged-out visitors and search engines.\n\n## What this actor does\n\n- Collects the three public activity tabs: **Posts**, **Comments**, and **Reactions**.\n- Returns one record per activity, with the target post's text, author, URL, reaction total, and comment total.\n- Opens each target post, when available, for exact dates, media, and the comment that the profile wrote.\n- Supports one or many profile URLs or usernames in a single run.\n- Filters by activity type and an optional date window.\n- Emits a diagnostic row for a profile that is private, unavailable, or returns an auth wall, instead of failing the whole run.\n- Empty fields are omitted, never returned as `null` or an empty string.\n\n## Output per activity\n\n- `recordType` — `activity`, `error`, or `noResults`\n- `activityType` — `post`, `repost`, `comment`, or `reaction`\n- `profileName`, `profileUsername`, `inputProfileUrl` — the profile that performed the activity\n- `activityTimeAgo` — LinkedIn's relative activity age (`2w`, `3mo`) for posts and comments. Reposts omit it because only the original post's age is public.\n- `originalPostTimeAgo` — LinkedIn's relative age of the target post for posts, reposts, and reactions. Omitted for comments, whose card only shows the comment age.\n- `reactedAt` — exact ISO activity time when public: an original post's publish time or a matched comment time. Omitted for reactions, reposts, and comments whose time is not visible.\n- `originalPostUrl`, `originalPostPermalink`, `originalPostId` — canonical feed URL, the public post link, and the post ID\n- `originalPostedAt` — exact target-post publish time, or a timestamp decoded from the post ID when the post page is unavailable\n- `originalAuthorName`, `originalAuthorProfileUrl`, `originalAuthorAvatar` — the target post's author\n- `originalAuthorHeadline` — kept for compatibility; public pages do not expose it, so it is normally omitted\n- `content` — the target post's text, full when the post page is available and a preview otherwise\n- `reactionsCount`, `commentsCount` — engagement totals for the target post\n- `targetPostUrl`, `targetAuthor` — target-post context for comments, reactions, and reposts\n- `commentText` — the comment the profile wrote\n- `commentIsReply` — `true` when the profile replied to another comment\n- `commentReactionsCount` — reactions on the matched comment\n- `reactionType` — `like` when the public card explicitly says \"liked this\"; omitted for the generic \"reacted on this\" label because the exact reaction type is not public\n- `mediaItems` — images, video, or article attachments when the public post exposes them\n- `dataSource` — `postPage` or `activityCard`, showing whether page-level details were available\n- `scrapedAt` — when the record was collected\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `profileUrls` | array | — | Public LinkedIn profile URLs or usernames. Required; up to 500 per run. |\n| `activityTypes` | array | `posts`, `comments`, `reactions` | `posts`, `comments`, `reactions`. Posts includes reposts; comments includes replies. The legacy value `shares` is accepted and returned as posts/reposts. |\n| `includePostDetails` | boolean | `true` | Open each target post for full text, exact dates, counts, media, and comment times. |\n| `minDate` | string | — | Keep posts and comments on or after this date. Reactions have no public event date and are kept. |\n| `maxDate` | string | — | Keep posts and comments on or before this date. Reactions are kept. |\n| `maxActivitiesPerProfile` | integer | `50` | Maximum records per profile across selected types (1–500). |\n| `maxItems` | integer | `500` | Maximum activity records for the whole run (1–10,000). Error rows do not count. |\n\nOlder saved tasks that send `cookie`, `language`, or `proxyConfiguration` still run; those keys are ignored with a note. Legacy `activityType` no longer filters the run because the schema supplies the default `activityTypes`; set `activityTypes` explicitly. The old `shares` value is rejected by the current schema; use `posts`.\n\n### Example: everything public for one profile\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"activityTypes\": [\"posts\", \"comments\", \"reactions\"],\n  \"includePostDetails\": true,\n  \"maxActivitiesPerProfile\": 50\n}\n```\n\n### Example: comments in a date window\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"activityTypes\": [\"comments\"],\n  \"minDate\": \"2026-01-01\",\n  \"maxDate\": \"2026-10-23\",\n  \"maxActivitiesPerProfile\": 20\n}\n```\n\n### Example: reactions for a batch of profiles\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella/\",\n    \"https://www.linkedin.com/in/williamhgates/\",\n    \"adam-grant\"\n  ],\n  \"activityTypes\": [\"reactions\"],\n  \"includePostDetails\": false,\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Sales and ABM research** — see which topics a prospect comments on or reacts to before outreach.\n- **Influencer and executive audits** — compare what a leader publishes with what they engage with.\n- **Competitive research** — track the public posts and reactions of a competitor's team.\n- **Content strategy** — study the posts that draw comments and reactions from a target audience.\n- **CRM enrichment** — add recent public engagement signals to a contact record.\n\n## Limitations\n\n- **Recent public activity only.** A public profile page renders one pageful per tab: typically 0–9 posts, 0–3 top-level comments, and 0–9 reactions. The \"See all activities\" link requires a LinkedIn sign-in, so older history is not available without a login.\n- **Reaction times and exact reaction types are not public.** A reaction card says \"liked this\" or the generic \"reacted on this\". The actor records `reactionType: \"like\"` only for the explicit \"liked this\" label; for \"reacted on this\" it omits the field rather than guessing celebrate, love, or another type. `reactedAt` is omitted for all reactions.\n- **Reaction cards have two labels.** Both \"liked this\" and \"reacted on this\" are returned as `activityType: \"reaction\"`, including when the card appears in the Posts panel.\n- **Comment times are conditional.** The profile page shows only a relative age. An exact comment time is filled when the comment is visible among the target post's public comments; otherwise `reactedAt` is omitted and `activityTimeAgo` remains.\n- **Comment replies have no public parent-post link.** They are returned with `commentIsReply: true` and without a target post URL.\n- **Some profiles are private.** LinkedIn may return an auth wall or HTTP 999 for a profile whose public visibility is restricted, or temporarily block a request. The actor retries, then emits a `blocked_or_private` error row for that profile. After repeated 999 responses it may retry through Apify's automatic datacenter proxy; no proxy input is requested from you.\n- **Target posts can disappear.** If a post was deleted or made private after the activity card was rendered, the record keeps the card data and sets `dataSource: \"activityCard\"`.\n- **Repost/share counts, views, reaction breakdowns, and the names of reactors are not public.** Reposts themselves are returned as `repost`; the missing numbers are not fabricated.\n- **A public profile link may return 999 to a plain HTTP client** while still opening normally in a browser. That is LinkedIn's access behaviour, not a broken record.\n\n## FAQ\n\n**Do I need a LinkedIn cookie or account?**\nNo. The actor never asks you for a cookie, login, or proxy. It reads only the public profile and post pages; after repeated 999 blocks it may use Apify's automatic datacenter proxy.\n\n**Why do I get fewer rows than I asked for?**\nLinkedIn renders a fixed recent-activity section per profile. There is no public \"load more\" or pagination, so the maximum is one pageful per tab even when `maxActivitiesPerProfile` is higher.\n\n**Why is `reactedAt` missing on a reaction?**\nLinkedIn does not expose when a reaction was given. The target post's own date is in `originalPostedAt` and `originalPostTimeAgo`; they are not reaction times. `reactionType` is filled only when the card explicitly says \"liked this\".\n\n**Why is `reactedAt` sometimes missing on a comment?**\nThe exact comment time comes from the target post's public comment list. If the comment is not among the visible comments, only the relative `activityTimeAgo` is available.\n\n**Can I collect older posts or a complete history?**\nNo. The public page exposes only the recent activity section. Schedule the actor and deduplicate on `originalPostId` plus `profileUsername` to build history forward.\n\n**Can I see who reacted to a post?**\nNo. Reactor identities are visible only to signed-in LinkedIn members, so they are not part of this actor.\n\n**Why did one profile return an error row?**\nThat profile may hide its activity from logged-out visitors, may not exist, or LinkedIn may have returned a temporary 999. The row's `status` and `error` fields explain which case applied; other profiles in the same run continue.\n\n**Why do some comments have no target post?**\nThose are replies to another comment. The public card shows the reply text and age but not the parent post link.\n\n**Is this affiliated with LinkedIn?**\nNo. This is an independent third-party actor that reads public pages. It is not operated by or affiliated with LinkedIn.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-engagement-timeline-scraper",
      "title": "LinkedIn Profile Engagement Timeline Scraper",
      "description": "Collect a LinkedIn profile's recent public activity — posts, reposts, comments, and reactions — with the target post's text, author, URL, and engagement totals. No cookie or login is needed.",
      "version": "1.0",
      "buildTag": "latest",
      "environmentVariables": {},
      "dockerfile": "./Dockerfile",
      "readme": "# LinkedIn Profile Engagement Timeline Scraper\n\nCollect a LinkedIn profile's **recent public activity** in one run: the posts and reposts they published, the comments they left on other people's posts, and the reactions they gave. Each record carries the target post's author, text, URL, and engagement totals, so a like or comment arrives with the context it needs.\n\nNo cookie, login, or LinkedIn account is required. The actor reads the public version of the profile page that LinkedIn serves to logged-out visitors and search engines.\n\n## What this actor does\n\n- Collects the three public activity tabs: **Posts**, **Comments**, and **Reactions**.\n- Returns one record per activity, with the target post's text, author, URL, reaction total, and comment total.\n- Opens each target post, when available, for exact dates, media, and the comment that the profile wrote.\n- Supports one or many profile URLs or usernames in a single run.\n- Filters by activity type and an optional date window.\n- Emits a diagnostic row for a profile that is private, unavailable, or returns an auth wall, instead of failing the whole run.\n- Empty fields are omitted, never returned as `null` or an empty string.\n\n## Output per activity\n\n- `recordType` — `activity`, `error`, or `noResults`\n- `activityType` — `post`, `repost`, `comment`, or `reaction`\n- `profileName`, `profileUsername`, `inputProfileUrl` — the profile that performed the activity\n- `activityTimeAgo` — LinkedIn's relative activity age (`2w`, `3mo`) for posts and comments. Reposts omit it because only the original post's age is public.\n- `originalPostTimeAgo` — LinkedIn's relative age of the target post for posts, reposts, and reactions. Omitted for comments, whose card only shows the comment age.\n- `reactedAt` — exact ISO activity time when public: an original post's publish time or a matched comment time. Omitted for reactions, reposts, and comments whose time is not visible.\n- `originalPostUrl`, `originalPostPermalink`, `originalPostId` — canonical feed URL, the public post link, and the post ID\n- `originalPostedAt` — exact target-post publish time, or a timestamp decoded from the post ID when the post page is unavailable\n- `originalAuthorName`, `originalAuthorProfileUrl`, `originalAuthorAvatar` — the target post's author\n- `originalAuthorHeadline` — kept for compatibility; public pages do not expose it, so it is normally omitted\n- `content` — the target post's text, full when the post page is available and a preview otherwise\n- `reactionsCount`, `commentsCount` — engagement totals for the target post\n- `targetPostUrl`, `targetAuthor` — target-post context for comments, reactions, and reposts\n- `commentText` — the comment the profile wrote\n- `commentIsReply` — `true` when the profile replied to another comment\n- `commentReactionsCount` — reactions on the matched comment\n- `reactionType` — `like` when the public card explicitly says \"liked this\"; omitted for the generic \"reacted on this\" label because the exact reaction type is not public\n- `mediaItems` — images, video, or article attachments when the public post exposes them\n- `dataSource` — `postPage` or `activityCard`, showing whether page-level details were available\n- `scrapedAt` — when the record was collected\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `profileUrls` | array | — | Public LinkedIn profile URLs or usernames. Required; up to 500 per run. |\n| `activityTypes` | array | `posts`, `comments`, `reactions` | `posts`, `comments`, `reactions`. Posts includes reposts; comments includes replies. The legacy value `shares` is accepted and returned as posts/reposts. |\n| `includePostDetails` | boolean | `true` | Open each target post for full text, exact dates, counts, media, and comment times. |\n| `minDate` | string | — | Keep posts and comments on or after this date. Reactions have no public event date and are kept. |\n| `maxDate` | string | — | Keep posts and comments on or before this date. Reactions are kept. |\n| `maxActivitiesPerProfile` | integer | `50` | Maximum records per profile across selected types (1–500). |\n| `maxItems` | integer | `500` | Maximum activity records for the whole run (1–10,000). Error rows do not count. |\n\nOlder saved tasks that send `cookie`, `language`, or `proxyConfiguration` still run; those keys are ignored with a note. Legacy `activityType` no longer filters the run because the schema supplies the default `activityTypes`; set `activityTypes` explicitly. The old `shares` value is rejected by the current schema; use `posts`.\n\n### Example: everything public for one profile\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"activityTypes\": [\"posts\", \"comments\", \"reactions\"],\n  \"includePostDetails\": true,\n  \"maxActivitiesPerProfile\": 50\n}\n```\n\n### Example: comments in a date window\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"activityTypes\": [\"comments\"],\n  \"minDate\": \"2026-01-01\",\n  \"maxDate\": \"2026-10-23\",\n  \"maxActivitiesPerProfile\": 20\n}\n```\n\n### Example: reactions for a batch of profiles\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella/\",\n    \"https://www.linkedin.com/in/williamhgates/\",\n    \"adam-grant\"\n  ],\n  \"activityTypes\": [\"reactions\"],\n  \"includePostDetails\": false,\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Sales and ABM research** — see which topics a prospect comments on or reacts to before outreach.\n- **Influencer and executive audits** — compare what a leader publishes with what they engage with.\n- **Competitive research** — track the public posts and reactions of a competitor's team.\n- **Content strategy** — study the posts that draw comments and reactions from a target audience.\n- **CRM enrichment** — add recent public engagement signals to a contact record.\n\n## Limitations\n\n- **Recent public activity only.** A public profile page renders one pageful per tab: typically 0–9 posts, 0–3 top-level comments, and 0–9 reactions. The \"See all activities\" link requires a LinkedIn sign-in, so older history is not available without a login.\n- **Reaction times and exact reaction types are not public.** A reaction card says \"liked this\" or the generic \"reacted on this\". The actor records `reactionType: \"like\"` only for the explicit \"liked this\" label; for \"reacted on this\" it omits the field rather than guessing celebrate, love, or another type. `reactedAt` is omitted for all reactions.\n- **Reaction cards have two labels.** Both \"liked this\" and \"reacted on this\" are returned as `activityType: \"reaction\"`, including when the card appears in the Posts panel.\n- **Comment times are conditional.** The profile page shows only a relative age. An exact comment time is filled when the comment is visible among the target post's public comments; otherwise `reactedAt` is omitted and `activityTimeAgo` remains.\n- **Comment replies have no public parent-post link.** They are returned with `commentIsReply: true` and without a target post URL.\n- **Some profiles are private.** LinkedIn may return an auth wall or HTTP 999 for a profile whose public visibility is restricted, or temporarily block a request. The actor retries, then emits a `blocked_or_private` error row for that profile. After repeated 999 responses it may retry through Apify's automatic datacenter proxy; no proxy input is requested from you.\n- **Target posts can disappear.** If a post was deleted or made private after the activity card was rendered, the record keeps the card data and sets `dataSource: \"activityCard\"`.\n- **Repost/share counts, views, reaction breakdowns, and the names of reactors are not public.** Reposts themselves are returned as `repost`; the missing numbers are not fabricated.\n- **A public profile link may return 999 to a plain HTTP client** while still opening normally in a browser. That is LinkedIn's access behaviour, not a broken record.\n\n## FAQ\n\n**Do I need a LinkedIn cookie or account?**\nNo. The actor never asks you for a cookie, login, or proxy. It reads only the public profile and post pages; after repeated 999 blocks it may use Apify's automatic datacenter proxy.\n\n**Why do I get fewer rows than I asked for?**\nLinkedIn renders a fixed recent-activity section per profile. There is no public \"load more\" or pagination, so the maximum is one pageful per tab even when `maxActivitiesPerProfile` is higher.\n\n**Why is `reactedAt` missing on a reaction?**\nLinkedIn does not expose when a reaction was given. The target post's own date is in `originalPostedAt` and `originalPostTimeAgo`; they are not reaction times. `reactionType` is filled only when the card explicitly says \"liked this\".\n\n**Why is `reactedAt` sometimes missing on a comment?**\nThe exact comment time comes from the target post's public comment list. If the comment is not among the visible comments, only the relative `activityTimeAgo` is available.\n\n**Can I collect older posts or a complete history?**\nNo. The public page exposes only the recent activity section. Schedule the actor and deduplicate on `originalPostId` plus `profileUsername` to build history forward.\n\n**Can I see who reacted to a post?**\nNo. Reactor identities are visible only to signed-in LinkedIn members, so they are not part of this actor.\n\n**Why did one profile return an error row?**\nThat profile may hide its activity from logged-out visitors, may not exist, or LinkedIn may have returned a temporary 999. The row's `status` and `error` fields explain which case applied; other profiles in the same run continue.\n\n**Why do some comments have no target post?**\nThose are replies to another comment. The public card shows the reply text and age but not the parent post link.\n\n**Is this affiliated with LinkedIn?**\nNo. This is an independent third-party actor that reads public pages. It is not operated by or affiliated with LinkedIn.\n",
      "input": {
        "title": "LinkedIn Profile Engagement Timeline Scraper Input",
        "description": "Collect a LinkedIn profile's recent public activity: posts and reposts, comments, and reactions. No cookie or login is needed.",
        "type": "object",
        "schemaVersion": 1,
        "required": [
          "profileUrls"
        ],
        "properties": {
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "Public LinkedIn profile URLs or usernames. Accepts https://www.linkedin.com/in/name, country subdomains, and bare usernames.",
            "editor": "stringList",
            "minItems": 1,
            "maxItems": 500,
            "prefill": [
              "https://www.linkedin.com/in/satyanadella/"
            ]
          },
          "activityTypes": {
            "title": "Activity Types",
            "type": "array",
            "description": "Which public activity tabs to collect. Posts includes reposts; comments includes replies. The legacy value shares is accepted and returned as posts/reposts.",
            "editor": "select",
            "uniqueItems": true,
            "default": [
              "posts",
              "comments",
              "reactions"
            ],
            "prefill": [
              "posts"
            ],
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "posts",
                "comments",
                "reactions",
                "shares"
              ],
              "enumTitles": [
                "Posts and reposts",
                "Comments",
                "Reactions",
                "Shares (legacy alias for posts)"
              ]
            }
          },
          "includePostDetails": {
            "title": "Include Post Details",
            "type": "boolean",
            "description": "Open each target post for full text, exact dates, engagement totals, media, and comment timestamps. Turn off for a faster card-only run.",
            "editor": "checkbox",
            "default": true,
            "prefill": true
          },
          "minDate": {
            "title": "Minimum Date",
            "type": "string",
            "description": "Keep posts and comments whose exact activity date is on or after this date. Reactions have no public event date and are kept.",
            "editor": "datepicker",
            "default": "",
            "prefill": ""
          },
          "maxDate": {
            "title": "Maximum Date",
            "type": "string",
            "description": "Keep posts and comments whose exact activity date is on or before this date. Reactions have no public event date and are kept.",
            "editor": "datepicker",
            "default": "",
            "prefill": ""
          },
          "maxActivitiesPerProfile": {
            "title": "Max Activities Per Profile",
            "type": "integer",
            "description": "Maximum records per profile across the selected activity types. Public profiles show one pageful per tab.",
            "default": 50,
            "prefill": 1,
            "minimum": 1,
            "maximum": 500,
            "editor": "number"
          },
          "maxItems": {
            "title": "Max Items",
            "type": "integer",
            "description": "Maximum activity records for the whole run. Error rows do not count toward this limit.",
            "default": 500,
            "prefill": 1,
            "minimum": 1,
            "maximum": 10000,
            "editor": "number"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Engagement Timeline Scraper Output",
        "description": "One record per public LinkedIn profile activity (post, repost, comment, or reaction), with the target post's author, text, URL, engagement totals, and media when public.",
        "properties": {
          "activities": {
            "type": "string",
            "title": "LinkedIn public activity",
            "description": "Dataset containing scraped public LinkedIn profile activity records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultRunOptions": {
        "memoryMbytes": 1024
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "LinkedIn Public Activity",
          "views": {
            "overview": {
              "title": "Activity",
              "transformation": {
                "fields": [
                  "activityType",
                  "profileName",
                  "activityTimeAgo",
                  "originalPostTimeAgo",
                  "originalAuthorName",
                  "content",
                  "reactionsCount",
                  "commentsCount",
                  "originalPostPermalink",
                  "inputProfileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "activityType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "profileName": {
                    "label": "Profile",
                    "format": "text"
                  },
                  "activityTimeAgo": {
                    "label": "Activity Age",
                    "format": "text"
                  },
                  "originalPostTimeAgo": {
                    "label": "Post Age",
                    "format": "text"
                  },
                  "originalAuthorName": {
                    "label": "Post Author",
                    "format": "text"
                  },
                  "content": {
                    "label": "Content",
                    "format": "text"
                  },
                  "reactionsCount": {
                    "label": "Reactions",
                    "format": "number"
                  },
                  "commentsCount": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "originalPostPermalink": {
                    "label": "Post URL",
                    "format": "link"
                  },
                  "inputProfileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "eed54ca2ef50991dd8685fef596b2bc00a5892c60519a7059b4e1ef4d7cc3d80",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.017086666666666667
    }
  }
}