{
  "data": {
    "id": "4YJyVgUUKLlvz8Cgm",
    "actId": "GTC0XydRoeOXZp2WB",
    "userId": "qNHv1aNFJdi7qCpWe",
    "startedAt": "2026-10-12T06:18:46.715Z",
    "finishedAt": "2026-10-12T06:19:00.168Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 13379,
      "runTimeSecs": 13.379,
      "computeUnits": 0.014865555555555555,
      "imageSizeBytes": 575609344
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "tag": "latest",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Fresh Profile Data Scraper\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"description\": \"Scrape public LinkedIn profile data from profile URLs or handles. Returns one row per person with name, about, location, followers, affiliated organizations, education, articles, and recent posts. Optionally enrich the current company page. No LinkedIn cookies or login required.\",\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"LinkedIn profile URLs or handles\",\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Public LinkedIn person profiles to scrape. Accepts https://www.linkedin.com/in/williamhgates/ URLs, locale hosts such as uk.linkedin.com/in/..., or a bare handle like williamhgates. Up to 100 values per run. NOT company pages, posts, or Sales Navigator lead URLs — those belong in a company, posts, or Sales Nav Actor.\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates/\"\n      ],\n      \"editor\": \"stringList\",\n      \"maxItems\": 100\n    },\n    \"maxProfiles\": {\n      \"title\": \"Max profiles\",\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Maximum unique profiles to process in this run. Default 50. Extra URLs after the cap are skipped and listed in RUN_SUMMARY. This caps cost; it does not invent extra public data.\",\n      \"default\": 50,\n      \"prefill\": 10\n    },\n    \"enrichCompany\": {\n      \"title\": \"Enrich current company page\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, fetch the current company's public LinkedIn page and add industry, website, employee count, headquarters, company size, and specialties. Costs an additional $0.02 per successfully enriched profile on top of the $0.01 profile charge. Leave disabled when you only need the person record.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"outputMode\": {\n      \"title\": \"Output mode\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"full\",\n        \"compact\"\n      ],\n      \"enumTitles\": [\n        \"Full public record\",\n        \"Compact (first 3 of each list)\"\n      ],\n      \"description\": \"full keeps every public list the provider returns (articles, posts, organizations). compact keeps the first 3 items of each list for smaller agent payloads. Default full.\",\n      \"default\": \"full\"\n    },\n    \"maxConcurrency\": {\n      \"title\": \"Max concurrency\",\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 5,\n      \"description\": \"How many profiles to fetch in parallel. Default 2 balances speed against provider rate limits. Raise to 5 for large batches; lower to 1 if you see rate-limit errors in the run log.\",\n      \"default\": 2,\n      \"prefill\": 2\n    },\n    \"includeRawData\": {\n      \"title\": \"Include raw response payload\",\n      \"type\": \"boolean\",\n      \"description\": \"When true, attach the raw response JSON under rawProfile. Default false. Enable only for debugging; it increases dataset size and is not required for CRM or agent use.\",\n      \"default\": false\n    }\n  },\n  \"required\": [\n    \"profileUrls\"\n  ]\n}",
    "readme": "## What is LinkedIn Fresh Profile Data Scraper?\n\nTurn a LinkedIn profile URL or handle into **one public profile record** for recruiters, CRM enrichment, and AI agents. Each row includes name, about, location, follower count, affiliated organizations, education, published articles, and recent posts when LinkedIn exposes them on the public page. Optional company-page enrichment adds industry, website, employee count, and headquarters. No LinkedIn login or cookies.\n\nThis Actor reads the same public JSON-LD view you get in an incognito browser. It does **not** return login-only job titles, skills, certifications, emails, or phone numbers. For those logged-in fields, no cookieless provider in this stack exposes them.\n\n## Best fit for this Actor\n\n- Enrich a list of known `/in/` profile URLs into structured people records for a CRM or ATS.\n- Attach recent public posts and published LinkedIn articles to a person record.\n- Add the current company's public LinkedIn page (industry, headcount, website) when `enrichCompany` is true.\n\nTo *search* for profiles by keyword, use [LinkedIn Profile Search Scraper](https://apify.com/khadinakbar/linkedin-profile-search-scraper). For emails, use [LinkedIn Profile Email Scraper](https://apify.com/khadinakbar/linkedin-profile-email-scraper). For a leaner identity-only row, use [LinkedIn Profile Details Scraper](https://apify.com/khadinakbar/linkedin-profile-details-scraper).\n\n## Practical scenario\n\nA recruiting coordinator pastes `https://www.linkedin.com/in/williamhgates/` and `satyanadella`. The run returns one row per person: name, Seattle/Redmond location, follower counts, Gates Foundation / Microsoft as affiliated organizations, Harvard education dates when public, recent posts, and Pulse articles. A missing handle finishes `SUCCEEDED` with a `NOT_FOUND` row and no `profile-scraped` charge. The coordinator exports CSV into the ATS and routes company-page enrichment to a second run when they need industry and headcount.\n\n## Quick start input\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"],\n  \"maxProfiles\": 10,\n  \"enrichCompany\": false,\n  \"outputMode\": \"full\"\n}\n```\n\n`profileUrls` accepts full `/in/` URLs, locale hosts such as `uk.linkedin.com/in/...`, or a bare handle. One unique profile produces one dataset row.\n\n## Input reference\n\n| Field | Type | What it controls |\n|---|---|---|\n| `profileUrls` | array | Required person URLs or handles. Example: `https://www.linkedin.com/in/williamhgates/`. Max 100. Company, post, and Sales Navigator URLs are out of scope. |\n| `maxProfiles` | integer | Cap on unique profiles processed. Default 50, max 100. |\n| `enrichCompany` | boolean | Fetch the current company's public LinkedIn page. Default false. Adds $0.02 per successful enrich. |\n| `outputMode` | enum | `full` (default) or `compact` (first 3 of each list). |\n| `providerOrder` | enum | The routing options listed in the input schema. |\n| `maxConcurrency` | integer | Parallel profile fetches. Default 2, max 5. |\n| `includeRawData` | boolean | Attach raw provider JSON under `rawProfile`. Default false. |\n\n## What data you receive\n\nOne dataset item is one LinkedIn person.\n\n```json\n{\n  \"profileUrl\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"publicId\": \"williamhgates\",\n  \"fullName\": \"Bill Gates\",\n  \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.\",\n  \"location\": \"Seattle, Washington, United States\",\n  \"followerCount\": 40588779,\n  \"currentCompanyName\": \"Gates Foundation\",\n  \"currentCompanyUrl\": \"https://www.linkedin.com/company/gates-foundation\",\n  \"experience\": [\n    { \"company\": \"Gates Foundation\", \"companyUrl\": \"https://www.linkedin.com/company/gates-foundation\" }\n  ],\n  \"education\": [\n    { \"school\": \"Harvard University\", \"startDate\": \"1973\", \"endDate\": \"1975\" }\n  ],\n  \"recentPosts\": [\n    { \"title\": \"Suriname is officially malaria-free.\", \"publishedAt\": \"2026-08-20T23:49:40.110Z\" }\n  ],\n  \"outcome\": \"OK\",\n  \"scrapedAt\": \"2026-08-21T07:00:00.000Z\"\n}\n```\n\n| Field | Meaning |\n|---|---|\n| `experience[]` | Affiliated organizations from LinkedIn's public structured data. Dates appear when JSON-LD includes them. Per-role job titles are not in this public view. |\n| `recentPosts[]` | Public posts LinkedIn lists on the profile, with URL and timestamp. |\n| `outcome` | `OK` is billed. `NOT_FOUND` is an honest empty/private public page with no `profile-scraped` charge. |\n| `companyIndustry` / `companyEmployeeCount` | Present only when `enrichCompany` succeeded. |\n\n`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, and `chargedEventCounts`.\n\n## Use through the API\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/khadinakbar~linkedin-fresh-profile-data-scraper/runs\" \\\n  -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"profileUrls\":[\"https://www.linkedin.com/in/williamhgates/\"]}'\n```\n\nDownload rows as JSON, CSV, Excel, or HTML from the Dataset tab.\n\n## Use with AI agents through Apify MCP\n\n> Scrape public LinkedIn profile data for https://www.linkedin.com/in/williamhgates/ and satyanadella. Return fullName, location, currentCompanyName, followerCount, recentPosts titles, outcome, and provider.\n\nConnect via [https://mcp.apify.com](https://mcp.apify.com). Read `OUTPUT.outcome` and `itemsPushed` to confirm whether the dataset contains `OK` rows, a `NOT_FOUND` row, or a valid empty result.\n\n## Connect the workflow\n\n- Discover unknown people first with [LinkedIn Profile Search Scraper](https://apify.com/khadinakbar/linkedin-profile-search-scraper), then pass those profile URLs here.\n- For verified emails on the same people, continue with [LinkedIn Profile Email Scraper](https://apify.com/khadinakbar/linkedin-profile-email-scraper).\n- For company-only pages without a person URL, use a LinkedIn company Actor rather than this one.\n\n## Pricing\n\nPay per event with Apify platform usage included. Confirm current event prices on the live Pricing tab; that tab is the source of truth if this page ever lags.\n\n- `apify-actor-start`: $0.00005 per run\n- `profile-scraped`: **$0.01** per `OK` row\n- `company-enriched`: **$0.02** per successfully enriched company page\n\nA one-profile run without company enrich is about $0.01 in result events with Apify platform usage included. `NOT_FOUND` rows have no `profile-scraped` charge. Provider credits are paid by the Actor owner.\n\n## How it works\n\n1. Normalize and deduplicate `/in/` URLs and handles.\n2. Fetch the public profile from the primary data provider, then the fallback data provider if needed.\n3. Map JSON-LD organizations, education, articles, and recent posts into a flat row.\n4. Optionally fetch the current company's public LinkedIn page.\n5. Charge `profile-scraped` only after a usable public record, then write the row.\n\nPrivate or missing profiles return HTTP 404 `not_found` from the providers and finish `SUCCEEDED` with `NOT_FOUND` / `VALID_EMPTY`.\n\n## Best results\n\n- Pass person profile URLs or handles. Keep company pages, posts, and Sales Navigator URLs for those Actors.\n- Use `fullName`, `currentCompanyName`, `location`, and `recentPosts` as the decision fields. Treat `experience[].company` as an affiliated organization, not a job title.\n- Keep `maxConcurrency` at 2 unless you are batching many URLs.\n- A typo handle finishes `SUCCEEDED` with a `NOT_FOUND` row and no `profile-scraped` charge.\n\n## Builder's note\n\nI found that the primary data provider `GET /v1/linkedin/profile` and the fallback data provider `GET /v1/scrape/linkedin/profile` return LinkedIn's public JSON-LD on a well-known public profile: name, about, location, followers, affiliated organizations, education dates, articles, and recent posts. In my testing the live payload matched the vendor docs for this public view. Company enrich is a second call to `/v1/linkedin/company` because the person payload carries the company name and URL. My goal is a useful CRM identity-plus-activity row from that public page.\n\n## Legal and responsible use\n\nUse this Actor on public LinkedIn data you are authorized to process, follow applicable law and LinkedIn's terms, and keep the output in your own compliance workflow. This Actor is independent of LinkedIn and does not log into LinkedIn.\n\nIssues and feature requests: use the Actor Issues tab on Apify.\n",
    "changelog": "0.1 - Initial provider-backed LinkedIn fresh profile data scraper. Bulk public profile URLs/handles in; one row per person with identity, about, organizations, education, articles, recent posts, plus optional company enrich. ScrapeCreators primary, SociaVault fallback. No cookies.",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-fresh-profile-data-scraper",
      "title": "LinkedIn Fresh Profile Data Scraper",
      "description": "Scrape public LinkedIn profile data from profile URLs or handles: name, about, location, followers, affiliated organizations, education, articles, and recent posts, with optional company-page enrichment. Provider-backed via ScrapeCreators and SociaVault; no LinkedIn login or cookies.",
      "seoTitle": "LinkedIn Fresh Profile Data Scraper — Public URL",
      "seoDescription": "Scrape public LinkedIn profile data by URL or handle: name, about, location, orgs, education, articles, and posts. Optional company enrich. MCP-ready.",
      "categories": [
        "LEAD_GENERATION",
        "SOCIAL_MEDIA",
        "MCP_SERVERS"
      ],
      "version": "0.1",
      "buildTag": "latest",
      "meta": {
        "templateId": "js-start",
        "generatedBy": "Cursor Grok 4.6 with Apify Actor Builder"
      },
      "input": {
        "title": "LinkedIn Fresh Profile Data Scraper",
        "type": "object",
        "schemaVersion": 1,
        "description": "Scrape public LinkedIn profile data from profile URLs or handles. Returns one row per person with name, about, location, followers, affiliated organizations, education, articles, and recent posts. Optionally enrich the current company page. No LinkedIn cookies or login required.",
        "properties": {
          "profileUrls": {
            "title": "LinkedIn profile URLs or handles",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Public LinkedIn person profiles to scrape. Accepts https://www.linkedin.com/in/williamhgates/ URLs, locale hosts such as uk.linkedin.com/in/..., or a bare handle like williamhgates. Up to 100 values per run. NOT company pages, posts, or Sales Navigator lead URLs — those belong in a company, posts, or Sales Nav Actor.",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates/"
            ],
            "editor": "stringList",
            "maxItems": 100
          },
          "maxProfiles": {
            "title": "Max profiles",
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum unique profiles to process in this run. Default 50. Extra URLs after the cap are skipped and listed in RUN_SUMMARY. This caps cost; it does not invent extra public data.",
            "default": 50,
            "prefill": 10
          },
          "enrichCompany": {
            "title": "Enrich current company page",
            "type": "boolean",
            "description": "When enabled, fetch the current company's public LinkedIn page and add industry, website, employee count, headquarters, company size, and specialties. Costs an additional $0.02 per successfully enriched profile on top of the $0.01 profile charge. Leave disabled when you only need the person record.",
            "default": false,
            "prefill": false
          },
          "outputMode": {
            "title": "Output mode",
            "type": "string",
            "enum": [
              "full",
              "compact"
            ],
            "enumTitles": [
              "Full public record",
              "Compact (first 3 of each list)"
            ],
            "description": "full keeps every public list the provider returns (articles, posts, organizations). compact keeps the first 3 items of each list for smaller agent payloads. Default full.",
            "default": "full"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "description": "How many profiles to fetch in parallel. Default 2 balances speed against provider rate limits. Raise to 5 for large batches; lower to 1 if you see rate-limit errors in the run log.",
            "default": 2,
            "prefill": 2
          },
          "includeRawData": {
            "title": "Include raw response payload",
            "type": "boolean",
            "description": "When true, attach the raw response JSON under rawProfile. Default false. Enable only for debugging; it increases dataset size and is not required for CRM or agent use.",
            "default": false
          }
        },
        "required": [
          "profileUrls"
        ]
      },
      "chargedEvents": "./pay_per_event.json",
      "readme": "## What is LinkedIn Fresh Profile Data Scraper?\n\nTurn a LinkedIn profile URL or handle into **one public profile record** for recruiters, CRM enrichment, and AI agents. Each row includes name, about, location, follower count, affiliated organizations, education, published articles, and recent posts when LinkedIn exposes them on the public page. Optional company-page enrichment adds industry, website, employee count, and headquarters. No LinkedIn login or cookies.\n\nThis Actor reads the same public JSON-LD view you get in an incognito browser. It does **not** return login-only job titles, skills, certifications, emails, or phone numbers. For those logged-in fields, no cookieless provider in this stack exposes them.\n\n## Best fit for this Actor\n\n- Enrich a list of known `/in/` profile URLs into structured people records for a CRM or ATS.\n- Attach recent public posts and published LinkedIn articles to a person record.\n- Add the current company's public LinkedIn page (industry, headcount, website) when `enrichCompany` is true.\n\nTo *search* for profiles by keyword, use [LinkedIn Profile Search Scraper](https://apify.com/khadinakbar/linkedin-profile-search-scraper). For emails, use [LinkedIn Profile Email Scraper](https://apify.com/khadinakbar/linkedin-profile-email-scraper). For a leaner identity-only row, use [LinkedIn Profile Details Scraper](https://apify.com/khadinakbar/linkedin-profile-details-scraper).\n\n## Practical scenario\n\nA recruiting coordinator pastes `https://www.linkedin.com/in/williamhgates/` and `satyanadella`. The run returns one row per person: name, Seattle/Redmond location, follower counts, Gates Foundation / Microsoft as affiliated organizations, Harvard education dates when public, recent posts, and Pulse articles. A missing handle finishes `SUCCEEDED` with a `NOT_FOUND` row and no `profile-scraped` charge. The coordinator exports CSV into the ATS and routes company-page enrichment to a second run when they need industry and headcount.\n\n## Quick start input\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"],\n  \"maxProfiles\": 10,\n  \"enrichCompany\": false,\n  \"outputMode\": \"full\"\n}\n```\n\n`profileUrls` accepts full `/in/` URLs, locale hosts such as `uk.linkedin.com/in/...`, or a bare handle. One unique profile produces one dataset row.\n\n## Input reference\n\n| Field | Type | What it controls |\n|---|---|---|\n| `profileUrls` | array | Required person URLs or handles. Example: `https://www.linkedin.com/in/williamhgates/`. Max 100. Company, post, and Sales Navigator URLs are out of scope. |\n| `maxProfiles` | integer | Cap on unique profiles processed. Default 50, max 100. |\n| `enrichCompany` | boolean | Fetch the current company's public LinkedIn page. Default false. Adds $0.02 per successful enrich. |\n| `outputMode` | enum | `full` (default) or `compact` (first 3 of each list). |\n| `providerOrder` | enum | The routing options listed in the input schema. |\n| `maxConcurrency` | integer | Parallel profile fetches. Default 2, max 5. |\n| `includeRawData` | boolean | Attach raw provider JSON under `rawProfile`. Default false. |\n\n## What data you receive\n\nOne dataset item is one LinkedIn person.\n\n```json\n{\n  \"profileUrl\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"publicId\": \"williamhgates\",\n  \"fullName\": \"Bill Gates\",\n  \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.\",\n  \"location\": \"Seattle, Washington, United States\",\n  \"followerCount\": 40588779,\n  \"currentCompanyName\": \"Gates Foundation\",\n  \"currentCompanyUrl\": \"https://www.linkedin.com/company/gates-foundation\",\n  \"experience\": [\n    { \"company\": \"Gates Foundation\", \"companyUrl\": \"https://www.linkedin.com/company/gates-foundation\" }\n  ],\n  \"education\": [\n    { \"school\": \"Harvard University\", \"startDate\": \"1973\", \"endDate\": \"1975\" }\n  ],\n  \"recentPosts\": [\n    { \"title\": \"Suriname is officially malaria-free.\", \"publishedAt\": \"2026-08-20T23:49:40.110Z\" }\n  ],\n  \"outcome\": \"OK\",\n  \"scrapedAt\": \"2026-08-21T07:00:00.000Z\"\n}\n```\n\n| Field | Meaning |\n|---|---|\n| `experience[]` | Affiliated organizations from LinkedIn's public structured data. Dates appear when JSON-LD includes them. Per-role job titles are not in this public view. |\n| `recentPosts[]` | Public posts LinkedIn lists on the profile, with URL and timestamp. |\n| `outcome` | `OK` is billed. `NOT_FOUND` is an honest empty/private public page with no `profile-scraped` charge. |\n| `companyIndustry` / `companyEmployeeCount` | Present only when `enrichCompany` succeeded. |\n\n`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, and `chargedEventCounts`.\n\n## Use through the API\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/khadinakbar~linkedin-fresh-profile-data-scraper/runs\" \\\n  -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"profileUrls\":[\"https://www.linkedin.com/in/williamhgates/\"]}'\n```\n\nDownload rows as JSON, CSV, Excel, or HTML from the Dataset tab.\n\n## Use with AI agents through Apify MCP\n\n> Scrape public LinkedIn profile data for https://www.linkedin.com/in/williamhgates/ and satyanadella. Return fullName, location, currentCompanyName, followerCount, recentPosts titles, outcome, and provider.\n\nConnect via [https://mcp.apify.com](https://mcp.apify.com). Read `OUTPUT.outcome` and `itemsPushed` to confirm whether the dataset contains `OK` rows, a `NOT_FOUND` row, or a valid empty result.\n\n## Connect the workflow\n\n- Discover unknown people first with [LinkedIn Profile Search Scraper](https://apify.com/khadinakbar/linkedin-profile-search-scraper), then pass those profile URLs here.\n- For verified emails on the same people, continue with [LinkedIn Profile Email Scraper](https://apify.com/khadinakbar/linkedin-profile-email-scraper).\n- For company-only pages without a person URL, use a LinkedIn company Actor rather than this one.\n\n## Pricing\n\nPay per event with Apify platform usage included. Confirm current event prices on the live Pricing tab; that tab is the source of truth if this page ever lags.\n\n- `apify-actor-start`: $0.00005 per run\n- `profile-scraped`: **$0.01** per `OK` row\n- `company-enriched`: **$0.02** per successfully enriched company page\n\nA one-profile run without company enrich is about $0.01 in result events with Apify platform usage included. `NOT_FOUND` rows have no `profile-scraped` charge. Provider credits are paid by the Actor owner.\n\n## How it works\n\n1. Normalize and deduplicate `/in/` URLs and handles.\n2. Fetch the public profile from the primary data provider, then the fallback data provider if needed.\n3. Map JSON-LD organizations, education, articles, and recent posts into a flat row.\n4. Optionally fetch the current company's public LinkedIn page.\n5. Charge `profile-scraped` only after a usable public record, then write the row.\n\nPrivate or missing profiles return HTTP 404 `not_found` from the providers and finish `SUCCEEDED` with `NOT_FOUND` / `VALID_EMPTY`.\n\n## Best results\n\n- Pass person profile URLs or handles. Keep company pages, posts, and Sales Navigator URLs for those Actors.\n- Use `fullName`, `currentCompanyName`, `location`, and `recentPosts` as the decision fields. Treat `experience[].company` as an affiliated organization, not a job title.\n- Keep `maxConcurrency` at 2 unless you are batching many URLs.\n- A typo handle finishes `SUCCEEDED` with a `NOT_FOUND` row and no `profile-scraped` charge.\n\n## Builder's note\n\nI found that the primary data provider `GET /v1/linkedin/profile` and the fallback data provider `GET /v1/scrape/linkedin/profile` return LinkedIn's public JSON-LD on a well-known public profile: name, about, location, followers, affiliated organizations, education dates, articles, and recent posts. In my testing the live payload matched the vendor docs for this public view. Company enrich is a second call to `/v1/linkedin/company` because the person payload carries the company name and URL. My goal is a useful CRM identity-plus-activity row from that public page.\n\n## Legal and responsible use\n\nUse this Actor on public LinkedIn data you are authorized to process, follow applicable law and LinkedIn's terms, and keep the output in your own compliance workflow. This Actor is independent of LinkedIn and does not log into LinkedIn.\n\nIssues and feature requests: use the Actor Issues tab on Apify.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "profileInput": {
                "type": "string",
                "title": "Profile Input",
                "description": "Original URL or handle from actor input.",
                "example": "https://www.linkedin.com/in/williamhgates/"
              },
              "profileUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile URL",
                "description": "Canonical public LinkedIn person URL.",
                "example": "https://www.linkedin.com/in/williamhgates/"
              },
              "publicId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Public ID",
                "description": "Vanity handle from /in/{handle}.",
                "example": "williamhgates"
              },
              "fullName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Full Name",
                "description": "Public display name.",
                "example": "Bill Gates"
              },
              "firstName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "First Name"
              },
              "lastName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Last Name"
              },
              "about": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "About",
                "description": "Public About summary when LinkedIn exposes it."
              },
              "location": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Location",
                "example": "Seattle, Washington, United States"
              },
              "currentCompanyName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Current Company",
                "description": "First affiliated organization from the public experience list."
              },
              "currentCompanyUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Current Company URL"
              },
              "followerCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Follower Count"
              },
              "connectionsCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Connections Count"
              },
              "profileImageUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile Image URL"
              },
              "experience": {
                "type": "array",
                "title": "Experience",
                "description": "Affiliated organizations from LinkedIn's public JSON-LD view. Job titles are not in public no-login data."
              },
              "education": {
                "type": "array",
                "title": "Education"
              },
              "articles": {
                "type": "array",
                "title": "Articles"
              },
              "publications": {
                "type": "array",
                "title": "Publications"
              },
              "projects": {
                "type": "array",
                "title": "Projects"
              },
              "recommendations": {
                "type": "array",
                "title": "Recommendations"
              },
              "similarProfiles": {
                "type": "array",
                "title": "Similar Profiles"
              },
              "recentPosts": {
                "type": "array",
                "title": "Recent Posts"
              },
              "activity": {
                "type": "array",
                "title": "Activity"
              },
              "experienceCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Experience Count"
              },
              "educationCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Education Count"
              },
              "articlesCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Articles Count"
              },
              "recentPostsCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Recent Posts Count"
              },
              "companyEnriched": {
                "type": "boolean",
                "title": "Company Enriched"
              },
              "companyIndustry": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Industry"
              },
              "companyWebsite": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Website"
              },
              "companyEmployeeCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Company Employee Count"
              },
              "companySize": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Size"
              },
              "companyFollowers": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Company Followers"
              },
              "companyHeadquarters": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Headquarters"
              },
              "companyType": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Type"
              },
              "companyFounded": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Company Founded"
              },
              "companySpecialties": {
                "type": "array",
                "title": "Company Specialties"
              },
              "companyDescription": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Description"
              },
              "companyLogoUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Logo URL"
              },
              "outcome": {
                "type": "string",
                "title": "Row Outcome",
                "description": "OK is billed. NOT_FOUND is an honest empty public profile and is not billed.",
                "enum": [
                  "OK",
                  "NOT_FOUND"
                ]
              },
              "provider": {
                "type": "string",
                "title": "Data Provider",
                "enum": [
                  "scrapecreators",
                  "sociavault"
                ]
              },
              "companyProvider": {
                "type": "string",
                "title": "Company Provider",
                "enum": [
                  "scrapecreators",
                  "sociavault"
                ]
              },
              "scrapedAt": {
                "type": "string",
                "title": "Scraped At",
                "format": "date-time"
              }
            },
            "required": [
              "profileInput",
              "outcome",
              "scrapedAt"
            ]
          },
          "views": {
            "overview": {
              "title": "LinkedIn Profiles",
              "transformation": {
                "fields": [
                  "fullName",
                  "profileUrl",
                  "location",
                  "currentCompanyName",
                  "followerCount",
                  "experienceCount",
                  "recentPostsCount",
                  "outcome",
                  "provider",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "followerCount": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "date"
                  }
                }
              }
            },
            "companyEnrich": {
              "title": "Profiles with Company",
              "transformation": {
                "fields": [
                  "fullName",
                  "profileUrl",
                  "currentCompanyName",
                  "currentCompanyUrl",
                  "companyIndustry",
                  "companyWebsite",
                  "companyEmployeeCount",
                  "companyHeadquarters",
                  "companyEnriched",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "currentCompanyUrl": {
                    "label": "Company URL",
                    "format": "link"
                  },
                  "companyWebsite": {
                    "label": "Website",
                    "format": "link"
                  },
                  "companyEmployeeCount": {
                    "label": "Employees",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "date"
                  }
                }
              }
            }
          }
        },
        "keyValueStore": {
          "actorKeyValueStoreSchemaVersion": 1,
          "title": "LinkedIn Fresh Profile Data Scraper KV Store",
          "collections": {
            "OUTPUT": {
              "title": "Run summary",
              "description": "Summary of processed profile URLs, saved rows, company enrichment counts, billing counters, provider diagnostics, warnings, and per-profile outcomes.",
              "keyPrefix": "OUTPUT"
            },
            "RUN_SUMMARY": {
              "title": "Run summary alias",
              "description": "Machine-readable alias of OUTPUT for integrations that expect RUN_SUMMARY.",
              "keyPrefix": "RUN_SUMMARY"
            }
          }
        }
      },
      "output": {
        "title": "LinkedIn Fresh Profile Data Scraper Output",
        "actorOutputSchemaVersion": 1,
        "description": "Returns one row per LinkedIn profile in the default dataset, plus a machine-readable run summary in the default key-value store.",
        "properties": {
          "results": {
            "type": "string",
            "title": "LinkedIn profile rows",
            "description": "Dataset items containing public profile identity, about, organizations, education, articles, recent posts, and optional company enrichment.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "summary": {
            "type": "string",
            "title": "Run summary",
            "description": "Run summary including outcome, itemsPushed, chargedEventCounts, provider status codes, and per-profile results.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/OUTPUT"
          },
          "runSummary": {
            "type": "string",
            "title": "RUN_SUMMARY alias",
            "description": "Machine-readable RUN_SUMMARY record mirroring OUTPUT for integrations that read RUN_SUMMARY directly.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/RUN_SUMMARY"
          }
        }
      },
      "environmentVariables": {
        "SCRAPECREATORS_API_KEY": "@SCRAPECREATORS_API_KEY",
        "SOCIAVAULT_API_KEY": "@SOCIAVAULT_API_KEY",
        "SOCIALVAULT_API_KEY": "@SOCIALVAULT_API_KEY"
      },
      "defaultRunOptions": {
        "memoryMbytes": 512,
        "timeoutSecs": 1800
      },
      "minMemoryMbytes": 256,
      "defaultMemoryMbytes": 512,
      "changelog": "0.1 - Initial provider-backed LinkedIn fresh profile data scraper. Bulk public profile URLs/handles in; one row per person with identity, about, organizations, education, articles, recent posts, plus optional company enrich. ScrapeCreators primary, SociaVault fallback. No cookies.",
      "dockerfile": "../Dockerfile"
    },
    "buildNumber": "0.1.6",
    "imageDigest": "68a5d4bfa478064867bfc909339749d623b1654d365e11eb1378ecc34bbe7afc",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.014865555555555555
    }
  }
}