{
  "data": {
    "id": "ksXqk2DaDaeIZweX3",
    "actId": "JhXpCI1Re4ltZYSZd",
    "userId": "6Wl3ChH9mngy2oMrb",
    "startedAt": "2026-08-31T19:57:30.204Z",
    "finishedAt": "2026-08-31T19:57:34.709Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 4399,
      "runTimeSecs": 4.399,
      "computeUnits": 0.004887777777777777,
      "imageSizeBytes": 539737600
    },
    "options": {
      "useCache": false,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"title\": \"LinkedIn Profile Scraper\",\n  \"description\": \"LinkedIn Profile Scraper accepts source URLs, public identifiers, and searches. Run controls stay in the same form.\",\n  \"required\": [],\n  \"properties\": {\n    \"startUrls\": {\n      \"title\": \"Which sources?\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"Enter LinkedIn URLs or search terms, one per line.\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"williamhgates\"\n      ],\n      \"example\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"williamhgates\"\n      ],\n      \"sectionCaption\": \"Basic configuration\",\n      \"default\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/satyanadella\",\n        \"williamhgates\"\n      ]\n    },\n    \"urls\": {\n      \"title\": \"Which URLs?\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"Paste the LinkedIn URLs to process, one per line.\",\n      \"prefill\": [],\n      \"sectionCaption\": \"Basic configuration\",\n      \"default\": []\n    },\n    \"publicIdentifiers\": {\n      \"title\": \"Which public identifiers?\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"Enter the public identifiers to resolve, one per line.\",\n      \"prefill\": [],\n      \"default\": [],\n      \"sectionCaption\": \"Basic configuration\"\n    },\n    \"queries\": {\n      \"title\": \"Which searches?\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"Enter the search phrases to run, one per line.\",\n      \"prefill\": [],\n      \"default\": [],\n      \"sectionCaption\": \"Basic configuration\"\n    },\n    \"enrich\": {\n      \"title\": \"Which enrichment mode?\",\n      \"type\": \"string\",\n      \"description\": \"Choose the enrichment mode applied to returned records.\",\n      \"editor\": \"select\",\n      \"default\": \"off\",\n      \"enum\": [\n        \"off\",\n        \"domain_guess\",\n        \"full_verification\"\n      ],\n      \"enumTitles\": [\n        \"Profiles only\",\n        \"Add work email\",\n        \"Add work email + direct dial\"\n      ],\n      \"sectionCaption\": \"Filters\",\n      \"prefill\": \"off\"\n    },\n    \"maxItems\": {\n      \"title\": \"How many results?\",\n      \"type\": \"integer\",\n      \"description\": \"Stop after this many dataset rows.\",\n      \"default\": 10,\n      \"minimum\": 1,\n      \"maximum\": 50000,\n      \"sectionCaption\": \"Performance and limits\",\n      \"prefill\": 10\n    },\n    \"includeHistory\": {\n      \"title\": \"Include history?\",\n      \"description\": \"Keep history in the returned record.\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": true,\n      \"sectionCaption\": \"Filters\"\n    },\n    \"maxConcurrency\": {\n      \"title\": \"How many requests at once?\",\n      \"type\": \"integer\",\n      \"description\": \"Set the number of source requests that may run in parallel.\",\n      \"default\": 5,\n      \"minimum\": 1,\n      \"maximum\": 20,\n      \"sectionCaption\": \"Performance and limits\",\n      \"prefill\": 5\n    },\n    \"findWorkEmail\": {\n      \"title\": \"Find work emails?\",\n      \"description\": \"Choose whether to look for a work email for each matched person.\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Filters\"\n    },\n    \"maxSeconds\": {\n      \"title\": \"How long may the run continue?\",\n      \"type\": \"integer\",\n      \"default\": 180,\n      \"minimum\": 30,\n      \"maximum\": 3600,\n      \"description\": \"Stop after this many seconds and keep completed rows.\",\n      \"sectionCaption\": \"Time frame\",\n      \"prefill\": 180\n    }\n  }\n}",
    "readme": "# LinkedIn Profile Scraper\n\nBuild a clean file of LinkedIn people from profile URLs, public identifiers, or searches. Keep names, roles, employers, locations, audience size, experience, and education together for prospecting and company research.\n\n![LinkedIn Profile Scraper source page and returned record](https://reapx.dev/assets/products/linkedin-profile-scraper/readme.png?v=20260826)\n\n## What it returns\n\nEach row keeps the LinkedIn source record beside the fields needed to use it. The opening set is `username`, `fullName`, `firstName`, `lastName`, `headline`, `currentTitle`, `currentCompany`, `companyWebsite`, `companyHeadcount`, `companyIndustry`, `location`, and `country`. The complete schema is declared before the run, and dataset views keep related fields together without changing the underlying row.\n\n### Captured row\n\n```json\n{\n  \"companyHeadcount\": 232991,\n  \"connectionsCount\": 500,\n  \"country\": \"US\"\n}\n```\n\n## Input\n\n![LinkedIn Profile Scraper published input controls](https://reapx.dev/assets/products/linkedin-profile-scraper/schema.png?v=20260826)\n\n\nLinkedIn Profile Scraper accepts source URLs, public identifiers, and searches. Run controls stay in the same form.\n\n| Field | What it controls | Starting value |\n| --- | --- | --- |\n| `startUrls` | Enter LinkedIn URLs or search terms, one per line. | `[\"https://www.linkedin.com/in/williamhgates\",\"https://www.linkedin.com/in/satyanadella\",\"williamhgates\"]` |\n| `urls` | Paste the LinkedIn URLs to process, one per line. | `[]` |\n| `publicIdentifiers` | Enter the public identifiers to resolve, one per line. | `[]` |\n| `queries` | Enter the search phrases to run, one per line. | `[]` |\n| `enrich` | Choose the enrichment mode applied to returned records. | `\"off\"` |\n| `maxItems` | Stop after this many dataset rows. | `10` |\n| `includeHistory` | Keep history in the returned record. | `true` |\n| `maxConcurrency` | Set the number of source requests that may run in parallel. | `5` |\n| `findWorkEmail` | Choose whether to look for a work email for each matched person. | `false` |\n| `maxSeconds` | Stop after this many seconds and keep completed rows. | `180` |\n\n### Example input\n\n```json\n{\n  \"startUrls\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"williamhgates\"\n  ],\n  \"urls\": [],\n  \"publicIdentifiers\": [],\n  \"queries\": [],\n  \"enrich\": \"off\",\n  \"maxItems\": 3,\n  \"includeHistory\": true\n}\n```\n\nNo field is required. Start with the filled example, then replace only the target values needed for the job. Run controls can stay at their starting values for the first collection.\n\n## Dataset fields\n\n![LinkedIn Profile Scraper declared output schema](https://reapx.dev/assets/products/linkedin-profile-scraper/fields.png?v=20260826)\n\n\n| Field | Type |\n| --- | --- |\n| `username` | `string` |\n| `fullName` | `string` |\n| `firstName` | `string` |\n| `lastName` | `string` |\n| `headline` | `string` |\n| `currentTitle` | `string` |\n| `currentCompany` | `string` |\n| `companyWebsite` | `string` |\n| `companyHeadcount` | `integer` |\n| `companyIndustry` | `string` |\n| `location` | `string` |\n| `country` | `string` |\n| `followersCount` | `integer` |\n| `connectionsCount` | `integer` |\n| `about` | `string` |\n| `skills` | `array:string` |\n| `experience` | `array:object` |\n| `education` | `string` |\n\n## Dataset views\n\nViews are working surfaces for review and export. They select and order fields while leaving the stored row unchanged.\n\n| View | Opening fields |\n| --- | --- |\n| `overview` | `username`, `fullName`, `firstName`, `lastName`, `currentTitle`, `companySlug`, `companyWebsite`, and `workEmail` |\n| `identity` | `username`, `fullName`, `firstName`, `lastName`, `currentTitle`, `companySlug`, `badges`, and `currentTitleSource` |\n| `contact` | `username`, `fullName`, `profilePicUrl`, `companyWebsite`, `workEmail`, `phone`, `emailConfidence`, and `emailPattern` |\n| `location` | `username`, `fullName`, `profilePicUrl`, `location`, `country`, and `companyLocation` |\n| `engagement` | `username`, `fullName`, `profilePicUrl`, `companyHeadcount`, `followersCount`, and `connectionsCount` |\n| `timing` | `username`, `fullName`, `profilePicUrl`, `scrapedAt`, and `languages` |\n\n## Output and exports\n\n![LinkedIn Profile Scraper source-to-output workflow](https://reapx.dev/assets/products/linkedin-profile-scraper/demo.webp?v=20260826)\n\n\n| Output | Type | Destination |\n| --- | --- | --- |\n| `results` | `string` | `{{links.apiDefaultDatasetUrl}}/items` |\n| `json` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=json` |\n| `csv` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=csv` |\n| `excel` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=xlsx` |\n| `jsonl` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=jsonl` |\n\nCompleted rows are available in the Apify dataset as JSON, CSV, Excel, and JSONL exports. The run output also carries the declared links above for API clients and automations.\n\n## Pricing\n\n$0.00001 per dataset item. Other Apify plans use the rates shown in the Pricing tab.\n\n## Console, API, schedules, and MCP\n\n![LinkedIn Profile Scraper live run monitoring](https://reapx.dev/assets/products/linkedin-profile-scraper/run.webp?v=20260826)\n\n\nRuns can begin in Apify Console, from a saved task, or through the Actor API. A schedule can reuse the same input, and a run-finished webhook can pass the dataset or run ID to the next system.\n\n```text\nPOST https://api.apify.com/v2/acts/JhXpCI1Re4ltZYSZd/runs\nGET  https://api.apify.com/v2/datasets/{datasetId}/items\n```\n\nFor MCP selection, use **LinkedIn Profile Scraper**. Its machine entry carries the same description, input field names, no-required-field contract, output types, dataset fields, views, and pricing facts as this document.\n\n## Saved tasks\n\nTwenty saved-task products cover distinct lookup, comparison, research, operations, automation, and export jobs:\n\n- **LinkedIn prospect research file**: buyer-job; opens `overview`.\n- **LinkedIn profiles with work emails and phones**: buyer-job; opens `contact`.\n- **Decision-makers by role, company and industry**: buyer-job; opens `identity`.\n- **LinkedIn people grouped by market**: buyer-job; opens `location`.\n- **Refresh a LinkedIn prospect roster**: buyer-job; opens `overview`.\n\n## Integrations\n\nUse the dataset API from any HTTP client, export rows to a spreadsheet, or send the run ID through an Apify webhook. Saved tasks give schedules and automation tools a stable input without changing the Actor contract.\n\n## Related products\n\n- **LinkedIn Email Scraper** (`linkedin-email-scraper`)\n- **LinkedIn Post Scraper** (`linkedin-post-scraper`)\n- **LinkedIn Search Scraper** (`linkedin-search-scraper`)\n- **Instagram Follower Scraper** (`instagram-follower-scraper`)\n- **LinkedIn Lead Scraper** (`linkedin-lead-scraper`)\n\n## When a run needs attention\n\n- **No rows:** Open the target in a browser, check spelling and source visibility, then retry the saved example before widening the input.\n- **A field is empty:** Check the field beside its source URL. A missing source value stays empty instead of being replaced with a guess.\n- **A target fails:** Keep successful targets in the dataset, then retry only the affected input.\n- **An automation cannot find results:** Read the dataset ID from the run and request its items endpoint directly.\n\n## FAQ\n\n### What do I get back from one run?\n\nOne row per profile with 39 declared fields, opening on username, fullName, firstName and lastName. The schema is published before the run, so you know the shape before you spend anything.\n\n### Do I need a linkedin account or login?\n\nNo. The run works from the linkedin sources you supply in the input. Nothing is posted, changed or accessed on your behalf.\n\n### What does a run cost?\n\nThe current rate is shown on the Pricing tab and is charged per row you receive, so a run that finds nothing costs close to nothing. Cap the run with the item limit when you want a predictable ceiling.\n\n### Can I try it before committing budget?\n\nYes. Cap the run with the item limit in the input and inspect the first rows. The cap is enforced before charging, so a trial run stays a trial.\n\n### What do I put in the input?\n\nThe staged input is already usable: startUrls, urls and publicIdentifiers. Replace the staged target with your own list when you are ready to run for real.\n\n### Are any fields required?\n\nNo field is required. Every input carries a working default, so the Actor can be started as-is and refined afterwards.\n\n### Do I need to configure proxies?\n\nNo. Network access is handled inside the Actor and needs no proxy configuration from you.\n\n### How fresh is the data?\n\nEvery row is collected during the run you start, not served from a cache. Re-run the same input whenever you need the current state of a linkedin profile.\n\n### Can I use the results commercially?\n\nThe Actor collects publicly accessible linkedin information. You remain responsible for how you use it, including any privacy or contractual obligations that apply to your business.\n\n### How do I compare two runs?\n\nKeep username and fullName as your join key and diff the exports. The identity fields stay stable across runs, which is what makes a comparison meaningful.\n\n### What happens if a source fails mid-run?\n\nThe run continues through the remaining sources and finishes with what it collected. Partial results are still written to the dataset rather than discarded.\n\n### Can I limit how long a run takes?\n\nYes. The urls input caps the run. Use it when you need a predictable cost and a predictable finish time.\n\n### How do I report a problem?\n\nOpen an issue on the Actor with the run ID, the input you used and the field or row that needs attention. The run ID lets the exact execution be inspected.\n\n### How is this different from LinkedIn Email Scraper?\n\nLinkedIn Profile Scraper answers one job: Compare LinkedIn profiles.. LinkedIn Email Scraper covers a different question on the same platform. Run both when you need both sides.\n\n### What is `emailConfidence` for?\n\nIt records how the row was resolved, so you can filter to the rows you trust instead of treating every row as equally certain.\n\n### How do I read the output without scrolling through JSON?\n\nOpen the overview view on the Output tab. 6 views ship with the Actor (overview, identity, contact, location, engagement and timing), each grouping the fields that belong to one question.\n\n### How do I get the data into my own tools?\n\nExport the dataset as JSON, CSV, Excel or XML, call the dataset API directly, or attach a run-finished webhook and collect the dataset reference as soon as the run ends.\n\n### Can an agent or LLM call this?\n\nYes. LinkedIn Profile Scraper is exposed over MCP with the same description, no-required-field input contract and output types shown here, so an agent can select and call it without a human in the loop.\n\n### Why is a value empty on some rows?\n\nlinkedin does not expose every field on every profile. An absent value stays empty rather than being filled with a guess, so a row never invents a fact it did not receive.\n\n### A run returned fewer rows than I expected. Why?\n\nThe usual causes are a narrow source list, an item cap still set low, or a source that genuinely holds less than expected. Widen the input or raise the cap and run again.\n\n### Can I schedule this to run on its own?\n\nYes. Save the input as an Apify task and attach a schedule. Keep separate tasks when different teams need different targets or delivery paths.\n\n## Support\n\nUse the Actor issue form for product questions, broken source routes, schema mismatches, and feedback. Include the smallest input that reproduces the problem. That is enough to locate the run and its dataset without sharing an entire working list.\n\nUse this Actor only for data you are allowed to collect. Follow source terms, privacy law, and your own retention policy.\n",
    "changelog": "## 2026-08-26\n\n_Changes_\n\n- Dataset views now cover every field the run returns, so no returned field is missing from a view.\n- Rebuilt the product documentation: field reference, input guide, and a product-specific FAQ.\n- Refreshed the listing and README media.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Scraper",
      "description": "Build a clean file of LinkedIn people from profile URLs, public identifiers, or searches. Keep names, roles, employers, locations, audience size, experience, and education together for prospecting and company research.",
      "version": "0.9",
      "buildTag": "latest",
      "dockerfile": "../Dockerfile",
      "input": {
        "type": "object",
        "schemaVersion": 1,
        "title": "LinkedIn Profile Scraper",
        "description": "LinkedIn Profile Scraper accepts source URLs, public identifiers, and searches. Run controls stay in the same form.",
        "required": [],
        "properties": {
          "startUrls": {
            "title": "Which sources?",
            "type": "array",
            "editor": "stringList",
            "description": "Enter LinkedIn URLs or search terms, one per line.",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/satyanadella",
              "williamhgates"
            ],
            "example": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/satyanadella",
              "williamhgates"
            ],
            "sectionCaption": "Basic configuration",
            "default": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/satyanadella",
              "williamhgates"
            ]
          },
          "urls": {
            "title": "Which URLs?",
            "type": "array",
            "editor": "stringList",
            "description": "Paste the LinkedIn URLs to process, one per line.",
            "prefill": [],
            "sectionCaption": "Basic configuration",
            "default": []
          },
          "publicIdentifiers": {
            "title": "Which public identifiers?",
            "type": "array",
            "editor": "stringList",
            "description": "Enter the public identifiers to resolve, one per line.",
            "prefill": [],
            "default": [],
            "sectionCaption": "Basic configuration"
          },
          "queries": {
            "title": "Which searches?",
            "type": "array",
            "editor": "stringList",
            "description": "Enter the search phrases to run, one per line.",
            "prefill": [],
            "default": [],
            "sectionCaption": "Basic configuration"
          },
          "enrich": {
            "title": "Which enrichment mode?",
            "type": "string",
            "description": "Choose the enrichment mode applied to returned records.",
            "editor": "select",
            "default": "off",
            "enum": [
              "off",
              "domain_guess",
              "full_verification"
            ],
            "enumTitles": [
              "Profiles only",
              "Add work email",
              "Add work email + direct dial"
            ],
            "sectionCaption": "Filters",
            "prefill": "off"
          },
          "maxItems": {
            "title": "How many results?",
            "type": "integer",
            "description": "Stop after this many dataset rows.",
            "default": 10,
            "minimum": 1,
            "maximum": 50000,
            "sectionCaption": "Performance and limits",
            "prefill": 10
          },
          "includeHistory": {
            "title": "Include history?",
            "description": "Keep history in the returned record.",
            "type": "boolean",
            "default": true,
            "prefill": true,
            "sectionCaption": "Filters"
          },
          "maxConcurrency": {
            "title": "How many requests at once?",
            "type": "integer",
            "description": "Set the number of source requests that may run in parallel.",
            "default": 5,
            "minimum": 1,
            "maximum": 20,
            "sectionCaption": "Performance and limits",
            "prefill": 5
          },
          "findWorkEmail": {
            "title": "Find work emails?",
            "description": "Choose whether to look for a work email for each matched person.",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "sectionCaption": "Filters"
          },
          "maxSeconds": {
            "title": "How long may the run continue?",
            "type": "integer",
            "default": 180,
            "minimum": 30,
            "maximum": 3600,
            "description": "Stop after this many seconds and keep completed rows.",
            "sectionCaption": "Time frame",
            "prefill": 180
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "username": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Handle / Slug",
                "description": "Handle / Slug as issued by LinkedIn for this exact row."
              },
              "fullName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Full Name",
                "description": "Full Name as issued by LinkedIn for this exact row."
              },
              "firstName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "First Name",
                "description": "First Name as issued by LinkedIn for this exact row."
              },
              "lastName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Last Name",
                "description": "Last Name as issued by LinkedIn for this exact row."
              },
              "headline": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Headline",
                "description": "Headline as issued by LinkedIn for this exact row."
              },
              "currentTitle": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Current Title",
                "description": "The person's current job title as issued by LinkedIn for this exact row."
              },
              "currentCompany": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Employer",
                "description": "Employer as issued by LinkedIn for this exact row."
              },
              "companyWebsite": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company Website",
                "description": "Company Website as issued by LinkedIn for this exact row."
              },
              "companyHeadcount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Company Size",
                "description": "Company Size as issued by LinkedIn for this exact row."
              },
              "companyIndustry": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Industry",
                "description": "Industry as issued by LinkedIn for this exact row."
              },
              "location": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Location",
                "description": "Location as issued by LinkedIn for this exact row."
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Country",
                "description": "Country as issued by LinkedIn for this exact row."
              },
              "followersCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Followers",
                "description": "Followers as issued by LinkedIn for this exact row."
              },
              "connectionsCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Connections",
                "description": "Connections as issued by LinkedIn for this exact row."
              },
              "about": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "About Summary",
                "description": "The About section as LinkedIn publishes it."
              },
              "skills": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "title": "Skills",
                "description": "Skills listed on the profile as issued by LinkedIn for this exact row."
              },
              "experience": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Experience",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Every position on the profile, newest first."
              },
              "education": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Education",
                "description": "Education as issued by LinkedIn for this exact row."
              },
              "workEmail": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Work Email",
                "description": "The person's work email at their current employer. Add-on field."
              },
              "phone": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Direct dial",
                "description": "A phone number that reaches this person. Add-on field."
              },
              "profilePicUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile Photo",
                "description": "Profile Photo as issued by LinkedIn for this exact row."
              },
              "profileUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "LinkedIn URL",
                "description": "LinkedIn URL as issued by LinkedIn for this exact row."
              },
              "scrapedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Scraped At",
                "description": "Scraped At as issued by LinkedIn for this exact row."
              },
              "emailConfidence": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Email confidence",
                "description": "`confirmed` is the top grade - published on the employer's domain and matched to this person. `pattern` follows that domain's own convention."
              },
              "emailPattern": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Email pattern",
                "description": "The shape the employer uses, e.g. first.last."
              },
              "companyEmail": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company email",
                "description": "A role address on the employer's domain, e.g. info@ or press@."
              },
              "companySlug": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company slug",
                "description": "The employer's LinkedIn slug as issued by LinkedIn for this exact row."
              },
              "companyLinkedInUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company LinkedIn",
                "description": "The employer's LinkedIn page as issued by LinkedIn for this exact row."
              },
              "companyLocation": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Company location",
                "description": "Location LinkedIn lists for this role."
              },
              "badges": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Badges",
                "description": "LinkedIn badges such as Creator or Top Voice."
              },
              "languages": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "title": "Languages",
                "description": "Languages listed on the profile."
              },
              "educationHistory": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Education history",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Every school on the profile, with the degree where given."
              },
              "certifications": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Licenses & certifications",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Name, issuer and issue date, as published."
              },
              "courses": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Courses",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Course names and the codes printed under them."
              },
              "projects": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Projects",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Project name, date and the write-up published with it."
              },
              "volunteering": {
                "type": [
                  "array",
                  "null"
                ],
                "title": "Volunteer experience",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "description": "Role and organisation, as published."
              },
              "headlineSource": {
                "type": [
                  "string",
                  "number",
                  "boolean",
                  "object",
                  "array",
                  "null"
                ],
                "description": "Issuing source for the headline value on this row.",
                "title": "Headline Source"
              },
              "currentTitleSource": {
                "type": [
                  "string",
                  "number",
                  "boolean",
                  "object",
                  "array",
                  "null"
                ],
                "description": "Issuing source for the current title value on this row.",
                "title": "Current Title Source"
              },
              "companyWebsiteSource": {
                "type": [
                  "string",
                  "number",
                  "boolean",
                  "object",
                  "array",
                  "null"
                ],
                "description": "LinkedIn field that published the company website value.",
                "title": "Company Website Source"
              }
            }
          },
          "views": {
            "overview": {
              "title": "LinkedIn Profile overview",
              "description": "The most useful LinkedIn Profile fields for comparing each returned row.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "firstName",
                  "lastName",
                  "currentTitle",
                  "companySlug",
                  "companyWebsite",
                  "workEmail",
                  "phone",
                  "emailConfidence",
                  "emailPattern",
                  "companyEmail"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "firstName": {
                    "label": "First Name"
                  },
                  "lastName": {
                    "label": "Last Name"
                  },
                  "currentTitle": {
                    "label": "Current Title"
                  },
                  "companySlug": {
                    "label": "Company Slug"
                  },
                  "companyWebsite": {
                    "label": "Company Website"
                  },
                  "workEmail": {
                    "label": "Work Email"
                  },
                  "phone": {
                    "label": "Phone"
                  },
                  "emailConfidence": {
                    "label": "Email Confidence"
                  },
                  "emailPattern": {
                    "label": "Email Pattern"
                  },
                  "companyEmail": {
                    "label": "Company Email"
                  }
                }
              }
            },
            "identity": {
              "title": "Identity",
              "description": "Names, identifiers, and canonical links for each result for LinkedIn Profile rows.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "firstName",
                  "lastName",
                  "currentTitle",
                  "companySlug"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "firstName": {
                    "label": "First Name"
                  },
                  "lastName": {
                    "label": "Last Name"
                  },
                  "currentTitle": {
                    "label": "Current Title"
                  },
                  "companySlug": {
                    "label": "Company Slug"
                  }
                }
              }
            },
            "contact": {
              "title": "Contact details",
              "description": "Public contact and outbound-link fields for follow-up for LinkedIn Profile rows.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "profilePicUrl",
                  "companyWebsite",
                  "workEmail",
                  "phone",
                  "emailConfidence",
                  "emailPattern",
                  "companyEmail",
                  "companyWebsiteSource"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "profilePicUrl": {
                    "label": "Profile Pic URL"
                  },
                  "companyWebsite": {
                    "label": "Company Website"
                  },
                  "workEmail": {
                    "label": "Work Email"
                  },
                  "phone": {
                    "label": "Phone"
                  },
                  "emailConfidence": {
                    "label": "Email Confidence"
                  },
                  "emailPattern": {
                    "label": "Email Pattern"
                  },
                  "companyEmail": {
                    "label": "Company Email"
                  },
                  "companyWebsiteSource": {
                    "label": "Company Website Source"
                  }
                }
              }
            },
            "location": {
              "title": "Location",
              "description": "Address and geographic fields for mapping or segmentation for LinkedIn Profile rows.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "profilePicUrl",
                  "location",
                  "country",
                  "companyLocation"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "profilePicUrl": {
                    "label": "Profile Pic URL"
                  },
                  "location": {
                    "label": "Location"
                  },
                  "country": {
                    "label": "Country"
                  },
                  "companyLocation": {
                    "label": "Company Location"
                  }
                }
              }
            },
            "engagement": {
              "title": "Engagement",
              "description": "Audience, rating, and interaction measures for comparison for LinkedIn Profile rows.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "profilePicUrl",
                  "companyHeadcount",
                  "followersCount",
                  "connectionsCount"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "profilePicUrl": {
                    "label": "Profile Pic URL"
                  },
                  "companyHeadcount": {
                    "label": "Company Headcount"
                  },
                  "followersCount": {
                    "label": "Followers Count"
                  },
                  "connectionsCount": {
                    "label": "Connections Count"
                  }
                }
              }
            },
            "timing": {
              "title": "Timing",
              "description": "Published, observed, and collection timestamps for LinkedIn Profile rows.",
              "transformation": {
                "fields": [
                  "username",
                  "fullName",
                  "profilePicUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username"
                  },
                  "fullName": {
                    "label": "Full Name"
                  },
                  "profilePicUrl": {
                    "label": "Profile Pic URL"
                  },
                  "scrapedAt": {
                    "label": "Scraped At"
                  }
                }
              }
            }
          }
        }
      },
      "categories": [
        "LEAD_GENERATION",
        "SOCIAL_MEDIA",
        "AUTOMATION"
      ],
      "actorPermissionLevel": "LIMITED_PERMISSIONS",
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Scraper output",
        "description": "Open LinkedIn Profile Scraper rows as a dataset, retrieve them through the API, or export the same typed records. Opening fields: username, fullName, firstName, lastName, headline.",
        "properties": {
          "results": {
            "type": "string",
            "title": "LinkedIn Profile Scraper dataset",
            "description": "Open all returned LinkedIn Profile Scraper rows with 39 declared fields and 6 working views.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "json": {
            "type": "string",
            "title": "JSON API",
            "description": "Retrieve clean LinkedIn Profile Scraper records for API, MCP, or webhook use.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?clean=true&format=json"
          },
          "csv": {
            "type": "string",
            "title": "CSV export",
            "description": "Download the LinkedIn Profile Scraper table for spreadsheets and data tools.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?clean=true&format=csv"
          },
          "excel": {
            "type": "string",
            "title": "Excel export",
            "description": "Open the LinkedIn Profile Scraper rows as an Excel workbook.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?clean=true&format=xlsx"
          },
          "jsonl": {
            "type": "string",
            "title": "JSONL export",
            "description": "Stream one clean LinkedIn Profile Scraper record per line for downstream processing.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?clean=true&format=jsonl"
          }
        }
      },
      "minMemoryMbytes": 512,
      "maxMemoryMbytes": 4096,
      "defaultMemoryMbytes": "i = max(get(input, 'startUrls.length', 1), 1); r = get(input, 'maxItems', get(input, 'resultsLimit', 100)); b = get(runOptions, 'maxTotalChargeUsd', 0) / 0.001; ei = b > 0 ? min(i, b / max(r, 1)) : i; n = ei * min(ceil(max(r, 1) / 100), 30); n > 199 ? 4096 : n > 59 ? 2048 : n > 29 ? 1024 : 512",
      "changelog": "## 2026-08-26\n\n_Changes_\n\n- Dataset views now cover every field the run returns, so no returned field is missing from a view.\n- Rebuilt the product documentation: field reference, input guide, and a product-specific FAQ.\n- Refreshed the listing and README media.\n",
      "readme": "# LinkedIn Profile Scraper\n\nBuild a clean file of LinkedIn people from profile URLs, public identifiers, or searches. Keep names, roles, employers, locations, audience size, experience, and education together for prospecting and company research.\n\n![LinkedIn Profile Scraper source page and returned record](https://reapx.dev/assets/products/linkedin-profile-scraper/readme.png?v=20260826)\n\n## What it returns\n\nEach row keeps the LinkedIn source record beside the fields needed to use it. The opening set is `username`, `fullName`, `firstName`, `lastName`, `headline`, `currentTitle`, `currentCompany`, `companyWebsite`, `companyHeadcount`, `companyIndustry`, `location`, and `country`. The complete schema is declared before the run, and dataset views keep related fields together without changing the underlying row.\n\n### Captured row\n\n```json\n{\n  \"companyHeadcount\": 232991,\n  \"connectionsCount\": 500,\n  \"country\": \"US\"\n}\n```\n\n## Input\n\n![LinkedIn Profile Scraper published input controls](https://reapx.dev/assets/products/linkedin-profile-scraper/schema.png?v=20260826)\n\n\nLinkedIn Profile Scraper accepts source URLs, public identifiers, and searches. Run controls stay in the same form.\n\n| Field | What it controls | Starting value |\n| --- | --- | --- |\n| `startUrls` | Enter LinkedIn URLs or search terms, one per line. | `[\"https://www.linkedin.com/in/williamhgates\",\"https://www.linkedin.com/in/satyanadella\",\"williamhgates\"]` |\n| `urls` | Paste the LinkedIn URLs to process, one per line. | `[]` |\n| `publicIdentifiers` | Enter the public identifiers to resolve, one per line. | `[]` |\n| `queries` | Enter the search phrases to run, one per line. | `[]` |\n| `enrich` | Choose the enrichment mode applied to returned records. | `\"off\"` |\n| `maxItems` | Stop after this many dataset rows. | `10` |\n| `includeHistory` | Keep history in the returned record. | `true` |\n| `maxConcurrency` | Set the number of source requests that may run in parallel. | `5` |\n| `findWorkEmail` | Choose whether to look for a work email for each matched person. | `false` |\n| `maxSeconds` | Stop after this many seconds and keep completed rows. | `180` |\n\n### Example input\n\n```json\n{\n  \"startUrls\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/satyanadella\",\n    \"williamhgates\"\n  ],\n  \"urls\": [],\n  \"publicIdentifiers\": [],\n  \"queries\": [],\n  \"enrich\": \"off\",\n  \"maxItems\": 3,\n  \"includeHistory\": true\n}\n```\n\nNo field is required. Start with the filled example, then replace only the target values needed for the job. Run controls can stay at their starting values for the first collection.\n\n## Dataset fields\n\n![LinkedIn Profile Scraper declared output schema](https://reapx.dev/assets/products/linkedin-profile-scraper/fields.png?v=20260826)\n\n\n| Field | Type |\n| --- | --- |\n| `username` | `string` |\n| `fullName` | `string` |\n| `firstName` | `string` |\n| `lastName` | `string` |\n| `headline` | `string` |\n| `currentTitle` | `string` |\n| `currentCompany` | `string` |\n| `companyWebsite` | `string` |\n| `companyHeadcount` | `integer` |\n| `companyIndustry` | `string` |\n| `location` | `string` |\n| `country` | `string` |\n| `followersCount` | `integer` |\n| `connectionsCount` | `integer` |\n| `about` | `string` |\n| `skills` | `array:string` |\n| `experience` | `array:object` |\n| `education` | `string` |\n\n## Dataset views\n\nViews are working surfaces for review and export. They select and order fields while leaving the stored row unchanged.\n\n| View | Opening fields |\n| --- | --- |\n| `overview` | `username`, `fullName`, `firstName`, `lastName`, `currentTitle`, `companySlug`, `companyWebsite`, and `workEmail` |\n| `identity` | `username`, `fullName`, `firstName`, `lastName`, `currentTitle`, `companySlug`, `badges`, and `currentTitleSource` |\n| `contact` | `username`, `fullName`, `profilePicUrl`, `companyWebsite`, `workEmail`, `phone`, `emailConfidence`, and `emailPattern` |\n| `location` | `username`, `fullName`, `profilePicUrl`, `location`, `country`, and `companyLocation` |\n| `engagement` | `username`, `fullName`, `profilePicUrl`, `companyHeadcount`, `followersCount`, and `connectionsCount` |\n| `timing` | `username`, `fullName`, `profilePicUrl`, `scrapedAt`, and `languages` |\n\n## Output and exports\n\n![LinkedIn Profile Scraper source-to-output workflow](https://reapx.dev/assets/products/linkedin-profile-scraper/demo.webp?v=20260826)\n\n\n| Output | Type | Destination |\n| --- | --- | --- |\n| `results` | `string` | `{{links.apiDefaultDatasetUrl}}/items` |\n| `json` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=json` |\n| `csv` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=csv` |\n| `excel` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=xlsx` |\n| `jsonl` | `string` | `{{links.apiDefaultDatasetUrl}}/items?clean=true&format=jsonl` |\n\nCompleted rows are available in the Apify dataset as JSON, CSV, Excel, and JSONL exports. The run output also carries the declared links above for API clients and automations.\n\n## Pricing\n\n$0.00001 per dataset item. Other Apify plans use the rates shown in the Pricing tab.\n\n## Console, API, schedules, and MCP\n\n![LinkedIn Profile Scraper live run monitoring](https://reapx.dev/assets/products/linkedin-profile-scraper/run.webp?v=20260826)\n\n\nRuns can begin in Apify Console, from a saved task, or through the Actor API. A schedule can reuse the same input, and a run-finished webhook can pass the dataset or run ID to the next system.\n\n```text\nPOST https://api.apify.com/v2/acts/JhXpCI1Re4ltZYSZd/runs\nGET  https://api.apify.com/v2/datasets/{datasetId}/items\n```\n\nFor MCP selection, use **LinkedIn Profile Scraper**. Its machine entry carries the same description, input field names, no-required-field contract, output types, dataset fields, views, and pricing facts as this document.\n\n## Saved tasks\n\nTwenty saved-task products cover distinct lookup, comparison, research, operations, automation, and export jobs:\n\n- **LinkedIn prospect research file**: buyer-job; opens `overview`.\n- **LinkedIn profiles with work emails and phones**: buyer-job; opens `contact`.\n- **Decision-makers by role, company and industry**: buyer-job; opens `identity`.\n- **LinkedIn people grouped by market**: buyer-job; opens `location`.\n- **Refresh a LinkedIn prospect roster**: buyer-job; opens `overview`.\n\n## Integrations\n\nUse the dataset API from any HTTP client, export rows to a spreadsheet, or send the run ID through an Apify webhook. Saved tasks give schedules and automation tools a stable input without changing the Actor contract.\n\n## Related products\n\n- **LinkedIn Email Scraper** (`linkedin-email-scraper`)\n- **LinkedIn Post Scraper** (`linkedin-post-scraper`)\n- **LinkedIn Search Scraper** (`linkedin-search-scraper`)\n- **Instagram Follower Scraper** (`instagram-follower-scraper`)\n- **LinkedIn Lead Scraper** (`linkedin-lead-scraper`)\n\n## When a run needs attention\n\n- **No rows:** Open the target in a browser, check spelling and source visibility, then retry the saved example before widening the input.\n- **A field is empty:** Check the field beside its source URL. A missing source value stays empty instead of being replaced with a guess.\n- **A target fails:** Keep successful targets in the dataset, then retry only the affected input.\n- **An automation cannot find results:** Read the dataset ID from the run and request its items endpoint directly.\n\n## FAQ\n\n### What do I get back from one run?\n\nOne row per profile with 39 declared fields, opening on username, fullName, firstName and lastName. The schema is published before the run, so you know the shape before you spend anything.\n\n### Do I need a linkedin account or login?\n\nNo. The run works from the linkedin sources you supply in the input. Nothing is posted, changed or accessed on your behalf.\n\n### What does a run cost?\n\nThe current rate is shown on the Pricing tab and is charged per row you receive, so a run that finds nothing costs close to nothing. Cap the run with the item limit when you want a predictable ceiling.\n\n### Can I try it before committing budget?\n\nYes. Cap the run with the item limit in the input and inspect the first rows. The cap is enforced before charging, so a trial run stays a trial.\n\n### What do I put in the input?\n\nThe staged input is already usable: startUrls, urls and publicIdentifiers. Replace the staged target with your own list when you are ready to run for real.\n\n### Are any fields required?\n\nNo field is required. Every input carries a working default, so the Actor can be started as-is and refined afterwards.\n\n### Do I need to configure proxies?\n\nNo. Network access is handled inside the Actor and needs no proxy configuration from you.\n\n### How fresh is the data?\n\nEvery row is collected during the run you start, not served from a cache. Re-run the same input whenever you need the current state of a linkedin profile.\n\n### Can I use the results commercially?\n\nThe Actor collects publicly accessible linkedin information. You remain responsible for how you use it, including any privacy or contractual obligations that apply to your business.\n\n### How do I compare two runs?\n\nKeep username and fullName as your join key and diff the exports. The identity fields stay stable across runs, which is what makes a comparison meaningful.\n\n### What happens if a source fails mid-run?\n\nThe run continues through the remaining sources and finishes with what it collected. Partial results are still written to the dataset rather than discarded.\n\n### Can I limit how long a run takes?\n\nYes. The urls input caps the run. Use it when you need a predictable cost and a predictable finish time.\n\n### How do I report a problem?\n\nOpen an issue on the Actor with the run ID, the input you used and the field or row that needs attention. The run ID lets the exact execution be inspected.\n\n### How is this different from LinkedIn Email Scraper?\n\nLinkedIn Profile Scraper answers one job: Compare LinkedIn profiles.. LinkedIn Email Scraper covers a different question on the same platform. Run both when you need both sides.\n\n### What is `emailConfidence` for?\n\nIt records how the row was resolved, so you can filter to the rows you trust instead of treating every row as equally certain.\n\n### How do I read the output without scrolling through JSON?\n\nOpen the overview view on the Output tab. 6 views ship with the Actor (overview, identity, contact, location, engagement and timing), each grouping the fields that belong to one question.\n\n### How do I get the data into my own tools?\n\nExport the dataset as JSON, CSV, Excel or XML, call the dataset API directly, or attach a run-finished webhook and collect the dataset reference as soon as the run ends.\n\n### Can an agent or LLM call this?\n\nYes. LinkedIn Profile Scraper is exposed over MCP with the same description, no-required-field input contract and output types shown here, so an agent can select and call it without a human in the loop.\n\n### Why is a value empty on some rows?\n\nlinkedin does not expose every field on every profile. An absent value stays empty rather than being filled with a guess, so a row never invents a fact it did not receive.\n\n### A run returned fewer rows than I expected. Why?\n\nThe usual causes are a narrow source list, an item cap still set low, or a source that genuinely holds less than expected. Widen the input or raise the cap and run again.\n\n### Can I schedule this to run on its own?\n\nYes. Save the input as an Apify task and attach a schedule. Keep separate tasks when different teams need different targets or delivery paths.\n\n## Support\n\nUse the Actor issue form for product questions, broken source routes, schema mismatches, and feedback. Include the smallest input that reproduces the problem. That is enough to locate the run and its dataset without sharing an entire working list.\n\nUse this Actor only for data you are allowed to collect. Follow source terms, privacy law, and your own retention policy.\n"
    },
    "buildNumber": "0.9.2",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.9"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.004887777777777777
    }
  }
}