{
  "data": {
    "id": "2dUhc7oesMfLfhJFm",
    "actId": "DIlWX597J9vZXVzxw",
    "userId": "37EfuyJq9V1PGIamn",
    "startedAt": "2026-10-01T15:07:53.276Z",
    "finishedAt": "2026-10-01T15:08:09.007Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 15662,
      "runTimeSecs": 15.662,
      "computeUnits": 0.01740222222222222,
      "imageSizeBytes": 297466368
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"Profile URLs or Usernames\",\n      \"type\": \"array\",\n      \"description\": \"LinkedIn profile URLs or bare slugs, one per line. Bulk-friendly: a single run handles up to 1000 profiles, and isolates each profile so one blocked or restricted profile never fails the batch.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 1,\n        \"maxLength\": 500\n      },\n      \"default\": [],\n      \"prefill\": [\n        \"satyanadella\"\n      ],\n      \"maxItems\": 1000\n    },\n    \"maxProfiles\": {\n      \"title\": \"Max Profiles\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of profiles to scrape. Capped to keep exploratory runs affordable.\",\n      \"editor\": \"number\",\n      \"default\": 5,\n      \"prefill\": 5,\n      \"minimum\": 1,\n      \"maximum\": 1000\n    },\n    \"maxConcurrency\": {\n      \"title\": \"Max Concurrency\",\n      \"type\": \"integer\",\n      \"description\": \"Number of profiles resolved in parallel. Ten minimizes per-profile compute while staying within the tested request limit.\",\n      \"editor\": \"number\",\n      \"default\": 10,\n      \"prefill\": 10,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"fullSections\": {\n      \"title\": \"Full profile sections\",\n      \"type\": \"boolean\",\n      \"description\": \"Return every section shown on the public profile page — all experience, education, skills, licenses & certifications, volunteering, publications, honors & awards, languages, courses, projects, organizations, recommendations and activity — under a `sections` object, instead of only the summary. Adds no extra requests.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"groupCaption\": \"Output depth\",\n      \"groupDescription\": \"How much of each profile to return.\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional proxy settings for the deeper profile lookup. It is used when faster lookups fail, or first when 'Prefer full profile fallback' is on.\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": true,\n        \"apifyProxyGroups\": [\n          \"RESIDENTIAL\"\n        ]\n      },\n      \"prefill\": {\n        \"useApifyProxy\": true,\n        \"apifyProxyGroups\": [\n          \"RESIDENTIAL\"\n        ]\n      }\n    },\n    \"linkedinCookies\": {\n      \"title\": \"LinkedIn Cookies (optional, for highest reliability)\",\n      \"type\": \"string\",\n      \"description\": \"Optional. Paste one or more LinkedIn 'li_at' session cookies for authenticated scraping (one cookie per line). When provided, achieves 95%+ reliability on any profile, including obscure/private ones that public scraping can't reach. Get yours from a logged-in LinkedIn session via browser DevTools > Application > Cookies > linkedin.com > li_at. WARNING: only use cookies from accounts you own -- LinkedIn may flag automated activity. Without cookies, the actor still works via public search-engine fallback for ~85% of indexed profiles.\",\n      \"editor\": \"textarea\",\n      \"isSecret\": true\n    },\n    \"useFallbacks\": {\n      \"title\": \"Use search-engine fallbacks when direct scraping fails\",\n      \"type\": \"boolean\",\n      \"description\": \"When direct LinkedIn access is blocked (common in 2026), fall back to extracting public profile data from search engines. Returns partial data (name, headline, company) for ~95% of indexed profiles.\",\n      \"default\": true\n    },\n    \"preferFullProfile\": {\n      \"title\": \"Prefer full profile fallback\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, try a deeper profile lookup before accepting partial search results. This can return richer data but may trigger the extra-cost fallback event.\",\n      \"default\": false\n    },\n    \"usePremiumFallback\": {\n      \"title\": \"Premium fallback for obscure profiles (extra cost)\",\n      \"type\": \"boolean\",\n      \"description\": \"When all other lookup methods fail, use a premium third-party profile lookup service as a final fallback. It can often retrieve a profile that other methods cannot. Each profile found this way adds a separate charge to your Apify account, on top of this actor's own price. Disabled by default to avoid surprise costs; enable only when you need maximum recall.\",\n      \"default\": false\n    }\n  },\n  \"required\": []\n}",
    "readme": "# LinkedIn Profile Scraper\n\n<!-- thirdwatch-portfolio-proof:start -->\n> **Thirdwatch portfolio:** 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).\n<!-- thirdwatch-portfolio-proof:end -->\n\nScrape structured data from public LinkedIn profile URLs and usernames. Get names, headlines, current roles, companies, locations, education, profile summaries, follower counts, profile photos, and recent articles without using a LinkedIn account or cookies.\n\n## Value proposition\n\nLinkedIn profile URLs are common in CRMs, applicant lists, conference exports, Google results, and prospecting workflows, but they are not directly usable as clean structured data. This actor turns public LinkedIn profile URLs into JSON records that can be loaded into a CRM, ATS, enrichment pipeline, spreadsheet, or internal research tool.\n\nUse it when you need a reliable profile-enrichment step for:\n\n- Sales prospecting and SDR research\n- RevOps and CRM enrichment\n- Recruiting and candidate research\n- Founder, executive, or investor research\n- Talent movement and market-mapping workflows\n\n## What's new\n\n- **Full profile sections**: set `fullSections: true` to get every section LinkedIn renders publicly — all experience, education, skills, licenses & certifications, volunteering, publications, honors & awards, languages, courses, projects, organizations, recommendations and activity — instead of the standard summary. It costs no extra requests: it parses the page the actor already fetched.\n- **Built for bulk**: send up to 1,000 profile URLs in one run. The Actor processes multiple profiles in the same run efficiently, so large batches complete without extra configuration.\n- **Per-profile failure isolation**: one authwalled or malformed profile costs exactly one row. It never aborts the batch, and rows are written as they resolve, so a run that hits its timeout keeps everything already collected.\n- **No-login profile enrichment**: scrape public `/in/{username}` profile pages without cookies or a paid LinkedIn seat.\n- **Flexible URL input**: accepts full profile URLs, `/in/...` paths, or plain usernames.\n\n## What data you get\n\n| Field | Description |\n| --- | --- |\n| `name` | Full name |\n| `headline` | Public professional headline |\n| `experience` | Positions with `position`, `companyName`, `startDate`, `endDate`, `duration`, `location` when available |\n| `education` | Schools with `schoolName`, `degreeName`, `fieldOfStudy`, dates when available |\n| `topSkills` | Skills listed on the public profile |\n| `about` | Public About or summary section |\n| `location` | Public profile location |\n| `profile_photo_url` | Profile image URL |\n| `followers_count` | Public follower count |\n| `profile_url` / `linkedinUrl` | Canonical LinkedIn profile URL |\n| `publicIdentifier` | The `/in/{slug}` identifier |\n| `articles` | Recent public articles when available |\n| `certifications` | `{name, issuer}` for licenses and certifications |\n| `languages` | Languages listed on the profile |\n| `volunteer_experience` | `{organization, role}` entries |\n| `recommendations_count` | Number of public recommendations, when exposed |\n| `sections` | Full public sections — see below. `{}` unless `fullSections` is on |\n| `dataSource` | How the row was collected. Rows not read from the full public profile page carry `sections: {}` |\n\n### `fullSections`\n\nWith `fullSections: true`, `sections` is keyed by section — `experience`,\n`education`, `skills`, `certifications`, `volunteering`, `publications`,\n`honors_and_awards`, `languages`, `courses`, `projects`, `organizations`,\n`patents`, `recommendations_received`, `articles`, `activity`, `about` — and each\nentry is `{title, subtitle, date_range, description, url}` (only the keys that\nsection actually has). A section LinkedIn adds later still comes through under a\nslugified key rather than being silently dropped.\n\n`fullSections` also backfills `topSkills`, `certifications`, `languages`,\n`volunteer_experience` and `recommendations_count` when the profile's structured\ndata left them empty. It only ever fills an empty list — it never rewrites a\nvalue your pipeline already relies on.\n\nRows built from a search-result summary do not include the full profile page,\nso they carry `sections: {}`. Check\n`dataSource` on each row if that distinction matters to you.\n\n## Quick-start input examples\n\n### 1. Enrich one profile URL\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"maxProfiles\": 1\n}\n```\n\n### 2. Enrich usernames and profile paths\n\n```json\n{\n  \"profileUrls\": [\"satyanadella\", \"/in/williamhgates\", \"https://www.linkedin.com/in/example/\"],\n  \"maxProfiles\": 3\n}\n```\n\n### 3. Batch-enrich CRM records\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/profile-one/\",\n    \"https://www.linkedin.com/in/profile-two/\",\n    \"https://www.linkedin.com/in/profile-three/\"\n  ],\n  \"maxProfiles\": 500,\n  \"maxConcurrency\": 10\n}\n```\n\n### 4. Every public section, in bulk\n\n```json\n{\n  \"profileUrls\": [\"reidhoffman\", \"satyanadella\", \"williamhgates\"],\n  \"maxProfiles\": 3,\n  \"fullSections\": true\n}\n```\n\n## Input parameters\n\n| Parameter | Required | Default | Description |\n| --- | --- | --- | --- |\n| `profileUrls` | Yes | - | LinkedIn profile URLs, `/in/...` paths, or usernames. Up to 1,000 per run. |\n| `maxProfiles` | No | `5` | Maximum number of profiles to process from the input list. |\n| `maxConcurrency` | No | `10` | Profiles resolved in parallel; maximum `10`. |\n| `fullSections` | No | `false` | Return every public profile section under `sections`, not just the summary. |\n| `proxyConfiguration` | No | Proxy fallback | Direct lookup and free search run first. The configured proxy is used only after those paths fail. |\n| `linkedinCookies` | No | - | Optional LinkedIn session cookies you provide to access profile data that requires being logged in. Only use cookies from an account you own. |\n| `useFallbacks` | No | `true` | Whether to try alternate methods automatically if the primary method doesn't return data. |\n| `preferFullProfile` | No | `false` | Try a deeper profile lookup before accepting a partial search result. |\n| `usePremiumFallback` | No | `false` | Whether to use a higher-accuracy (potentially costlier) fallback method when the primary method fails. Off by default to avoid surprise costs. |\n\n## Sample output snippet\n\n```json\n{\n  \"name\": \"Reid Hoffman\",\n  \"headline\": \"Co-Founder, Executive Board Chair at Manas AI\",\n  \"experience\": [\n    {\n      \"position\": \"Co-Founder, Executive Board Chair\",\n      \"companyName\": \"Manas AI\",\n      \"startDate\": {\"year\": 2025}\n    }\n  ],\n  \"education\": [\n    {\"schoolName\": \"Stanford University\", \"degreeName\": \"BS\", \"fieldOfStudy\": \"Symbolic Systems\"}\n  ],\n  \"topSkills\": [\"CEOs\", \"Founding\", \"Venture Capital\"],\n  \"about\": \"Public profile summary text...\",\n  \"location\": {\"parsed\": {\"text\": \"Greater Seattle Area\"}},\n  \"followers_count\": 3000000,\n  \"profile_url\": \"https://www.linkedin.com/in/reidhoffman/\",\n  \"publicIdentifier\": \"reidhoffman\",\n  \"dataSource\": \"linkedin_direct\",\n  \"sections\": {\n    \"experience\": [\n      {\n        \"title\": \"Co-Founder, Executive Board Chair\",\n        \"subtitle\": \"Manas AI\",\n        \"date_range\": \"Jan 2025 - Present 1 year 9 months\",\n        \"description\": \"Manas AI leverages proprietary AI...\",\n        \"url\": \"https://www.linkedin.com/company/manas-ai\"\n      }\n    ],\n    \"publications\": [\n      {\"title\": \"Superagency\", \"subtitle\": \"Authors Equity\", \"date_range\": \"January 28, 2025\"}\n    ],\n    \"honors_and_awards\": [\n      {\"title\": \"Sigillum Magnum\", \"subtitle\": \"University of Bologna\", \"date_range\": \"Sep 2023\"}\n    ],\n    \"volunteering\": [\n      {\"title\": \"Chair, Board of Directors\", \"subtitle\": \"Opportunity@Work\", \"date_range\": \"Jun 2016 - Present\"}\n    ],\n    \"skills\": [{\"title\": \"CEOs\"}, {\"title\": \"Founding\"}]\n  }\n}\n```\n\n(`sections` shown here abbreviated; a rich profile returns 11+ sections.)\n\n## Use cases\n\n- **CRM enrichment**: update contact records with current title, company, location, headline, and canonical profile URL.\n- **Sales prospecting**: enrich LinkedIn URLs from search exports, conference lists, founder directories, or account research.\n- **Recruiting research**: summarize public candidate backgrounds before outreach or screening.\n- **Investor research**: profile founders, operators, and executive teams across a portfolio or market segment.\n- **Data pipelines**: normalize LinkedIn usernames and URLs into structured fields for downstream workflows.\n\n## Limitations\n\n- Only public profile data is returned. Restricted profiles may return limited or no data.\n- `fullSections` returns what LinkedIn renders publicly. Endorsement counts, connection-gated sections, and anything behind the login wall stay out of reach; a profile that hides a section publicly returns no key for it.\n- Sections are unavailable on rows recovered through a search-engine fallback path (check the `dataSource` field), because those paths never load the profile page.\n- Some fields are optional because LinkedIn profiles vary by user privacy settings and public visibility.\n- The actor does not create LinkedIn sessions, send messages, connect with users, or access private LinkedIn data.\n\n## FAQ\n\n### Do I need a LinkedIn account or cookies?\n\nNo. The actor uses public profile URLs and does not require a logged-in LinkedIn session.\n\n### What input formats work?\n\nFull URLs, `/in/...` paths, and plain usernames are accepted when they resolve to public LinkedIn profile pages.\n\n### Can I enrich profiles found through Google or another scraper?\n\nYes. If the result resolves to a public LinkedIn `/in/{username}` profile, it can be used as input.\n\n### How many profiles can I scrape in one run?\n\nThe actor supports batch input. Use `maxProfiles` to control how many profiles from your input list are processed in a run.\n\n### Is the data fresh?\n\nData is pulled at run time from public profile pages, subject to what LinkedIn makes publicly visible.\n\n## Support and custom builds\n\nNeed a custom LinkedIn enrichment flow, CRM mapper, webhook integration, or combined company-employee plus profile-enrichment actor? Contact Thirdwatch through Apify or visit [thirdwatch.dev](https://thirdwatch.dev) for custom builds.\n\nPairs well with [LinkedIn Company Employees Scraper](https://apify.com/thirdwatch/linkedin-company-employees-scraper?fpr=9m2cd6) to find profiles and [LinkedIn Jobs Scraper](https://apify.com/thirdwatch/linkedin-jobs-scraper?fpr=9m2cd6) to connect people data with hiring signals.\n\n## Use cases and recipes\n\nStep-by-step guides on [thirdwatch.dev/blog](https://thirdwatch.dev/blog):\n\n- [Build a Candidate Shortlist from LinkedIn Profiles (2026)](https://thirdwatch.dev/blog/build-candidate-shortlist-from-linkedin-profiles)\n- [Enrich Your CRM with LinkedIn Profile Data (2026 Guide)](https://thirdwatch.dev/blog/enrich-crm-with-linkedin-profile-data)\n- [Find Decision-Makers by Title and Company on LinkedIn (2026)](https://thirdwatch.dev/blog/find-decision-makers-by-title-and-company)\n- [Scrape LinkedIn Profiles Without Login at Scale (2026)](https://thirdwatch.dev/blog/scrape-linkedin-profiles-without-login)\n\nLast verified: 2026-10\n",
    "actorDefinition": {
      "$schema": "https://apify.com/schemas/v1/actor.ide.json",
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Scraper - Full Sections, Bulk, No Cookies",
      "description": "Scrape LinkedIn public profiles without login — bulk up to 1000 URLs per run. Optional full mode returns every public section: experience, education, skills, certifications, and more.",
      "version": "1.0",
      "buildTag": "latest",
      "input": {
        "title": "LinkedIn Profile Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "Profile URLs or Usernames",
            "type": "array",
            "description": "LinkedIn profile URLs or bare slugs, one per line. Bulk-friendly: a single run handles up to 1000 profiles, and isolates each profile so one blocked or restricted profile never fails the batch.",
            "editor": "stringList",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 500
            },
            "default": [],
            "prefill": [
              "satyanadella"
            ],
            "maxItems": 1000
          },
          "maxProfiles": {
            "title": "Max Profiles",
            "type": "integer",
            "description": "Maximum number of profiles to scrape. Capped to keep exploratory runs affordable.",
            "editor": "number",
            "default": 5,
            "prefill": 5,
            "minimum": 1,
            "maximum": 1000
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Number of profiles resolved in parallel. Ten minimizes per-profile compute while staying within the tested request limit.",
            "editor": "number",
            "default": 10,
            "prefill": 10,
            "minimum": 1,
            "maximum": 10
          },
          "fullSections": {
            "title": "Full profile sections",
            "type": "boolean",
            "description": "Return every section shown on the public profile page — all experience, education, skills, licenses & certifications, volunteering, publications, honors & awards, languages, courses, projects, organizations, recommendations and activity — under a `sections` object, instead of only the summary. Adds no extra requests.",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "groupCaption": "Output depth",
            "groupDescription": "How much of each profile to return."
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional proxy settings for the deeper profile lookup. It is used when faster lookups fail, or first when 'Prefer full profile fallback' is on.",
            "editor": "proxy",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            },
            "prefill": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "linkedinCookies": {
            "title": "LinkedIn Cookies (optional, for highest reliability)",
            "type": "string",
            "description": "Optional. Paste one or more LinkedIn 'li_at' session cookies for authenticated scraping (one cookie per line). When provided, achieves 95%+ reliability on any profile, including obscure/private ones that public scraping can't reach. Get yours from a logged-in LinkedIn session via browser DevTools > Application > Cookies > linkedin.com > li_at. WARNING: only use cookies from accounts you own -- LinkedIn may flag automated activity. Without cookies, the actor still works via public search-engine fallback for ~85% of indexed profiles.",
            "editor": "textarea",
            "isSecret": true
          },
          "useFallbacks": {
            "title": "Use search-engine fallbacks when direct scraping fails",
            "type": "boolean",
            "description": "When direct LinkedIn access is blocked (common in 2026), fall back to extracting public profile data from search engines. Returns partial data (name, headline, company) for ~95% of indexed profiles.",
            "default": true
          },
          "preferFullProfile": {
            "title": "Prefer full profile fallback",
            "type": "boolean",
            "description": "When enabled, try a deeper profile lookup before accepting partial search results. This can return richer data but may trigger the extra-cost fallback event.",
            "default": false
          },
          "usePremiumFallback": {
            "title": "Premium fallback for obscure profiles (extra cost)",
            "type": "boolean",
            "description": "When all other lookup methods fail, use a premium third-party profile lookup service as a final fallback. It can often retrieve a profile that other methods cannot. Each profile found this way adds a separate charge to your Apify account, on top of this actor's own price. Disabled by default to avoid surprise costs; enable only when you need maximum recall.",
            "default": false
          }
        },
        "required": []
      },
      "dockerfile": "../Dockerfile",
      "maxMemoryMbytes": 1024,
      "defaultRunOptions": {
        "build": "latest",
        "memoryMbytes": 512,
        "timeoutSecs": 3600
      },
      "pricingModel": {
        "pricingType": "PAY_PER_EVENT",
        "pricePerEvent": 0.01,
        "events": {
          "result": {
            "displayName": "Result",
            "description": "Charged for each result scraped",
            "priceUsd": 0.0065,
            "isCharged": true,
            "pricingTiers": [
              {
                "tierName": "FREE",
                "priceUsd": 0.0065
              },
              {
                "tierName": "BRONZE",
                "priceUsd": 0.006
              },
              {
                "tierName": "SILVER",
                "priceUsd": 0.0055
              },
              {
                "tierName": "GOLD",
                "priceUsd": 0.005
              }
            ]
          },
          "proxy_fallback": {
            "displayName": "Deeper lookup fallback",
            "description": "Charged once per successfully enriched profile only when direct and free search paths fail and a deeper, more resilient lookup is required.",
            "priceUsd": 0.012,
            "isCharged": true
          },
          "serp_fallback": {
            "displayName": "Rendered search fallback",
            "description": "Charged once per successfully enriched profile only when the paid rendered-search fallback is required.",
            "priceUsd": 0.004,
            "isCharged": true
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile",
        "properties": {
          "results": {
            "type": "string",
            "title": "LinkedIn Profile Results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "categories": [
        "JOBS"
      ],
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {},
          "views": {
            "overview": {
              "title": "LinkedIn Profiles",
              "transformation": {
                "fields": [
                  "name",
                  "headline",
                  "location",
                  "about",
                  "followers_count",
                  "experience",
                  "topSkills",
                  "dataSource",
                  "profile_url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "about": {
                    "label": "About",
                    "format": "text"
                  },
                  "followers_count": {
                    "label": "Followers",
                    "format": "text"
                  },
                  "experience": {
                    "label": "Experience",
                    "format": "array"
                  },
                  "topSkills": {
                    "label": "Skills",
                    "format": "array"
                  },
                  "dataSource": {
                    "label": "Source",
                    "format": "text"
                  },
                  "profile_url": {
                    "label": "Profile URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# LinkedIn Profile Scraper\n\n<!-- thirdwatch-portfolio-proof:start -->\n> **Thirdwatch portfolio:** 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).\n<!-- thirdwatch-portfolio-proof:end -->\n\nScrape structured data from public LinkedIn profile URLs and usernames. Get names, headlines, current roles, companies, locations, education, profile summaries, follower counts, profile photos, and recent articles without using a LinkedIn account or cookies.\n\n## Value proposition\n\nLinkedIn profile URLs are common in CRMs, applicant lists, conference exports, Google results, and prospecting workflows, but they are not directly usable as clean structured data. This actor turns public LinkedIn profile URLs into JSON records that can be loaded into a CRM, ATS, enrichment pipeline, spreadsheet, or internal research tool.\n\nUse it when you need a reliable profile-enrichment step for:\n\n- Sales prospecting and SDR research\n- RevOps and CRM enrichment\n- Recruiting and candidate research\n- Founder, executive, or investor research\n- Talent movement and market-mapping workflows\n\n## What's new\n\n- **Full profile sections**: set `fullSections: true` to get every section LinkedIn renders publicly — all experience, education, skills, licenses & certifications, volunteering, publications, honors & awards, languages, courses, projects, organizations, recommendations and activity — instead of the standard summary. It costs no extra requests: it parses the page the actor already fetched.\n- **Built for bulk**: send up to 1,000 profile URLs in one run. The Actor processes multiple profiles in the same run efficiently, so large batches complete without extra configuration.\n- **Per-profile failure isolation**: one authwalled or malformed profile costs exactly one row. It never aborts the batch, and rows are written as they resolve, so a run that hits its timeout keeps everything already collected.\n- **No-login profile enrichment**: scrape public `/in/{username}` profile pages without cookies or a paid LinkedIn seat.\n- **Flexible URL input**: accepts full profile URLs, `/in/...` paths, or plain usernames.\n\n## What data you get\n\n| Field | Description |\n| --- | --- |\n| `name` | Full name |\n| `headline` | Public professional headline |\n| `experience` | Positions with `position`, `companyName`, `startDate`, `endDate`, `duration`, `location` when available |\n| `education` | Schools with `schoolName`, `degreeName`, `fieldOfStudy`, dates when available |\n| `topSkills` | Skills listed on the public profile |\n| `about` | Public About or summary section |\n| `location` | Public profile location |\n| `profile_photo_url` | Profile image URL |\n| `followers_count` | Public follower count |\n| `profile_url` / `linkedinUrl` | Canonical LinkedIn profile URL |\n| `publicIdentifier` | The `/in/{slug}` identifier |\n| `articles` | Recent public articles when available |\n| `certifications` | `{name, issuer}` for licenses and certifications |\n| `languages` | Languages listed on the profile |\n| `volunteer_experience` | `{organization, role}` entries |\n| `recommendations_count` | Number of public recommendations, when exposed |\n| `sections` | Full public sections — see below. `{}` unless `fullSections` is on |\n| `dataSource` | How the row was collected. Rows not read from the full public profile page carry `sections: {}` |\n\n### `fullSections`\n\nWith `fullSections: true`, `sections` is keyed by section — `experience`,\n`education`, `skills`, `certifications`, `volunteering`, `publications`,\n`honors_and_awards`, `languages`, `courses`, `projects`, `organizations`,\n`patents`, `recommendations_received`, `articles`, `activity`, `about` — and each\nentry is `{title, subtitle, date_range, description, url}` (only the keys that\nsection actually has). A section LinkedIn adds later still comes through under a\nslugified key rather than being silently dropped.\n\n`fullSections` also backfills `topSkills`, `certifications`, `languages`,\n`volunteer_experience` and `recommendations_count` when the profile's structured\ndata left them empty. It only ever fills an empty list — it never rewrites a\nvalue your pipeline already relies on.\n\nRows built from a search-result summary do not include the full profile page,\nso they carry `sections: {}`. Check\n`dataSource` on each row if that distinction matters to you.\n\n## Quick-start input examples\n\n### 1. Enrich one profile URL\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella/\"],\n  \"maxProfiles\": 1\n}\n```\n\n### 2. Enrich usernames and profile paths\n\n```json\n{\n  \"profileUrls\": [\"satyanadella\", \"/in/williamhgates\", \"https://www.linkedin.com/in/example/\"],\n  \"maxProfiles\": 3\n}\n```\n\n### 3. Batch-enrich CRM records\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/profile-one/\",\n    \"https://www.linkedin.com/in/profile-two/\",\n    \"https://www.linkedin.com/in/profile-three/\"\n  ],\n  \"maxProfiles\": 500,\n  \"maxConcurrency\": 10\n}\n```\n\n### 4. Every public section, in bulk\n\n```json\n{\n  \"profileUrls\": [\"reidhoffman\", \"satyanadella\", \"williamhgates\"],\n  \"maxProfiles\": 3,\n  \"fullSections\": true\n}\n```\n\n## Input parameters\n\n| Parameter | Required | Default | Description |\n| --- | --- | --- | --- |\n| `profileUrls` | Yes | - | LinkedIn profile URLs, `/in/...` paths, or usernames. Up to 1,000 per run. |\n| `maxProfiles` | No | `5` | Maximum number of profiles to process from the input list. |\n| `maxConcurrency` | No | `10` | Profiles resolved in parallel; maximum `10`. |\n| `fullSections` | No | `false` | Return every public profile section under `sections`, not just the summary. |\n| `proxyConfiguration` | No | Proxy fallback | Direct lookup and free search run first. The configured proxy is used only after those paths fail. |\n| `linkedinCookies` | No | - | Optional LinkedIn session cookies you provide to access profile data that requires being logged in. Only use cookies from an account you own. |\n| `useFallbacks` | No | `true` | Whether to try alternate methods automatically if the primary method doesn't return data. |\n| `preferFullProfile` | No | `false` | Try a deeper profile lookup before accepting a partial search result. |\n| `usePremiumFallback` | No | `false` | Whether to use a higher-accuracy (potentially costlier) fallback method when the primary method fails. Off by default to avoid surprise costs. |\n\n## Sample output snippet\n\n```json\n{\n  \"name\": \"Reid Hoffman\",\n  \"headline\": \"Co-Founder, Executive Board Chair at Manas AI\",\n  \"experience\": [\n    {\n      \"position\": \"Co-Founder, Executive Board Chair\",\n      \"companyName\": \"Manas AI\",\n      \"startDate\": {\"year\": 2025}\n    }\n  ],\n  \"education\": [\n    {\"schoolName\": \"Stanford University\", \"degreeName\": \"BS\", \"fieldOfStudy\": \"Symbolic Systems\"}\n  ],\n  \"topSkills\": [\"CEOs\", \"Founding\", \"Venture Capital\"],\n  \"about\": \"Public profile summary text...\",\n  \"location\": {\"parsed\": {\"text\": \"Greater Seattle Area\"}},\n  \"followers_count\": 3000000,\n  \"profile_url\": \"https://www.linkedin.com/in/reidhoffman/\",\n  \"publicIdentifier\": \"reidhoffman\",\n  \"dataSource\": \"linkedin_direct\",\n  \"sections\": {\n    \"experience\": [\n      {\n        \"title\": \"Co-Founder, Executive Board Chair\",\n        \"subtitle\": \"Manas AI\",\n        \"date_range\": \"Jan 2025 - Present 1 year 9 months\",\n        \"description\": \"Manas AI leverages proprietary AI...\",\n        \"url\": \"https://www.linkedin.com/company/manas-ai\"\n      }\n    ],\n    \"publications\": [\n      {\"title\": \"Superagency\", \"subtitle\": \"Authors Equity\", \"date_range\": \"January 28, 2025\"}\n    ],\n    \"honors_and_awards\": [\n      {\"title\": \"Sigillum Magnum\", \"subtitle\": \"University of Bologna\", \"date_range\": \"Sep 2023\"}\n    ],\n    \"volunteering\": [\n      {\"title\": \"Chair, Board of Directors\", \"subtitle\": \"Opportunity@Work\", \"date_range\": \"Jun 2016 - Present\"}\n    ],\n    \"skills\": [{\"title\": \"CEOs\"}, {\"title\": \"Founding\"}]\n  }\n}\n```\n\n(`sections` shown here abbreviated; a rich profile returns 11+ sections.)\n\n## Use cases\n\n- **CRM enrichment**: update contact records with current title, company, location, headline, and canonical profile URL.\n- **Sales prospecting**: enrich LinkedIn URLs from search exports, conference lists, founder directories, or account research.\n- **Recruiting research**: summarize public candidate backgrounds before outreach or screening.\n- **Investor research**: profile founders, operators, and executive teams across a portfolio or market segment.\n- **Data pipelines**: normalize LinkedIn usernames and URLs into structured fields for downstream workflows.\n\n## Limitations\n\n- Only public profile data is returned. Restricted profiles may return limited or no data.\n- `fullSections` returns what LinkedIn renders publicly. Endorsement counts, connection-gated sections, and anything behind the login wall stay out of reach; a profile that hides a section publicly returns no key for it.\n- Sections are unavailable on rows recovered through a search-engine fallback path (check the `dataSource` field), because those paths never load the profile page.\n- Some fields are optional because LinkedIn profiles vary by user privacy settings and public visibility.\n- The actor does not create LinkedIn sessions, send messages, connect with users, or access private LinkedIn data.\n\n## FAQ\n\n### Do I need a LinkedIn account or cookies?\n\nNo. The actor uses public profile URLs and does not require a logged-in LinkedIn session.\n\n### What input formats work?\n\nFull URLs, `/in/...` paths, and plain usernames are accepted when they resolve to public LinkedIn profile pages.\n\n### Can I enrich profiles found through Google or another scraper?\n\nYes. If the result resolves to a public LinkedIn `/in/{username}` profile, it can be used as input.\n\n### How many profiles can I scrape in one run?\n\nThe actor supports batch input. Use `maxProfiles` to control how many profiles from your input list are processed in a run.\n\n### Is the data fresh?\n\nData is pulled at run time from public profile pages, subject to what LinkedIn makes publicly visible.\n\n## Support and custom builds\n\nNeed a custom LinkedIn enrichment flow, CRM mapper, webhook integration, or combined company-employee plus profile-enrichment actor? Contact Thirdwatch through Apify or visit [thirdwatch.dev](https://thirdwatch.dev) for custom builds.\n\nPairs well with [LinkedIn Company Employees Scraper](https://apify.com/thirdwatch/linkedin-company-employees-scraper?fpr=9m2cd6) to find profiles and [LinkedIn Jobs Scraper](https://apify.com/thirdwatch/linkedin-jobs-scraper?fpr=9m2cd6) to connect people data with hiring signals.\n\n## Use cases and recipes\n\nStep-by-step guides on [thirdwatch.dev/blog](https://thirdwatch.dev/blog):\n\n- [Build a Candidate Shortlist from LinkedIn Profiles (2026)](https://thirdwatch.dev/blog/build-candidate-shortlist-from-linkedin-profiles)\n- [Enrich Your CRM with LinkedIn Profile Data (2026 Guide)](https://thirdwatch.dev/blog/enrich-crm-with-linkedin-profile-data)\n- [Find Decision-Makers by Title and Company on LinkedIn (2026)](https://thirdwatch.dev/blog/find-decision-makers-by-title-and-company)\n- [Scrape LinkedIn Profiles Without Login at Scale (2026)](https://thirdwatch.dev/blog/scrape-linkedin-profiles-without-login)\n\nLast verified: 2026-10\n"
    },
    "buildNumber": "1.0.40",
    "imageDigest": "ced0335d732302e27f437f6fb29b26002b5dc5bb2575e095f6e147d2a9cfa366",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01740222222222222
    }
  }
}