{
  "data": {
    "id": "8heuv8gYay3qGshnX",
    "actId": "btNUul6dyyuLVpSsd",
    "userId": "kYoNI3wsaubJKcpfT",
    "startedAt": "2026-10-19T21:17:41.132Z",
    "finishedAt": "2026-10-19T21:17:43.338Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 2055,
      "runTimeSecs": 2.055,
      "computeUnits": 0.0022833333333333334,
      "imageSizeBytes": 568497664
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "tag": "latest",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "qWgIvZesMIlfAuet0",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What do you want to do?\",\n      \"type\": \"string\",\n      \"description\": \"\\\"Search LinkedIn\\\": no URL needed. Give a job title, a location and keywords; the actor finds matching LinkedIn profiles or companies through Google (no login, no cookies, no LinkedIn account), then can scrape each one and find its verified work email. \\\"Scrape LinkedIn URLs\\\": paste LinkedIn URLs you already have and get full records.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"urls\"\n      ],\n      \"enumTitles\": [\n        \"🔎 Search LinkedIn (no URL needed)\",\n        \"Scrape LinkedIn URLs\"\n      ],\n      \"default\": \"urls\",\n      \"prefill\": \"search\"\n    },\n    \"searchType\": {\n      \"title\": \"Search for\",\n      \"type\": \"string\",\n      \"description\": \"Search mode: find people (linkedin.com/in profiles) or companies (linkedin.com/company pages).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"people\",\n        \"company\"\n      ],\n      \"enumTitles\": [\n        \"People (profiles)\",\n        \"Companies\"\n      ],\n      \"default\": \"people\",\n      \"prefill\": \"people\",\n      \"sectionCaption\": \"🔎 Search LinkedIn (no URL needed)\",\n      \"sectionDescription\": \"Used when \\\"What do you want to do?\\\" is \\\"Search LinkedIn\\\". Pipeline: 1) Google x-ray search of public LinkedIn pages finds the leads (no LinkedIn account, no cookies, zero ban risk); 2) optionally, each lead is scraped for its full profile or company page; 3) optionally, the person's work email is found and verified live over SMTP. Each step is billed only for what it returns.\"\n    },\n    \"role\": {\n      \"title\": \"Job title / role\",\n      \"type\": \"string\",\n      \"description\": \"Job title to look for, e.g. \\\"CEO\\\", \\\"head of sales\\\", \\\"recruiter\\\". People search: added to the query. Company search with \\\"Find people at each company\\\": the role searched at each company.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"Founder\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, region or country, e.g. \\\"Paris\\\", \\\"London\\\", \\\"Texas\\\".\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"London\"\n    },\n    \"keywords\": {\n      \"title\": \"Keywords\",\n      \"type\": \"string\",\n      \"description\": \"Industry, skills or any words, e.g. \\\"SaaS\\\", \\\"marketing agency\\\", \\\"fintech\\\", \\\"shopify\\\". When a search finds nothing, it is retried without the keywords, then without the location (said in the results), before ending with a free \\\"0 results\\\" row.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"SaaS\"\n    },\n    \"maxResults\": {\n      \"title\": \"Max results\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of leads (people or companies) to return. Google pages hold about 10 results, so multiples of 10 work best. Minimum 5.\",\n      \"default\": 20,\n      \"minimum\": 5,\n      \"maximum\": 1000\n    },\n    \"onlyNew\": {\n      \"title\": \"Only new leads (skip what you already got)\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"description\": \"Search mode: skip the people / companies you already received from this Actor in previous runs (same Apify account, last 12 months) and keep searching until you have \\\"Max results\\\" NEW ones. Example: 20 growth marketers in Lille yesterday, run again with onlyNew for 20 more, no duplicate. Leads skipped are never charged.\"\n    },\n    \"scrapeResults\": {\n      \"title\": \"Step 2: scrape full details of each lead\",\n      \"type\": \"boolean\",\n      \"description\": \"Also scrape each profile / company found (same full record as URL mode: experience, education, company size, etc.), billed per record like URL mode. Without it you get the Google data only: LinkedIn URL, name, position, company, location.\",\n      \"default\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"findEmail\": {\n      \"title\": \"Step 3: find verified work email (people)\",\n      \"type\": \"boolean\",\n      \"description\": \"Finds each person's professional email from their name and current company (company domain from the profile, otherwise guessed from the company name), then verifies it live over SMTP with the built-in email finder. Works in search mode (people) and in URL mode with Profile URLs. Billed only when a verified email is found ($9 / 1,000). Catch-all domains return a best guess with confidence \\\"catch-all\\\", free of charge.\",\n      \"default\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"requireEmail\": {\n      \"title\": \"Only leads with a verified email\",\n      \"type\": \"boolean\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"description\": \"People search only: deliver only people whose work email was found and verified. Profiles without one are skipped and not charged; the search looks at up to 3x more profiles to fill your list. Turns \\\"Find emails\\\" on.\"\n    },\n    \"companies\": {\n      \"title\": \"People at these companies (optional)\",\n      \"type\": \"array\",\n      \"editor\": \"json\",\n      \"sectionCaption\": \"People at companies\",\n      \"description\": \"Skip the open search and find people at these companies: [{\\\"name\\\": \\\"SV Angel\\\", \\\"website\\\": \\\"svangel.com\\\"}, …]. Uses \\\"Job title / role\\\" (e.g. partner, CEO) and \\\"peoplePerCompany\\\" (default 3). The website is used to find each person's email. Max 200 companies.\",\n      \"prefill\": []\n    },\n    \"type\": {\n      \"title\": \"Content type\",\n      \"type\": \"string\",\n      \"description\": \"Used when \\\"What do you want to do?\\\" is \\\"Scrape LinkedIn URLs\\\": what kind of LinkedIn URLs are you providing?\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"Profile\",\n        \"Company\",\n        \"Job\",\n        \"Post\"\n      ],\n      \"default\": \"Profile\",\n      \"prefill\": \"Profile\",\n      \"sectionCaption\": \"Scrape LinkedIn URLs\",\n      \"sectionDescription\": \"Used when \\\"What do you want to do?\\\" is \\\"Scrape LinkedIn URLs\\\".\"\n    },\n    \"urls\": {\n      \"title\": \"LinkedIn URLs\",\n      \"type\": \"array\",\n      \"description\": \"LinkedIn URLs matching the selected content type.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/satyanadella/\"\n      ]\n    },\n    \"findPeopleAtCompanies\": {\n      \"title\": \"Find people at each company (company search)\",\n      \"type\": \"boolean\",\n      \"description\": \"Company search only: for every company found, also search its employees with the job title in \\\"Job title / role\\\" (one extra search per company, up to \\\"People per company\\\" profiles, each billed as a search result).\",\n      \"default\": false,\n      \"editor\": \"checkbox\",\n      \"sectionCaption\": \"Options\",\n      \"sectionDescription\": \"Advanced search options. The defaults work for most searches.\"\n    },\n    \"peoplePerCompany\": {\n      \"title\": \"People per company\",\n      \"type\": \"integer\",\n      \"description\": \"With \\\"Find people at each company\\\": maximum profiles per company (5 to 10).\",\n      \"default\": 10,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"country\": {\n      \"title\": \"Google country\",\n      \"type\": \"string\",\n      \"description\": \"Two-letter Google country code used for the search (gl), e.g. us, fr, gb, de.\",\n      \"default\": \"us\",\n      \"editor\": \"textfield\"\n    },\n    \"language\": {\n      \"title\": \"Google language\",\n      \"type\": \"string\",\n      \"description\": \"Two-letter Google interface language (hl), e.g. en, fr.\",\n      \"default\": \"en\",\n      \"editor\": \"textfield\"\n    }\n  },\n  \"required\": []\n}",
    "readme": "# LinkedIn Leads Scraper: Apollo, ZoomInfo & Lusha Alternative\n\n**Fresh B2B leads straight from LinkedIn, with live-verified work emails. A LinkedIn scraper with no cookies and no login.** Search LinkedIn people and companies by keyword, job title and location, scrape full **profiles**, **company data**, **jobs** and **posts** from URLs, and get **verified work emails**. One actor, pay per result.\n\n- 🔒 **No cookies, no login, no LinkedIn account.** Nothing touches your account, so it can never be restricted or banned.\n- 🔎 **LinkedIn search without Sales Navigator** (`mode: \"search\"`): find LinkedIn profiles like *\"CEO, marketing agency, Paris\"* or companies like *\"SaaS, London\"*. A **Sales Navigator alternative** for lead generation, built on Google x-ray search of public LinkedIn pages.\n- 🏢➡️👤 **Company → decision makers**: find companies, then the CEO / head of sales / recruiter at each one, in the same run.\n- 📧 **Verified work email** (`findEmail`): name + company → professional email, checked live over SMTP. **$9 / 1,000 emails found**, charged only when verified.\n- 🧩 **A LinkedIn API alternative**: call it over HTTP from the Apify API, n8n, Make, Zapier, Clay or your own code. No LinkedIn developer app, no partner approval.\n- 💸 **Pay only for rows you receive.** Invalid URLs, dead pages and empty searches are **never charged**.\n- 🆓 **Works with a free Apify account too**: every mode at the same prices, from your monthly Apify credit (shared daily capacity for free accounts).\n- 📦 Export to **JSON, CSV, Excel, HTML, XML** or stream the dataset straight into your pipeline.\n\n---\n\n## 🆚 Apollo, ZoomInfo & Lusha alternative: fresh leads, not an old database\n\nLead databases are built once and resold for months: people change jobs, emails start bouncing, and you pay for contacts that no longer exist. This actor works the other way round: **every lead is found on LinkedIn at the moment you run it**.\n\n| | Lead databases (Apollo, ZoomInfo, Lusha...) | This actor |\n|---|---|---|\n| Where the data comes from | A database refreshed from time to time | Live public LinkedIn pages, at run time |\n| Job title and company | Can be months old | What the profile shows today |\n| Work email | Often guessed or stale | Checked live on the mail server, charged only when valid |\n| Bounced addresses | Stay in the list | Addresses reported as bounced are removed automatically |\n| Pricing | Seats, monthly plans, credit packs | Pay per result, no subscription |\n| Search | Their filters, their index | Job title, company, city and keywords, like a LinkedIn search |\n\n**Typical use:** describe your ideal leads (*\"head of sales, SaaS, London\"*), get the matching LinkedIn profiles, their full profile and a verified work email, then export to your CRM, Clay, n8n, Make or Zapier.\n\n---\n\n## 🚀 From a LinkedIn search to a verified email, in one run\n\nNo URL list needed. Describe who you are looking for, and the actor chains three steps:\n\n1. **🔎 Search**: Google x-ray search of public LinkedIn pages finds the matching people (or companies). No LinkedIn account, no cookies.\n2. **👤 Profile**: each person found is scraped for the full profile (experience, education, current company...).\n3. **📧 Verified email**: the work email is built from the name and company, then verified live over SMTP.\n\nExample: CEOs of agencies in Paris, with full profiles and verified emails:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchType\": \"people\",\n  \"role\": \"CEO\",\n  \"location\": \"Paris\",\n  \"keywords\": \"agence\",\n  \"maxResults\": 20,\n  \"scrapeResults\": true,\n  \"findEmail\": true\n}\n```\n\nOne row per person (illustrative values, trimmed):\n\n```json\n{\n  \"resultType\": \"people\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/jane-doe\",\n  \"name\": \"Jane Doe\",\n  \"position\": \"CEO\",\n  \"company\": \"Acme Agency\",\n  \"query\": \"CEO agence Paris site:linkedin.com/in\",\n  \"rank\": 1,\n  \"details\": {\n    \"name\": \"Jane Doe\",\n    \"position\": \"CEO at Acme Agency\",\n    \"city\": \"Paris, Île-de-France, France\",\n    \"current_company\": { \"name\": \"Acme Agency\", \"title\": \"CEO\" },\n    \"experience\": [{ \"title\": \"CEO\", \"company\": \"Acme Agency\", \"start_date\": \"...\" }]\n  },\n  \"email\": \"jane.doe@acme-agency.fr\",\n  \"email_status\": \"found\",\n  \"email_confidence\": \"verified\",\n  \"email_pattern\": \"first.last\",\n  \"email_domain\": \"acme-agency.fr\",\n  \"email_domain_source\": \"guessed-from-company\"\n}\n```\n\nEach step is billed only for what it returns: **$3.50 / 1,000 people found** (launch price), $3.50 / 1,000 profiles scraped, $9 / 1,000 **verified** emails. For 20 CEOs with 8 verified emails: about $0.14. Launch pricing: search results are billed at the profile price until the dedicated search price ($4.90 / 1,000) applies on November 8. Already have LinkedIn URLs? Pick **\"Scrape LinkedIn URLs\"** instead.\n\n---\n\n## 💡 Who is it for?\n\n- **Sales & SDR teams** building lead lists from a LinkedIn search (title + industry + city) without Sales Navigator, then enriching them (job title, company, seniority) before outreach.\n- **Recruiters** pulling full candidate profiles (experience, education) in bulk.\n- **RevOps / CRM owners** refreshing job titles and employers every month.\n- **Market researchers & investors** collecting LinkedIn company data (size, industry, HQ, followers, headcount on LinkedIn).\n- **Job-market analysts** tracking open roles of target companies as hiring signals.\n- **Social & content teams** measuring reactions and comments on posts.\n- **Data & AI teams** feeding LinkedIn data into scoring models, RAG pipelines or agents.\n\n---\n\n## ⚙️ How it works\n\nTwo modes, chosen with the first field of the form, **\"What do you want to do?\"**:\n\n- **🔎 Search LinkedIn (no URL needed)** (`mode: \"search\"`, selected when you open the form): give a job title, a location and keywords (for example *CEO / Paris / agence*), get LinkedIn profile or company URLs with name, position, company and location. Optionally scrape each result and find its verified email. Launch price: $3.50 / 1,000 results (billed as the `profile` event) until November 8, then $4.90 / 1,000.\n- **Scrape LinkedIn URLs** (`mode: \"urls\"`, the default over the API when `mode` is omitted): pick a content type (`Profile`, `Company`, `Job` or `Post`), paste LinkedIn URLs, get one full row per URL.\n\n### Scrape URLs\n\nURLs that don't match the selected mode are skipped (and listed in the log) before anything happens. URLs that LinkedIn can't serve are saved in the key-value store record `FAILED_URLS` and are **not charged**.\n\n| Mode | Accepted URLs | What you get |\n|---|---|---|\n| **Profile** | `linkedin.com/in/<handle>` | Name, headline, location, followers, connections, about, current company, full experience, education, awards, recent activity & posts, similar profiles |\n| **Company** | `linkedin.com/company/<slug>` | Name, industry, company size, headquarters, website, followers, employees on LinkedIn, description, specialties, locations |\n| **Job** | `linkedin.com/jobs/view/<id>` | Title, company, location, seniority, employment type, job function, industries, number of applicants, posted date, full description |\n| **Post** | `linkedin.com/posts/...` or `linkedin.com/feed/update/...` | Author, post text (plain + HTML), date, likes, comments, top comments, hashtags, tagged people & companies, images, videos, documents |\n\nCountry subdomains (`fr.linkedin.com`, `uk.linkedin.com`...) and query strings are accepted.\n\n---\n\n## 📥 Input\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `type` | string | ✅ | `Profile` (default), `Company`, `Job` or `Post` |\n| `urls` | array of strings | ✅ | LinkedIn URLs matching the selected type |\n| `findEmail` | boolean | | Profile mode only, default `false`. Also finds the person's verified work email (see below) |\n\n### Example inputs\n\n```json\n{\n  \"type\": \"Profile\",\n  \"urls\": [\n    \"https://www.linkedin.com/in/satyanadella/\",\n    \"https://www.linkedin.com/in/jeffweiner08/\"\n  ]\n}\n```\n\nProfiles **with verified work email**:\n\n```json\n{\n  \"type\": \"Profile\",\n  \"findEmail\": true,\n  \"urls\": [\"https://www.linkedin.com/in/satyanadella/\"]\n}\n```\n\n```json\n{\n  \"type\": \"Company\",\n  \"urls\": [\n    \"https://www.linkedin.com/company/microsoft/\",\n    \"https://www.linkedin.com/company/bereal/\"\n  ]\n}\n```\n\n```json\n{ \"type\": \"Job\", \"urls\": [\"https://www.linkedin.com/jobs/view/4440458716/\"] }\n```\n\n```json\n{ \"type\": \"Post\", \"urls\": [\"https://www.linkedin.com/posts/reidhoffman_give-people-a-reason-to-want-the-ai-future-activity-7508645307132600321-dOsB\"] }\n```\n\n---\n\n## 🔎 Search LinkedIn without cookies (`mode: \"search\"`)\n\nFind LinkedIn profiles and companies **without a LinkedIn account, without cookies and without Sales Navigator**. In the form, pick **\"🔎 Search LinkedIn (no URL needed)\"**: the search fields come right below it.\n\nThe pipeline has three steps, each billed only for what it returns:\n\n1. **Search** (always): a Google x-ray search of public LinkedIn pages (`site:linkedin.com/in` or `site:linkedin.com/company`) finds the leads: LinkedIn URL, name, position, company, location.\n2. **Scrape** (`scrapeResults`, optional): each lead's full profile or company page, same record as URL mode.\n3. **Email** (`findEmail`, optional, people): the built-in email finder guesses the work email from the name and company, then verifies it live over SMTP. Only verified emails are billed.\n\n> Pricing: launch price **$3.50 / 1,000 search results** (billed as the `profile` event) until **November 8**; from then on search results have their own `search-result` event at $4.90 / 1,000.\n\n| Field | Description |\n|---|---|\n| `searchType` | `people` (profiles, default) or `company` |\n| `keywords` | Industry, skills, any words: `marketing agency`, `saas`, `shopify` |\n| `role` | Job title: `CEO`, `head of sales`, `recruiter` |\n| `location` | City, region or country: `Paris`, `London`, `Texas` |\n| `maxResults` | Max leads (default 20, min 5). Google pages hold ~10 results: multiples of 10 work best |\n| `findPeopleAtCompanies` | Company search: also find people with the `role` at each company found |\n| `peoplePerCompany` | 5 to 10 profiles per company (default 10) |\n| `scrapeResults` | Also scrape the full profile / company page of each lead (billed like URL mode) |\n| `findEmail` | Also find the verified work email of each person found |\n| `country`, `language` | Google country (`us`, `fr`, `gb`...) and language (`en`, `fr`...) |\n\nExample: CEOs of agencies in Paris, with verified emails:\n\n```json\n{ \"mode\": \"search\", \"searchType\": \"people\", \"role\": \"CEO\", \"keywords\": \"agency\", \"location\": \"Paris\", \"maxResults\": 50, \"findEmail\": true }\n```\n\nExample: marketing agencies in Lyon, then their CEO:\n\n```json\n{ \"mode\": \"search\", \"searchType\": \"company\", \"keywords\": \"marketing agency\", \"location\": \"Lyon\", \"maxResults\": 20, \"findPeopleAtCompanies\": true, \"role\": \"CEO\" }\n```\n\nOutput row (real result, trimmed):\n\n```json\n{\n  \"resultType\": \"people\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/valeriebodocco\",\n  \"name\": \"Valérie Bodocco\",\n  \"position\": \"CEO\",\n  \"company\": \"L'Agence de Paris\",\n  \"location\": null,\n  \"title\": \"Valérie Bodocco - CEO - L'Agence de Paris\",\n  \"snippet\": \"En immobilier, je dirige depuis 2010 le Groupe L'Agence...\",\n  \"query\": \"CEO agency Paris site:linkedin.com/in\",\n  \"rank\": 1\n}\n```\n\nPeople found through `findPeopleAtCompanies` also carry `sourceCompanyName`, `sourceCompanyUrl` and `companyMatch` (`true` when the result mentions the company; `false` rows are looser Google matches such as former employees or namesakes, and come last).\n\n**Empty search? It is broadened for you.** When a search finds no lead, it is retried automatically, first **without the keywords**, then **without the location** (and without the keywords when a job title remains). Rows from a broadened search carry `searchBroadened` (e.g. `\"without keywords \\\"SaaS\\\"\"`) and the run status says what was removed. If even that finds nothing, you get one free `no-results` row: *\"0 results: try broader keywords, a larger city or another job title\"*. Never charged.\n\nGood to know: search covers what Google indexes of public LinkedIn pages (very broad, but not 100 % of LinkedIn), and `name` / `position` / `company` are parsed from the Google title and snippet. Turn on `scrapeResults` when you need the full, structured profile.\n\n---\n\n## 📤 Output examples (trimmed)\n\n**Profile**\n\n```json\n{\n  \"name\": \"Satya Nadella\",\n  \"first_name\": \"Satya\",\n  \"last_name\": \"Nadella\",\n  \"position\": \"Chairman and CEO at Microsoft\",\n  \"city\": \"Redmond, Washington, United States\",\n  \"country_code\": \"US\",\n  \"followers\": 12183622,\n  \"connections\": 500,\n  \"current_company\": { \"name\": \"Microsoft\", \"company_id\": \"microsoft\", \"title\": \"Chairman and CEO\" },\n  \"about\": \"As chairman and CEO of Microsoft, I define my mission...\",\n  \"experience\": [{ \"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"start_date\": \"...\" }],\n  \"education\": [{ \"title\": \"The University of Chicago Booth School of Business\" }],\n  \"url\": \"https://www.linkedin.com/in/satyanadella\"\n}\n```\n\nWith `findEmail: true`, each profile row gets these extra fields:\n\n```json\n{\n  \"email\": \"jane.doe@acme.com\",\n  \"email_status\": \"found\",\n  \"email_confidence\": \"verified\",\n  \"email_pattern\": \"first.last\",\n  \"email_domain\": \"acme.com\",\n  \"email_domain_source\": \"guessed-from-company\"\n}\n```\n\n**Company**\n\n```json\n{\n  \"name\": \"Microsoft\",\n  \"industries\": \"Software Development\",\n  \"company_size\": \"10,001+ employees\",\n  \"headquarters\": \"Redmond, Washington\",\n  \"website\": \"https://news.microsoft.com/\",\n  \"followers\": 29163922,\n  \"employees_in_linkedin\": 231769,\n  \"url\": \"https://www.linkedin.com/company/microsoft\"\n}\n```\n\n**Job**\n\n```json\n{\n  \"job_title\": \"Data Engineer Expérimenté F/H\",\n  \"company_name\": \"EY\",\n  \"job_location\": \"Paris, Île-de-France, France\",\n  \"job_seniority_level\": \"Mid-Senior level\",\n  \"job_employment_type\": \"Full-time\",\n  \"job_function\": \"Information Technology\",\n  \"job_num_applicants\": 98,\n  \"job_posted_date\": \"2026-09-23T08:00:26.424Z\",\n  \"job_summary\": \"Chez EY, nous sommes « All in » pour façonner votre avenir...\",\n  \"url\": \"https://www.linkedin.com/jobs/view/4440458716/\"\n}\n```\n\n**Post**\n\n```json\n{\n  \"user_id\": \"reidhoffman\",\n  \"date_posted\": \"2026-09-23T21:55:45.104Z\",\n  \"post_type\": \"post\",\n  \"num_likes\": 492,\n  \"num_comments\": 151,\n  \"post_text\": \"If people can't point to something in their lives that has become easier, more affordable...\",\n  \"url\": \"https://www.linkedin.com/posts/reidhoffman_give-people-a-reason-to-want-the-ai-future-activity-7508645307132600321-dOsB\"\n}\n```\n\nEvery row also contains the original `input` and a `timestamp`. Field names are stable, so you can map them once in your CRM or spreadsheet.\n\n---\n\n## 📧 Find verified work emails (`findEmail`)\n\nTurn a list of LinkedIn profile URLs into a list of **verified professional emails**, in the same run.\n\n1. The actor takes the person's **first and last name** and **current company** from the profile.\n2. The company domain comes from the profile when it is there; otherwise it is deduced from the company name (only domains that actually receive email are kept).\n3. The usual corporate patterns (`first.last`, `first`, `flast`, `firstlast`...) are tested one by one with a **live SMTP check**, stopping at the first verified address.\n\n| `email_status` | Meaning | Charged? |\n|---|---|---|\n| `found` | Mailbox verified (`email_confidence: \"verified\"`) | ✅ `email-found` |\n| `catch-all` | The domain accepts every address: `email` is the most likely pattern, **unverified** (`email_confidence: \"catch-all\"`) | ❌ free |\n| `not-found` | No tested pattern exists | ❌ |\n| `unknown` | The mail server gave no clear answer | ❌ |\n| `no-mx` / `no-company` | No mail domain for the current company | ❌ |\n\nThe profile itself is always delivered and billed as a normal `profile`, whatever the email result.\n\n---\n\n## 💰 Pricing (pay per result)\n\n**Store discounts:** on Apify Silver, Gold, Platinum and Diamond plans, some events cost up to 20 % less. The Pricing tab of the Store page shows the exact price for each plan.\n\nYou pay a fixed price per LinkedIn record actually returned. No start fee, no monthly rental, no charge for failed URLs.\n\n| Event | What triggers it | Price |\n|---|---|---|\n| `profile` | 1 profile returned | $3.50 / 1,000 |\n| `company` | 1 company page returned | $6.49 / 1,000 |\n| `job` | 1 job listing returned | $5.90 / 1,000 |\n| `post` | 1 post returned | $5.90 / 1,000 |\n| `search-result` | 1 LinkedIn profile or company found by a search (`mode: \"search\"`) | $4.90 / 1,000 |\n| `email-found` | 1 **verified** work email found (`findEmail`) | $9.00 / 1,000 |\n\n| Example run | Records | Approx. cost |\n|---|---|---|\n| Quick test | 10 profiles | ~$0.035 |\n| Lead list | 1,000 profiles | ~$3.50 |\n| Account list | 1,000 companies | ~$6.49 |\n| Lead list + emails | 1,000 profiles, `findEmail` on, 400 verified emails | ~$3.50 + $3.60 = ~$7.10 |\n| LinkedIn search | 1,000 people found by keyword + title + city | ~$4.90 |\n| Search + emails | 1,000 people found, `findEmail` on, 350 verified emails | ~$4.90 + $3.15 = ~$8.05 |\n\n**Works with a free Apify account too.** Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. Limit: free accounts share a daily capacity; once it is used up, the remaining inputs are skipped with one `free-plan-limit` row (not charged). Retry the next day, or switch to a paid Apify plan to run without this limit.\n\nSet **Maximum cost per run** in the run options to cap your spend: duplicate URLs are removed and the actor only scrapes as many URLs as your limit can pay for; the rest are skipped and listed in the log. With `findEmail`, each URL reserves the price of a profile **and** an email. In search mode, a Google page is only requested when your limit still covers at least 5 more results.\n\n---\n\n## 🔌 Use it as a LinkedIn API\n\nRun it synchronously and get the rows in one HTTP call:\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/pnda~linkedin-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"type\":\"Company\",\"urls\":[\"https://www.linkedin.com/company/microsoft/\"]}'\n```\n\nOr use the Apify client for JavaScript/Python, the n8n / Make / Zapier integrations, webhooks, or Apify Schedules for recurring refreshes.\n\n---\n\n## 🚀 Why this actor\n\n- ✅ **Search + scrape + email in one actor**: find LinkedIn profiles, scrape profiles, company data, jobs and posts, get verified emails. One integration instead of five.\n- ✅ **No cookies, no login**: zero risk for your LinkedIn account.\n- ✅ **Bulk by URL**: hundreds of URLs per run, one clean row per URL.\n- ✅ **Rich data**: full career history, company headcount, applicants count, post engagement.\n- ✅ **Fair billing**: invalid and dead URLs are never charged.\n\n---\n\n## ❓ FAQ\n\n**Do I need a LinkedIn account, cookies or a proxy?** No.\n\n**How fresh is the data?** Records are collected when you run the actor, typically within seconds to a few minutes per batch. A profile or company page already collected in the last 30 days may be served from our result cache: faster, same price, same record.\n\n**What if a URL fails?** It is not charged. The error (e.g. `dead_page`) is stored in the key-value store record `FAILED_URLS`.\n\n**Does it return emails?** Yes, for profiles, if you turn on `findEmail`. The email is built from the name and current company and verified over SMTP; you pay $9 / 1,000 only for verified emails. Catch-all guesses are returned for free, clearly flagged.\n\n**Can I use it on the free Apify plan?** Yes. It works with a free Apify account too, at the same prices, paid from your monthly Apify credit. Free accounts share a daily capacity: when it is reached, the inputs left get a `free-plan-limit` row and are not charged. Paid Apify plans have no such limit ([pricing](https://apify.com/pricing)).\n\n**Can I search LinkedIn by keyword without cookies?** Yes: `mode: \"search\"` finds LinkedIn profiles and companies by keyword, job title and location through Google, with no LinkedIn login, no cookies and no Sales Navigator subscription. You pay $4.90 / 1,000 results found; empty searches are free.\n\n**Is it a Sales Navigator alternative?** For prospect lists, yes: search by title + industry + city, get profile URLs, names, positions and companies, then verified emails. It does not send connection requests or messages.\n\n**Is it legal?** It only collects publicly available data. You are responsible for using it in compliance with the privacy laws of your jurisdiction. Do not use personal data without a legitimate purpose.\n\n---\n\n## Related actors\n\n- [Email Finder](https://apify.com/pnda/email-finder): Already have names and company domains? Find work emails without running a LinkedIn search.\n- [Email Verifier](https://apify.com/pnda/email-verifier): Verify a whole email list before your outreach, $0.95 per 1,000.\n- [Email Extractor](https://apify.com/pnda/email-extractor): Have company websites? Extract the emails, phones and social links they publish.\n- [Crunchbase API](https://apify.com/pnda/crunchbase-scraper): Targeting startups? Find funded companies and their investors, then their people here.\n- [PitchBook Scraper](https://apify.com/pnda/pitchbook-scraper): Need private company data (total raised, latest deal, investors) for your accounts.\n\n---\n\n## ▶️ Start now\n\nSearch LinkedIn or paste your URLs, click **Run**, export your dataset. LinkedIn data and leads on tap: no cookies, no login.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-scraper",
      "title": "LinkedIn Leads Scraper: Apollo, ZoomInfo & Lusha Alternative",
      "version": "1.0",
      "buildTag": "latest",
      "description": "LinkedIn leads finder with live-verified work emails, no cookies or login. A fresh-data Apollo, ZoomInfo and Lusha alternative: search people and companies by job title, city and keywords, scrape profiles, companies, jobs and posts. Sales Navigator alternative. $3.50 per 1,000 profiles.",
      "input": {
        "title": "LinkedIn Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What do you want to do?",
            "type": "string",
            "description": "\"Search LinkedIn\": no URL needed. Give a job title, a location and keywords; the actor finds matching LinkedIn profiles or companies through Google (no login, no cookies, no LinkedIn account), then can scrape each one and find its verified work email. \"Scrape LinkedIn URLs\": paste LinkedIn URLs you already have and get full records.",
            "editor": "select",
            "enum": [
              "search",
              "urls"
            ],
            "enumTitles": [
              "🔎 Search LinkedIn (no URL needed)",
              "Scrape LinkedIn URLs"
            ],
            "default": "urls",
            "prefill": "search"
          },
          "searchType": {
            "title": "Search for",
            "type": "string",
            "description": "Search mode: find people (linkedin.com/in profiles) or companies (linkedin.com/company pages).",
            "editor": "select",
            "enum": [
              "people",
              "company"
            ],
            "enumTitles": [
              "People (profiles)",
              "Companies"
            ],
            "default": "people",
            "prefill": "people",
            "sectionCaption": "🔎 Search LinkedIn (no URL needed)",
            "sectionDescription": "Used when \"What do you want to do?\" is \"Search LinkedIn\". Pipeline: 1) Google x-ray search of public LinkedIn pages finds the leads (no LinkedIn account, no cookies, zero ban risk); 2) optionally, each lead is scraped for its full profile or company page; 3) optionally, the person's work email is found and verified live over SMTP. Each step is billed only for what it returns."
          },
          "role": {
            "title": "Job title / role",
            "type": "string",
            "description": "Job title to look for, e.g. \"CEO\", \"head of sales\", \"recruiter\". People search: added to the query. Company search with \"Find people at each company\": the role searched at each company.",
            "editor": "textfield",
            "prefill": "Founder"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region or country, e.g. \"Paris\", \"London\", \"Texas\".",
            "editor": "textfield",
            "prefill": "London"
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Industry, skills or any words, e.g. \"SaaS\", \"marketing agency\", \"fintech\", \"shopify\". When a search finds nothing, it is retried without the keywords, then without the location (said in the results), before ending with a free \"0 results\" row.",
            "editor": "textfield",
            "prefill": "SaaS"
          },
          "maxResults": {
            "title": "Max results",
            "type": "integer",
            "description": "Maximum number of leads (people or companies) to return. Google pages hold about 10 results, so multiples of 10 work best. Minimum 5.",
            "default": 20,
            "minimum": 5,
            "maximum": 1000
          },
          "onlyNew": {
            "title": "Only new leads (skip what you already got)",
            "type": "boolean",
            "default": false,
            "description": "Search mode: skip the people / companies you already received from this Actor in previous runs (same Apify account, last 12 months) and keep searching until you have \"Max results\" NEW ones. Example: 20 growth marketers in Lille yesterday, run again with onlyNew for 20 more, no duplicate. Leads skipped are never charged."
          },
          "scrapeResults": {
            "title": "Step 2: scrape full details of each lead",
            "type": "boolean",
            "description": "Also scrape each profile / company found (same full record as URL mode: experience, education, company size, etc.), billed per record like URL mode. Without it you get the Google data only: LinkedIn URL, name, position, company, location.",
            "default": false,
            "editor": "checkbox"
          },
          "findEmail": {
            "title": "Step 3: find verified work email (people)",
            "type": "boolean",
            "description": "Finds each person's professional email from their name and current company (company domain from the profile, otherwise guessed from the company name), then verifies it live over SMTP with the built-in email finder. Works in search mode (people) and in URL mode with Profile URLs. Billed only when a verified email is found ($9 / 1,000). Catch-all domains return a best guess with confidence \"catch-all\", free of charge.",
            "default": false,
            "editor": "checkbox"
          },
          "requireEmail": {
            "title": "Only leads with a verified email",
            "type": "boolean",
            "editor": "checkbox",
            "default": false,
            "description": "People search only: deliver only people whose work email was found and verified. Profiles without one are skipped and not charged; the search looks at up to 3x more profiles to fill your list. Turns \"Find emails\" on."
          },
          "companies": {
            "title": "People at these companies (optional)",
            "type": "array",
            "editor": "json",
            "sectionCaption": "People at companies",
            "description": "Skip the open search and find people at these companies: [{\"name\": \"SV Angel\", \"website\": \"svangel.com\"}, …]. Uses \"Job title / role\" (e.g. partner, CEO) and \"peoplePerCompany\" (default 3). The website is used to find each person's email. Max 200 companies.",
            "prefill": []
          },
          "type": {
            "title": "Content type",
            "type": "string",
            "description": "Used when \"What do you want to do?\" is \"Scrape LinkedIn URLs\": what kind of LinkedIn URLs are you providing?",
            "editor": "select",
            "enum": [
              "Profile",
              "Company",
              "Job",
              "Post"
            ],
            "default": "Profile",
            "prefill": "Profile",
            "sectionCaption": "Scrape LinkedIn URLs",
            "sectionDescription": "Used when \"What do you want to do?\" is \"Scrape LinkedIn URLs\"."
          },
          "urls": {
            "title": "LinkedIn URLs",
            "type": "array",
            "description": "LinkedIn URLs matching the selected content type.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/satyanadella/"
            ]
          },
          "findPeopleAtCompanies": {
            "title": "Find people at each company (company search)",
            "type": "boolean",
            "description": "Company search only: for every company found, also search its employees with the job title in \"Job title / role\" (one extra search per company, up to \"People per company\" profiles, each billed as a search result).",
            "default": false,
            "editor": "checkbox",
            "sectionCaption": "Options",
            "sectionDescription": "Advanced search options. The defaults work for most searches."
          },
          "peoplePerCompany": {
            "title": "People per company",
            "type": "integer",
            "description": "With \"Find people at each company\": maximum profiles per company (5 to 10).",
            "default": 10,
            "minimum": 1,
            "maximum": 10
          },
          "country": {
            "title": "Google country",
            "type": "string",
            "description": "Two-letter Google country code used for the search (gl), e.g. us, fr, gb, de.",
            "default": "us",
            "editor": "textfield"
          },
          "language": {
            "title": "Google language",
            "type": "string",
            "description": "Two-letter Google interface language (hl), e.g. en, fr.",
            "default": "en",
            "editor": "textfield"
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Scrape Results",
        "description": "One row per scraped URL (URL mode) or per LinkedIn lead found (search mode).",
        "properties": {
          "dataset": {
            "type": "string",
            "title": "Results dataset",
            "description": "All scraped records (JSON, CSV, Excel).",
            "template": "{{links.apiDefaultDatasetUrl}}/items?view=overview"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "LinkedIn results",
          "fields": {},
          "views": {
            "overview": {
              "title": "Profiles & search",
              "transformation": {
                "fields": [
                  "name",
                  "position",
                  "company",
                  "location",
                  "linkedinUrl",
                  "url",
                  "email",
                  "email_status",
                  "email_confidence",
                  "followers",
                  "query",
                  "status",
                  "message"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "position": {
                    "label": "Position",
                    "format": "text"
                  },
                  "company": {
                    "label": "Company",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "linkedinUrl": {
                    "label": "LinkedIn",
                    "format": "link"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "email": {
                    "label": "Email",
                    "format": "text"
                  },
                  "email_status": {
                    "label": "Email status",
                    "format": "text"
                  },
                  "email_confidence": {
                    "label": "Email confidence",
                    "format": "text"
                  },
                  "followers": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "query": {
                    "label": "Search query",
                    "format": "text"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "message": {
                    "label": "Message",
                    "format": "text"
                  }
                }
              }
            },
            "companies": {
              "title": "Companies",
              "transformation": {
                "fields": [
                  "name",
                  "url",
                  "industries",
                  "company_size",
                  "headquarters",
                  "website",
                  "followers",
                  "employees_in_linkedin"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "url": {
                    "label": "LinkedIn",
                    "format": "link"
                  },
                  "industries": {
                    "label": "Industry",
                    "format": "text"
                  },
                  "company_size": {
                    "label": "Size",
                    "format": "text"
                  },
                  "headquarters": {
                    "label": "Headquarters",
                    "format": "text"
                  },
                  "website": {
                    "label": "Website",
                    "format": "link"
                  },
                  "followers": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "employees_in_linkedin": {
                    "label": "Employees on LinkedIn",
                    "format": "number"
                  }
                }
              }
            },
            "jobs": {
              "title": "Jobs",
              "transformation": {
                "fields": [
                  "job_title",
                  "company_name",
                  "job_location",
                  "job_seniority_level",
                  "job_employment_type",
                  "job_num_applicants",
                  "job_posted_date",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "job_title": {
                    "label": "Job title",
                    "format": "text"
                  },
                  "company_name": {
                    "label": "Company",
                    "format": "text"
                  },
                  "job_location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "job_seniority_level": {
                    "label": "Seniority",
                    "format": "text"
                  },
                  "job_employment_type": {
                    "label": "Employment type",
                    "format": "text"
                  },
                  "job_num_applicants": {
                    "label": "Applicants",
                    "format": "number"
                  },
                  "job_posted_date": {
                    "label": "Posted",
                    "format": "date"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "posts": {
              "title": "Posts",
              "transformation": {
                "fields": [
                  "user_id",
                  "post_text",
                  "num_likes",
                  "num_comments",
                  "date_posted",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "user_id": {
                    "label": "Author",
                    "format": "text"
                  },
                  "post_text": {
                    "label": "Text",
                    "format": "text"
                  },
                  "num_likes": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "num_comments": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "date_posted": {
                    "label": "Posted",
                    "format": "date"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# LinkedIn Leads Scraper: Apollo, ZoomInfo & Lusha Alternative\n\n**Fresh B2B leads straight from LinkedIn, with live-verified work emails. A LinkedIn scraper with no cookies and no login.** Search LinkedIn people and companies by keyword, job title and location, scrape full **profiles**, **company data**, **jobs** and **posts** from URLs, and get **verified work emails**. One actor, pay per result.\n\n- 🔒 **No cookies, no login, no LinkedIn account.** Nothing touches your account, so it can never be restricted or banned.\n- 🔎 **LinkedIn search without Sales Navigator** (`mode: \"search\"`): find LinkedIn profiles like *\"CEO, marketing agency, Paris\"* or companies like *\"SaaS, London\"*. A **Sales Navigator alternative** for lead generation, built on Google x-ray search of public LinkedIn pages.\n- 🏢➡️👤 **Company → decision makers**: find companies, then the CEO / head of sales / recruiter at each one, in the same run.\n- 📧 **Verified work email** (`findEmail`): name + company → professional email, checked live over SMTP. **$9 / 1,000 emails found**, charged only when verified.\n- 🧩 **A LinkedIn API alternative**: call it over HTTP from the Apify API, n8n, Make, Zapier, Clay or your own code. No LinkedIn developer app, no partner approval.\n- 💸 **Pay only for rows you receive.** Invalid URLs, dead pages and empty searches are **never charged**.\n- 🆓 **Works with a free Apify account too**: every mode at the same prices, from your monthly Apify credit (shared daily capacity for free accounts).\n- 📦 Export to **JSON, CSV, Excel, HTML, XML** or stream the dataset straight into your pipeline.\n\n---\n\n## 🆚 Apollo, ZoomInfo & Lusha alternative: fresh leads, not an old database\n\nLead databases are built once and resold for months: people change jobs, emails start bouncing, and you pay for contacts that no longer exist. This actor works the other way round: **every lead is found on LinkedIn at the moment you run it**.\n\n| | Lead databases (Apollo, ZoomInfo, Lusha...) | This actor |\n|---|---|---|\n| Where the data comes from | A database refreshed from time to time | Live public LinkedIn pages, at run time |\n| Job title and company | Can be months old | What the profile shows today |\n| Work email | Often guessed or stale | Checked live on the mail server, charged only when valid |\n| Bounced addresses | Stay in the list | Addresses reported as bounced are removed automatically |\n| Pricing | Seats, monthly plans, credit packs | Pay per result, no subscription |\n| Search | Their filters, their index | Job title, company, city and keywords, like a LinkedIn search |\n\n**Typical use:** describe your ideal leads (*\"head of sales, SaaS, London\"*), get the matching LinkedIn profiles, their full profile and a verified work email, then export to your CRM, Clay, n8n, Make or Zapier.\n\n---\n\n## 🚀 From a LinkedIn search to a verified email, in one run\n\nNo URL list needed. Describe who you are looking for, and the actor chains three steps:\n\n1. **🔎 Search**: Google x-ray search of public LinkedIn pages finds the matching people (or companies). No LinkedIn account, no cookies.\n2. **👤 Profile**: each person found is scraped for the full profile (experience, education, current company...).\n3. **📧 Verified email**: the work email is built from the name and company, then verified live over SMTP.\n\nExample: CEOs of agencies in Paris, with full profiles and verified emails:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchType\": \"people\",\n  \"role\": \"CEO\",\n  \"location\": \"Paris\",\n  \"keywords\": \"agence\",\n  \"maxResults\": 20,\n  \"scrapeResults\": true,\n  \"findEmail\": true\n}\n```\n\nOne row per person (illustrative values, trimmed):\n\n```json\n{\n  \"resultType\": \"people\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/jane-doe\",\n  \"name\": \"Jane Doe\",\n  \"position\": \"CEO\",\n  \"company\": \"Acme Agency\",\n  \"query\": \"CEO agence Paris site:linkedin.com/in\",\n  \"rank\": 1,\n  \"details\": {\n    \"name\": \"Jane Doe\",\n    \"position\": \"CEO at Acme Agency\",\n    \"city\": \"Paris, Île-de-France, France\",\n    \"current_company\": { \"name\": \"Acme Agency\", \"title\": \"CEO\" },\n    \"experience\": [{ \"title\": \"CEO\", \"company\": \"Acme Agency\", \"start_date\": \"...\" }]\n  },\n  \"email\": \"jane.doe@acme-agency.fr\",\n  \"email_status\": \"found\",\n  \"email_confidence\": \"verified\",\n  \"email_pattern\": \"first.last\",\n  \"email_domain\": \"acme-agency.fr\",\n  \"email_domain_source\": \"guessed-from-company\"\n}\n```\n\nEach step is billed only for what it returns: **$3.50 / 1,000 people found** (launch price), $3.50 / 1,000 profiles scraped, $9 / 1,000 **verified** emails. For 20 CEOs with 8 verified emails: about $0.14. Launch pricing: search results are billed at the profile price until the dedicated search price ($4.90 / 1,000) applies on November 8. Already have LinkedIn URLs? Pick **\"Scrape LinkedIn URLs\"** instead.\n\n---\n\n## 💡 Who is it for?\n\n- **Sales & SDR teams** building lead lists from a LinkedIn search (title + industry + city) without Sales Navigator, then enriching them (job title, company, seniority) before outreach.\n- **Recruiters** pulling full candidate profiles (experience, education) in bulk.\n- **RevOps / CRM owners** refreshing job titles and employers every month.\n- **Market researchers & investors** collecting LinkedIn company data (size, industry, HQ, followers, headcount on LinkedIn).\n- **Job-market analysts** tracking open roles of target companies as hiring signals.\n- **Social & content teams** measuring reactions and comments on posts.\n- **Data & AI teams** feeding LinkedIn data into scoring models, RAG pipelines or agents.\n\n---\n\n## ⚙️ How it works\n\nTwo modes, chosen with the first field of the form, **\"What do you want to do?\"**:\n\n- **🔎 Search LinkedIn (no URL needed)** (`mode: \"search\"`, selected when you open the form): give a job title, a location and keywords (for example *CEO / Paris / agence*), get LinkedIn profile or company URLs with name, position, company and location. Optionally scrape each result and find its verified email. Launch price: $3.50 / 1,000 results (billed as the `profile` event) until November 8, then $4.90 / 1,000.\n- **Scrape LinkedIn URLs** (`mode: \"urls\"`, the default over the API when `mode` is omitted): pick a content type (`Profile`, `Company`, `Job` or `Post`), paste LinkedIn URLs, get one full row per URL.\n\n### Scrape URLs\n\nURLs that don't match the selected mode are skipped (and listed in the log) before anything happens. URLs that LinkedIn can't serve are saved in the key-value store record `FAILED_URLS` and are **not charged**.\n\n| Mode | Accepted URLs | What you get |\n|---|---|---|\n| **Profile** | `linkedin.com/in/<handle>` | Name, headline, location, followers, connections, about, current company, full experience, education, awards, recent activity & posts, similar profiles |\n| **Company** | `linkedin.com/company/<slug>` | Name, industry, company size, headquarters, website, followers, employees on LinkedIn, description, specialties, locations |\n| **Job** | `linkedin.com/jobs/view/<id>` | Title, company, location, seniority, employment type, job function, industries, number of applicants, posted date, full description |\n| **Post** | `linkedin.com/posts/...` or `linkedin.com/feed/update/...` | Author, post text (plain + HTML), date, likes, comments, top comments, hashtags, tagged people & companies, images, videos, documents |\n\nCountry subdomains (`fr.linkedin.com`, `uk.linkedin.com`...) and query strings are accepted.\n\n---\n\n## 📥 Input\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `type` | string | ✅ | `Profile` (default), `Company`, `Job` or `Post` |\n| `urls` | array of strings | ✅ | LinkedIn URLs matching the selected type |\n| `findEmail` | boolean | | Profile mode only, default `false`. Also finds the person's verified work email (see below) |\n\n### Example inputs\n\n```json\n{\n  \"type\": \"Profile\",\n  \"urls\": [\n    \"https://www.linkedin.com/in/satyanadella/\",\n    \"https://www.linkedin.com/in/jeffweiner08/\"\n  ]\n}\n```\n\nProfiles **with verified work email**:\n\n```json\n{\n  \"type\": \"Profile\",\n  \"findEmail\": true,\n  \"urls\": [\"https://www.linkedin.com/in/satyanadella/\"]\n}\n```\n\n```json\n{\n  \"type\": \"Company\",\n  \"urls\": [\n    \"https://www.linkedin.com/company/microsoft/\",\n    \"https://www.linkedin.com/company/bereal/\"\n  ]\n}\n```\n\n```json\n{ \"type\": \"Job\", \"urls\": [\"https://www.linkedin.com/jobs/view/4440458716/\"] }\n```\n\n```json\n{ \"type\": \"Post\", \"urls\": [\"https://www.linkedin.com/posts/reidhoffman_give-people-a-reason-to-want-the-ai-future-activity-7508645307132600321-dOsB\"] }\n```\n\n---\n\n## 🔎 Search LinkedIn without cookies (`mode: \"search\"`)\n\nFind LinkedIn profiles and companies **without a LinkedIn account, without cookies and without Sales Navigator**. In the form, pick **\"🔎 Search LinkedIn (no URL needed)\"**: the search fields come right below it.\n\nThe pipeline has three steps, each billed only for what it returns:\n\n1. **Search** (always): a Google x-ray search of public LinkedIn pages (`site:linkedin.com/in` or `site:linkedin.com/company`) finds the leads: LinkedIn URL, name, position, company, location.\n2. **Scrape** (`scrapeResults`, optional): each lead's full profile or company page, same record as URL mode.\n3. **Email** (`findEmail`, optional, people): the built-in email finder guesses the work email from the name and company, then verifies it live over SMTP. Only verified emails are billed.\n\n> Pricing: launch price **$3.50 / 1,000 search results** (billed as the `profile` event) until **November 8**; from then on search results have their own `search-result` event at $4.90 / 1,000.\n\n| Field | Description |\n|---|---|\n| `searchType` | `people` (profiles, default) or `company` |\n| `keywords` | Industry, skills, any words: `marketing agency`, `saas`, `shopify` |\n| `role` | Job title: `CEO`, `head of sales`, `recruiter` |\n| `location` | City, region or country: `Paris`, `London`, `Texas` |\n| `maxResults` | Max leads (default 20, min 5). Google pages hold ~10 results: multiples of 10 work best |\n| `findPeopleAtCompanies` | Company search: also find people with the `role` at each company found |\n| `peoplePerCompany` | 5 to 10 profiles per company (default 10) |\n| `scrapeResults` | Also scrape the full profile / company page of each lead (billed like URL mode) |\n| `findEmail` | Also find the verified work email of each person found |\n| `country`, `language` | Google country (`us`, `fr`, `gb`...) and language (`en`, `fr`...) |\n\nExample: CEOs of agencies in Paris, with verified emails:\n\n```json\n{ \"mode\": \"search\", \"searchType\": \"people\", \"role\": \"CEO\", \"keywords\": \"agency\", \"location\": \"Paris\", \"maxResults\": 50, \"findEmail\": true }\n```\n\nExample: marketing agencies in Lyon, then their CEO:\n\n```json\n{ \"mode\": \"search\", \"searchType\": \"company\", \"keywords\": \"marketing agency\", \"location\": \"Lyon\", \"maxResults\": 20, \"findPeopleAtCompanies\": true, \"role\": \"CEO\" }\n```\n\nOutput row (real result, trimmed):\n\n```json\n{\n  \"resultType\": \"people\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/valeriebodocco\",\n  \"name\": \"Valérie Bodocco\",\n  \"position\": \"CEO\",\n  \"company\": \"L'Agence de Paris\",\n  \"location\": null,\n  \"title\": \"Valérie Bodocco - CEO - L'Agence de Paris\",\n  \"snippet\": \"En immobilier, je dirige depuis 2010 le Groupe L'Agence...\",\n  \"query\": \"CEO agency Paris site:linkedin.com/in\",\n  \"rank\": 1\n}\n```\n\nPeople found through `findPeopleAtCompanies` also carry `sourceCompanyName`, `sourceCompanyUrl` and `companyMatch` (`true` when the result mentions the company; `false` rows are looser Google matches such as former employees or namesakes, and come last).\n\n**Empty search? It is broadened for you.** When a search finds no lead, it is retried automatically, first **without the keywords**, then **without the location** (and without the keywords when a job title remains). Rows from a broadened search carry `searchBroadened` (e.g. `\"without keywords \\\"SaaS\\\"\"`) and the run status says what was removed. If even that finds nothing, you get one free `no-results` row: *\"0 results: try broader keywords, a larger city or another job title\"*. Never charged.\n\nGood to know: search covers what Google indexes of public LinkedIn pages (very broad, but not 100 % of LinkedIn), and `name` / `position` / `company` are parsed from the Google title and snippet. Turn on `scrapeResults` when you need the full, structured profile.\n\n---\n\n## 📤 Output examples (trimmed)\n\n**Profile**\n\n```json\n{\n  \"name\": \"Satya Nadella\",\n  \"first_name\": \"Satya\",\n  \"last_name\": \"Nadella\",\n  \"position\": \"Chairman and CEO at Microsoft\",\n  \"city\": \"Redmond, Washington, United States\",\n  \"country_code\": \"US\",\n  \"followers\": 12183622,\n  \"connections\": 500,\n  \"current_company\": { \"name\": \"Microsoft\", \"company_id\": \"microsoft\", \"title\": \"Chairman and CEO\" },\n  \"about\": \"As chairman and CEO of Microsoft, I define my mission...\",\n  \"experience\": [{ \"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"start_date\": \"...\" }],\n  \"education\": [{ \"title\": \"The University of Chicago Booth School of Business\" }],\n  \"url\": \"https://www.linkedin.com/in/satyanadella\"\n}\n```\n\nWith `findEmail: true`, each profile row gets these extra fields:\n\n```json\n{\n  \"email\": \"jane.doe@acme.com\",\n  \"email_status\": \"found\",\n  \"email_confidence\": \"verified\",\n  \"email_pattern\": \"first.last\",\n  \"email_domain\": \"acme.com\",\n  \"email_domain_source\": \"guessed-from-company\"\n}\n```\n\n**Company**\n\n```json\n{\n  \"name\": \"Microsoft\",\n  \"industries\": \"Software Development\",\n  \"company_size\": \"10,001+ employees\",\n  \"headquarters\": \"Redmond, Washington\",\n  \"website\": \"https://news.microsoft.com/\",\n  \"followers\": 29163922,\n  \"employees_in_linkedin\": 231769,\n  \"url\": \"https://www.linkedin.com/company/microsoft\"\n}\n```\n\n**Job**\n\n```json\n{\n  \"job_title\": \"Data Engineer Expérimenté F/H\",\n  \"company_name\": \"EY\",\n  \"job_location\": \"Paris, Île-de-France, France\",\n  \"job_seniority_level\": \"Mid-Senior level\",\n  \"job_employment_type\": \"Full-time\",\n  \"job_function\": \"Information Technology\",\n  \"job_num_applicants\": 98,\n  \"job_posted_date\": \"2026-09-23T08:00:26.424Z\",\n  \"job_summary\": \"Chez EY, nous sommes « All in » pour façonner votre avenir...\",\n  \"url\": \"https://www.linkedin.com/jobs/view/4440458716/\"\n}\n```\n\n**Post**\n\n```json\n{\n  \"user_id\": \"reidhoffman\",\n  \"date_posted\": \"2026-09-23T21:55:45.104Z\",\n  \"post_type\": \"post\",\n  \"num_likes\": 492,\n  \"num_comments\": 151,\n  \"post_text\": \"If people can't point to something in their lives that has become easier, more affordable...\",\n  \"url\": \"https://www.linkedin.com/posts/reidhoffman_give-people-a-reason-to-want-the-ai-future-activity-7508645307132600321-dOsB\"\n}\n```\n\nEvery row also contains the original `input` and a `timestamp`. Field names are stable, so you can map them once in your CRM or spreadsheet.\n\n---\n\n## 📧 Find verified work emails (`findEmail`)\n\nTurn a list of LinkedIn profile URLs into a list of **verified professional emails**, in the same run.\n\n1. The actor takes the person's **first and last name** and **current company** from the profile.\n2. The company domain comes from the profile when it is there; otherwise it is deduced from the company name (only domains that actually receive email are kept).\n3. The usual corporate patterns (`first.last`, `first`, `flast`, `firstlast`...) are tested one by one with a **live SMTP check**, stopping at the first verified address.\n\n| `email_status` | Meaning | Charged? |\n|---|---|---|\n| `found` | Mailbox verified (`email_confidence: \"verified\"`) | ✅ `email-found` |\n| `catch-all` | The domain accepts every address: `email` is the most likely pattern, **unverified** (`email_confidence: \"catch-all\"`) | ❌ free |\n| `not-found` | No tested pattern exists | ❌ |\n| `unknown` | The mail server gave no clear answer | ❌ |\n| `no-mx` / `no-company` | No mail domain for the current company | ❌ |\n\nThe profile itself is always delivered and billed as a normal `profile`, whatever the email result.\n\n---\n\n## 💰 Pricing (pay per result)\n\n**Store discounts:** on Apify Silver, Gold, Platinum and Diamond plans, some events cost up to 20 % less. The Pricing tab of the Store page shows the exact price for each plan.\n\nYou pay a fixed price per LinkedIn record actually returned. No start fee, no monthly rental, no charge for failed URLs.\n\n| Event | What triggers it | Price |\n|---|---|---|\n| `profile` | 1 profile returned | $3.50 / 1,000 |\n| `company` | 1 company page returned | $6.49 / 1,000 |\n| `job` | 1 job listing returned | $5.90 / 1,000 |\n| `post` | 1 post returned | $5.90 / 1,000 |\n| `search-result` | 1 LinkedIn profile or company found by a search (`mode: \"search\"`) | $4.90 / 1,000 |\n| `email-found` | 1 **verified** work email found (`findEmail`) | $9.00 / 1,000 |\n\n| Example run | Records | Approx. cost |\n|---|---|---|\n| Quick test | 10 profiles | ~$0.035 |\n| Lead list | 1,000 profiles | ~$3.50 |\n| Account list | 1,000 companies | ~$6.49 |\n| Lead list + emails | 1,000 profiles, `findEmail` on, 400 verified emails | ~$3.50 + $3.60 = ~$7.10 |\n| LinkedIn search | 1,000 people found by keyword + title + city | ~$4.90 |\n| Search + emails | 1,000 people found, `findEmail` on, 350 verified emails | ~$4.90 + $3.15 = ~$8.05 |\n\n**Works with a free Apify account too.** Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. Limit: free accounts share a daily capacity; once it is used up, the remaining inputs are skipped with one `free-plan-limit` row (not charged). Retry the next day, or switch to a paid Apify plan to run without this limit.\n\nSet **Maximum cost per run** in the run options to cap your spend: duplicate URLs are removed and the actor only scrapes as many URLs as your limit can pay for; the rest are skipped and listed in the log. With `findEmail`, each URL reserves the price of a profile **and** an email. In search mode, a Google page is only requested when your limit still covers at least 5 more results.\n\n---\n\n## 🔌 Use it as a LinkedIn API\n\nRun it synchronously and get the rows in one HTTP call:\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/pnda~linkedin-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"type\":\"Company\",\"urls\":[\"https://www.linkedin.com/company/microsoft/\"]}'\n```\n\nOr use the Apify client for JavaScript/Python, the n8n / Make / Zapier integrations, webhooks, or Apify Schedules for recurring refreshes.\n\n---\n\n## 🚀 Why this actor\n\n- ✅ **Search + scrape + email in one actor**: find LinkedIn profiles, scrape profiles, company data, jobs and posts, get verified emails. One integration instead of five.\n- ✅ **No cookies, no login**: zero risk for your LinkedIn account.\n- ✅ **Bulk by URL**: hundreds of URLs per run, one clean row per URL.\n- ✅ **Rich data**: full career history, company headcount, applicants count, post engagement.\n- ✅ **Fair billing**: invalid and dead URLs are never charged.\n\n---\n\n## ❓ FAQ\n\n**Do I need a LinkedIn account, cookies or a proxy?** No.\n\n**How fresh is the data?** Records are collected when you run the actor, typically within seconds to a few minutes per batch. A profile or company page already collected in the last 30 days may be served from our result cache: faster, same price, same record.\n\n**What if a URL fails?** It is not charged. The error (e.g. `dead_page`) is stored in the key-value store record `FAILED_URLS`.\n\n**Does it return emails?** Yes, for profiles, if you turn on `findEmail`. The email is built from the name and current company and verified over SMTP; you pay $9 / 1,000 only for verified emails. Catch-all guesses are returned for free, clearly flagged.\n\n**Can I use it on the free Apify plan?** Yes. It works with a free Apify account too, at the same prices, paid from your monthly Apify credit. Free accounts share a daily capacity: when it is reached, the inputs left get a `free-plan-limit` row and are not charged. Paid Apify plans have no such limit ([pricing](https://apify.com/pricing)).\n\n**Can I search LinkedIn by keyword without cookies?** Yes: `mode: \"search\"` finds LinkedIn profiles and companies by keyword, job title and location through Google, with no LinkedIn login, no cookies and no Sales Navigator subscription. You pay $4.90 / 1,000 results found; empty searches are free.\n\n**Is it a Sales Navigator alternative?** For prospect lists, yes: search by title + industry + city, get profile URLs, names, positions and companies, then verified emails. It does not send connection requests or messages.\n\n**Is it legal?** It only collects publicly available data. You are responsible for using it in compliance with the privacy laws of your jurisdiction. Do not use personal data without a legitimate purpose.\n\n---\n\n## Related actors\n\n- [Email Finder](https://apify.com/pnda/email-finder): Already have names and company domains? Find work emails without running a LinkedIn search.\n- [Email Verifier](https://apify.com/pnda/email-verifier): Verify a whole email list before your outreach, $0.95 per 1,000.\n- [Email Extractor](https://apify.com/pnda/email-extractor): Have company websites? Extract the emails, phones and social links they publish.\n- [Crunchbase API](https://apify.com/pnda/crunchbase-scraper): Targeting startups? Find funded companies and their investors, then their people here.\n- [PitchBook Scraper](https://apify.com/pnda/pitchbook-scraper): Need private company data (total raised, latest deal, investors) for your accounts.\n\n---\n\n## ▶️ Start now\n\nSearch LinkedIn or paste your URLs, click **Run**, export your dataset. LinkedIn data and leads on tap: no cookies, no login.\n"
    },
    "buildNumber": "1.0.56",
    "imageDigest": "3db61a7a78a654191f0304602c39e953de79c04a5e92a63232755eae789f86ba",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0022833333333333334
    }
  }
}