{
  "data": {
    "id": "eIpWE5k1mof9bEQnM",
    "actId": "lHu4lm8g5nkseYsIY",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-13T06:11:49.680Z",
    "finishedAt": "2026-10-13T06:12:02.845Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CI"
    },
    "stats": {
      "durationMillis": 12963,
      "runTimeSecs": 12.963,
      "computeUnits": 0.014403333333333334,
      "imageSizeBytes": 331113984
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"required\": [\n    \"profileUrls\"\n  ],\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"LinkedIn profile URLs (https://linkedin.com/in/username) or usernames.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/satyanadella\"\n      ],\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1\n    },\n    \"enrichCompany\": {\n      \"title\": \"Enrich Current Company\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the current employer's own LinkedIn company page for extra detail (size, industry, website, headquarters, logo). Adds one extra request per profile (~30-90s) but is cached per company within a run. Disable for faster runs.\",\n      \"default\": true,\n      \"editor\": \"checkbox\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional Apify proxy.\",\n      \"editor\": \"proxy\"\n    }\n  }\n}",
    "readme": "# LinkedIn Guest-View Profile Data Extractor\n\nPull structured data from any public LinkedIn profile the way an anonymous, logged-out visitor sees it — no LinkedIn account, login, or cookies required. Feed in a list of profile URLs or bare usernames and get back one row per profile with headline, work history, education, credentials, and (optionally) current-employer company details.\n\n## What this actor does\n\n- Reads only what LinkedIn already serves to logged-out visitors — no account, session cookie, or credential is ever used\n- Extracts name, headline, location, summary, current and past employers, and schools for each profile\n- Also reads the certifications, honors & awards, test scores, organization memberships, volunteer experience, projects and listed websites sections when the profile shows them to guests\n- Optionally enriches the current employer with company size, industry, headquarters, website, and logo pulled from that company's own LinkedIn page\n- Cross-checks that the data returned actually belongs to the profile you asked for, and omits any field LinkedIn has redacted rather than returning masked placeholder text\n- Fields that can't be extracted for a profile (because LinkedIn doesn't expose them, or the owner never filled them in) are left out of that row — no `null` values\n\n## Output per profile\n\n- `name`, `headline`, `location`, `summary`\n- `profileUrl`, `profilePicture`\n- `currentTitle` — current job title, when not withheld by LinkedIn for this viewer/profile combination\n- `allTitles` — every job title listed on the profile\n- `currentCompany` — current employer: `name`, `url`, `slug`, and `companyId` when the company link is numeric. With `enrichCompany` on and the company page readable, it also gains `employeeCount`, `size`, `industry`, `website`, `headquarters`, `organizationType`, `logoUrl` and `specialties` (whichever that page shows)\n- `currentPositions`, `pastPositions` — each with `company`, `companyUrl`, `startDate`, `endDate` and `location` as far as LinkedIn shows them to guests (job titles per position aren't part of the guest view; see `allTitles`)\n- `experiences` — `currentPositions` and `pastPositions` combined into a single list\n- `education` (and `educations`, the same list under both keys) — each with `school`, `schoolUrl`, `startDate`, `endDate`\n- `followersCount`\n- `recentArticles` — recent posts/articles with `title`, `url`, `publishedDate`, `text` and `likes`\n- `certifications` — `name`, `issuer`, `issuerUrl`, `issueDate`, `credentialId`, `credentialUrl`\n- `honorsAndAwards` — `title`, `issuer`, `date`, `description`\n- `testScores` — `name`, `score`, `date`\n- `organizations` — `name`, `position`, `description`\n- `volunteerExperience` — `role`, `organization`, `description`\n- `projects` — `title`, `dateRange`, `description`\n- `websites` — `label`, `url`\n- `inputUrl` — the URL or handle you supplied\n- `order` — zero-based position of this profile in the input list\n- `scrapedAt` — ISO 8601 timestamp of extraction\n\nWhen LinkedIn only shows a profile's sign-up preview, the row is built from the page's preview tags and carries just `name`, `headline`, `summary`, `profileUrl` and `profilePicture` (plus `inputUrl`, `order`, `scrapedAt`).\n\n### Status rows\n\nThe dataset can also contain one status row per run:\n\n- If none of the requested profiles could be read: `_status: \"no_data\"`, `_reason: \"no_results\"`, `_message`, `_help` (common causes) and `scrapedAt`.\n- If only some profiles failed: `_status: \"partial_results\"`, `_reason` (the single failure reason, or `mixed`), `_failureBreakdown` (count per reason: `auth_wall`, `not_found`, `blocked`, `identity_mismatch`, `invalid_url`, `error`), `_message` and `scrapedAt`, added alongside the successful profile rows.\n\nFilter on `_status` if you only want profile rows.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `profileUrls` | array | – | LinkedIn profile URLs (e.g. `https://linkedin.com/in/username`) or bare usernames. Required. |\n| `enrichCompany` | boolean | `true` | Also fetch the current employer's LinkedIn company page for size, industry, website, HQ, and logo. Adds one extra request per unique company. |\n| `proxyConfiguration` | object | – | Accepted but not used: the actor manages its own connection settings, so this value has no effect |\n\nThe actor normalizes `https://www.linkedin.com/in/username`, `linkedin.com/in/username`, `in/username`, and a bare `username` to the same profile.\n\n### Example: default run with company enrichment\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"satyanadella\",\n    \"in/reidhoffman\"\n  ]\n}\n```\n\n### Example: faster run, no company enrichment\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\"],\n  \"enrichCompany\": false\n}\n```\n\n## Use cases\n\n- **Lead generation & sales prospecting** — enrich a list of LinkedIn URLs with current role, employer, and company details\n- **Recruiting & talent sourcing** — build candidate shortlists and verify work history, education, and certifications at scale\n- **Sales intelligence** — keep track of role and company changes for key contacts at target accounts\n- **CRM enrichment** — append verified profile and company fields to existing contact records\n- **Academic & market research** — study career trajectories, credentials, and industry trends across large profile sets\n- **Background and credential checks** — cross-reference publicly listed honors, certifications, and project history\n\n## FAQ\n\n**Do I need a LinkedIn account, login, or cookie?**\nNo. The actor never asks for or uses LinkedIn credentials or session cookies — it only reads what LinkedIn serves to anonymous, logged-out visitors.\n\n**Can I get someone's email address or phone number?**\nNo. LinkedIn does not expose contact details on the public profile page to logged-out visitors, so the actor never returns them — and never fabricates a guess.\n\n**Why is `currentTitle` missing on some profiles?**\nLinkedIn's own visibility rules occasionally withhold job-title and past-employer text from logged-out viewers, independent of this actor. When that happens the field is omitted rather than filled with placeholder text. `currentCompany.name` tends to stay available even when the title doesn't.\n\n**Does this only work on well-known profiles?**\nNo. Any profile LinkedIn shows to logged-out visitors can be read. LinkedIn does sometimes refuse a request even for a public profile; such profiles are counted as `blocked` in the status row, and re-running them later often succeeds.\n\n**What happens if a profile is set to fully private?**\nIf the owner has hidden their profile from logged-out visitors, no data is returned for it. That reflects the owner's own privacy setting, not a gap in the actor.\n\n**How current is the data?**\nEvery field is read directly from LinkedIn's public profile page at run time — nothing is cached or backfilled from a stored copy.\n\n**Are skills or languages included?**\nNo. Those sections are only exposed through LinkedIn's authenticated member view and aren't present on the logged-out public profile page, so they can't be extracted here.\n\n**Does this work for profiles on regional LinkedIn domains?**\nYes — profiles reached via `uk.linkedin.com`, `de.linkedin.com`, and other regional LinkedIn domains are supported the same way as `linkedin.com`.\n\n**Is this affiliated with LinkedIn?**\nNo. This is an independent, third-party actor that reads publicly available LinkedIn pages; it is not operated by or affiliated with LinkedIn.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-guest-view-profile-data-extractor",
      "title": "LinkedIn Guest-View Profile Data Extractor",
      "description": "Extract names, headlines, work history, education, certifications, honors, volunteer work, projects, and follower counts from public LinkedIn profiles, with optional current-employer enrichment. No login or cookies required.",
      "version": "1.0",
      "buildTag": "latest",
      "environmentVariables": {},
      "dockerfile": "../Dockerfile",
      "readme": "# LinkedIn Guest-View Profile Data Extractor\n\nPull structured data from any public LinkedIn profile the way an anonymous, logged-out visitor sees it — no LinkedIn account, login, or cookies required. Feed in a list of profile URLs or bare usernames and get back one row per profile with headline, work history, education, credentials, and (optionally) current-employer company details.\n\n## What this actor does\n\n- Reads only what LinkedIn already serves to logged-out visitors — no account, session cookie, or credential is ever used\n- Extracts name, headline, location, summary, current and past employers, and schools for each profile\n- Also reads the certifications, honors & awards, test scores, organization memberships, volunteer experience, projects and listed websites sections when the profile shows them to guests\n- Optionally enriches the current employer with company size, industry, headquarters, website, and logo pulled from that company's own LinkedIn page\n- Cross-checks that the data returned actually belongs to the profile you asked for, and omits any field LinkedIn has redacted rather than returning masked placeholder text\n- Fields that can't be extracted for a profile (because LinkedIn doesn't expose them, or the owner never filled them in) are left out of that row — no `null` values\n\n## Output per profile\n\n- `name`, `headline`, `location`, `summary`\n- `profileUrl`, `profilePicture`\n- `currentTitle` — current job title, when not withheld by LinkedIn for this viewer/profile combination\n- `allTitles` — every job title listed on the profile\n- `currentCompany` — current employer: `name`, `url`, `slug`, and `companyId` when the company link is numeric. With `enrichCompany` on and the company page readable, it also gains `employeeCount`, `size`, `industry`, `website`, `headquarters`, `organizationType`, `logoUrl` and `specialties` (whichever that page shows)\n- `currentPositions`, `pastPositions` — each with `company`, `companyUrl`, `startDate`, `endDate` and `location` as far as LinkedIn shows them to guests (job titles per position aren't part of the guest view; see `allTitles`)\n- `experiences` — `currentPositions` and `pastPositions` combined into a single list\n- `education` (and `educations`, the same list under both keys) — each with `school`, `schoolUrl`, `startDate`, `endDate`\n- `followersCount`\n- `recentArticles` — recent posts/articles with `title`, `url`, `publishedDate`, `text` and `likes`\n- `certifications` — `name`, `issuer`, `issuerUrl`, `issueDate`, `credentialId`, `credentialUrl`\n- `honorsAndAwards` — `title`, `issuer`, `date`, `description`\n- `testScores` — `name`, `score`, `date`\n- `organizations` — `name`, `position`, `description`\n- `volunteerExperience` — `role`, `organization`, `description`\n- `projects` — `title`, `dateRange`, `description`\n- `websites` — `label`, `url`\n- `inputUrl` — the URL or handle you supplied\n- `order` — zero-based position of this profile in the input list\n- `scrapedAt` — ISO 8601 timestamp of extraction\n\nWhen LinkedIn only shows a profile's sign-up preview, the row is built from the page's preview tags and carries just `name`, `headline`, `summary`, `profileUrl` and `profilePicture` (plus `inputUrl`, `order`, `scrapedAt`).\n\n### Status rows\n\nThe dataset can also contain one status row per run:\n\n- If none of the requested profiles could be read: `_status: \"no_data\"`, `_reason: \"no_results\"`, `_message`, `_help` (common causes) and `scrapedAt`.\n- If only some profiles failed: `_status: \"partial_results\"`, `_reason` (the single failure reason, or `mixed`), `_failureBreakdown` (count per reason: `auth_wall`, `not_found`, `blocked`, `identity_mismatch`, `invalid_url`, `error`), `_message` and `scrapedAt`, added alongside the successful profile rows.\n\nFilter on `_status` if you only want profile rows.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `profileUrls` | array | – | LinkedIn profile URLs (e.g. `https://linkedin.com/in/username`) or bare usernames. Required. |\n| `enrichCompany` | boolean | `true` | Also fetch the current employer's LinkedIn company page for size, industry, website, HQ, and logo. Adds one extra request per unique company. |\n| `proxyConfiguration` | object | – | Accepted but not used: the actor manages its own connection settings, so this value has no effect |\n\nThe actor normalizes `https://www.linkedin.com/in/username`, `linkedin.com/in/username`, `in/username`, and a bare `username` to the same profile.\n\n### Example: default run with company enrichment\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"satyanadella\",\n    \"in/reidhoffman\"\n  ]\n}\n```\n\n### Example: faster run, no company enrichment\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\"],\n  \"enrichCompany\": false\n}\n```\n\n## Use cases\n\n- **Lead generation & sales prospecting** — enrich a list of LinkedIn URLs with current role, employer, and company details\n- **Recruiting & talent sourcing** — build candidate shortlists and verify work history, education, and certifications at scale\n- **Sales intelligence** — keep track of role and company changes for key contacts at target accounts\n- **CRM enrichment** — append verified profile and company fields to existing contact records\n- **Academic & market research** — study career trajectories, credentials, and industry trends across large profile sets\n- **Background and credential checks** — cross-reference publicly listed honors, certifications, and project history\n\n## FAQ\n\n**Do I need a LinkedIn account, login, or cookie?**\nNo. The actor never asks for or uses LinkedIn credentials or session cookies — it only reads what LinkedIn serves to anonymous, logged-out visitors.\n\n**Can I get someone's email address or phone number?**\nNo. LinkedIn does not expose contact details on the public profile page to logged-out visitors, so the actor never returns them — and never fabricates a guess.\n\n**Why is `currentTitle` missing on some profiles?**\nLinkedIn's own visibility rules occasionally withhold job-title and past-employer text from logged-out viewers, independent of this actor. When that happens the field is omitted rather than filled with placeholder text. `currentCompany.name` tends to stay available even when the title doesn't.\n\n**Does this only work on well-known profiles?**\nNo. Any profile LinkedIn shows to logged-out visitors can be read. LinkedIn does sometimes refuse a request even for a public profile; such profiles are counted as `blocked` in the status row, and re-running them later often succeeds.\n\n**What happens if a profile is set to fully private?**\nIf the owner has hidden their profile from logged-out visitors, no data is returned for it. That reflects the owner's own privacy setting, not a gap in the actor.\n\n**How current is the data?**\nEvery field is read directly from LinkedIn's public profile page at run time — nothing is cached or backfilled from a stored copy.\n\n**Are skills or languages included?**\nNo. Those sections are only exposed through LinkedIn's authenticated member view and aren't present on the logged-out public profile page, so they can't be extracted here.\n\n**Does this work for profiles on regional LinkedIn domains?**\nYes — profiles reached via `uk.linkedin.com`, `de.linkedin.com`, and other regional LinkedIn domains are supported the same way as `linkedin.com`.\n\n**Is this affiliated with LinkedIn?**\nNo. This is an independent, third-party actor that reads publicly available LinkedIn pages; it is not operated by or affiliated with LinkedIn.\n",
      "input": {
        "title": "LinkedIn Profile Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "required": [
          "profileUrls"
        ],
        "properties": {
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "LinkedIn profile URLs (https://linkedin.com/in/username) or usernames.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/satyanadella"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 1
          },
          "enrichCompany": {
            "title": "Enrich Current Company",
            "type": "boolean",
            "description": "Fetch the current employer's own LinkedIn company page for extra detail (size, industry, website, headquarters, logo). Adds one extra request per profile (~30-90s) but is cached per company within a run. Disable for faster runs.",
            "default": true,
            "editor": "checkbox"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional Apify proxy.",
            "editor": "proxy"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Guest-View Profile Data Extractor Output",
        "description": "One record per requested profile, with headline, work history, education, credentials, follower count, and optional company enrichment.",
        "properties": {
          "results": {
            "type": "string",
            "description": "Dataset with scraped LinkedIn profile data",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "name",
                  "headline",
                  "location",
                  "profileUrl",
                  "followersCount",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "followersCount": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "name",
                  "headline",
                  "location",
                  "summary",
                  "profileUrl",
                  "profilePicture",
                  "currentTitle",
                  "followersCount",
                  "inputUrl",
                  "order",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "summary": {
                    "label": "Summary",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "profilePicture": {
                    "label": "Photo",
                    "format": "link"
                  },
                  "currentTitle": {
                    "label": "Current Title",
                    "format": "text"
                  },
                  "followersCount": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "inputUrl": {
                    "label": "Input URL",
                    "format": "text"
                  },
                  "order": {
                    "label": "Order",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.1",
    "imageDigest": "8936080bd951d0dd18659b2fa12f827322542c94c69330d79cdc310e64d92a17",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.014403333333333334
    }
  }
}