{
  "data": {
    "id": "KIbohGt7Qv9YU5s3q",
    "actId": "eZFfkRpZXeYOu3OAP",
    "userId": "yD5UfT6bandvym756",
    "startedAt": "2026-09-04T21:31:33.915Z",
    "finishedAt": "2026-09-04T21:32:13.862Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 39883,
      "runTimeSecs": 39.883,
      "computeUnits": 0.04431444444444444,
      "imageSizeBytes": 14945792
    },
    "options": {
      "useCache": false,
      "betaPackages": false,
      "tag": "latest",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper\",\n  \"description\": \"Extract complete public LinkedIn profiles without login or cookies.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"LinkedIn URLs or usernames\",\n      \"type\": \"array\",\n      \"description\": \"Full /in/ URLs or bare usernames.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [\n        \"https://www.linkedin.com/in/satyanadella/\"\n      ]\n    },\n    \"profiles\": {\n      \"title\": \"CRM records (advanced)\",\n      \"type\": \"array\",\n      \"description\": \"Optional objects with url and id. The id is copied to output as inputId.\",\n      \"editor\": \"json\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"title\": \"LinkedIn URL or username\",\n            \"description\": \"Full LinkedIn /in/ URL or bare public username.\",\n            \"type\": \"string\"\n          },\n          \"id\": {\n            \"title\": \"CRM record ID\",\n            \"description\": \"Your correlation identifier; copied unchanged to inputId in the result.\",\n            \"type\": \"string\"\n          }\n        },\n        \"required\": [\n          \"url\"\n        ]\n      },\n      \"default\": []\n    },\n    \"enrich\": {\n      \"title\": \"Add lead intelligence\",\n      \"type\": \"boolean\",\n      \"description\": \"Compute seniority, decision-maker status, tenure, job-change signals and lead score at no extra charge.\",\n      \"default\": true\n    },\n    \"exportFormat\": {\n      \"title\": \"Output format\",\n      \"description\": \"Choose complete nested JSON or a flat row suitable for CSV, Excel and CRM imports.\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"default\",\n        \"flat\"\n      ],\n      \"enumTitles\": [\n        \"Full profile (nested JSON)\",\n        \"Flat row (CSV / CRM)\"\n      ],\n      \"default\": \"default\"\n    },\n    \"maxConcurrency\": {\n      \"title\": \"Parallel profiles\",\n      \"description\": \"Maximum number of profiles processed at the same time.\",\n      \"type\": \"integer\",\n      \"default\": 5,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"maxRetries\": {\n      \"title\": \"Retries on transient failure\",\n      \"description\": \"Additional attempts for temporary throttling, empty responses or network failures.\",\n      \"type\": \"integer\",\n      \"default\": 1,\n      \"minimum\": 0,\n      \"maximum\": 3\n    },\n    \"timeout\": {\n      \"title\": \"Timeout per profile (seconds)\",\n      \"description\": \"Maximum time allowed for one profile extraction attempt.\",\n      \"type\": \"integer\",\n      \"default\": 75,\n      \"minimum\": 20,\n      \"maximum\": 120\n    },\n    \"diagnosticDumps\": {\n      \"title\": \"Save fallback diagnostics\",\n      \"description\": \"Developer troubleshooting only: save a bounded raw public-profile response to the default key-value store when the fallback source is used.\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"editor\": \"hidden\"\n    },\n    \"readerOnly\": {\n      \"title\": \"Reader-only diagnostic mode\",\n      \"description\": \"Developer test mode: never use residential direct fallback.\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"editor\": \"hidden\"\n    }\n  },\n  \"required\": []\n}",
    "readme": "![LinkedIn Profile Scraper](https://api.apify.com/v2/key-value-stores/E76hLVOROveornuAY/records/linkedin-profile-hero-v3.jpg)\n\n# LinkedIn Profile Scraper — No Cookies Required | Email, Company & Employees\n\n**Bulk LinkedIn profile scraper — cookieless, no login, no browser, fast.**\nTurn LinkedIn profile URLs or usernames into complete, live CRM records. Each\nprofile includes current role and company, work history, education, skills,\nemails and websites when public, recent jobs/posts activity, and a free derived\nintelligence layer for sales, recruiting and people search.\n\nThis LinkedIn scraper needs **no cookies and no account** — so there is zero\naccount-ban risk. Feed it a bulk list, get structured profiles back in one run.\nExport JSON, CSV or Excel, call it via API, or wire it into webhooks, n8n, Make\nand MCP agents. From **$1.2 per 1,000 profiles** on paid plans.\n\n## Why this Actor?\n\n| | This Actor | Typical LinkedIn scrapers |\n|---|---|---|\n| Login / cookies | Never needed | Often need cookies (account-ban risk) |\n| Data freshness | Fetched live at run time | Frequently cached, weeks old |\n| Deep career data | Experience, education and skills | Often a paid add-on |\n| Lead intelligence | Seniority, decision maker, tenure, lead score | Usually absent |\n| Input correlation | Preserve your CRM `id` | Often absent |\n| Output | Full JSON or flat CRM row | Varies |\n\n## What you get\n\n- Identity: name, username, headline, about, location and country.\n- Current snapshot: title, company, followers, connections, website and photo.\n- Full profile: structured experience, education, skills, certifications, volunteer roles, projects, publications, honors, languages and recommendations.\n- Public content: recent activity, authored articles and LinkedIn courses when shown.\n- Intelligence: seniority, decision-maker flag, total experience, current tenure,\n  open-to-work/recent-change signals, industry guess, lead score and reasons.\n- Integration-ready: nested JSON or a flat CSV/Excel/CRM row, plus caller-provided\n  IDs for joining results back to source records.\n\n## Input\n\n```json\n{\n  \"profileUrls\": [\"satyanadella\"],\n  \"profiles\": [{\"url\": \"https://www.linkedin.com/in/williamhgates/\", \"id\": \"crm-42\"}],\n  \"enrich\": true,\n  \"exportFormat\": \"default\",\n  \"maxConcurrency\": 5,\n  \"maxRetries\": 1,\n  \"timeout\": 75\n}\n```\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `profileUrls` | string[] | — | URLs or usernames |\n| `profiles` | object[] | [] | Advanced `{url,id}` CRM correlation records |\n| `enrich` | boolean | true | Add free lead-intelligence fields |\n| `exportFormat` | string | default | `default` nested JSON or `flat` CRM row |\n| `maxConcurrency` | int | 5 | Parallel requests, maximum 10 |\n| `maxRetries` | int | 1 | Retries for transient failures |\n| `timeout` | int | 75 | Timeout per profile in seconds |\n\n## Output\n\n```json\n{\n  \"status\": \"success\",\n  \"inputId\": \"crm-42\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/satyanadella\",\n  \"publicIdentifier\": \"satyanadella\",\n  \"fullName\": \"Satya Nadella\",\n  \"headline\": \"Chairman and CEO at Microsoft\",\n  \"location\": \"Redmond, Washington, United States\",\n  \"currentTitle\": \"Chairman and CEO\",\n  \"currentCompany\": \"Microsoft\",\n  \"experience\": [{\"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"isCurrent\": true}],\n  \"education\": [],\n  \"skills\": [],\n  \"intelligence\": {\"seniority\": \"C-Level\", \"decisionMaker\": true, \"leadScore\": 60, \"leadTier\": \"warm\"}\n}\n```\n\n## Pricing — pay per result, cheaper on higher tiers\n\nYou pay **only for profiles successfully scraped**. Failed or empty profiles are **free** — no runaway bills.\n\n| Apify plan tier | Price / 1,000 profiles | Price / profile |\n|---|---|---|\n| **Free** | **$2.00** | $0.0020 |\n| **Bronze** | $2.00 | $0.0020 |\n| **Silver** | $1.80 | $0.0018 |\n| **Gold** | $1.60 | $0.0016 |\n| **Platinum** | $1.40 | $0.0014 |\n| **Diamond** | $1.20 | $0.0012 |\n\nHigher subscription tiers pay less per profile. Free Apify credits cover roughly **2,500 profiles/month**. No subscriptions, no monthly fees.\n\n## Use cases\n\n- **B2B lead generation** — pull fresh prospect data straight into your CRM.\n- **Recruiting** — current headlines, locations and follower signals.\n- **Sales outreach** — enrich a list of LinkedIn URLs before you send.\n- **CRM hygiene** — refresh stale LinkedIn records in bulk.\n- **Market research** — live follower counts and industry data.\n\n## Integrations (n8n, Make, MCP, AI agents)\n\nRun it from the **Apify API**, schedule it, or wire it into **n8n / Make** with the Apify nodes. Because output is clean JSON, it drops straight into **AI agents and MCP** workflows that need fresh LinkedIn data on demand.\n\n## Performance\n\n- 15–30 seconds per profile (real-time scraping, not an instant cache lookup).\n- Up to 20 concurrent requests; recommended 5–10 for the best success rate.\n- Transient hiccups are retried automatically, so a busy run won't hang or fail the whole batch.\n- ~95%+ success rate on public profiles.\n\n## FAQ\n\n**Do I need a LinkedIn account or cookies?**\nNo. The Actor reads public profile pages — no login, no cookies, no account-ban risk.\n\n**Is the data live or cached?**\nLive. Each profile is scraped in real time, so follower counts, bios and links are current.\n\n**Can it get emails and phone numbers?**\nOnly if they're publicly visible on the profile, which is rare on LinkedIn. Enable those fields only if you need them.\n\n**Why is it cheaper than other LinkedIn scrapers?**\nIt focuses on the core public fields (no heavy full-CV extraction), so it's faster and we pass the savings on.\n\n**What if a profile fails?**\nIt's retried automatically; if it still can't be scraped it's marked failed and **you are not charged** for it.\n\n## Notes\n\n- Only public profile data is extracted.\n- Restricted profiles may return partial data.\n- Recommended concurrency: 5–10 for best results.\n\n## Disclaimer\n\nThis Actor extracts only publicly available data and is **not affiliated with, endorsed by, or sponsored by LinkedIn Corporation**. LinkedIn® is a registered trademark of LinkedIn Corporation. Ensure your use complies with applicable laws and LinkedIn's terms of service.\n\n---\n\n## ⚖️ Legal, Compliance & Acceptable Use\n\n**Please read this section carefully. By running this Actor you accept these terms.**\n\n> **Bottom line:** this is a neutral, general-purpose software tool. It only\n> retrieves information that is already **publicly available**. **You — the user —\n> decide what to search for and how to use the results, so you alone are\n> responsible and liable for that use.** The developer/operator of this Actor\n> merely provides the tool and does not control, endorse, or take responsibility\n> for what you do with it.\n\n**1. Public data only.** The Actor accesses only publicly available information.\nIt does not log in on your behalf, bypass access controls, or retrieve private,\npaywalled, or password-protected data.\n\n**2. You are the responsible party (data controller).** For every run you start,\n**you** act as the data controller and are solely responsible for using the\noutput lawfully. This includes having a valid **lawful basis** (for business/B2B\nuse this is typically *legitimate interest*), honoring **data-subject rights**\n(access, correction, deletion, opt-out), and complying with all applicable laws\nand regulations — including, where relevant, the **GDPR**, **UK GDPR**,\n**CCPA/CPRA**, and similar privacy, marketing, and anti-spam laws (e.g.\nePrivacy, **CAN-SPAM**, **CASL**, **TCPA**).\n\n**3. Not a Consumer Reporting Agency.** This Actor and its operator are **not a\nconsumer reporting agency (CRA)**, and the output is **not a \"consumer report\"**\nunder the U.S. Fair Credit Reporting Act (**FCRA**) or similar laws. You must\n**NOT** use it, in whole or in part, to decide a person's eligibility for\ncredit, employment, housing/tenancy, insurance, or any other FCRA-regulated\npurpose.\n\n**4. Respect third-party terms.** You are responsible for complying with the\nterms of service of any website or platform whose public data you choose to\nprocess, and with any applicable intellectual-property rights.\n\n**5. No warranty.** The Actor is provided \"as is\", without warranty of any kind.\nPublic data may be incomplete, outdated, or inaccurate — verify independently\nbefore relying on it. Availability of sources and fields can change at any time.\n\n**6. Prohibited use.** Do not use this Actor or its output for stalking,\nharassment, discrimination, fraud, spam, or any unlawful or harmful purpose.\n\n**7. Indemnification.** You assume all risk and liability arising from your use\nof this Actor, and **you agree to defend, indemnify and hold the operator\nharmless** from any and all claims, losses, fines, or liabilities — including\nreasonable legal fees — resulting from your use or misuse of the Actor or its\noutput, or from your breach of these terms or of any law.\n\n> This section is general information, **not legal advice**. If you are unsure\n> whether your intended use is permitted, consult your own legal counsel before\n> running this Actor.\n",
    "changelog": "# Changelog\n\n## 2.4.8 — 2026-08-14\n\n- Switched production extraction to the faster primary channel after controlled\n  tests: 9/10 profiles with 16.7s p50 (the secondary channel scored 0/10).\n\n## 2.4.0 — 2026-08-14\n\n- Added canonical URL recovery from renderer metadata, HTML canonical links, redirects and a conservative search fallback after a complete miss.\n- Added completeness score, missing sections, partial-profile flag and counts.\n- Added direct JSON-LD posts/articles with dates and reaction counts.\n- Expanded flat CRM/CSV output and six purpose-built dataset views.\n\n## 2.3.0 — 2026-08-14\n\n- Added structured certifications, volunteer experience, projects, publications,\n  honors and awards, languages, recommendations, activity, authored articles\n  and courses from sections already present on public pages.\n- Added source, fetchedAt, experienceMasked and sectionsAvailable metadata.\n- Fixed activity extraction across LinkedIn's embedded sign-in modal headings.\n\n## 2.2.0 — 2026-08-14\n\n- Added `country` derived from structured profile location.\n- Hardened auth-wall rejection so sign-up pages cannot become profile rows.\n- Fixed education parsing for guest HTML whose class attributes contain literal\n  angle brackets.\n- Added an opt-in, bounded diagnostic dump for fallback HTML; normal runs never\n  store raw pages.\n\n## 2.1.0 — 2026-08-14\n\n- Added a second independent extraction source: profiles the primary renderer\n  cannot serve (login-wall or masked work history) are retried through a\n  separate direct pipeline and merged — more profiles with complete data.\n- Pacing between render requests to avoid burst throttling.\n\n## 2.0.0 — 2026-08-14\n\n- Replaced the extraction engine with a new direct fetch stack: the previous\n  upstream renderer stopped serving LinkedIn, causing empty runs.\n- Same input, same output fields, same billing contract\n  (`apify-default-dataset-item`): only successful profiles are billed.\n- Faster and cheaper runs; per-profile retries with fresh fetch on retry.\n- Profiles whose work history LinkedIn serves masked are retried; if the mask\n  persists, the profile is still returned with identity/audience fields.\n\n## 1.0.0 — 2026-08-14\n\n- Upgraded basic profiles to full profiles: current role/company, work history,\n  education, skills, connections, followers, website and profile image.\n- Added free intelligence fields: seniority, decision-maker flag, experience,\n  tenure, open-to-work and job-change signals, lead score/tier and reasons.\n- Added full and flat CRM export modes, username input, deduplication and\n  `{ \"url\": \"...\", \"id\": \"crm-id\" }` correlation objects.\n- Added output schema and Profiles / Lead intelligence dataset views.\n- Preserved the existing `apify-default-dataset-item` billing contract: only\n  successful profiles are pushed and billed; failures remain free.\n- Treat source-wide LinkedIn fetch failures as transient, retry them, and finish\n  empty runs without a false Actor failure or billed diagnostic rows.\n\nAll notable changes to this Actor will be documented here.\n\n## [0.4] — 2026-06-30 — Price update ($2/1K base, cheaper on higher tiers)\n\n### Changed\n- Pricing raised: free-plan users pay the base rate ($2/1K, same as Bronze);\n  higher subscription tiers get progressively cheaper down to $1.2/1K (Diamond).\n- README, store title and SEO updated to the new $2/1K headline; refreshed\n  hero banner.\n\n## [0.3] — 2026-06-30 — SEO, README banner, tiered pricing\n\n### Added\n- Branded README hero banner and an SEO-rewritten README (keyword H1,\n  competitor comparison, use cases, integrations, FAQ, disclaimer).\n- Fair tiered pricing (Free $1.2/1K down to Diamond $0.6/1K) — pay only for\n  profiles successfully scraped.\n\n### Fixed\n- Store `seoDescription` no longer mismatched the Actor (it previously quoted\n  the wrong price and fields copied from another scraper).\n\n## [0.2] — 2026-06-30 — Cleaner output (handles + numeric fields)\n\n### Fixed\n- **Username** is now always the real LinkedIn handle (taken from the profile\n  URL). The upstream source occasionally returned the display name in this\n  field instead of the handle.\n- **Numeric fields** (`followerCount`, `followingCount`, `postCount`) are now\n  returned as integers instead of strings, and empty numbers come back as\n  `null` — so downstream tools and the dataset table view get real numbers.\n\n## [0.1] — 2026-06-18 — Reliability: retries + no blank rows\n\n### Fixed\n- Profiles occasionally came back empty due to a transient upstream miss. The\n  Actor now retries a profile up to 2 extra times before giving up, which\n  removes most intermittent empty results.\n- Empty extractions are no longer saved as \"successful\" blank rows — a profile\n  that yields no data is reported as failed and is **not charged**.\n\n## [0.0] — initial release\n- Public LinkedIn profile fields (name, bio, location, followers, …), no login.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper-no-cookies",
      "title": "LinkedIn Profile Scraper — No Cookies | Email & Company",
      "description": "LinkedIn profile scraper without login — no cookies, cookieless, bulk & fast. Extract email, company & employees data, experience, education, skills, jobs/posts activity. People search for CRM, lead gen, recruiting. CSV/JSON/Excel, API & webhooks. From $1.2/1K profiles.",
      "version": "2.4",
      "buildTag": "latest",
      "minMemoryMbytes": 128,
      "maxMemoryMbytes": 512,
      "input": {
        "title": "LinkedIn Profile Scraper",
        "description": "Extract complete public LinkedIn profiles without login or cookies.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "LinkedIn URLs or usernames",
            "type": "array",
            "description": "Full /in/ URLs or bare usernames.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [
              "https://www.linkedin.com/in/satyanadella/"
            ]
          },
          "profiles": {
            "title": "CRM records (advanced)",
            "type": "array",
            "description": "Optional objects with url and id. The id is copied to output as inputId.",
            "editor": "json",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "LinkedIn URL or username",
                  "description": "Full LinkedIn /in/ URL or bare public username.",
                  "type": "string"
                },
                "id": {
                  "title": "CRM record ID",
                  "description": "Your correlation identifier; copied unchanged to inputId in the result.",
                  "type": "string"
                }
              },
              "required": [
                "url"
              ]
            },
            "default": []
          },
          "enrich": {
            "title": "Add lead intelligence",
            "type": "boolean",
            "description": "Compute seniority, decision-maker status, tenure, job-change signals and lead score at no extra charge.",
            "default": true
          },
          "exportFormat": {
            "title": "Output format",
            "description": "Choose complete nested JSON or a flat row suitable for CSV, Excel and CRM imports.",
            "type": "string",
            "editor": "select",
            "enum": [
              "default",
              "flat"
            ],
            "enumTitles": [
              "Full profile (nested JSON)",
              "Flat row (CSV / CRM)"
            ],
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Parallel profiles",
            "description": "Maximum number of profiles processed at the same time.",
            "type": "integer",
            "default": 5,
            "minimum": 1,
            "maximum": 10
          },
          "maxRetries": {
            "title": "Retries on transient failure",
            "description": "Additional attempts for temporary throttling, empty responses or network failures.",
            "type": "integer",
            "default": 1,
            "minimum": 0,
            "maximum": 3
          },
          "timeout": {
            "title": "Timeout per profile (seconds)",
            "description": "Maximum time allowed for one profile extraction attempt.",
            "type": "integer",
            "default": 75,
            "minimum": 20,
            "maximum": 120
          },
          "diagnosticDumps": {
            "title": "Save fallback diagnostics",
            "description": "Developer troubleshooting only: save a bounded raw public-profile response to the default key-value store when the fallback source is used.",
            "type": "boolean",
            "default": false,
            "editor": "hidden"
          },
          "readerOnly": {
            "title": "Reader-only diagnostic mode",
            "description": "Developer test mode: never use residential direct fallback.",
            "type": "boolean",
            "default": false,
            "editor": "hidden"
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Scraper output",
        "description": "Successful full profiles are stored in the default dataset. Aggregate lead-intelligence totals are stored in the default key-value store.",
        "properties": {
          "profiles": {
            "type": "string",
            "title": "LinkedIn profiles",
            "description": "Complete profile records with career data and derived lead intelligence.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "summary": {
            "type": "string",
            "title": "Run summary",
            "description": "Profile totals grouped by seniority and lead tier.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/SUMMARY"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "full_profiles": {
              "title": "Full profiles",
              "transformation": {
                "fields": [
                  "fullName",
                  "headline",
                  "currentTitle",
                  "currentCompany",
                  "location",
                  "country",
                  "followers",
                  "connections",
                  "dataCompletenessScore",
                  "partialProfile",
                  "source",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            },
            "career": {
              "title": "Career",
              "transformation": {
                "fields": [
                  "fullName",
                  "currentTitle",
                  "currentCompany",
                  "totalExperienceYears",
                  "currentTenureYears",
                  "experience",
                  "education",
                  "skills",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            },
            "lead_intelligence": {
              "title": "Lead intelligence",
              "transformation": {
                "fields": [
                  "fullName",
                  "currentTitle",
                  "currentCompany",
                  "seniority",
                  "decisionMaker",
                  "leadScore",
                  "leadTier",
                  "jobChangeRisk",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "decisionMaker": {
                    "label": "Decision maker",
                    "format": "boolean"
                  },
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            },
            "content_activity": {
              "title": "Content activity",
              "transformation": {
                "fields": [
                  "fullName",
                  "activityCount",
                  "articleCount",
                  "activity",
                  "articles",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            },
            "credentials": {
              "title": "Credentials and achievements",
              "transformation": {
                "fields": [
                  "fullName",
                  "certificationCount",
                  "languageCount",
                  "projectCount",
                  "publicationCount",
                  "honorsAndAwardsCount",
                  "recommendationCount",
                  "certifications",
                  "languages",
                  "projects",
                  "publications",
                  "honorsAndAwards",
                  "recommendations",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            },
            "partial_profiles": {
              "title": "Partial profiles",
              "transformation": {
                "filter": {
                  "partialProfile": true
                },
                "fields": [
                  "fullName",
                  "dataCompletenessScore",
                  "missingSections",
                  "experienceMasked",
                  "source",
                  "requestedUrl",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "partialProfile": {
                    "label": "Partial",
                    "format": "boolean"
                  },
                  "canonicalUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "![LinkedIn Profile Scraper](https://api.apify.com/v2/key-value-stores/E76hLVOROveornuAY/records/linkedin-profile-hero-v3.jpg)\n\n# LinkedIn Profile Scraper — No Cookies Required | Email, Company & Employees\n\n**Bulk LinkedIn profile scraper — cookieless, no login, no browser, fast.**\nTurn LinkedIn profile URLs or usernames into complete, live CRM records. Each\nprofile includes current role and company, work history, education, skills,\nemails and websites when public, recent jobs/posts activity, and a free derived\nintelligence layer for sales, recruiting and people search.\n\nThis LinkedIn scraper needs **no cookies and no account** — so there is zero\naccount-ban risk. Feed it a bulk list, get structured profiles back in one run.\nExport JSON, CSV or Excel, call it via API, or wire it into webhooks, n8n, Make\nand MCP agents. From **$1.2 per 1,000 profiles** on paid plans.\n\n## Why this Actor?\n\n| | This Actor | Typical LinkedIn scrapers |\n|---|---|---|\n| Login / cookies | Never needed | Often need cookies (account-ban risk) |\n| Data freshness | Fetched live at run time | Frequently cached, weeks old |\n| Deep career data | Experience, education and skills | Often a paid add-on |\n| Lead intelligence | Seniority, decision maker, tenure, lead score | Usually absent |\n| Input correlation | Preserve your CRM `id` | Often absent |\n| Output | Full JSON or flat CRM row | Varies |\n\n## What you get\n\n- Identity: name, username, headline, about, location and country.\n- Current snapshot: title, company, followers, connections, website and photo.\n- Full profile: structured experience, education, skills, certifications, volunteer roles, projects, publications, honors, languages and recommendations.\n- Public content: recent activity, authored articles and LinkedIn courses when shown.\n- Intelligence: seniority, decision-maker flag, total experience, current tenure,\n  open-to-work/recent-change signals, industry guess, lead score and reasons.\n- Integration-ready: nested JSON or a flat CSV/Excel/CRM row, plus caller-provided\n  IDs for joining results back to source records.\n\n## Input\n\n```json\n{\n  \"profileUrls\": [\"satyanadella\"],\n  \"profiles\": [{\"url\": \"https://www.linkedin.com/in/williamhgates/\", \"id\": \"crm-42\"}],\n  \"enrich\": true,\n  \"exportFormat\": \"default\",\n  \"maxConcurrency\": 5,\n  \"maxRetries\": 1,\n  \"timeout\": 75\n}\n```\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `profileUrls` | string[] | — | URLs or usernames |\n| `profiles` | object[] | [] | Advanced `{url,id}` CRM correlation records |\n| `enrich` | boolean | true | Add free lead-intelligence fields |\n| `exportFormat` | string | default | `default` nested JSON or `flat` CRM row |\n| `maxConcurrency` | int | 5 | Parallel requests, maximum 10 |\n| `maxRetries` | int | 1 | Retries for transient failures |\n| `timeout` | int | 75 | Timeout per profile in seconds |\n\n## Output\n\n```json\n{\n  \"status\": \"success\",\n  \"inputId\": \"crm-42\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/satyanadella\",\n  \"publicIdentifier\": \"satyanadella\",\n  \"fullName\": \"Satya Nadella\",\n  \"headline\": \"Chairman and CEO at Microsoft\",\n  \"location\": \"Redmond, Washington, United States\",\n  \"currentTitle\": \"Chairman and CEO\",\n  \"currentCompany\": \"Microsoft\",\n  \"experience\": [{\"title\": \"Chairman and CEO\", \"company\": \"Microsoft\", \"isCurrent\": true}],\n  \"education\": [],\n  \"skills\": [],\n  \"intelligence\": {\"seniority\": \"C-Level\", \"decisionMaker\": true, \"leadScore\": 60, \"leadTier\": \"warm\"}\n}\n```\n\n## Pricing — pay per result, cheaper on higher tiers\n\nYou pay **only for profiles successfully scraped**. Failed or empty profiles are **free** — no runaway bills.\n\n| Apify plan tier | Price / 1,000 profiles | Price / profile |\n|---|---|---|\n| **Free** | **$2.00** | $0.0020 |\n| **Bronze** | $2.00 | $0.0020 |\n| **Silver** | $1.80 | $0.0018 |\n| **Gold** | $1.60 | $0.0016 |\n| **Platinum** | $1.40 | $0.0014 |\n| **Diamond** | $1.20 | $0.0012 |\n\nHigher subscription tiers pay less per profile. Free Apify credits cover roughly **2,500 profiles/month**. No subscriptions, no monthly fees.\n\n## Use cases\n\n- **B2B lead generation** — pull fresh prospect data straight into your CRM.\n- **Recruiting** — current headlines, locations and follower signals.\n- **Sales outreach** — enrich a list of LinkedIn URLs before you send.\n- **CRM hygiene** — refresh stale LinkedIn records in bulk.\n- **Market research** — live follower counts and industry data.\n\n## Integrations (n8n, Make, MCP, AI agents)\n\nRun it from the **Apify API**, schedule it, or wire it into **n8n / Make** with the Apify nodes. Because output is clean JSON, it drops straight into **AI agents and MCP** workflows that need fresh LinkedIn data on demand.\n\n## Performance\n\n- 15–30 seconds per profile (real-time scraping, not an instant cache lookup).\n- Up to 20 concurrent requests; recommended 5–10 for the best success rate.\n- Transient hiccups are retried automatically, so a busy run won't hang or fail the whole batch.\n- ~95%+ success rate on public profiles.\n\n## FAQ\n\n**Do I need a LinkedIn account or cookies?**\nNo. The Actor reads public profile pages — no login, no cookies, no account-ban risk.\n\n**Is the data live or cached?**\nLive. Each profile is scraped in real time, so follower counts, bios and links are current.\n\n**Can it get emails and phone numbers?**\nOnly if they're publicly visible on the profile, which is rare on LinkedIn. Enable those fields only if you need them.\n\n**Why is it cheaper than other LinkedIn scrapers?**\nIt focuses on the core public fields (no heavy full-CV extraction), so it's faster and we pass the savings on.\n\n**What if a profile fails?**\nIt's retried automatically; if it still can't be scraped it's marked failed and **you are not charged** for it.\n\n## Notes\n\n- Only public profile data is extracted.\n- Restricted profiles may return partial data.\n- Recommended concurrency: 5–10 for best results.\n\n## Disclaimer\n\nThis Actor extracts only publicly available data and is **not affiliated with, endorsed by, or sponsored by LinkedIn Corporation**. LinkedIn® is a registered trademark of LinkedIn Corporation. Ensure your use complies with applicable laws and LinkedIn's terms of service.\n\n---\n\n## ⚖️ Legal, Compliance & Acceptable Use\n\n**Please read this section carefully. By running this Actor you accept these terms.**\n\n> **Bottom line:** this is a neutral, general-purpose software tool. It only\n> retrieves information that is already **publicly available**. **You — the user —\n> decide what to search for and how to use the results, so you alone are\n> responsible and liable for that use.** The developer/operator of this Actor\n> merely provides the tool and does not control, endorse, or take responsibility\n> for what you do with it.\n\n**1. Public data only.** The Actor accesses only publicly available information.\nIt does not log in on your behalf, bypass access controls, or retrieve private,\npaywalled, or password-protected data.\n\n**2. You are the responsible party (data controller).** For every run you start,\n**you** act as the data controller and are solely responsible for using the\noutput lawfully. This includes having a valid **lawful basis** (for business/B2B\nuse this is typically *legitimate interest*), honoring **data-subject rights**\n(access, correction, deletion, opt-out), and complying with all applicable laws\nand regulations — including, where relevant, the **GDPR**, **UK GDPR**,\n**CCPA/CPRA**, and similar privacy, marketing, and anti-spam laws (e.g.\nePrivacy, **CAN-SPAM**, **CASL**, **TCPA**).\n\n**3. Not a Consumer Reporting Agency.** This Actor and its operator are **not a\nconsumer reporting agency (CRA)**, and the output is **not a \"consumer report\"**\nunder the U.S. Fair Credit Reporting Act (**FCRA**) or similar laws. You must\n**NOT** use it, in whole or in part, to decide a person's eligibility for\ncredit, employment, housing/tenancy, insurance, or any other FCRA-regulated\npurpose.\n\n**4. Respect third-party terms.** You are responsible for complying with the\nterms of service of any website or platform whose public data you choose to\nprocess, and with any applicable intellectual-property rights.\n\n**5. No warranty.** The Actor is provided \"as is\", without warranty of any kind.\nPublic data may be incomplete, outdated, or inaccurate — verify independently\nbefore relying on it. Availability of sources and fields can change at any time.\n\n**6. Prohibited use.** Do not use this Actor or its output for stalking,\nharassment, discrimination, fraud, spam, or any unlawful or harmful purpose.\n\n**7. Indemnification.** You assume all risk and liability arising from your use\nof this Actor, and **you agree to defend, indemnify and hold the operator\nharmless** from any and all claims, losses, fines, or liabilities — including\nreasonable legal fees — resulting from your use or misuse of the Actor or its\noutput, or from your breach of these terms or of any law.\n\n> This section is general information, **not legal advice**. If you are unsure\n> whether your intended use is permitted, consult your own legal counsel before\n> running this Actor.\n",
      "changelog": "# Changelog\n\n## 2.4.8 — 2026-08-14\n\n- Switched production extraction to the faster primary channel after controlled\n  tests: 9/10 profiles with 16.7s p50 (the secondary channel scored 0/10).\n\n## 2.4.0 — 2026-08-14\n\n- Added canonical URL recovery from renderer metadata, HTML canonical links, redirects and a conservative search fallback after a complete miss.\n- Added completeness score, missing sections, partial-profile flag and counts.\n- Added direct JSON-LD posts/articles with dates and reaction counts.\n- Expanded flat CRM/CSV output and six purpose-built dataset views.\n\n## 2.3.0 — 2026-08-14\n\n- Added structured certifications, volunteer experience, projects, publications,\n  honors and awards, languages, recommendations, activity, authored articles\n  and courses from sections already present on public pages.\n- Added source, fetchedAt, experienceMasked and sectionsAvailable metadata.\n- Fixed activity extraction across LinkedIn's embedded sign-in modal headings.\n\n## 2.2.0 — 2026-08-14\n\n- Added `country` derived from structured profile location.\n- Hardened auth-wall rejection so sign-up pages cannot become profile rows.\n- Fixed education parsing for guest HTML whose class attributes contain literal\n  angle brackets.\n- Added an opt-in, bounded diagnostic dump for fallback HTML; normal runs never\n  store raw pages.\n\n## 2.1.0 — 2026-08-14\n\n- Added a second independent extraction source: profiles the primary renderer\n  cannot serve (login-wall or masked work history) are retried through a\n  separate direct pipeline and merged — more profiles with complete data.\n- Pacing between render requests to avoid burst throttling.\n\n## 2.0.0 — 2026-08-14\n\n- Replaced the extraction engine with a new direct fetch stack: the previous\n  upstream renderer stopped serving LinkedIn, causing empty runs.\n- Same input, same output fields, same billing contract\n  (`apify-default-dataset-item`): only successful profiles are billed.\n- Faster and cheaper runs; per-profile retries with fresh fetch on retry.\n- Profiles whose work history LinkedIn serves masked are retried; if the mask\n  persists, the profile is still returned with identity/audience fields.\n\n## 1.0.0 — 2026-08-14\n\n- Upgraded basic profiles to full profiles: current role/company, work history,\n  education, skills, connections, followers, website and profile image.\n- Added free intelligence fields: seniority, decision-maker flag, experience,\n  tenure, open-to-work and job-change signals, lead score/tier and reasons.\n- Added full and flat CRM export modes, username input, deduplication and\n  `{ \"url\": \"...\", \"id\": \"crm-id\" }` correlation objects.\n- Added output schema and Profiles / Lead intelligence dataset views.\n- Preserved the existing `apify-default-dataset-item` billing contract: only\n  successful profiles are pushed and billed; failures remain free.\n- Treat source-wide LinkedIn fetch failures as transient, retry them, and finish\n  empty runs without a false Actor failure or billed diagnostic rows.\n\nAll notable changes to this Actor will be documented here.\n\n## [0.4] — 2026-06-30 — Price update ($2/1K base, cheaper on higher tiers)\n\n### Changed\n- Pricing raised: free-plan users pay the base rate ($2/1K, same as Bronze);\n  higher subscription tiers get progressively cheaper down to $1.2/1K (Diamond).\n- README, store title and SEO updated to the new $2/1K headline; refreshed\n  hero banner.\n\n## [0.3] — 2026-06-30 — SEO, README banner, tiered pricing\n\n### Added\n- Branded README hero banner and an SEO-rewritten README (keyword H1,\n  competitor comparison, use cases, integrations, FAQ, disclaimer).\n- Fair tiered pricing (Free $1.2/1K down to Diamond $0.6/1K) — pay only for\n  profiles successfully scraped.\n\n### Fixed\n- Store `seoDescription` no longer mismatched the Actor (it previously quoted\n  the wrong price and fields copied from another scraper).\n\n## [0.2] — 2026-06-30 — Cleaner output (handles + numeric fields)\n\n### Fixed\n- **Username** is now always the real LinkedIn handle (taken from the profile\n  URL). The upstream source occasionally returned the display name in this\n  field instead of the handle.\n- **Numeric fields** (`followerCount`, `followingCount`, `postCount`) are now\n  returned as integers instead of strings, and empty numbers come back as\n  `null` — so downstream tools and the dataset table view get real numbers.\n\n## [0.1] — 2026-06-18 — Reliability: retries + no blank rows\n\n### Fixed\n- Profiles occasionally came back empty due to a transient upstream miss. The\n  Actor now retries a profile up to 2 extra times before giving up, which\n  removes most intermittent empty results.\n- Empty extractions are no longer saved as \"successful\" blank rows — a profile\n  that yields no data is reported as failed and is **not charged**.\n\n## [0.0] — initial release\n- Public LinkedIn profile fields (name, bio, location, followers, …), no login.\n",
      "dockerfile": "./Dockerfile"
    },
    "buildNumber": "2.4.10",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.4"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.04431444444444444
    }
  }
}