{
  "data": {
    "id": "9vn627kkU5IAggPcy",
    "actId": "lDghPuhZBgVdt0olp",
    "userId": "2Sdt05QypASulbUn1",
    "startedAt": "2026-10-09T04:17:40.759Z",
    "finishedAt": "2026-10-09T04:18:28.314Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 47492,
      "runTimeSecs": 47.492,
      "computeUnits": 0.052768888888888886,
      "imageSizeBytes": 539694080
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "tag": "beta",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"LinkedIn Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"List of public LinkedIn profiles to scrape. Accepts full URLs (e.g. https://www.linkedin.com/in/satyanadella), locale subdomains (in.linkedin.com/in/...), or bare usernames (e.g. satyanadella). Up to 500 per run.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/satyanadella\"\n      ]\n    },\n    \"maxResults\": {\n      \"title\": \"Max results\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of profiles to return. Set to a small number (e.g. 3) for quick tests.\",\n      \"default\": 10,\n      \"prefill\": 1,\n      \"maximum\": 500\n    },\n    \"monitorMode\": {\n      \"title\": \"Monitor mode (only new or changed profiles)\",\n      \"type\": \"boolean\",\n      \"description\": \"Run on a schedule and deliver ONLY profiles that are new or whose headline, employers, schools, location or About text changed since a previous run (for example a job change). The follower count alone does not count. You are charged per delivered profile, not for the whole list each time. Ideal for weekly monitoring. Requires the same input across runs.\",\n      \"default\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"proxy\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Apify proxy. Defaults to datacenter — public profile pages are Google-indexed and served over plain HTTP, so residential is not required. Each profile is fetched on a fresh proxy session (first-view IP). Set a group explicitly to override.\",\n      \"editor\": \"proxy\",\n      \"prefill\": {\n        \"useApifyProxy\": true\n      }\n    }\n  },\n  \"required\": [],\n  \"description\": \"Configures which public LinkedIn profiles to scrape, by URL or bare username, how many to process in one run, and proxy settings for the fetch.\"\n}",
    "readme": "# LinkedIn Profile Scraper | 9 Fields, No Login or Cookies\n\n[![16 LinkedIn profiles in 101 seconds: a test run on 20 public profiles delivered 16 and charged nothing for the 4 that LinkedIn refused](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/linkedin-profile-scraper-hero.png)](https://console.apify.com/actors/lDghPuhZBgVdt0olp/input?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\nFrom **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), with over 140,000 runs across 170+ public actors.\n\n## Why choose this actor?\n\n- **16 public profiles in 101 seconds, with no LinkedIn account.** A test run on 20 well known business leaders delivered 16 profiles in 101 seconds at 512 MB. There is no login, no cookies and no browser: the actor reads the structured record LinkedIn itself puts in every public profile page.\n- **Name, job titles, employers, schools and follower count in every row we got.** All 16 delivered rows in that test had job titles and a follower count, 15 had a location and 14 had an about section. Fields LinkedIn leaves out are left out, never filled with guesses.\n- **You pay only for profiles that land in your dataset.** $4 to $7 per 1,000 profiles depending on your Apify plan. Profiles LinkedIn refuses or cannot find, duplicate URLs and the summary rows are never charged: the 4 refused profiles in the test cost nothing.\n\n[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/lDghPuhZBgVdt0olp/input?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Part of The Mine Works LinkedIn family:** [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral).\n\n## Try it in one minute\n\nPaste this into the input's JSON tab and start the run. It asks for 10 public profiles of well known founders and executives, all of which came back in our test.\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/reidhoffman\",\n    \"https://www.linkedin.com/in/jeffweiner08\",\n    \"https://www.linkedin.com/in/andrewyng\",\n    \"https://www.linkedin.com/in/melindagates\",\n    \"https://www.linkedin.com/in/simonsinek\",\n    \"https://www.linkedin.com/in/adammgrant\",\n    \"https://www.linkedin.com/in/garyvaynerchuk\",\n    \"https://www.linkedin.com/in/patrickcollison\"\n  ],\n  \"maxResults\": 10\n}\n```\n\nEvery entry in `profileUrls` can be written five ways: a full URL (`https://www.linkedin.com/in/satyanadella`), a country subdomain URL (`https://in.linkedin.com/in/kunalshah1`), a URL without `https://` (`linkedin.com/in/satyanadella`), the short form `in/satyanadella`, or the bare username `satyanadella`. Query strings and trailing slashes are dropped, usernames are lowercased, and the same profile written two ways is fetched and charged once. Company, school and post URLs are not profile URLs and are skipped.\n\nApify's free plan includes $5 of credit every month, which covers about 707 profiles at this actor's price (the Free plan rate of $0.007 per profile, plus the $0.005 start fee on each of 10 runs at the default memory).\n\n### Copy to your AI assistant\n\n```\nthemineworks/linkedin-profile-scraper on Apify. Turns public LinkedIn profile URLs into structured rows (name, job titles, location, about text, employers, schools, follower count) by reading the public page's embedded JSON-LD record, with no login, cookies or browser. Call ApifyClient(\"TOKEN\").actor(\"themineworks/linkedin-profile-scraper\").call(run_input={...}), then client.dataset(run[\"defaultDatasetId\"]).list_items().items. Required: profileUrls (list of https://www.linkedin.com/in/<username> URLs, country subdomain URLs or bare usernames; up to 500). Optional: maxResults (default 10, up to 500, also the cost cap), proxy (default Apify datacenter proxy), monitorMode (default false; true delivers and charges only profiles new or changed since an earlier run with the same list). Profile rows have no _type and no status field; a profile LinkedIn refused or could not find comes back as {profile_url, status: \"blocked\" or \"not_found\"}; every run ends with one row with _type \"summary\" and, when profiles were delivered, one row with _type \"info\"; none of these extra rows is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-profile-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral\n```\n\n## Key features\n\n- **One plain HTTP request per profile, no browser.** LinkedIn keeps public profiles open to logged out visitors so search engines can index them, and embeds a `Person` record as JSON-LD in the page. The actor reads that record, not the visual page, at 512 MB of memory.\n- **9 fields per profile.** `profile_url`, `name`, `headline`, `location`, `about`, `experience`, `education`, `followers` and `scraped_at`. Employers and schools come as arrays of name plus LinkedIn page URL.\n- **Up to 500 profiles per run, deduplicated.** Paste a list of any length: the actor cleans each entry, removes duplicates, and stops at `maxResults` (and never past 500).\n- **Two tries per profile, each on a fresh IP.** Every request goes out on a new Apify datacenter proxy session. If the first try is refused, the actor waits about a second and tries once more on a different IP before it marks the profile `blocked`.\n- **A row for every profile you asked for.** Profiles that could not be read come back as a short row with `status: \"blocked\"` or `status: \"not_found\"`, so you can see exactly which ones to retry. Those rows are free.\n- **A stop switch for bad IP luck.** If 5 profiles in a row are refused, the run stops early instead of working through the rest of your list against a wall, and the summary row shows how far it got.\n\n## How to use it\n\n### Basic: one profile\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\"],\n  \"maxResults\": 1\n}\n```\n\nThis is the smallest useful run: one profile, one charge, done in about 5 seconds on Apify.\n\n### Several profiles in one run, written any way\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/reidhoffman/\",\n    \"in.linkedin.com/in/kunalshah1\",\n    \"in/guykawasaki\",\n    \"adammgrant\",\n    \"https://www.linkedin.com/in/adammgrant?trk=public_profile\"\n  ],\n  \"maxResults\": 50\n}\n```\n\nThe last two entries are the same person, so the run fetches 4 profiles and charges for at most 4. `maxResults` is a ceiling, not a target: a list of 4 profiles with `maxResults: 50` costs the same as `maxResults: 4`.\n\n### Enrich a candidate shortlist for your ATS\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/candidate-one\",\n    \"https://www.linkedin.com/in/candidate-two\",\n    \"https://www.linkedin.com/in/candidate-three\"\n  ],\n  \"maxResults\": 500\n}\n```\n\nPaste the profile URLs from your sourcing sheet, up to 500 at a time. Export the dataset as CSV or Excel and map `name`, `headline`, `location`, `experience` and `education` to your ATS fields. For longer lists, split them into runs of 500.\n\n### Check prospects' current employers before outreach\n\nPut your target accounts' contact URLs into a saved task and schedule it weekly (Apify Console, Schedules, Create new). Compare `experience` with last week's export: a new first entry or a missing company is often a job change worth acting on. Without monitor mode every scheduled run delivers, and charges for, every profile on the list again. With `\"monitorMode\": true` a run delivers only the profiles that changed (see Run it on a schedule).\n\n### Feed it from our discovery actors\n\n[LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) finds public profiles at a company by job title, and [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) finds the authors of posts on a topic. Both return LinkedIn profile URLs. Pass those URLs to this actor in `profileUrls` to add employers, schools, about text and follower counts to each person.\n\n### Retry only the profiles that were refused\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/sundarpichai\",\n    \"https://www.linkedin.com/in/jensenhuang\"\n  ],\n  \"maxResults\": 2\n}\n```\n\nFilter the last run's dataset on `status = \"blocked\"`, copy those `profile_url` values into a new run, and start it a little later. Each run gets fresh IPs, so a profile refused once is often readable on the next try. A refused profile costs nothing either time it is refused.\n\n## Input parameters\n\n| Parameter | Type | Default | What it does |\n|---|---|---|---|\n| `profileUrls` | array of strings | none (prefilled with one example) | Public LinkedIn profiles to read: full URLs, country subdomain URLs, `linkedin.com/in/...` without `https://`, `in/<username>` or bare usernames. Duplicates are removed. At most 500 are used. |\n| `maxResults` | integer | `10` | Most profiles processed in the run, 1 to 500. Applied after duplicates are removed. This is also your cost cap. |\n| `proxy` | object | Apify proxy, datacenter | Proxy settings. Leave it as it is: public profile pages need no special proxy, and each profile already goes out on a fresh datacenter IP session. |\n| `monitorMode` | boolean | `false` | Deliver only profiles that are new or whose headline, employers, schools, location or About text changed since an earlier run with the same list. Unchanged profiles are not charged. Made for weekly schedules. |\n\nIf no entry in `profileUrls` looks like a LinkedIn profile, the run writes only a summary row with `note: \"no_valid_urls\"` and charges no profiles.\n\n## What data do you get?\n\nOne row per profile you asked for, then a summary row. Profile rows have no `_type` and no `status` field, which is the simplest way to filter them.\n\n**The person:** `name`, `profile_url` (the address LinkedIn's record gives, which can be a country subdomain such as `https://in.linkedin.com/in/kunalshah1`), `location` (as shown on the profile, for example `Redmond, Washington, United States`), `about` (the about section text), `followers` (the follower count, as a string).\n\n**Job titles:** `headline` holds the job titles LinkedIn lists in the profile's public record, joined with commas, one per position, for example `Chairman and CEO, Member Board Of Trustees`. It is not the free text headline under the person's name, and the titles are not paired with companies.\n\n**Employers:** `experience`, an array of `{ \"company\", \"company_url\" }` from the record's list of organizations the person works or worked for.\n\n**Schools and other affiliations:** `education`, an array of `{ \"school\", \"school_url\" }` from the record's list of organizations the person is an alumnus of. LinkedIn often files board seats, nonprofits and past companies here too (Satya Nadella's list includes Starbucks and Fred Hutch), and sometimes puts a university under `experience`. The actor reports both lists exactly as LinkedIn labels them.\n\n**When:** `scraped_at`, the ISO time the row was written.\n\n**Rows for profiles that could not be read** (never charged): `profile_url`, `status` (`blocked` when LinkedIn refused the request or showed a sign in wall, `not_found` when the profile does not exist or is unavailable) and `scraped_at`.\n\n**Summary row** (`_type: \"summary\"`, never charged): `requested`, `scraped`, `blocked`, `not_found`, `charged_for`, `charge_failures` and `scraped_at`, plus `note: \"no_valid_urls\"` when the input had no usable profile. A run that reaches its time limit writes a summary marked as ended on the deadline.\n\n**Info row** (`_type: \"info\"`, never charged): written when at least one profile was delivered, with `delivered`, a `message`, a scheduling tip and `scraped_at`. With monitor mode on, profile rows also carry `monitor_status` (`new` or `changed`), and a last info row gives the monitor counts.\n\n### Stable fields for automations\n\nThese fields were present in all 16 profile rows of the test run and are written for every delivered profile. Their names will not change, so a Google Sheet, Zapier zap or n8n flow can map them once.\n\n| Field | What it is |\n|---|---|\n| `profile_url` | The profile's LinkedIn URL, the key to store and join on |\n| `name` | Full name as shown on the profile |\n| `experience` | Array of employers; can be empty |\n| `experience[].company` | Organization name as LinkedIn labels it |\n| `experience[].company_url` | That organization's LinkedIn page, or `null` |\n| `education` | Array of schools and other affiliations; can be empty |\n| `education[].school` | Organization name as LinkedIn labels it |\n| `education[].school_url` | That organization's LinkedIn page, or `null` |\n| `scraped_at` | When this row was written, ISO 8601 |\n\n`headline` and `followers` were also in all 16 rows of the test, `location` in 15 and `about` in 14, but the actor leaves any of them out when LinkedIn's record has no value, so treat them as optional.\n\n### Output examples\n\n**A full profile** (test run, 1 Oct 2026):\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/satyanadella\",\n  \"name\": \"Satya Nadella\",\n  \"experience\": [\n    { \"company\": \"Microsoft\", \"company_url\": \"https://www.linkedin.com/company/microsoft\" },\n    { \"company\": \"University of Chicago\", \"company_url\": \"https://www.linkedin.com/school/uchicago/\" }\n  ],\n  \"education\": [\n    { \"school\": \"Starbucks\", \"school_url\": \"https://www.linkedin.com/company/starbucks\" },\n    { \"school\": \"The Business Council U.S.\", \"school_url\": \"https://www.linkedin.com/company/the-business-council-us\" },\n    { \"school\": \"Fred Hutch\", \"school_url\": \"https://www.linkedin.com/company/fredhutch\" },\n    { \"school\": \"The University of Chicago Booth School of Business\", \"school_url\": \"https://www.linkedin.com/school/universityofchicagoboothschoolofbusiness/\" }\n  ],\n  \"headline\": \"Chairman and CEO, Member Board Of Trustees\",\n  \"location\": \"Redmond, Washington, United States\",\n  \"about\": \"As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person and every organization on the planet to achieve more.\",\n  \"followers\": \"12195753\",\n  \"scraped_at\": \"2026-10-01T13:29:41.853Z\"\n}\n```\n\n**A sparse profile** (same run): no location and no about section on the public record, and no schools, so those keys are missing and `education` is empty.\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/rbranson\",\n  \"name\": \"Richard Branson\",\n  \"experience\": [\n    { \"company\": \"Virgin Group\", \"company_url\": \"https://uk.linkedin.com/company/virgin\" }\n  ],\n  \"education\": [],\n  \"headline\": \"Founder\",\n  \"followers\": \"18642209\",\n  \"scraped_at\": \"2026-10-01T13:30:25.281Z\"\n}\n```\n\n**A profile where LinkedIn masked some text** (same run): for some profiles LinkedIn replaces parts of the public record with asterisks for logged out visitors. The actor passes them through unchanged. This happened on 3 of the 16 profiles in the test.\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/brianchesky\",\n  \"name\": \"Brian Chesky\",\n  \"experience\": [\n    { \"company\": \"Airbnb\", \"company_url\": \"https://www.linkedin.com/company/airbnb\" }\n  ],\n  \"education\": [\n    { \"school\": \"***** ****** ******\", \"school_url\": null },\n    { \"school\": \"****\", \"school_url\": null },\n    { \"school\": \"Rhode Island School of Design\", \"school_url\": \"https://www.linkedin.com/school/risd1877/\" }\n  ],\n  \"headline\": \"********** * ***\",\n  \"location\": \"San Francisco, California, United States\",\n  \"about\": \"I am one of the founders and CEO of Airbnb.\",\n  \"followers\": \"293926\",\n  \"scraped_at\": \"2026-10-01T13:30:45.296Z\"\n}\n```\n\n**A refused profile and the summary row** (same run; nothing charged for the refused profile):\n\n```json\n[\n  {\n    \"profile_url\": \"https://www.linkedin.com/in/sundarpichai\",\n    \"status\": \"blocked\",\n    \"scraped_at\": \"2026-10-01T13:29:59.075Z\"\n  },\n  {\n    \"_type\": \"summary\",\n    \"requested\": 20,\n    \"scraped\": 16,\n    \"blocked\": 4,\n    \"not_found\": 0,\n    \"charged_for\": 0,\n    \"charge_failures\": 0,\n    \"scraped_at\": \"2026-10-01T13:31:17.970Z\"\n  }\n]\n```\n\n`charged_for` is 0 here only because the test ran on our own machine, outside Apify billing. On Apify it counts the profiles charged, 16 in a run like this one.\n\n## Pricing\n\nPay per event. You are charged for each profile delivered to your dataset, plus a small start fee per run. The rate falls as your Apify plan rises.\n\n| Event | Free | Bronze | Silver | Gold and above |\n|---|---|---|---|---|\n| Profile delivered (`profile-scraped`), per profile | $0.007 | $0.00625 | $0.0056 | $0.004 |\n| Per 1,000 profiles | $7.00 | $6.25 | $5.60 | $4.00 |\n| Run start (`apify-actor-start`) | $0.005 per GB of run memory, minimum one event | same | same | same |\n\n**The start fee, exactly.** Apify's `apify-actor-start` event is charged once when a run starts, one event per GB of memory with a minimum of one. At the default 512 MB, and at 1 GB, that is one event, $0.005 per run. A 4 GB run would pay $0.02. This actor does not need more than 512 MB.\n\n**Never charged:** profiles LinkedIn refused (`status: \"blocked\"`), profiles that do not exist (`status: \"not_found\"`), duplicate URLs in your list, the summary row and the info row. A run in which every profile is refused pays only the start fee.\n\n**Charged like any other profile:** a profile whose public record LinkedIn has partly masked with asterisks. The row has a name and real data, so it counts as delivered.\n\n**What real jobs cost on Gold:** 500 profiles cost $2.00 plus $0.005. A weekly check of 50 prospects costs $0.205 a week. On the Free plan, 100 profiles cost $0.70 plus $0.005.\n\nThere is no price change scheduled for this actor. The Pricing tab on this page always shows the rate for your own plan.\n\n## Run it on a schedule\n\nSwitch on `monitorMode` to hear about a person only when their profile changes. The first run delivers every profile. After that, a profile comes back only when the name, headline, location, About text, employers or schools change, and you pay only for the profiles delivered. A new first employer is what a job change looks like.\n\n1. Fill in the input, tick **Monitor mode**, and save it as a task.\n2. In Apify Console open **Schedules**, click **Add schedule**, and pick **Weekly** (or a cron such as `0 6 * * 1`).\n3. Add the saved task to the schedule and click **Save**.\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"https://www.linkedin.com/in/rbranson\"\n  ],\n  \"maxResults\": 50,\n  \"monitorMode\": true\n}\n```\n\nEach delivered row carries `monitor_status`: `new` the first time, `changed` when the profile differs from the version you last received. An unchanged profile is read but not delivered and not charged; the start fee applies to every run as usual. The follower count alone does not count as a change. A read where LinkedIn masked some text with asterisks is never sent as a change; it waits for a clean read. The last row of each run (`_type: \"info\"`) gives `new_this_run`, `changed_this_run` and `skipped_already_seen`. The history belongs to the list: change `profileUrls` and a new history starts; change `maxResults` and it carries on.\n\n## FAQ\n\n**What does this actor read from LinkedIn?**\nLinkedIn is the professional network where people list their jobs and education. For each public profile page (`linkedin.com/in/...`) it reads the structured `Person` record that LinkedIn embeds for search engines: name, job titles, location, about text, the organizations the person works or worked for, schools and affiliations, and follower count.\n\n**How many profiles can I get?**\nUp to 500 per run, set with `maxResults`. LinkedIn refuses some requests from any IP pool: in our 20 profile test, 16 came back and 4 were refused with LinkedIn's HTTP 999 response. Refused profiles are free, and the run tells you which ones they were.\n\n**How fresh is the data?**\nLive. Every run requests each page at the moment it runs, so job titles, employers and follower counts are what LinkedIn shows that day, stamped in `scraped_at`.\n\n**Do I need a LinkedIn account, cookies or an API key?**\nNo. The actor never logs in, never uses cookies and never acts as any LinkedIn user, so there is no account on your side that could be restricted.\n\n**Do I need a proxy?**\nNo setup is needed. The actor uses Apify's datacenter proxy by default and sends each profile on a fresh IP session.\n\n**Why is there no skills list, connection count or job dates?**\nThey are not in the public record LinkedIn embeds for logged out visitors. The actor returns organization names and links for `experience` and `education`, not job titles per company, dates or descriptions, and never invents values it cannot read.\n\n**Why are some values shown as asterisks?**\nFor some profiles LinkedIn masks parts of the public record, for example `\"headline\": \"********** * ***\"`. That is what LinkedIn serves to logged out visitors, and the actor passes it through as is. It happened on 3 of 16 profiles in our test.\n\n**Why does `education` list companies?**\nThe actor copies LinkedIn's own labelling. LinkedIn's record often lists board seats, nonprofits or earlier companies among a person's affiliations, which this actor returns as `education`. If you need schools only, filter on `school_url` containing `/school/`.\n\n**What happens with private, deleted or misspelled profiles?**\nA profile that does not exist comes back as `status: \"not_found\"`. A private or walled profile, or one LinkedIn refused, comes back as `status: \"blocked\"`. Neither is charged. Before marking a profile blocked, the actor tries twice on two different IPs.\n\n**Why did my run stop before the end of my list?**\nIf 5 profiles in a row are refused, the actor stops so it does not keep requesting pages that will not load. The summary row shows `scraped`, `blocked` and `not_found`. Start a new run with the rest of the list a little later. A run also stops delivering profiles when your maximum cost per run in Apify is reached.\n\n**How do I get the data out?**\nFrom the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. JSON keeps the `experience` and `education` arrays intact. CSV and Excel flatten them into numbered columns.\n\n**Can I run it on a schedule?**\nYes. Save your input as a task, then add a schedule in Apify Console (Schedules, then Create new, for example every Monday at 06:00). Without monitor mode every run delivers and charges every profile in the list; with `monitorMode` on, only profiles that are new or changed since the last run.\n\n**Can I use it from Claude, ChatGPT or another AI assistant?**\n- Connector URL: `https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper`.\n- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.\n- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.\n- Cursor or VS Code: add it as an HTTP MCP server with that URL.\n- Claude Code: `claude mcp add -t http linkedin-profile-scraper \"https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper\"`.\n\nIt is also one of the tools inside our [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) server, which bundles 10 recruiting tools.\n\n**Is it legal to scrape public LinkedIn profiles?**\nThe actor reads only pages LinkedIn shows to anyone without logging in, and nothing behind a login. In *hiQ Labs v. LinkedIn*, a US appeals court held that scraping publicly accessible pages does not by itself violate the Computer Fraud and Abuse Act. Profiles still contain personal data, so you are responsible for how you use it, including LinkedIn's terms and data protection law such as GDPR and CCPA. This is general information, not legal advice. This actor is independent and not affiliated with or endorsed by LinkedIn.\n\n## Integrations\n\nResults land in a standard Apify dataset, so they connect without extra code:\n\n- **Google Sheets:** send each run's profiles to a sheet with Apify's Google Sheets integration.\n- **Make, Zapier and n8n:** start a run and read its dataset with the official Apify apps and nodes.\n- **Webhooks:** get a call to your own URL when a run succeeds, then fetch the dataset.\n- **API and SDKs:** start runs and read results with the Apify API, or the Python and JavaScript clients.\n- **MCP clients:** Claude, ChatGPT, Cursor and other MCP clients can call the actor through `https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper`.\n\n<!-- RELATED:START (generated by _readme_kit/related_block.py, do not edit by hand) -->\n## More from The Mine Works\n\n**LinkedIn**\n\n- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Social media and video**\n\n- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Leads and business directories**\n\n- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [JustDial Scraper](https://apify.com/themineworks/justdial-business?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Marketing, SEO and reviews**\n\n- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Real estate**\n\n- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Science, health and government data**\n\n- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [data.gov.in Scraper](https://apify.com/themineworks/india-data-gov-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Jobs and hiring**\n\n- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**E-commerce and marketplaces**\n\n- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Company and business data**\n\n- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Food and local services**\n\n- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Developer and AI tools**\n\n- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**More tools**\n\n- [Tennis Match & Player Data Scraper](https://apify.com/themineworks/tennis-match-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Hotels Prices Scraper](https://apify.com/themineworks/google-hotels-prices-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LandWatch Scraper](https://apify.com/themineworks/landwatch-land-for-sale-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n<!-- RELATED:END -->\n\n## Support\n\nFound a bug or need a field? Open an issue on the Issues tab of this actor. To ask for a new source, email dmineworks@gmail.com.\n\n*LinkedIn Profile Scraper turns public LinkedIn profile URLs into rows of name, job titles, employers, schools and follower counts, with no login, from $4 per 1,000 profiles.*\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Scraper: No Cookies",
      "description": "Scrape public LinkedIn profiles in bulk with no login. Name, headline, experience, education, skills, connections, followers. $40 per 1,000. MCP-ready.",
      "version": "0.2",
      "buildTag": "latest",
      "categories": [
        "LEAD_GENERATION",
        "SOCIAL_MEDIA",
        "MCP_SERVERS"
      ],
      "defaultRunOptions": {
        "memoryMbytes": 512,
        "timeoutSecs": 300
      },
      "dockerfile": "../Dockerfile",
      "readme": "# LinkedIn Profile Scraper | 9 Fields, No Login or Cookies\n\n[![16 LinkedIn profiles in 101 seconds: a test run on 20 public profiles delivered 16 and charged nothing for the 4 that LinkedIn refused](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/linkedin-profile-scraper-hero.png)](https://console.apify.com/actors/lDghPuhZBgVdt0olp/input?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\nFrom **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), with over 140,000 runs across 170+ public actors.\n\n## Why choose this actor?\n\n- **16 public profiles in 101 seconds, with no LinkedIn account.** A test run on 20 well known business leaders delivered 16 profiles in 101 seconds at 512 MB. There is no login, no cookies and no browser: the actor reads the structured record LinkedIn itself puts in every public profile page.\n- **Name, job titles, employers, schools and follower count in every row we got.** All 16 delivered rows in that test had job titles and a follower count, 15 had a location and 14 had an about section. Fields LinkedIn leaves out are left out, never filled with guesses.\n- **You pay only for profiles that land in your dataset.** $4 to $7 per 1,000 profiles depending on your Apify plan. Profiles LinkedIn refuses or cannot find, duplicate URLs and the summary rows are never charged: the 4 refused profiles in the test cost nothing.\n\n[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/lDghPuhZBgVdt0olp/input?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Part of The Mine Works LinkedIn family:** [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral), [LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral).\n\n## Try it in one minute\n\nPaste this into the input's JSON tab and start the run. It asks for 10 public profiles of well known founders and executives, all of which came back in our test.\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/reidhoffman\",\n    \"https://www.linkedin.com/in/jeffweiner08\",\n    \"https://www.linkedin.com/in/andrewyng\",\n    \"https://www.linkedin.com/in/melindagates\",\n    \"https://www.linkedin.com/in/simonsinek\",\n    \"https://www.linkedin.com/in/adammgrant\",\n    \"https://www.linkedin.com/in/garyvaynerchuk\",\n    \"https://www.linkedin.com/in/patrickcollison\"\n  ],\n  \"maxResults\": 10\n}\n```\n\nEvery entry in `profileUrls` can be written five ways: a full URL (`https://www.linkedin.com/in/satyanadella`), a country subdomain URL (`https://in.linkedin.com/in/kunalshah1`), a URL without `https://` (`linkedin.com/in/satyanadella`), the short form `in/satyanadella`, or the bare username `satyanadella`. Query strings and trailing slashes are dropped, usernames are lowercased, and the same profile written two ways is fetched and charged once. Company, school and post URLs are not profile URLs and are skipped.\n\nApify's free plan includes $5 of credit every month, which covers about 707 profiles at this actor's price (the Free plan rate of $0.007 per profile, plus the $0.005 start fee on each of 10 runs at the default memory).\n\n### Copy to your AI assistant\n\n```\nthemineworks/linkedin-profile-scraper on Apify. Turns public LinkedIn profile URLs into structured rows (name, job titles, location, about text, employers, schools, follower count) by reading the public page's embedded JSON-LD record, with no login, cookies or browser. Call ApifyClient(\"TOKEN\").actor(\"themineworks/linkedin-profile-scraper\").call(run_input={...}), then client.dataset(run[\"defaultDatasetId\"]).list_items().items. Required: profileUrls (list of https://www.linkedin.com/in/<username> URLs, country subdomain URLs or bare usernames; up to 500). Optional: maxResults (default 10, up to 500, also the cost cap), proxy (default Apify datacenter proxy), monitorMode (default false; true delivers and charges only profiles new or changed since an earlier run with the same list). Profile rows have no _type and no status field; a profile LinkedIn refused or could not find comes back as {profile_url, status: \"blocked\" or \"not_found\"}; every run ends with one row with _type \"summary\" and, when profiles were delivered, one row with _type \"info\"; none of these extra rows is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-profile-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral\n```\n\n## Key features\n\n- **One plain HTTP request per profile, no browser.** LinkedIn keeps public profiles open to logged out visitors so search engines can index them, and embeds a `Person` record as JSON-LD in the page. The actor reads that record, not the visual page, at 512 MB of memory.\n- **9 fields per profile.** `profile_url`, `name`, `headline`, `location`, `about`, `experience`, `education`, `followers` and `scraped_at`. Employers and schools come as arrays of name plus LinkedIn page URL.\n- **Up to 500 profiles per run, deduplicated.** Paste a list of any length: the actor cleans each entry, removes duplicates, and stops at `maxResults` (and never past 500).\n- **Two tries per profile, each on a fresh IP.** Every request goes out on a new Apify datacenter proxy session. If the first try is refused, the actor waits about a second and tries once more on a different IP before it marks the profile `blocked`.\n- **A row for every profile you asked for.** Profiles that could not be read come back as a short row with `status: \"blocked\"` or `status: \"not_found\"`, so you can see exactly which ones to retry. Those rows are free.\n- **A stop switch for bad IP luck.** If 5 profiles in a row are refused, the run stops early instead of working through the rest of your list against a wall, and the summary row shows how far it got.\n\n## How to use it\n\n### Basic: one profile\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/satyanadella\"],\n  \"maxResults\": 1\n}\n```\n\nThis is the smallest useful run: one profile, one charge, done in about 5 seconds on Apify.\n\n### Several profiles in one run, written any way\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/reidhoffman/\",\n    \"in.linkedin.com/in/kunalshah1\",\n    \"in/guykawasaki\",\n    \"adammgrant\",\n    \"https://www.linkedin.com/in/adammgrant?trk=public_profile\"\n  ],\n  \"maxResults\": 50\n}\n```\n\nThe last two entries are the same person, so the run fetches 4 profiles and charges for at most 4. `maxResults` is a ceiling, not a target: a list of 4 profiles with `maxResults: 50` costs the same as `maxResults: 4`.\n\n### Enrich a candidate shortlist for your ATS\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/candidate-one\",\n    \"https://www.linkedin.com/in/candidate-two\",\n    \"https://www.linkedin.com/in/candidate-three\"\n  ],\n  \"maxResults\": 500\n}\n```\n\nPaste the profile URLs from your sourcing sheet, up to 500 at a time. Export the dataset as CSV or Excel and map `name`, `headline`, `location`, `experience` and `education` to your ATS fields. For longer lists, split them into runs of 500.\n\n### Check prospects' current employers before outreach\n\nPut your target accounts' contact URLs into a saved task and schedule it weekly (Apify Console, Schedules, Create new). Compare `experience` with last week's export: a new first entry or a missing company is often a job change worth acting on. Without monitor mode every scheduled run delivers, and charges for, every profile on the list again. With `\"monitorMode\": true` a run delivers only the profiles that changed (see Run it on a schedule).\n\n### Feed it from our discovery actors\n\n[LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) finds public profiles at a company by job title, and [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) finds the authors of posts on a topic. Both return LinkedIn profile URLs. Pass those URLs to this actor in `profileUrls` to add employers, schools, about text and follower counts to each person.\n\n### Retry only the profiles that were refused\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/sundarpichai\",\n    \"https://www.linkedin.com/in/jensenhuang\"\n  ],\n  \"maxResults\": 2\n}\n```\n\nFilter the last run's dataset on `status = \"blocked\"`, copy those `profile_url` values into a new run, and start it a little later. Each run gets fresh IPs, so a profile refused once is often readable on the next try. A refused profile costs nothing either time it is refused.\n\n## Input parameters\n\n| Parameter | Type | Default | What it does |\n|---|---|---|---|\n| `profileUrls` | array of strings | none (prefilled with one example) | Public LinkedIn profiles to read: full URLs, country subdomain URLs, `linkedin.com/in/...` without `https://`, `in/<username>` or bare usernames. Duplicates are removed. At most 500 are used. |\n| `maxResults` | integer | `10` | Most profiles processed in the run, 1 to 500. Applied after duplicates are removed. This is also your cost cap. |\n| `proxy` | object | Apify proxy, datacenter | Proxy settings. Leave it as it is: public profile pages need no special proxy, and each profile already goes out on a fresh datacenter IP session. |\n| `monitorMode` | boolean | `false` | Deliver only profiles that are new or whose headline, employers, schools, location or About text changed since an earlier run with the same list. Unchanged profiles are not charged. Made for weekly schedules. |\n\nIf no entry in `profileUrls` looks like a LinkedIn profile, the run writes only a summary row with `note: \"no_valid_urls\"` and charges no profiles.\n\n## What data do you get?\n\nOne row per profile you asked for, then a summary row. Profile rows have no `_type` and no `status` field, which is the simplest way to filter them.\n\n**The person:** `name`, `profile_url` (the address LinkedIn's record gives, which can be a country subdomain such as `https://in.linkedin.com/in/kunalshah1`), `location` (as shown on the profile, for example `Redmond, Washington, United States`), `about` (the about section text), `followers` (the follower count, as a string).\n\n**Job titles:** `headline` holds the job titles LinkedIn lists in the profile's public record, joined with commas, one per position, for example `Chairman and CEO, Member Board Of Trustees`. It is not the free text headline under the person's name, and the titles are not paired with companies.\n\n**Employers:** `experience`, an array of `{ \"company\", \"company_url\" }` from the record's list of organizations the person works or worked for.\n\n**Schools and other affiliations:** `education`, an array of `{ \"school\", \"school_url\" }` from the record's list of organizations the person is an alumnus of. LinkedIn often files board seats, nonprofits and past companies here too (Satya Nadella's list includes Starbucks and Fred Hutch), and sometimes puts a university under `experience`. The actor reports both lists exactly as LinkedIn labels them.\n\n**When:** `scraped_at`, the ISO time the row was written.\n\n**Rows for profiles that could not be read** (never charged): `profile_url`, `status` (`blocked` when LinkedIn refused the request or showed a sign in wall, `not_found` when the profile does not exist or is unavailable) and `scraped_at`.\n\n**Summary row** (`_type: \"summary\"`, never charged): `requested`, `scraped`, `blocked`, `not_found`, `charged_for`, `charge_failures` and `scraped_at`, plus `note: \"no_valid_urls\"` when the input had no usable profile. A run that reaches its time limit writes a summary marked as ended on the deadline.\n\n**Info row** (`_type: \"info\"`, never charged): written when at least one profile was delivered, with `delivered`, a `message`, a scheduling tip and `scraped_at`. With monitor mode on, profile rows also carry `monitor_status` (`new` or `changed`), and a last info row gives the monitor counts.\n\n### Stable fields for automations\n\nThese fields were present in all 16 profile rows of the test run and are written for every delivered profile. Their names will not change, so a Google Sheet, Zapier zap or n8n flow can map them once.\n\n| Field | What it is |\n|---|---|\n| `profile_url` | The profile's LinkedIn URL, the key to store and join on |\n| `name` | Full name as shown on the profile |\n| `experience` | Array of employers; can be empty |\n| `experience[].company` | Organization name as LinkedIn labels it |\n| `experience[].company_url` | That organization's LinkedIn page, or `null` |\n| `education` | Array of schools and other affiliations; can be empty |\n| `education[].school` | Organization name as LinkedIn labels it |\n| `education[].school_url` | That organization's LinkedIn page, or `null` |\n| `scraped_at` | When this row was written, ISO 8601 |\n\n`headline` and `followers` were also in all 16 rows of the test, `location` in 15 and `about` in 14, but the actor leaves any of them out when LinkedIn's record has no value, so treat them as optional.\n\n### Output examples\n\n**A full profile** (test run, 1 Oct 2026):\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/satyanadella\",\n  \"name\": \"Satya Nadella\",\n  \"experience\": [\n    { \"company\": \"Microsoft\", \"company_url\": \"https://www.linkedin.com/company/microsoft\" },\n    { \"company\": \"University of Chicago\", \"company_url\": \"https://www.linkedin.com/school/uchicago/\" }\n  ],\n  \"education\": [\n    { \"school\": \"Starbucks\", \"school_url\": \"https://www.linkedin.com/company/starbucks\" },\n    { \"school\": \"The Business Council U.S.\", \"school_url\": \"https://www.linkedin.com/company/the-business-council-us\" },\n    { \"school\": \"Fred Hutch\", \"school_url\": \"https://www.linkedin.com/company/fredhutch\" },\n    { \"school\": \"The University of Chicago Booth School of Business\", \"school_url\": \"https://www.linkedin.com/school/universityofchicagoboothschoolofbusiness/\" }\n  ],\n  \"headline\": \"Chairman and CEO, Member Board Of Trustees\",\n  \"location\": \"Redmond, Washington, United States\",\n  \"about\": \"As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person and every organization on the planet to achieve more.\",\n  \"followers\": \"12195753\",\n  \"scraped_at\": \"2026-10-01T13:29:41.853Z\"\n}\n```\n\n**A sparse profile** (same run): no location and no about section on the public record, and no schools, so those keys are missing and `education` is empty.\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/rbranson\",\n  \"name\": \"Richard Branson\",\n  \"experience\": [\n    { \"company\": \"Virgin Group\", \"company_url\": \"https://uk.linkedin.com/company/virgin\" }\n  ],\n  \"education\": [],\n  \"headline\": \"Founder\",\n  \"followers\": \"18642209\",\n  \"scraped_at\": \"2026-10-01T13:30:25.281Z\"\n}\n```\n\n**A profile where LinkedIn masked some text** (same run): for some profiles LinkedIn replaces parts of the public record with asterisks for logged out visitors. The actor passes them through unchanged. This happened on 3 of the 16 profiles in the test.\n\n```json\n{\n  \"profile_url\": \"https://www.linkedin.com/in/brianchesky\",\n  \"name\": \"Brian Chesky\",\n  \"experience\": [\n    { \"company\": \"Airbnb\", \"company_url\": \"https://www.linkedin.com/company/airbnb\" }\n  ],\n  \"education\": [\n    { \"school\": \"***** ****** ******\", \"school_url\": null },\n    { \"school\": \"****\", \"school_url\": null },\n    { \"school\": \"Rhode Island School of Design\", \"school_url\": \"https://www.linkedin.com/school/risd1877/\" }\n  ],\n  \"headline\": \"********** * ***\",\n  \"location\": \"San Francisco, California, United States\",\n  \"about\": \"I am one of the founders and CEO of Airbnb.\",\n  \"followers\": \"293926\",\n  \"scraped_at\": \"2026-10-01T13:30:45.296Z\"\n}\n```\n\n**A refused profile and the summary row** (same run; nothing charged for the refused profile):\n\n```json\n[\n  {\n    \"profile_url\": \"https://www.linkedin.com/in/sundarpichai\",\n    \"status\": \"blocked\",\n    \"scraped_at\": \"2026-10-01T13:29:59.075Z\"\n  },\n  {\n    \"_type\": \"summary\",\n    \"requested\": 20,\n    \"scraped\": 16,\n    \"blocked\": 4,\n    \"not_found\": 0,\n    \"charged_for\": 0,\n    \"charge_failures\": 0,\n    \"scraped_at\": \"2026-10-01T13:31:17.970Z\"\n  }\n]\n```\n\n`charged_for` is 0 here only because the test ran on our own machine, outside Apify billing. On Apify it counts the profiles charged, 16 in a run like this one.\n\n## Pricing\n\nPay per event. You are charged for each profile delivered to your dataset, plus a small start fee per run. The rate falls as your Apify plan rises.\n\n| Event | Free | Bronze | Silver | Gold and above |\n|---|---|---|---|---|\n| Profile delivered (`profile-scraped`), per profile | $0.007 | $0.00625 | $0.0056 | $0.004 |\n| Per 1,000 profiles | $7.00 | $6.25 | $5.60 | $4.00 |\n| Run start (`apify-actor-start`) | $0.005 per GB of run memory, minimum one event | same | same | same |\n\n**The start fee, exactly.** Apify's `apify-actor-start` event is charged once when a run starts, one event per GB of memory with a minimum of one. At the default 512 MB, and at 1 GB, that is one event, $0.005 per run. A 4 GB run would pay $0.02. This actor does not need more than 512 MB.\n\n**Never charged:** profiles LinkedIn refused (`status: \"blocked\"`), profiles that do not exist (`status: \"not_found\"`), duplicate URLs in your list, the summary row and the info row. A run in which every profile is refused pays only the start fee.\n\n**Charged like any other profile:** a profile whose public record LinkedIn has partly masked with asterisks. The row has a name and real data, so it counts as delivered.\n\n**What real jobs cost on Gold:** 500 profiles cost $2.00 plus $0.005. A weekly check of 50 prospects costs $0.205 a week. On the Free plan, 100 profiles cost $0.70 plus $0.005.\n\nThere is no price change scheduled for this actor. The Pricing tab on this page always shows the rate for your own plan.\n\n## Run it on a schedule\n\nSwitch on `monitorMode` to hear about a person only when their profile changes. The first run delivers every profile. After that, a profile comes back only when the name, headline, location, About text, employers or schools change, and you pay only for the profiles delivered. A new first employer is what a job change looks like.\n\n1. Fill in the input, tick **Monitor mode**, and save it as a task.\n2. In Apify Console open **Schedules**, click **Add schedule**, and pick **Weekly** (or a cron such as `0 6 * * 1`).\n3. Add the saved task to the schedule and click **Save**.\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"https://www.linkedin.com/in/rbranson\"\n  ],\n  \"maxResults\": 50,\n  \"monitorMode\": true\n}\n```\n\nEach delivered row carries `monitor_status`: `new` the first time, `changed` when the profile differs from the version you last received. An unchanged profile is read but not delivered and not charged; the start fee applies to every run as usual. The follower count alone does not count as a change. A read where LinkedIn masked some text with asterisks is never sent as a change; it waits for a clean read. The last row of each run (`_type: \"info\"`) gives `new_this_run`, `changed_this_run` and `skipped_already_seen`. The history belongs to the list: change `profileUrls` and a new history starts; change `maxResults` and it carries on.\n\n## FAQ\n\n**What does this actor read from LinkedIn?**\nLinkedIn is the professional network where people list their jobs and education. For each public profile page (`linkedin.com/in/...`) it reads the structured `Person` record that LinkedIn embeds for search engines: name, job titles, location, about text, the organizations the person works or worked for, schools and affiliations, and follower count.\n\n**How many profiles can I get?**\nUp to 500 per run, set with `maxResults`. LinkedIn refuses some requests from any IP pool: in our 20 profile test, 16 came back and 4 were refused with LinkedIn's HTTP 999 response. Refused profiles are free, and the run tells you which ones they were.\n\n**How fresh is the data?**\nLive. Every run requests each page at the moment it runs, so job titles, employers and follower counts are what LinkedIn shows that day, stamped in `scraped_at`.\n\n**Do I need a LinkedIn account, cookies or an API key?**\nNo. The actor never logs in, never uses cookies and never acts as any LinkedIn user, so there is no account on your side that could be restricted.\n\n**Do I need a proxy?**\nNo setup is needed. The actor uses Apify's datacenter proxy by default and sends each profile on a fresh IP session.\n\n**Why is there no skills list, connection count or job dates?**\nThey are not in the public record LinkedIn embeds for logged out visitors. The actor returns organization names and links for `experience` and `education`, not job titles per company, dates or descriptions, and never invents values it cannot read.\n\n**Why are some values shown as asterisks?**\nFor some profiles LinkedIn masks parts of the public record, for example `\"headline\": \"********** * ***\"`. That is what LinkedIn serves to logged out visitors, and the actor passes it through as is. It happened on 3 of 16 profiles in our test.\n\n**Why does `education` list companies?**\nThe actor copies LinkedIn's own labelling. LinkedIn's record often lists board seats, nonprofits or earlier companies among a person's affiliations, which this actor returns as `education`. If you need schools only, filter on `school_url` containing `/school/`.\n\n**What happens with private, deleted or misspelled profiles?**\nA profile that does not exist comes back as `status: \"not_found\"`. A private or walled profile, or one LinkedIn refused, comes back as `status: \"blocked\"`. Neither is charged. Before marking a profile blocked, the actor tries twice on two different IPs.\n\n**Why did my run stop before the end of my list?**\nIf 5 profiles in a row are refused, the actor stops so it does not keep requesting pages that will not load. The summary row shows `scraped`, `blocked` and `not_found`. Start a new run with the rest of the list a little later. A run also stops delivering profiles when your maximum cost per run in Apify is reached.\n\n**How do I get the data out?**\nFrom the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. JSON keeps the `experience` and `education` arrays intact. CSV and Excel flatten them into numbered columns.\n\n**Can I run it on a schedule?**\nYes. Save your input as a task, then add a schedule in Apify Console (Schedules, then Create new, for example every Monday at 06:00). Without monitor mode every run delivers and charges every profile in the list; with `monitorMode` on, only profiles that are new or changed since the last run.\n\n**Can I use it from Claude, ChatGPT or another AI assistant?**\n- Connector URL: `https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper`.\n- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.\n- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.\n- Cursor or VS Code: add it as an HTTP MCP server with that URL.\n- Claude Code: `claude mcp add -t http linkedin-profile-scraper \"https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper\"`.\n\nIt is also one of the tools inside our [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral) server, which bundles 10 recruiting tools.\n\n**Is it legal to scrape public LinkedIn profiles?**\nThe actor reads only pages LinkedIn shows to anyone without logging in, and nothing behind a login. In *hiQ Labs v. LinkedIn*, a US appeals court held that scraping publicly accessible pages does not by itself violate the Computer Fraud and Abuse Act. Profiles still contain personal data, so you are responsible for how you use it, including LinkedIn's terms and data protection law such as GDPR and CCPA. This is general information, not legal advice. This actor is independent and not affiliated with or endorsed by LinkedIn.\n\n## Integrations\n\nResults land in a standard Apify dataset, so they connect without extra code:\n\n- **Google Sheets:** send each run's profiles to a sheet with Apify's Google Sheets integration.\n- **Make, Zapier and n8n:** start a run and read its dataset with the official Apify apps and nodes.\n- **Webhooks:** get a call to your own URL when a run succeeds, then fetch the dataset.\n- **API and SDKs:** start runs and read results with the Apify API, or the Python and JavaScript clients.\n- **MCP clients:** Claude, ChatGPT, Cursor and other MCP clients can call the actor through `https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper`.\n\n<!-- RELATED:START (generated by _readme_kit/related_block.py, do not edit by hand) -->\n## More from The Mine Works\n\n**LinkedIn**\n\n- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Social media and video**\n\n- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Leads and business directories**\n\n- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [JustDial Scraper](https://apify.com/themineworks/justdial-business?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Marketing, SEO and reviews**\n\n- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Real estate**\n\n- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Science, health and government data**\n\n- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [data.gov.in Scraper](https://apify.com/themineworks/india-data-gov-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Jobs and hiring**\n\n- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**E-commerce and marketplaces**\n\n- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Company and business data**\n\n- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Food and local services**\n\n- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**Developer and AI tools**\n\n- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n**More tools**\n\n- [Tennis Match & Player Data Scraper](https://apify.com/themineworks/tennis-match-data?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [Google Hotels Prices Scraper](https://apify.com/themineworks/google-hotels-prices-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n- [LandWatch Scraper](https://apify.com/themineworks/landwatch-land-for-sale-scraper?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral)\n\n<!-- RELATED:END -->\n\n## Support\n\nFound a bug or need a field? Open an issue on the Issues tab of this actor. To ask for a new source, email dmineworks@gmail.com.\n\n*LinkedIn Profile Scraper turns public LinkedIn profile URLs into rows of name, job titles, employers, schools and follower counts, with no login, from $4 per 1,000 profiles.*\n",
      "input": {
        "title": "LinkedIn Profile Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "LinkedIn Profile URLs",
            "type": "array",
            "description": "List of public LinkedIn profiles to scrape. Accepts full URLs (e.g. https://www.linkedin.com/in/satyanadella), locale subdomains (in.linkedin.com/in/...), or bare usernames (e.g. satyanadella). Up to 500 per run.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/satyanadella"
            ]
          },
          "maxResults": {
            "title": "Max results",
            "type": "integer",
            "description": "Maximum number of profiles to return. Set to a small number (e.g. 3) for quick tests.",
            "default": 10,
            "prefill": 1,
            "maximum": 500
          },
          "monitorMode": {
            "title": "Monitor mode (only new or changed profiles)",
            "type": "boolean",
            "description": "Run on a schedule and deliver ONLY profiles that are new or whose headline, employers, schools, location or About text changed since a previous run (for example a job change). The follower count alone does not count. You are charged per delivered profile, not for the whole list each time. Ideal for weekly monitoring. Requires the same input across runs.",
            "default": false,
            "editor": "checkbox"
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy. Defaults to datacenter — public profile pages are Google-indexed and served over plain HTTP, so residential is not required. Each profile is fetched on a fresh proxy session (first-view IP). Set a group explicitly to override.",
            "editor": "proxy",
            "prefill": {
              "useApifyProxy": true
            }
          }
        },
        "required": [],
        "description": "Configures which public LinkedIn profiles to scrape, by URL or bare username, how many to process in one run, and proxy settings for the fetch."
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "type": "object",
            "properties": {
              "profile_url": {
                "type": "string",
                "description": "Canonical LinkedIn profile URL"
              },
              "name": {
                "type": "string",
                "description": "Full name of the person"
              },
              "headline": {
                "type": "string",
                "description": "LinkedIn headline (current role and company)"
              },
              "location": {
                "type": "string",
                "description": "Location as shown on the profile"
              },
              "about": {
                "type": "string",
                "description": "About / summary section text"
              },
              "connections": {
                "type": "string",
                "description": "Connection count string (e.g. '500+ connections')"
              },
              "followers": {
                "type": "string",
                "description": "Follower count string"
              },
              "experience": {
                "type": "array",
                "description": "Array of experience entries (title, company, duration, description)"
              },
              "education": {
                "type": "array",
                "description": "Array of education entries (school, degree, field, dates)"
              },
              "skills": {
                "type": "array",
                "description": "List of skills"
              },
              "monitor_status": {
                "type": "string",
                "description": "Monitor mode only: 'new' for a record delivered for the first time, 'changed' when its details differ from the last delivered version."
              },
              "scraped_at": {
                "type": "string",
                "description": "ISO timestamp when this record was scraped"
              }
            }
          },
          "views": {
            "overview": {
              "title": "Results",
              "transformation": {
                "fields": [
                  "name",
                  "headline",
                  "location",
                  "connections",
                  "followers",
                  "profile_url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name"
                  },
                  "headline": {
                    "label": "Headline"
                  },
                  "location": {
                    "label": "Location"
                  },
                  "connections": {
                    "label": "Connections"
                  },
                  "followers": {
                    "label": "Followers"
                  },
                  "profile_url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Scraper - Bulk Public Data, No Login output",
        "properties": {
          "results": {
            "type": "string",
            "title": "Results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      }
    },
    "buildNumber": "0.2.24",
    "imageDigest": "c669a14a2571750f6a82be9c8aa1f1da3562a935818dc167978de4b58e693021",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.2"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.052768888888888886
    }
  }
}