{
  "data": {
    "id": "aecB97WmXsvcWoUe6",
    "actId": "ttqdbRiunfJaDA2lq",
    "userId": "zJXrBuLR5XKcwBDvL",
    "startedAt": "2026-10-13T20:26:26.905Z",
    "finishedAt": "2026-10-13T20:26:44.628Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 17634,
      "runTimeSecs": 17.634,
      "computeUnits": 0.019593333333333334,
      "imageSizeBytes": 579125760
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "tag": "latest",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Details Scraper input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"👤 LinkedIn profiles\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"Profile URLs or slugs, one per line — <code>https://www.linkedin.com/in/satyanadella</code> or just <code>satyanadella</code>. Profiles that do not exist or that LinkedIn hides from logged-out visitors come back as free error rows.\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"https://www.linkedin.com/in/jeffweiner08\",\n        \"https://www.linkedin.com/in/justinwelsh\"\n      ]\n    },\n    \"startUrls\": {\n      \"title\": \"📄 URLs from a file or sheet\",\n      \"type\": \"array\",\n      \"editor\": \"requestListSources\",\n      \"description\": \"For long lists: upload a file or link a Google Sheet (or any text / CSV URL) that contains LinkedIn URLs. Each link is routed by its kind.\"\n    },\n    \"findEmail\": {\n      \"title\": \"📧 Find the work e-mail ($0.008 instead of $0.0032)\",\n      \"type\": \"boolean\",\n      \"description\": \"Find each person's work e-mail — the company's website, the address layout it uses, a mail-server (MX) check and a confidence level. A row WITH an e-mail is billed as <i>Profile with e-mail</i>; a row without one stays a plain <i>Profile</i>.\",\n      \"default\": false,\n      \"sectionCaption\": \"Work e-mail\"\n    },\n    \"minConfidence\": {\n      \"title\": \"Minimum e-mail confidence\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"description\": \"Used only when the SMTP mailbox check is unavailable in a run — normally every address is mailbox-checked and only a verified one goes into <code>email</code>. An address below this level is not put into <code>email</code> (it goes to <code>emailGuess</code> and <code>alternatives</code>) and the row is billed as a plain profile. <b>confirmed</b> = published on the company's site; <b>high / medium</b> = the layout is seen on the site (pattern-confirmed); <b>low</b> = the most common layout, nothing confirms it (unverified-guess).\",\n      \"enum\": [\n        \"low\",\n        \"medium\",\n        \"high\",\n        \"confirmed\"\n      ],\n      \"default\": \"medium\",\n      \"prefill\": \"medium\"\n    },\n    \"companyOverride\": {\n      \"title\": \"🏢 Company override\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Use this company name or domain for everyone instead of what the profiles say — e.g. <code>hubspot.com</code> when the whole list works at one company.\"\n    },\n    \"candidatesPerPerson\": {\n      \"title\": \"Alternative addresses per person\",\n      \"type\": \"integer\",\n      \"description\": \"The best address goes into <code>email</code>, the runners-up into <code>alternatives</code>.\",\n      \"default\": 3,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"maxPagesPerCompany\": {\n      \"title\": \"Company web pages to read\",\n      \"type\": \"integer\",\n      \"description\": \"Home page plus contact / team / about pages, read to learn how the company writes its addresses.\",\n      \"default\": 4,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"pageTimeoutSecs\": {\n      \"title\": \"Company web page timeout (seconds)\",\n      \"type\": \"integer\",\n      \"description\": \"How long to wait for one company web page.\",\n      \"default\": 15,\n      \"minimum\": 5,\n      \"maximum\": 60\n    },\n    \"includePosts\": {\n      \"title\": \"📰 Add the person's latest posts (free)\",\n      \"type\": \"boolean\",\n      \"description\": \"The person's recent posts and articles that LinkedIn shows logged-out visitors, inside the same row. No extra charge.\",\n      \"default\": false,\n      \"sectionCaption\": \"Options\"\n    },\n    \"maxItems\": {\n      \"title\": \"💯 Maximum profiles per run\",\n      \"type\": \"integer\",\n      \"description\": \"A hard ceiling on the rows one run bills — profiles, companies or posts.\",\n      \"default\": 10000,\n      \"minimum\": 1,\n      \"maximum\": 1000000,\n      \"sectionCaption\": \"Limits\"\n    },\n    \"concurrency\": {\n      \"title\": \"Parallel pages\",\n      \"type\": \"integer\",\n      \"description\": \"How many LinkedIn pages to read at the same time. Keep it low — LinkedIn dislikes bursts.\",\n      \"default\": 3,\n      \"minimum\": 1,\n      \"maximum\": 10\n    }\n  }\n}",
    "readme": "**LinkedIn Profile Details Scraper** turns a list of LinkedIn profile URLs into a clean table, **without a login, cookies or an API key**: name, headline, **current company**, location, about, **followers and connections**, education, recommendations, certifications, languages, website and photo — plus job title and full experience whenever LinkedIn shows them to logged-out visitors. **$3.2 per 1,000 profiles**, hidden profiles free.\n\n## Tested head-to-head — 9 October 2026\n\n![LinkedIn scrapers tested head-to-head: this Actor charges $3.2 per 1,000 profiles, $3.2 per 1,000 companies and $1.6 per 1,000 posts with no start fee, against $4.00–5.00, $4.01 and $2.00 for the most-used LinkedIn scrapers](https://api.apify.com/v2/key-value-stores/tZJ3TnhQJ1jqUQVXq/records/linkedin-tested-2026-10-09.png)\n\nThe same requests went to this Actor and to the most-used LinkedIn scrapers of the same kind on the Apify Store: 10 public profiles, 6 company pages (Microsoft, Stripe, HubSpot, OpenAI, Canva, Apify), the 10 latest posts of 3 companies and of 2 people, and the work e-mail of 10 people (founders and executives).\n\n| | This Actor | The most-used others |\n|---|---|---|\n| Price per 1,000 profiles | **$3.2** | $4.00–5.00 |\n| Price per 1,000 company pages | **$3.2** | $4.01–4.28 |\n| Price per 1,000 posts | **$1.6** | $1.42–2.00 on these runs (one charges $0.01 per run plus $0.001 per post) |\n| Start fee per run | **none** | none to $0.01 |\n| Company page: fields filled (6 companies) | **33**, incl. street address, office locations, affiliated pages | 19–32 |\n| Company posts: 30 asked from 3 pages | **30 in 4.7 s**, reposts included | 24–30 in 6.2–13.9 s |\n| Person posts: 20 asked from 2 people | **20**, articles included | 20 |\n| Profiles: 10 asked | **10 of 10** in 31 s | 10 of 10 in 26 s |\n| Work e-mail of 10 people (9 October 2026) | **7 of 10 mailbox-verified** (SMTP check); 3 on catch-all domains returned unverified and not charged as e-mails — **$8 per 1,000 verified e-mails** | the leader: 8 of 10 verified + 2 catch-all, all 10 billed at $10 per 1,000 |\n\nWhat a logged-out visitor cannot see stays out of reach: 5 of the 10 test people limit their public profile, so for them LinkedIn shows only the headline, current company, location and followers — leaders that read LinkedIn with an account return full experience and skills there.\n\n## What is LinkedIn Profile Details Scraper?\n\nA **bulk LinkedIn profile scraper** for recruiters, sales teams and researchers who already have profile links — from a CRM, a Google Sheet, a search export — and need the data behind them. Paste the URLs (or slugs like `satyanadella`), press Start, export to Excel, CSV or JSON, or call it as a **LinkedIn profile API** from your code. No official LinkedIn API access is needed and **your own LinkedIn account is never used**.\n\nNeed the person's work e-mail too? Switch on **📧 Find the work e-mail** — the same row then carries the work e-mail verified by an SMTP mailbox check (see below), or use [LinkedIn Profile Email Finder](https://apify.com/blueskyscraper/linkedin-profile-email-finder).\n\n## What data can LinkedIn Profile Details Scraper extract?\n\n| Field | Example |\n|---|---|\n| `fullName` | Satya Nadella |\n| `headline` | Chairman and CEO at Microsoft |\n| `title` | Chairman and CEO |\n| `company` / `companyLinkedinUrl` | Microsoft / linkedin.com/company/microsoft |\n| `location` / `country` | Redmond, Washington, United States / US |\n| `followers` / `connections` | 12199041 / 500+ |\n| `about` | As chairman and CEO of Microsoft, I define my mission… |\n| `experience` | title, company, start, end, current, duration |\n| `education` | The University of Chicago Booth School of Business, 1994–1996 |\n| `certifications`, `languages`, `volunteering`, `publications`, `honorsAndAwards`, `organizations`, `skills`, `recommendations` | as listed on the public profile |\n| `website`, `imageUrl`, `linkedinUrl`, `slug` | links |\n\n### How often each profile field is filled\n\nLinkedIn shows logged-out visitors a shorter profile than members see. Measured on 55 mixed profiles (3 October 2026):\n\n| Filled in | Profile fields |\n|---|---|\n| **Every profile** | `fullName`, `headline` (as in the page title — for 7 in 10 people that is their current company), `location`, `country`, `followers`, `connections`, `imageUrl`, `linkedinUrl` |\n| **Most profiles** | `company` and `companyLinkedinUrl` (9 in 10; with several current jobs — the main one, see `companyChosenBy`; the rest in `otherCurrentCompanies`), `about` (3 in 4), `recommendations` (7 in 10), `education` (6 in 10), `website` (5 in 10) |\n| **Some profiles** | `certifications`, `honorsAndAwards`, `languages`, `volunteering`, `publications` (1 in 4 to 1 in 3) |\n| **Few profiles** | job `title` and full `experience` with titles and dates (about 1 in 5 — LinkedIn masks past employers for logged-out visitors), `skills` (about 1 in 8) |\n\nAdded 5 October 2026 (checked on 7 public profiles): every role in the Experience section, including each role inside a company group (one long career went from 11 to 24 roles), with `companyLogo` and `location`; every school in the Education section with `degree` and `fieldOfStudy` (schools without dates used to be missing); `city`, `region`, `countryCode`; `coverImageUrl`, `memberId`, `profileUrn`; `languageProficiencies`, `courses`, `projects`, `testScores`, `coursesTaught` when the profile shows those sections. The exact connection count, Featured, interests and open-to-work / hiring flags are not shown to logged-out visitors, so they are not returned.\n\nAdded 5 October 2026 (round 2): `similarProfiles` — the \"Other similar profiles\" side rail of the public profile (LinkedIn's \"People also viewed\" as logged-out visitors see it): name, headline as the card shows it (usually the current company), location, followers, profile URL and photo of each person, 9–20 per profile (10 of 11 checked profiles show it). `sameNameProfiles` — \"Others named …\", when LinkedIn shows that rail (1 of 11). Same page, no extra request or charge.\n\nAn empty field means LinkedIn did not show it, not that the run failed.\n\n## 💰 How much does it cost to scrape LinkedIn profiles?\n\n| Row | Price |\n|---|---|\n| **Profile** | $0.0032 — $3.2 per 1,000 |\n| **Profile with e-mail** (only with 📧 on, and only when the mailbox is verified by an SMTP check; catch-all domains are returned unverified and not charged as an e-mail) | $0.008 — $8 per 1,000 |\n\nNo start fee, proxies included. Profiles that do not exist or that LinkedIn hides from logged-out visitors are **free error rows**. Apify's free plan ($5 of monthly credit) covers about **1,500 profiles a month**. Paid Apify plans get tiered discounts automatically.\n\n## How to scrape LinkedIn profiles\n\n1. Click **Try for free**.\n2. Paste profile URLs or slugs into **👤 LinkedIn profiles**, one per line — or link a Google Sheet / CSV in **📄 URLs from a file or sheet**.\n3. Optional: **📰 Add the person's latest posts** (free) or **📧 Find the work e-mail**.\n4. Click **Start** and export the table.\n\n## ⬇️ Input\n\n```json\n{\n    \"profileUrls\": [\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"https://www.linkedin.com/in/jeffweiner08\",\n        \"justinwelsh\"\n    ],\n    \"includePosts\": false,\n    \"findEmail\": false\n}\n```\n\n## ⬆️ Output\n\n```json\n{\n    \"type\": \"profile\",\n    \"fullName\": \"Satya Nadella\",\n    \"headline\": \"Chairman and CEO at Microsoft\",\n    \"title\": \"Chairman and CEO\",\n    \"company\": \"Microsoft\",\n    \"companyLinkedinUrl\": \"https://www.linkedin.com/company/microsoft\",\n    \"location\": \"Redmond, Washington, United States\",\n    \"country\": \"US\",\n    \"followers\": 12199041,\n    \"connections\": \"500+\",\n    \"about\": \"As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person and every organization on the planet to achieve more.\",\n    \"experience\": [\n        { \"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"startDate\": \"Feb 2014\", \"endDate\": null, \"current\": true, \"duration\": \"12 years 9 months\" },\n        { \"title\": \"Board Member\", \"company\": \"Starbucks\", \"startDate\": \"2017\", \"endDate\": \"2024\", \"current\": false, \"duration\": \"7 years\" }\n    ],\n    \"education\": [{ \"school\": \"The University of Chicago Booth School of Business\", \"startDate\": \"1994\", \"endDate\": \"1996\" }],\n    \"linkedinUrl\": \"https://www.linkedin.com/in/satyanadella\"\n}\n```\n\nOne row per profile. The **Output** tab has a *Profiles* view, a *Work e-mails* view and a view of the inputs that could not be read.\n\n## What LinkedIn shows without a login\n\nThis Actor reads the **public pages LinkedIn serves to logged-out visitors and search engines** — no account, no cookies, nothing that could get an account banned. That decides what is possible:\n\n- **Hidden profiles.** Some people hide their profile from logged-out visitors; LinkedIn then answers with a login wall or HTTP 999 for that profile from every address. On mixed lists about **1 in 4 or 5** profiles is refused on the first route. Those get **one more try through an unblocking route, paid only from your run's own margin** (never from a subsidy that would have to be priced in). Whatever still stays hidden comes back as a **free error row** saying so.\n- **Recent posts only.** A logged-out visitor sees a company's **~10 newest posts** (median 9 on a 20-company check, 2 of 20 showed none) and a person's **~5–10 newest posts, quote-shares and reposts** **plus up to 10 articles**. A page with fewer posts than you asked for adds one free `notice` row saying how many LinkedIn showed. There is no paging back to older posts without a login — use the **Only posts not delivered before** switch on a daily schedule to build a full history from now on.\n- **Shortened surnames.** A few profiles show the surname as an initial (\"Diego C.\") to logged-out visitors; the row says so.\n- **No private data.** Phone numbers, connections lists and contact info behind the login are not read.\n\nPages that do not exist (HTTP 404) are free error rows too. A run in which LinkedIn refuses everything ends with error rows and no charge.\n\n## Use cases for LinkedIn profile data\n\n### Enrich a lead list\nAdd current company, location and follower count to the LinkedIn links already in your CRM.\n\n### Recruiting\nScreen candidates' about text, education, certifications and recommendations in one sheet.\n\n### Influencer and creator research\nCompare follower counts, headlines and badges of creators in a niche.\n\n### Keep a database fresh\nRe-run the same list monthly and see who changed company.\n\n## Integrations and API\n\nUse **LinkedIn Profile Details Scraper** like any Apify Actor:\n\n- **API**: start a run and read the dataset over HTTP — see the **API** tab for ready-made calls.\n- **Python**:\n\n```python\nfrom apify_client import ApifyClient\n\nclient = ApifyClient(\"<YOUR_APIFY_TOKEN>\")\nrun = client.actor(\"blueskyscraper/linkedin-profile-details-scraper\").call(run_input={\"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\", \"https://www.linkedin.com/in/jeffweiner08\", \"https://www.linkedin.com/in/justinwelsh\"]})\nfor row in client.dataset(run[\"defaultDatasetId\"]).iterate_items():\n    print(row)\n```\n\n- **JavaScript**:\n\n```javascript\nimport { ApifyClient } from 'apify-client';\n\nconst client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });\nconst run = await client.actor('blueskyscraper/linkedin-profile-details-scraper').call({\"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\", \"https://www.linkedin.com/in/jeffweiner08\", \"https://www.linkedin.com/in/justinwelsh\"]});\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n```\n\n- **No-code**: Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks through Apify integrations — send every finished run's rows wherever your team works.\n- **AI agents (MCP)**: add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server (`https://mcp.apify.com`) and ask for LinkedIn data in plain words.\n- **Schedules**: run it every day or week from the **Schedules** page; combine with **Maximum results per run** to cap the bill.\n\n## ❓ FAQ\n\n### Is it legal to scrape LinkedIn?\nThe Actor reads only pages that LinkedIn shows to anyone without an account. Scraping public data is generally lawful, but names, job titles and e-mails are **personal data** under laws such as the GDPR and CCPA: have a lawful reason to process them, keep them safe, and honour opt-outs. When in doubt, ask a lawyer.\n\n### Do I need a LinkedIn account, cookies or a proxy?\nNo. Nothing to log in to, no cookies to paste, no proxy to set up — your own LinkedIn account is never touched, so it cannot be restricted. Proxies are included in the price.\n\n### Can I use it with the Apify API?\nYes — every run can be started and read over the Apify API, from Python, JavaScript or any HTTP client. See **Integrations and API** above.\n\n### Can I use it through an MCP server?\nYes. Add it to the Apify MCP server (`https://mcp.apify.com`) and your AI assistant can call it directly.\n\n### Can I integrate it with other apps?\nYes: Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks through Apify integrations.\n\n### Why did some pages come back as error rows?\nEither the page does not exist (404), or LinkedIn hides it from logged-out visitors. Both are **free** — you pay only for rows with data. The `error` field says which.\n\n### Do I pay for errors, filtered-out posts or the start of a run?\nNo. There is no start fee; error rows and posts removed by your filters are never billed. **Maximum results per run** and Apify's **Max cost per run** are hard ceilings — when the cost limit is reached, the run stops by itself with everything written already paid for.\n\n### Why is the job title empty for many profiles?\nLinkedIn shows the job title and dated experience to logged-out visitors for only about 1 in 5 profiles; for the rest it shows the current company, which is in `company`. The `headline` often carries the role as well.\n\n### Can I scrape thousands of profiles?\nYes. A run reads about **10–15 profiles a minute** (LinkedIn dislikes bursts, so the pace is deliberate) and writes each row as soon as it is read. With the default one-hour run timeout that is several hundred profiles; for longer lists raise the timeout in the run options or split the list. Profiles not reached before the timeout are listed in the run's `NOT_ATTEMPTED` record and are not billed.\n\n## Your feedback\n\nSomething missing or wrong? Open an issue on the **Issues** tab — we read every one.\n\n## You might also like\n\n| Actor | What it does |\n|---|---|\n| [LinkedIn Scraper](https://apify.com/blueskyscraper/linkedin-scraper) | Profiles, work e-mails, company pages and latest posts in one Actor |\n| [LinkedIn Profile Email Finder](https://apify.com/blueskyscraper/linkedin-profile-email-finder) | Work e-mail for each profile, with layout evidence and confidence |\n| [LinkedIn Company Details Scraper](https://apify.com/blueskyscraper/linkedin-company-details-scraper) | Company pages: website, industry, size, followers, address |\n| [LinkedIn Company Posts Scraper](https://apify.com/blueskyscraper/linkedin-company-posts-scraper) | Latest posts of company pages with likes and comments |\n| [LinkedIn Profile Posts Scraper](https://apify.com/blueskyscraper/linkedin-profile-posts-scraper) | Latest posts and articles of people |\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-details-scraper",
      "title": "LinkedIn Profile Details Scraper",
      "description": "Scrape LinkedIn profile details in bulk from profile URLs, no login or cookies: headline, current title and company, location, about, followers, experience with dates, education, skills, certifications and languages. One row per profile; hidden profiles are free error rows.",
      "version": "0.1",
      "defaultMemoryMbytes": "n = get(input, 'profileUrls.length', 0) + get(input, 'companyUrls.length', 0) + get(input, 'startUrls.length', 0) + get(input, 'postUrls.length', 0); k = max(0, get(input, 'concurrency', 3) - 3) ? 2 : 1; (get(input, 'findEmail', false) ? 512 + 512 * min(1, max(0, n - 10)) : 256 + 256 * min(1, max(0, n - 20))) * k",
      "maxMemoryMbytes": 4096,
      "dockerfile": "./Dockerfile",
      "input": {
        "title": "LinkedIn Profile Details Scraper input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "👤 LinkedIn profiles",
            "type": "array",
            "editor": "stringList",
            "description": "Profile URLs or slugs, one per line — <code>https://www.linkedin.com/in/satyanadella</code> or just <code>satyanadella</code>. Profiles that do not exist or that LinkedIn hides from logged-out visitors come back as free error rows.",
            "prefill": [
              "https://www.linkedin.com/in/satyanadella",
              "https://www.linkedin.com/in/jeffweiner08",
              "https://www.linkedin.com/in/justinwelsh"
            ]
          },
          "startUrls": {
            "title": "📄 URLs from a file or sheet",
            "type": "array",
            "editor": "requestListSources",
            "description": "For long lists: upload a file or link a Google Sheet (or any text / CSV URL) that contains LinkedIn URLs. Each link is routed by its kind."
          },
          "findEmail": {
            "title": "📧 Find the work e-mail ($0.008 instead of $0.0032)",
            "type": "boolean",
            "description": "Find each person's work e-mail — the company's website, the address layout it uses, a mail-server (MX) check and a confidence level. A row WITH an e-mail is billed as <i>Profile with e-mail</i>; a row without one stays a plain <i>Profile</i>.",
            "default": false,
            "sectionCaption": "Work e-mail"
          },
          "minConfidence": {
            "title": "Minimum e-mail confidence",
            "type": "string",
            "editor": "select",
            "description": "Used only when the SMTP mailbox check is unavailable in a run — normally every address is mailbox-checked and only a verified one goes into <code>email</code>. An address below this level is not put into <code>email</code> (it goes to <code>emailGuess</code> and <code>alternatives</code>) and the row is billed as a plain profile. <b>confirmed</b> = published on the company's site; <b>high / medium</b> = the layout is seen on the site (pattern-confirmed); <b>low</b> = the most common layout, nothing confirms it (unverified-guess).",
            "enum": [
              "low",
              "medium",
              "high",
              "confirmed"
            ],
            "default": "medium",
            "prefill": "medium"
          },
          "companyOverride": {
            "title": "🏢 Company override",
            "type": "string",
            "editor": "textfield",
            "description": "Use this company name or domain for everyone instead of what the profiles say — e.g. <code>hubspot.com</code> when the whole list works at one company."
          },
          "candidatesPerPerson": {
            "title": "Alternative addresses per person",
            "type": "integer",
            "description": "The best address goes into <code>email</code>, the runners-up into <code>alternatives</code>.",
            "default": 3,
            "minimum": 1,
            "maximum": 10
          },
          "maxPagesPerCompany": {
            "title": "Company web pages to read",
            "type": "integer",
            "description": "Home page plus contact / team / about pages, read to learn how the company writes its addresses.",
            "default": 4,
            "minimum": 1,
            "maximum": 10
          },
          "pageTimeoutSecs": {
            "title": "Company web page timeout (seconds)",
            "type": "integer",
            "description": "How long to wait for one company web page.",
            "default": 15,
            "minimum": 5,
            "maximum": 60
          },
          "includePosts": {
            "title": "📰 Add the person's latest posts (free)",
            "type": "boolean",
            "description": "The person's recent posts and articles that LinkedIn shows logged-out visitors, inside the same row. No extra charge.",
            "default": false,
            "sectionCaption": "Options"
          },
          "maxItems": {
            "title": "💯 Maximum profiles per run",
            "type": "integer",
            "description": "A hard ceiling on the rows one run bills — profiles, companies or posts.",
            "default": 10000,
            "minimum": 1,
            "maximum": 1000000,
            "sectionCaption": "Limits"
          },
          "concurrency": {
            "title": "Parallel pages",
            "type": "integer",
            "description": "How many LinkedIn pages to read at the same time. Keep it low — LinkedIn dislikes bursts.",
            "default": 3,
            "minimum": 1,
            "maximum": 10
          }
        }
      },
      "output": {
        "$schema": "https://apify-projects.github.io/actor-json-schemas/output.json",
        "actorOutputSchemaVersion": 1,
        "title": "Output of LinkedIn Profile Details Scraper",
        "properties": {
          "rows": {
            "type": "string",
            "title": "Rows (JSON)",
            "description": "One row per profile, company or post; free error rows explain pages that could not be read.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "summary": {
            "type": "string",
            "title": "Run summary",
            "description": "Counts, routes and proxy use of the run.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/SUMMARY"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "type": "object",
            "properties": {
              "type": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Row type: profile, company, post, notice or error. Notice and error rows are free.",
                "example": "profile"
              },
              "fullName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Person's name.",
                "example": "Satya Nadella"
              },
              "firstName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "First name.",
                "example": "Satya"
              },
              "lastName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Last name.",
                "example": "Nadella"
              },
              "headline": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Profile headline, or an article's headline in post rows.",
                "example": "Chairman and CEO at Microsoft"
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Current job title.",
                "example": "Chairman and CEO"
              },
              "company": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Current company.",
                "example": "Microsoft"
              },
              "companyLinkedinUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Current company's LinkedIn page.",
                "example": "https://www.linkedin.com/company/microsoft"
              },
              "location": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Location.",
                "example": "Redmond, Washington, United States"
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Country code.",
                "example": "US"
              },
              "city": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "City."
              },
              "region": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Region."
              },
              "countryCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ISO two-letter country code of the profile location.",
                "example": "US"
              },
              "about": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "About section (profiles) — see description for companies."
              },
              "followers": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Followers.",
                "example": 11000000
              },
              "connections": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Connections as shown, e.g. 500+.",
                "example": "500+"
              },
              "badges": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Creator / Top Voice badges."
              },
              "website": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Website on the profile or company page."
              },
              "experience": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Every role in the Experience section, including each role inside a company group: title, company, companyLinkedinUrl, companyLogo, location, employmentType (when shown), startDate, endDate, current, duration, description.",
                "example": []
              },
              "currentPositions": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Current positions: company, companyLinkedinUrl, companyLogo, title, location, employmentType, startDate, endDate, current.",
                "example": []
              },
              "education": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Every school in the Education section: school, schoolLinkedinUrl, schoolLogo, degree, fieldOfStudy, grade, activities, description, startDate, endDate.",
                "example": []
              },
              "languages": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Language names (see languageProficiencies).",
                "example": []
              },
              "awards": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Awards.",
                "example": []
              },
              "certifications": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Licenses and certifications: name, issuer, issuedAt, expiresAt, url, credentialId, issuerLinkedinUrl, logoUrl.",
                "example": []
              },
              "volunteering": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Volunteer roles.",
                "example": []
              },
              "publications": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Publications.",
                "example": []
              },
              "honorsAndAwards": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Honors and awards.",
                "example": []
              },
              "organizations": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Organizations.",
                "example": []
              },
              "skills": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Skills listed on the public profile.",
                "example": []
              },
              "recommendations": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Recommendations received: author, profile link, text.",
                "example": []
              },
              "languageProficiencies": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Languages with proficiency: [{name, proficiency}].",
                "example": []
              },
              "courses": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Courses the person lists: [{name, number}].",
                "example": []
              },
              "projects": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Projects: [{title, url, startDate, endDate, current, description}].",
                "example": []
              },
              "testScores": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Test scores: [{name, score, date, description}].",
                "example": []
              },
              "coursesTaught": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "LinkedIn Learning courses the person teaches: [{title, url, imageUrl, duration, viewers}].",
                "example": []
              },
              "similarProfiles": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "\"Other similar profiles\" from the public profile's side rail (LinkedIn's \"People also viewed\" as logged-out visitors see it, usually 10–20): [{name, headline (as the card shows it, usually the current company), location, followers, linkedinUrl, imageUrl}].",
                "example": []
              },
              "sameNameProfiles": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "\"Others named …\" from the side rail, when LinkedIn shows it: [{name, headline, location, followers, linkedinUrl, imageUrl}].",
                "example": []
              },
              "imageUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Profile photo, or the post's first image."
              },
              "coverImageUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Profile or company cover (background) image."
              },
              "memberId": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn member id from the public page.",
                "example": "19186432"
              },
              "profileUrn": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn member URN.",
                "example": "urn:li:member:19186432"
              },
              "linkedinUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn URL of the profile or company page.",
                "example": "https://www.linkedin.com/in/satyanadella"
              },
              "slug": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Slug from the URL.",
                "example": "satyanadella"
              },
              "latestPosts": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Latest posts inside the profile or company row (optional, free).",
                "example": []
              },
              "articles": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Articles inside the profile row (optional, free).",
                "example": []
              },
              "email": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Work e-mail whose mailbox was confirmed by an SMTP check (emailVerified true); only these rows are billed as Profile with e-mail. If the mailbox check is unavailable in a run, the old rule applies: filled at or above your minimum confidence.",
                "example": "kipp.bodnar@hubspot.com"
              },
              "emailGuess": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The best address when it is NOT put into email (catch-all domain, mailbox not confirmed, below your minimum confidence, or the domain failed the DNS check). Not billed as an e-mail."
              },
              "confidence": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "verified (mailbox confirmed), confirmed (published on the company site), high, medium, low or unusable.",
                "example": "verified"
              },
              "emailStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "What was really checked: mailbox-verified; catch-all (the server accepts any address, nothing can be confirmed), mailbox-unknown, mailbox-invalid; without a mailbox check: found-on-website, pattern-confirmed, unverified-guess; undeliverable / risky / unknown when the mail domain fails the DNS check.",
                "example": "mailbox-verified"
              },
              "emailVerified": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "true — the mailbox exists (SMTP check); false — checked but not confirmed; null — not checked.",
                "example": true
              },
              "emailCatchAll": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "The company's mail server accepts any address (catch-all): no address there can be confirmed.",
                "example": false
              },
              "emailVerification": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The mailbox check: status (safe, catch_all, unknown, invalid…), score, checkedAt, checks made, tried [{email, status}]."
              },
              "emailDomainStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "DNS verdict for the mail domain: accepts-mail, risky, undeliverable or unknown.",
                "example": "accepts-mail"
              },
              "emailReason": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Why an address was not delivered."
              },
              "domain": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company website domain the address is built on.",
                "example": "hubspot.com"
              },
              "domainSource": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "How the domain was confirmed: input, parent, linkedin, directory or site.",
                "example": "linkedin"
              },
              "domainEvidence": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "One-line reason the domain is the company's."
              },
              "unconfirmedDomains": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Domains found that could not be confirmed as the company's — no address was built on them.",
                "example": []
              },
              "companyWebsiteName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company name as its website says it."
              },
              "emailPattern": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Address layout used, e.g. first.last.",
                "example": "first.last"
              },
              "emailPatternSource": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "site when learnt from the company's website, else default.",
                "example": "default"
              },
              "foundOnSite": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "The address itself is published on the company's site.",
                "example": false
              },
              "alternatives": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Runner-up addresses.",
                "example": []
              },
              "patternEvidence": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Addresses on the company's site that show the layout.",
                "example": []
              },
              "patternEvidenceCount": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "How many such addresses.",
                "example": 0
              },
              "emailProvider": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Mail provider (from MX).",
                "example": "Google Workspace"
              },
              "emailMxHost": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "MX host."
              },
              "emailIsRole": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Role address (info@, sales@…).",
                "example": false
              },
              "emailIsFree": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Free mailbox domain.",
                "example": false
              },
              "emailIsDisposable": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Disposable domain.",
                "example": false
              },
              "summary": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "One line on the e-mail and on how the row was billed."
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company name.",
                "example": "Stripe"
              },
              "pageKind": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "company, school or showcase.",
                "example": "company"
              },
              "tagline": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company tagline.",
                "example": "Help increase the GDP of the internet."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company about text."
              },
              "industry": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Industry.",
                "example": "Technology, Information and Internet"
              },
              "companySize": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Size band as LinkedIn shows it.",
                "example": "5,001-10,000 employees"
              },
              "companySizeMin": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Size band, lower bound.",
                "example": 5001
              },
              "companySizeMax": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Size band, upper bound.",
                "example": 10000
              },
              "employeesOnLinkedIn": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Members who list the company as employer.",
                "example": 12000
              },
              "headquarters": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Headquarters.",
                "example": "South San Francisco, California"
              },
              "streetAddress": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Street."
              },
              "postalCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Postal code."
              },
              "companyType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Privately held, public company…",
                "example": "Privately Held"
              },
              "founded": {
                "type": [
                  "number",
                  "string",
                  "null"
                ],
                "description": "Year founded.",
                "example": 2010
              },
              "specialties": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Specialties.",
                "example": []
              },
              "locations": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Office addresses.",
                "example": []
              },
              "logoUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Logo."
              },
              "similarCompanies": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Similar pages: name, linkedinUrl, industry, location, logoUrl.",
                "example": []
              },
              "companyId": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn numeric company id.",
                "example": "2135371"
              },
              "affiliatedPages": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Affiliated pages (subsidiaries, showcase pages): name, linkedinUrl, industry, location, logoUrl.",
                "example": []
              },
              "jobsUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The page's \"See jobs\" link — LinkedIn job search filtered to this company.",
                "example": "https://www.linkedin.com/jobs/stripe-jobs-worldwide?f_C=2135371"
              },
              "latestPostAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Date of the newest post (companies)."
              },
              "postType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "post or article (both billed as a post).",
                "example": "post"
              },
              "postUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Post or article URL."
              },
              "activityId": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn activity id — dedupe key (posts).",
                "example": "7511095253190246400"
              },
              "publishedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Published (ISO 8601).",
                "example": "2026-09-30T16:10:57.761Z"
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Post text."
              },
              "likes": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Likes (reactions).",
                "example": 926
              },
              "comments": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Comments on the post (same as commentsCount; kept for compatibility).",
                "example": 31
              },
              "commentsCount": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Comments on the post, as the public card shows them.",
                "example": 31
              },
              "reactionsCount": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Total reactions of all types (the same number as likes).",
                "example": 926
              },
              "topReactionTypes": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Most frequent reaction types on the card, e.g. LIKE, PRAISE (types only, no per-type counts for logged-out visitors).",
                "example": []
              },
              "images": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Images of the post.",
                "example": []
              },
              "videoUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Post video (MP4, best quality on the card; the link expires after a while). Company-page posts."
              },
              "videoThumbnail": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Video cover image."
              },
              "documentTitle": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Title of an attached document / carousel."
              },
              "documentUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Document manifest URL (pages as images; expires after a while)."
              },
              "documentPageCount": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Pages in the attached document."
              },
              "articleTitle": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Title of the shared link card, or of the LinkedIn article itself."
              },
              "articleUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "URL of the shared link card, or of the LinkedIn article itself."
              },
              "articleSubtitle": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Link card subtitle (usually the site or publisher)."
              },
              "hashtags": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Hashtags in the post text, without #.",
                "example": []
              },
              "mentions": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "People and companies tagged in the text: name, linkedinUrl, type.",
                "example": []
              },
              "links": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Other links in the post text.",
                "example": []
              },
              "authorHeadline": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Author's headline as shown on the post (people)."
              },
              "authorImageUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Author's photo or logo."
              },
              "isRepost": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "true when the source page reposted someone else's post; author fields are then the original author.",
                "example": false
              },
              "repostedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the source page reposted it (ISO 8601)."
              },
              "repostedBy": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Who reposted it (the source page)."
              },
              "repostedByUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn URL of who reposted it."
              },
              "originalActivityId": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Activity id of the original post of a repost (activityId is the repost's own id)."
              },
              "quotedPost": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The post a quote-share comments on: postUrl, activityId, publishedAt, authorName, authorUrl, authorHeadline, text."
              },
              "shareUrn": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "LinkedIn share / ugcPost URN."
              },
              "topComments": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "Top comments a logged-out visitor sees under the post (LinkedIn shows ~8–10, not all): commentId, commentUrn, commentUrl, authorName, authorUrl, authorType, authorHeadline (rarely shown), authorImageUrl, text, images, publishedAt, publishedAgo, likes, isReply. Always filled for single post URLs; for posts from pages only with includeComments (else null)."
              },
              "authorName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Author.",
                "example": "Stripe"
              },
              "authorUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Author page."
              },
              "authorType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "company or person.",
                "example": "company"
              },
              "sourceUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Page the post was read from (the post URL itself for a single post URL).",
                "example": "https://www.linkedin.com/company/stripe"
              },
              "sourceType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "company, person, or post (a single post URL).",
                "example": "company"
              },
              "sourceName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company or person name.",
                "example": "Stripe"
              },
              "sourceHeadline": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Person's headline or company tagline."
              },
              "sourceFollowers": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Followers of the company or person.",
                "example": 1746338
              },
              "message": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Notice rows: why a page gave fewer posts than \"Maximum posts per page\"."
              },
              "postsOnPage": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Notice rows: posts LinkedIn showed on the page to a logged-out visitor."
              },
              "postsDelivered": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Notice rows: posts delivered from the page."
              },
              "postsFilteredOut": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Notice rows: posts skipped by your settings (reposts, articles, date, likes, already delivered)."
              },
              "maxPostsPerSource": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Notice rows: the maximum you asked for."
              },
              "input": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The input value an error row is about."
              },
              "error": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Why a page or input could not be read (error rows only, free)."
              },
              "scrapedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the row was made (ISO 8601).",
                "example": "2026-10-03T08:00:00.000Z"
              }
            }
          },
          "views": {
            "profiles": {
              "title": "Profiles",
              "transformation": {
                "fields": [
                  "fullName",
                  "headline",
                  "title",
                  "company",
                  "location",
                  "followers",
                  "connections",
                  "experience",
                  "education",
                  "skills",
                  "linkedinUrl",
                  "imageUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "fullName": {
                    "label": "Full name"
                  },
                  "headline": {
                    "label": "Headline"
                  },
                  "title": {
                    "label": "Title"
                  },
                  "company": {
                    "label": "Company"
                  },
                  "location": {
                    "label": "Location"
                  },
                  "followers": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "connections": {
                    "label": "Connections"
                  },
                  "experience": {
                    "label": "Experience",
                    "format": "array"
                  },
                  "education": {
                    "label": "Education",
                    "format": "array"
                  },
                  "skills": {
                    "label": "Skills",
                    "format": "array"
                  },
                  "linkedinUrl": {
                    "label": "Linkedin url",
                    "format": "link"
                  },
                  "imageUrl": {
                    "label": "Image url",
                    "format": "image"
                  }
                }
              }
            },
            "emails": {
              "title": "Work e-mails",
              "transformation": {
                "fields": [
                  "fullName",
                  "title",
                  "company",
                  "email",
                  "emailVerified",
                  "emailGuess",
                  "confidence",
                  "emailStatus",
                  "emailCatchAll",
                  "domain",
                  "alternatives",
                  "linkedinUrl",
                  "summary"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "fullName": {
                    "label": "Full name"
                  },
                  "title": {
                    "label": "Title"
                  },
                  "company": {
                    "label": "Company"
                  },
                  "email": {
                    "label": "Email"
                  },
                  "emailVerified": {
                    "label": "Email verified",
                    "format": "boolean"
                  },
                  "emailGuess": {
                    "label": "Email guess"
                  },
                  "confidence": {
                    "label": "Confidence"
                  },
                  "emailStatus": {
                    "label": "Email status"
                  },
                  "emailCatchAll": {
                    "label": "Email catch all",
                    "format": "boolean"
                  },
                  "domain": {
                    "label": "Domain"
                  },
                  "alternatives": {
                    "label": "Alternatives",
                    "format": "array"
                  },
                  "linkedinUrl": {
                    "label": "Linkedin url",
                    "format": "link"
                  },
                  "summary": {
                    "label": "Summary"
                  }
                }
              }
            },
            "errors": {
              "title": "Inputs that could not be read",
              "transformation": {
                "fields": [
                  "type",
                  "linkedinUrl",
                  "input",
                  "error",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "type": {
                    "label": "Type"
                  },
                  "linkedinUrl": {
                    "label": "Linkedin url",
                    "format": "link"
                  },
                  "input": {
                    "label": "Input"
                  },
                  "error": {
                    "label": "Error"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "**LinkedIn Profile Details Scraper** turns a list of LinkedIn profile URLs into a clean table, **without a login, cookies or an API key**: name, headline, **current company**, location, about, **followers and connections**, education, recommendations, certifications, languages, website and photo — plus job title and full experience whenever LinkedIn shows them to logged-out visitors. **$3.2 per 1,000 profiles**, hidden profiles free.\n\n## Tested head-to-head — 9 October 2026\n\n![LinkedIn scrapers tested head-to-head: this Actor charges $3.2 per 1,000 profiles, $3.2 per 1,000 companies and $1.6 per 1,000 posts with no start fee, against $4.00–5.00, $4.01 and $2.00 for the most-used LinkedIn scrapers](https://api.apify.com/v2/key-value-stores/tZJ3TnhQJ1jqUQVXq/records/linkedin-tested-2026-10-09.png)\n\nThe same requests went to this Actor and to the most-used LinkedIn scrapers of the same kind on the Apify Store: 10 public profiles, 6 company pages (Microsoft, Stripe, HubSpot, OpenAI, Canva, Apify), the 10 latest posts of 3 companies and of 2 people, and the work e-mail of 10 people (founders and executives).\n\n| | This Actor | The most-used others |\n|---|---|---|\n| Price per 1,000 profiles | **$3.2** | $4.00–5.00 |\n| Price per 1,000 company pages | **$3.2** | $4.01–4.28 |\n| Price per 1,000 posts | **$1.6** | $1.42–2.00 on these runs (one charges $0.01 per run plus $0.001 per post) |\n| Start fee per run | **none** | none to $0.01 |\n| Company page: fields filled (6 companies) | **33**, incl. street address, office locations, affiliated pages | 19–32 |\n| Company posts: 30 asked from 3 pages | **30 in 4.7 s**, reposts included | 24–30 in 6.2–13.9 s |\n| Person posts: 20 asked from 2 people | **20**, articles included | 20 |\n| Profiles: 10 asked | **10 of 10** in 31 s | 10 of 10 in 26 s |\n| Work e-mail of 10 people (9 October 2026) | **7 of 10 mailbox-verified** (SMTP check); 3 on catch-all domains returned unverified and not charged as e-mails — **$8 per 1,000 verified e-mails** | the leader: 8 of 10 verified + 2 catch-all, all 10 billed at $10 per 1,000 |\n\nWhat a logged-out visitor cannot see stays out of reach: 5 of the 10 test people limit their public profile, so for them LinkedIn shows only the headline, current company, location and followers — leaders that read LinkedIn with an account return full experience and skills there.\n\n## What is LinkedIn Profile Details Scraper?\n\nA **bulk LinkedIn profile scraper** for recruiters, sales teams and researchers who already have profile links — from a CRM, a Google Sheet, a search export — and need the data behind them. Paste the URLs (or slugs like `satyanadella`), press Start, export to Excel, CSV or JSON, or call it as a **LinkedIn profile API** from your code. No official LinkedIn API access is needed and **your own LinkedIn account is never used**.\n\nNeed the person's work e-mail too? Switch on **📧 Find the work e-mail** — the same row then carries the work e-mail verified by an SMTP mailbox check (see below), or use [LinkedIn Profile Email Finder](https://apify.com/blueskyscraper/linkedin-profile-email-finder).\n\n## What data can LinkedIn Profile Details Scraper extract?\n\n| Field | Example |\n|---|---|\n| `fullName` | Satya Nadella |\n| `headline` | Chairman and CEO at Microsoft |\n| `title` | Chairman and CEO |\n| `company` / `companyLinkedinUrl` | Microsoft / linkedin.com/company/microsoft |\n| `location` / `country` | Redmond, Washington, United States / US |\n| `followers` / `connections` | 12199041 / 500+ |\n| `about` | As chairman and CEO of Microsoft, I define my mission… |\n| `experience` | title, company, start, end, current, duration |\n| `education` | The University of Chicago Booth School of Business, 1994–1996 |\n| `certifications`, `languages`, `volunteering`, `publications`, `honorsAndAwards`, `organizations`, `skills`, `recommendations` | as listed on the public profile |\n| `website`, `imageUrl`, `linkedinUrl`, `slug` | links |\n\n### How often each profile field is filled\n\nLinkedIn shows logged-out visitors a shorter profile than members see. Measured on 55 mixed profiles (3 October 2026):\n\n| Filled in | Profile fields |\n|---|---|\n| **Every profile** | `fullName`, `headline` (as in the page title — for 7 in 10 people that is their current company), `location`, `country`, `followers`, `connections`, `imageUrl`, `linkedinUrl` |\n| **Most profiles** | `company` and `companyLinkedinUrl` (9 in 10; with several current jobs — the main one, see `companyChosenBy`; the rest in `otherCurrentCompanies`), `about` (3 in 4), `recommendations` (7 in 10), `education` (6 in 10), `website` (5 in 10) |\n| **Some profiles** | `certifications`, `honorsAndAwards`, `languages`, `volunteering`, `publications` (1 in 4 to 1 in 3) |\n| **Few profiles** | job `title` and full `experience` with titles and dates (about 1 in 5 — LinkedIn masks past employers for logged-out visitors), `skills` (about 1 in 8) |\n\nAdded 5 October 2026 (checked on 7 public profiles): every role in the Experience section, including each role inside a company group (one long career went from 11 to 24 roles), with `companyLogo` and `location`; every school in the Education section with `degree` and `fieldOfStudy` (schools without dates used to be missing); `city`, `region`, `countryCode`; `coverImageUrl`, `memberId`, `profileUrn`; `languageProficiencies`, `courses`, `projects`, `testScores`, `coursesTaught` when the profile shows those sections. The exact connection count, Featured, interests and open-to-work / hiring flags are not shown to logged-out visitors, so they are not returned.\n\nAdded 5 October 2026 (round 2): `similarProfiles` — the \"Other similar profiles\" side rail of the public profile (LinkedIn's \"People also viewed\" as logged-out visitors see it): name, headline as the card shows it (usually the current company), location, followers, profile URL and photo of each person, 9–20 per profile (10 of 11 checked profiles show it). `sameNameProfiles` — \"Others named …\", when LinkedIn shows that rail (1 of 11). Same page, no extra request or charge.\n\nAn empty field means LinkedIn did not show it, not that the run failed.\n\n## 💰 How much does it cost to scrape LinkedIn profiles?\n\n| Row | Price |\n|---|---|\n| **Profile** | $0.0032 — $3.2 per 1,000 |\n| **Profile with e-mail** (only with 📧 on, and only when the mailbox is verified by an SMTP check; catch-all domains are returned unverified and not charged as an e-mail) | $0.008 — $8 per 1,000 |\n\nNo start fee, proxies included. Profiles that do not exist or that LinkedIn hides from logged-out visitors are **free error rows**. Apify's free plan ($5 of monthly credit) covers about **1,500 profiles a month**. Paid Apify plans get tiered discounts automatically.\n\n## How to scrape LinkedIn profiles\n\n1. Click **Try for free**.\n2. Paste profile URLs or slugs into **👤 LinkedIn profiles**, one per line — or link a Google Sheet / CSV in **📄 URLs from a file or sheet**.\n3. Optional: **📰 Add the person's latest posts** (free) or **📧 Find the work e-mail**.\n4. Click **Start** and export the table.\n\n## ⬇️ Input\n\n```json\n{\n    \"profileUrls\": [\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"https://www.linkedin.com/in/jeffweiner08\",\n        \"justinwelsh\"\n    ],\n    \"includePosts\": false,\n    \"findEmail\": false\n}\n```\n\n## ⬆️ Output\n\n```json\n{\n    \"type\": \"profile\",\n    \"fullName\": \"Satya Nadella\",\n    \"headline\": \"Chairman and CEO at Microsoft\",\n    \"title\": \"Chairman and CEO\",\n    \"company\": \"Microsoft\",\n    \"companyLinkedinUrl\": \"https://www.linkedin.com/company/microsoft\",\n    \"location\": \"Redmond, Washington, United States\",\n    \"country\": \"US\",\n    \"followers\": 12199041,\n    \"connections\": \"500+\",\n    \"about\": \"As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person and every organization on the planet to achieve more.\",\n    \"experience\": [\n        { \"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"startDate\": \"Feb 2014\", \"endDate\": null, \"current\": true, \"duration\": \"12 years 9 months\" },\n        { \"title\": \"Board Member\", \"company\": \"Starbucks\", \"startDate\": \"2017\", \"endDate\": \"2024\", \"current\": false, \"duration\": \"7 years\" }\n    ],\n    \"education\": [{ \"school\": \"The University of Chicago Booth School of Business\", \"startDate\": \"1994\", \"endDate\": \"1996\" }],\n    \"linkedinUrl\": \"https://www.linkedin.com/in/satyanadella\"\n}\n```\n\nOne row per profile. The **Output** tab has a *Profiles* view, a *Work e-mails* view and a view of the inputs that could not be read.\n\n## What LinkedIn shows without a login\n\nThis Actor reads the **public pages LinkedIn serves to logged-out visitors and search engines** — no account, no cookies, nothing that could get an account banned. That decides what is possible:\n\n- **Hidden profiles.** Some people hide their profile from logged-out visitors; LinkedIn then answers with a login wall or HTTP 999 for that profile from every address. On mixed lists about **1 in 4 or 5** profiles is refused on the first route. Those get **one more try through an unblocking route, paid only from your run's own margin** (never from a subsidy that would have to be priced in). Whatever still stays hidden comes back as a **free error row** saying so.\n- **Recent posts only.** A logged-out visitor sees a company's **~10 newest posts** (median 9 on a 20-company check, 2 of 20 showed none) and a person's **~5–10 newest posts, quote-shares and reposts** **plus up to 10 articles**. A page with fewer posts than you asked for adds one free `notice` row saying how many LinkedIn showed. There is no paging back to older posts without a login — use the **Only posts not delivered before** switch on a daily schedule to build a full history from now on.\n- **Shortened surnames.** A few profiles show the surname as an initial (\"Diego C.\") to logged-out visitors; the row says so.\n- **No private data.** Phone numbers, connections lists and contact info behind the login are not read.\n\nPages that do not exist (HTTP 404) are free error rows too. A run in which LinkedIn refuses everything ends with error rows and no charge.\n\n## Use cases for LinkedIn profile data\n\n### Enrich a lead list\nAdd current company, location and follower count to the LinkedIn links already in your CRM.\n\n### Recruiting\nScreen candidates' about text, education, certifications and recommendations in one sheet.\n\n### Influencer and creator research\nCompare follower counts, headlines and badges of creators in a niche.\n\n### Keep a database fresh\nRe-run the same list monthly and see who changed company.\n\n## Integrations and API\n\nUse **LinkedIn Profile Details Scraper** like any Apify Actor:\n\n- **API**: start a run and read the dataset over HTTP — see the **API** tab for ready-made calls.\n- **Python**:\n\n```python\nfrom apify_client import ApifyClient\n\nclient = ApifyClient(\"<YOUR_APIFY_TOKEN>\")\nrun = client.actor(\"blueskyscraper/linkedin-profile-details-scraper\").call(run_input={\"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\", \"https://www.linkedin.com/in/jeffweiner08\", \"https://www.linkedin.com/in/justinwelsh\"]})\nfor row in client.dataset(run[\"defaultDatasetId\"]).iterate_items():\n    print(row)\n```\n\n- **JavaScript**:\n\n```javascript\nimport { ApifyClient } from 'apify-client';\n\nconst client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });\nconst run = await client.actor('blueskyscraper/linkedin-profile-details-scraper').call({\"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\", \"https://www.linkedin.com/in/jeffweiner08\", \"https://www.linkedin.com/in/justinwelsh\"]});\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n```\n\n- **No-code**: Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks through Apify integrations — send every finished run's rows wherever your team works.\n- **AI agents (MCP)**: add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server (`https://mcp.apify.com`) and ask for LinkedIn data in plain words.\n- **Schedules**: run it every day or week from the **Schedules** page; combine with **Maximum results per run** to cap the bill.\n\n## ❓ FAQ\n\n### Is it legal to scrape LinkedIn?\nThe Actor reads only pages that LinkedIn shows to anyone without an account. Scraping public data is generally lawful, but names, job titles and e-mails are **personal data** under laws such as the GDPR and CCPA: have a lawful reason to process them, keep them safe, and honour opt-outs. When in doubt, ask a lawyer.\n\n### Do I need a LinkedIn account, cookies or a proxy?\nNo. Nothing to log in to, no cookies to paste, no proxy to set up — your own LinkedIn account is never touched, so it cannot be restricted. Proxies are included in the price.\n\n### Can I use it with the Apify API?\nYes — every run can be started and read over the Apify API, from Python, JavaScript or any HTTP client. See **Integrations and API** above.\n\n### Can I use it through an MCP server?\nYes. Add it to the Apify MCP server (`https://mcp.apify.com`) and your AI assistant can call it directly.\n\n### Can I integrate it with other apps?\nYes: Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks through Apify integrations.\n\n### Why did some pages come back as error rows?\nEither the page does not exist (404), or LinkedIn hides it from logged-out visitors. Both are **free** — you pay only for rows with data. The `error` field says which.\n\n### Do I pay for errors, filtered-out posts or the start of a run?\nNo. There is no start fee; error rows and posts removed by your filters are never billed. **Maximum results per run** and Apify's **Max cost per run** are hard ceilings — when the cost limit is reached, the run stops by itself with everything written already paid for.\n\n### Why is the job title empty for many profiles?\nLinkedIn shows the job title and dated experience to logged-out visitors for only about 1 in 5 profiles; for the rest it shows the current company, which is in `company`. The `headline` often carries the role as well.\n\n### Can I scrape thousands of profiles?\nYes. A run reads about **10–15 profiles a minute** (LinkedIn dislikes bursts, so the pace is deliberate) and writes each row as soon as it is read. With the default one-hour run timeout that is several hundred profiles; for longer lists raise the timeout in the run options or split the list. Profiles not reached before the timeout are listed in the run's `NOT_ATTEMPTED` record and are not billed.\n\n## Your feedback\n\nSomething missing or wrong? Open an issue on the **Issues** tab — we read every one.\n\n## You might also like\n\n| Actor | What it does |\n|---|---|\n| [LinkedIn Scraper](https://apify.com/blueskyscraper/linkedin-scraper) | Profiles, work e-mails, company pages and latest posts in one Actor |\n| [LinkedIn Profile Email Finder](https://apify.com/blueskyscraper/linkedin-profile-email-finder) | Work e-mail for each profile, with layout evidence and confidence |\n| [LinkedIn Company Details Scraper](https://apify.com/blueskyscraper/linkedin-company-details-scraper) | Company pages: website, industry, size, followers, address |\n| [LinkedIn Company Posts Scraper](https://apify.com/blueskyscraper/linkedin-company-posts-scraper) | Latest posts of company pages with likes and comments |\n| [LinkedIn Profile Posts Scraper](https://apify.com/blueskyscraper/linkedin-profile-posts-scraper) | Latest posts and articles of people |\n"
    },
    "buildNumber": "0.1.21",
    "imageDigest": "88e840e61de5a3452c613c211a9cac47f39e0a855060a2e84c69bae64fb299d4",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.019593333333333334
    }
  }
}