{
  "data": {
    "id": "1QM3wMzlohmeldRs4",
    "actId": "96FrUYrH0Zm6SU9K5",
    "userId": "qNHv1aNFJdi7qCpWe",
    "startedAt": "2026-09-30T07:29:41.945Z",
    "finishedAt": "2026-09-30T07:29:52.240Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 10233,
      "runTimeSecs": 10.233,
      "computeUnits": 0.01137,
      "imageSizeBytes": 545071616
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Details Scraper\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"LinkedIn profile URLs or handles\",\n      \"type\": \"array\",\n      \"description\": \"List of public LinkedIn person profiles to scrape. Accepts full URLs (https://www.linkedin.com/in/williamhgates/) or bare vanity handles (williamhgates). Each resolves to one output row. NOT company pages (/company/...) — those are skipped; for companies use the LinkedIn Company scrapers.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates/\"\n      ],\n      \"example\": [\n        \"https://www.linkedin.com/in/williamhgates/\",\n        \"satyanadella\"\n      ],\n      \"minItems\": 1,\n      \"maxItems\": 1000\n    },\n    \"maxProfiles\": {\n      \"title\": \"Max profiles\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on how many profiles to scrape from profileUrls in one run, protecting your budget. Defaults to 1000 (the absolute max). Extra profiles beyond this cap are skipped and noted in the run summary. Does not add results that were not supplied in profileUrls.\",\n      \"editor\": \"number\",\n      \"prefill\": 10,\n      \"default\": 1000,\n      \"minimum\": 1,\n      \"maximum\": 1000\n    },\n    \"outputMode\": {\n      \"title\": \"Output detail level\",\n      \"type\": \"string\",\n      \"description\": \"How much per-profile data to return. 'full' (default) returns the complete experience, education, and published-articles arrays. 'compact' returns only the first 3 of each for smaller, agent-friendly records. Pricing is identical in both modes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"full\",\n        \"compact\"\n      ],\n      \"enumTitles\": [\n        \"Full (all fields)\",\n        \"Compact (smaller records)\"\n      ],\n      \"default\": \"full\"\n    },\n    \"includeRawData\": {\n      \"title\": \"Include raw response payload\",\n      \"type\": \"boolean\",\n      \"description\": \"When true, each output row also includes the unmodified response JSON under rawProfile for debugging or accessing fields not yet mapped. Defaults to false to keep records small and agent-friendly. Turn on only when you need fields the normalized schema does not expose yet.\",\n      \"editor\": \"checkbox\",\n      \"default\": false\n    }\n  },\n  \"required\": [\n    \"profileUrls\"\n  ]\n}",
    "readme": "## What is LinkedIn Profile Details Scraper?\n\nLinkedIn Profile Details Scraper turns LinkedIn profile URLs or handles into one clean row per person: name, About section, location, current company, follower count, full work history with company links and dates, education with school links and years, and published LinkedIn articles. It reads the public version of each profile, so there is no login, cookie or LinkedIn account involved. Recruiters, sales teams, researchers and AI agents use it to enrich a list of profiles they already have.\n\n## Why teams use it to enrich profile lists\n\n- **One flat row per person,** with counts (`experienceCount`, `educationCount`, `articlesCount`) for quick filtering and full arrays for detail.\n- **Work history you can join on.** Each job has the company's LinkedIn URL, start date and whether it is current.\n- **Handles or URLs.** Paste `williamhgates` or the full profile URL; duplicates are skipped.\n- **A compact mode for agents.** `outputMode: \"compact\"` keeps the first 3 jobs, schools and articles for smaller rows at the same price.\n- **Your account stays out of it.** No login or cookies, so there is no risk to a LinkedIn account.\n\n## How to use it\n\n**Enrich a list of profiles:**\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/williamhgates/\",\n    \"satyanadella\"\n  ],\n  \"outputMode\": \"full\"\n}\n```\n\n**Smaller rows for an AI agent:**\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"],\n  \"outputMode\": \"compact\"\n}\n```\n\n| Input | What it controls |\n|---|---|\n| `profileUrls` | Public LinkedIn person profile URLs (`linkedin.com/in/...`) or bare handles. Required. |\n| `maxProfiles` | Profiles to process from the list, from 1 to 1,000 |\n| `outputMode` | `full` (all jobs, schools and articles) or `compact` (first 3 of each) |\n| `includeRawData` | Add the raw profile payload for debugging (default off) |\n\n## What the public profile includes\n\nLinkedIn shows logged-out visitors a reduced profile. This Actor returns everything in that public view: name, About, location, current company, followers, work history, education and articles, plus `connectionsCount` when LinkedIn shows it. The profile headline, skills, endorsements, email and phone number live behind LinkedIn's login and are outside this Actor's output.\n\n## Output: LinkedIn profile data you receive\n\nA real row for a public figure's profile (the `articles` array and image URL are left out here):\n\n```json\n{\n  \"profileInput\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"profileUrl\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"publicId\": \"williamhgates\",\n  \"fullName\": \"Bill Gates\",\n  \"firstName\": \"Bill\",\n  \"lastName\": \"Gates\",\n  \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.\",\n  \"location\": \"Seattle, Washington, United States\",\n  \"currentCompany\": \"Gates Foundation\",\n  \"followerCount\": 40691253,\n  \"experience\": [\n    { \"company\": \"Gates Foundation\", \"companyUrl\": \"https://www.linkedin.com/company/gates-foundation\", \"startDate\": \"2000\", \"isCurrent\": true },\n    { \"company\": \"Breakthrough Energy\", \"companyUrl\": \"https://www.linkedin.com/company/breakthrough-energy\", \"startDate\": \"2015\", \"isCurrent\": true },\n    { \"company\": \"Microsoft\", \"companyUrl\": \"https://www.linkedin.com/company/microsoft\", \"startDate\": \"1975\", \"isCurrent\": true }\n  ],\n  \"education\": [\n    { \"school\": \"Harvard University\", \"schoolUrl\": \"https://www.linkedin.com/school/harvard-university/\", \"startDate\": \"1973\", \"endDate\": \"1975\" }\n  ],\n  \"experienceCount\": 3,\n  \"educationCount\": 1,\n  \"articlesCount\": 10,\n  \"scrapedAt\": \"2026-09-30T07:15:13.254Z\"\n}\n```\n\nEach article in `articles` has a `title`, `url`, `publishedAt` date and cover image.\n\n## Example workflow: enriching a sourcing spreadsheet\n\nA recruiter has 200 LinkedIn URLs from a sourcing spreadsheet. They run them through this Actor, sort by `currentCompany` to group candidates by employer, and read `experience` to see tenure at each company and whether the role is current. Candidates who publish on LinkedIn (`articlesCount` above zero) get a personalized first message about their latest article. Then they pass the shortlisted `profileUrl` values to [LinkedIn Profile Scraper & Email Finder](https://apify.com/khadinakbar/linkedin-profile-email-scraper) to look for work emails.\n\n## Pricing\n\nThis Actor uses **Pay per event**. Apify platform usage is included in the event price, so you pay one event per profile returned plus one start event per run. Profiles marked not found are free, and `full` and `compact` cost the same. The live Pricing tab on this page shows the current price.\n\n- 200 profiles = 200 profile events + 1 start event.\n- `maxProfiles` caps each run, so it doubles as a cost ceiling.\n\n## Profile enrichment with AI agents (MCP)\n\nConnect this Actor to an AI agent through [Apify MCP](https://mcp.apify.com) and ask in plain language:\n\n> Look up these 5 LinkedIn profiles and tell me each person's current company, how long they have been there, their location and follower count. Use compact output and tell me the run outcome.\n\nAgent checklist:\n\n1. Pass URLs or handles in `profileUrls`; use `outputMode: \"compact\"` to keep responses small.\n2. Read rows with `get-dataset-items`, then read `OUTPUT` for counts of profiles resolved, not found and charged.\n3. Keep `profileUrl` as the stable ID when joining with other data.\n\n## API example\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/khadinakbar~linkedin-profile-details-scraper/run-sync-get-dataset-items\" \\\n  -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"], \"outputMode\": \"compact\"}'\n```\n\n## Related LinkedIn tools from the same developer\n\n| Your next step | Use | Why |\n|---|---|---|\n| When you still need to find the people first | [LinkedIn People Search Scraper](https://apify.com/khadinakbar/linkedin-people-search-scraper) | Profiles by job title, company, school and location |\n| When you then want work emails for these people | [LinkedIn Profile Scraper & Email Finder](https://apify.com/khadinakbar/linkedin-profile-email-scraper) | Profiles plus email lookup |\n| When you want what these people post | [LinkedIn Batch Profile Posts Scraper](https://apify.com/khadinakbar/linkedin-batch-profile-posts-scraper) | Recent public posts for a list of profiles |\n| When you want profile data plus recent posts and company pages | [LinkedIn Fresh Profile Data Scraper](https://apify.com/khadinakbar/linkedin-fresh-profile-data-scraper) | Profiles with recent posts and optional company enrichment |\n| When you then want details on each person's company | [LinkedIn Company Search Scraper](https://apify.com/khadinakbar/linkedin-company-search-scraper) | Company pages with industry, size and location |\n\n## Best results\n\n| Starting situation | Helpful action | Expected outcome |\n|---|---|---|\n| A spreadsheet of profile URLs | Paste the column into `profileUrls` as is | One row per profile, duplicates skipped |\n| Only names, no URLs | Start with LinkedIn People Search Scraper | URLs to pass in here |\n| An agent with a small context window | Use `outputMode: \"compact\"` | Shorter rows at the same price |\n| Joining to company data | Use the `companyUrl` inside `experience` | A clean key for company lookups |\n\n## Builder's note\n\nI found that most people arrive with a column of profile URLs and want a spreadsheet back, so each profile becomes one flat row with counts beside the full arrays. I learned that the logged-out profile leaves out the headline and skills, so the README and output describe exactly what the public view contains.\n\n## FAQ\n\n### Does it return the profile headline or skills?\n\nLinkedIn keeps the headline and skills behind its login, so they are outside the public view this Actor reads. The About section, current company and work history often tell you much of the same story.\n\n### Can I use handles instead of URLs?\n\nYes. `williamhgates` and `https://www.linkedin.com/in/williamhgates/` return the same profile.\n\n### Does it return email addresses?\n\nEmails are outside this Actor. Pass the `profileUrl` values to LinkedIn Profile Scraper & Email Finder.\n\n### What happens if a profile does not exist?\n\nIt is counted in `OUTPUT` as not found and is not billed.\n\n### Can I scrape company pages with it?\n\nCompany URLs are skipped. Use LinkedIn Company Search Scraper for companies.\n\n## Responsible use\n\nThis Actor collects public LinkedIn profile data, which is personal data protected by laws such as the GDPR and CCPA. Use it only with a lawful basis such as legitimate B2B interest, honor opt-outs, keep data no longer than you need, and respect LinkedIn's terms. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) for more context. LinkedIn is a trademark of LinkedIn Corporation. This independent Actor is not affiliated with, associated with, or endorsed by LinkedIn. For questions or bugs, open a ticket in the Issues tab.\n",
    "changelog": "0.1 - Initial provider-backed LinkedIn profile details scraper. Input person profile URLs/handles, output one flat row per profile with identity, about, location, follower/connection counts, experience (organizations + dates), education, and published articles. ScrapeCreators primary, SociaVault fallback.",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-details-scraper",
      "title": "LinkedIn Profile Details Scraper",
      "description": "Scrape public LinkedIn profile details by profile URL or handle. Returns name, about summary, location, follower and connection counts, work experience (companies + dates), education, and published articles. Provider-backed, no login or cookies. Charged $0.01 per profile.",
      "seoTitle": "LinkedIn Profile Details Scraper — Profile by URL",
      "seoDescription": "Scrape public LinkedIn profile details by URL: name, about, location, followers, experience, education & articles. No login, MCP-ready. $0.01/profile.",
      "version": "0.1",
      "buildTag": "latest",
      "meta": {
        "templateId": "js-start",
        "generatedBy": "Claude Code with Claude Opus 4.8"
      },
      "input": {
        "title": "LinkedIn Profile Details Scraper",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "LinkedIn profile URLs or handles",
            "type": "array",
            "description": "List of public LinkedIn person profiles to scrape. Accepts full URLs (https://www.linkedin.com/in/williamhgates/) or bare vanity handles (williamhgates). Each resolves to one output row. NOT company pages (/company/...) — those are skipped; for companies use the LinkedIn Company scrapers.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates/"
            ],
            "example": [
              "https://www.linkedin.com/in/williamhgates/",
              "satyanadella"
            ],
            "minItems": 1,
            "maxItems": 1000
          },
          "maxProfiles": {
            "title": "Max profiles",
            "type": "integer",
            "description": "Hard cap on how many profiles to scrape from profileUrls in one run, protecting your budget. Defaults to 1000 (the absolute max). Extra profiles beyond this cap are skipped and noted in the run summary. Does not add results that were not supplied in profileUrls.",
            "editor": "number",
            "prefill": 10,
            "default": 1000,
            "minimum": 1,
            "maximum": 1000
          },
          "outputMode": {
            "title": "Output detail level",
            "type": "string",
            "description": "How much per-profile data to return. 'full' (default) returns the complete experience, education, and published-articles arrays. 'compact' returns only the first 3 of each for smaller, agent-friendly records. Pricing is identical in both modes.",
            "editor": "select",
            "enum": [
              "full",
              "compact"
            ],
            "enumTitles": [
              "Full (all fields)",
              "Compact (smaller records)"
            ],
            "default": "full"
          },
          "includeRawData": {
            "title": "Include raw response payload",
            "type": "boolean",
            "description": "When true, each output row also includes the unmodified response JSON under rawProfile for debugging or accessing fields not yet mapped. Defaults to false to keep records small and agent-friendly. Turn on only when you need fields the normalized schema does not expose yet.",
            "editor": "checkbox",
            "default": false
          }
        },
        "required": [
          "profileUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Details Scraper output",
        "properties": {
          "profiles": {
            "title": "Scraped profiles",
            "type": "string",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "runSummary": {
            "title": "Run summary",
            "type": "string",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/RUN_SUMMARY"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "type": "object",
            "properties": {
              "profileInput": {
                "type": "string"
              },
              "profileUrl": {
                "type": "string"
              },
              "publicId": {
                "type": "string"
              },
              "fullName": {
                "type": "string"
              },
              "firstName": {
                "type": "string"
              },
              "lastName": {
                "type": "string"
              },
              "about": {
                "type": "string"
              },
              "location": {
                "type": "string"
              },
              "currentCompany": {
                "type": "string"
              },
              "connectionsCount": {
                "type": "integer"
              },
              "followerCount": {
                "type": "integer"
              },
              "profileImageUrl": {
                "type": "string"
              },
              "experience": {
                "type": "array"
              },
              "education": {
                "type": "array"
              },
              "articles": {
                "type": "array"
              },
              "experienceCount": {
                "type": "integer"
              },
              "educationCount": {
                "type": "integer"
              },
              "articlesCount": {
                "type": "integer"
              },
              "provider": {
                "type": "string"
              },
              "runId": {
                "type": "string"
              },
              "scrapedAt": {
                "type": "string"
              },
              "rawProfile": {
                "type": "object"
              }
            }
          },
          "views": {
            "overview": {
              "title": "Profile details",
              "transformation": {
                "fields": [
                  "fullName",
                  "currentCompany",
                  "location",
                  "followerCount",
                  "connectionsCount",
                  "experienceCount",
                  "educationCount",
                  "articlesCount",
                  "profileUrl",
                  "provider"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "fullName": {
                    "label": "Name",
                    "format": "text"
                  },
                  "currentCompany": {
                    "label": "Current org",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "followerCount": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "connectionsCount": {
                    "label": "Connections",
                    "format": "number"
                  },
                  "experienceCount": {
                    "label": "# Orgs",
                    "format": "number"
                  },
                  "educationCount": {
                    "label": "# Schools",
                    "format": "number"
                  },
                  "articlesCount": {
                    "label": "# Articles",
                    "format": "number"
                  },
                  "profileUrl": {
                    "label": "Profile",
                    "format": "link"
                  },
                  "provider": {
                    "label": "Provider",
                    "format": "text"
                  }
                }
              }
            }
          }
        },
        "keyValueStore": {
          "actorKeyValueStoreSchemaVersion": 1,
          "title": "LinkedIn Profile Details Scraper KV Store",
          "collections": {
            "RUN_SUMMARY": {
              "title": "Run summary",
              "description": "Per-run diagnostics: profiles requested/resolved/not-found, charged profiles, estimated PPE cost, provider attempts/status codes, stop reason, and warnings.",
              "keyPrefix": "RUN_SUMMARY"
            }
          }
        }
      },
      "chargedEvents": "./pay_per_event.json",
      "categories": [
        "SOCIAL_MEDIA",
        "LEAD_GENERATION",
        "MCP_SERVERS"
      ],
      "readme": "## What is LinkedIn Profile Details Scraper?\n\nLinkedIn Profile Details Scraper turns LinkedIn profile URLs or handles into one clean row per person: name, About section, location, current company, follower count, full work history with company links and dates, education with school links and years, and published LinkedIn articles. It reads the public version of each profile, so there is no login, cookie or LinkedIn account involved. Recruiters, sales teams, researchers and AI agents use it to enrich a list of profiles they already have.\n\n## Why teams use it to enrich profile lists\n\n- **One flat row per person,** with counts (`experienceCount`, `educationCount`, `articlesCount`) for quick filtering and full arrays for detail.\n- **Work history you can join on.** Each job has the company's LinkedIn URL, start date and whether it is current.\n- **Handles or URLs.** Paste `williamhgates` or the full profile URL; duplicates are skipped.\n- **A compact mode for agents.** `outputMode: \"compact\"` keeps the first 3 jobs, schools and articles for smaller rows at the same price.\n- **Your account stays out of it.** No login or cookies, so there is no risk to a LinkedIn account.\n\n## How to use it\n\n**Enrich a list of profiles:**\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/williamhgates/\",\n    \"satyanadella\"\n  ],\n  \"outputMode\": \"full\"\n}\n```\n\n**Smaller rows for an AI agent:**\n\n```json\n{\n  \"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"],\n  \"outputMode\": \"compact\"\n}\n```\n\n| Input | What it controls |\n|---|---|\n| `profileUrls` | Public LinkedIn person profile URLs (`linkedin.com/in/...`) or bare handles. Required. |\n| `maxProfiles` | Profiles to process from the list, from 1 to 1,000 |\n| `outputMode` | `full` (all jobs, schools and articles) or `compact` (first 3 of each) |\n| `includeRawData` | Add the raw profile payload for debugging (default off) |\n\n## What the public profile includes\n\nLinkedIn shows logged-out visitors a reduced profile. This Actor returns everything in that public view: name, About, location, current company, followers, work history, education and articles, plus `connectionsCount` when LinkedIn shows it. The profile headline, skills, endorsements, email and phone number live behind LinkedIn's login and are outside this Actor's output.\n\n## Output: LinkedIn profile data you receive\n\nA real row for a public figure's profile (the `articles` array and image URL are left out here):\n\n```json\n{\n  \"profileInput\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"profileUrl\": \"https://www.linkedin.com/in/williamhgates/\",\n  \"publicId\": \"williamhgates\",\n  \"fullName\": \"Bill Gates\",\n  \"firstName\": \"Bill\",\n  \"lastName\": \"Gates\",\n  \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.\",\n  \"location\": \"Seattle, Washington, United States\",\n  \"currentCompany\": \"Gates Foundation\",\n  \"followerCount\": 40691253,\n  \"experience\": [\n    { \"company\": \"Gates Foundation\", \"companyUrl\": \"https://www.linkedin.com/company/gates-foundation\", \"startDate\": \"2000\", \"isCurrent\": true },\n    { \"company\": \"Breakthrough Energy\", \"companyUrl\": \"https://www.linkedin.com/company/breakthrough-energy\", \"startDate\": \"2015\", \"isCurrent\": true },\n    { \"company\": \"Microsoft\", \"companyUrl\": \"https://www.linkedin.com/company/microsoft\", \"startDate\": \"1975\", \"isCurrent\": true }\n  ],\n  \"education\": [\n    { \"school\": \"Harvard University\", \"schoolUrl\": \"https://www.linkedin.com/school/harvard-university/\", \"startDate\": \"1973\", \"endDate\": \"1975\" }\n  ],\n  \"experienceCount\": 3,\n  \"educationCount\": 1,\n  \"articlesCount\": 10,\n  \"scrapedAt\": \"2026-09-30T07:15:13.254Z\"\n}\n```\n\nEach article in `articles` has a `title`, `url`, `publishedAt` date and cover image.\n\n## Example workflow: enriching a sourcing spreadsheet\n\nA recruiter has 200 LinkedIn URLs from a sourcing spreadsheet. They run them through this Actor, sort by `currentCompany` to group candidates by employer, and read `experience` to see tenure at each company and whether the role is current. Candidates who publish on LinkedIn (`articlesCount` above zero) get a personalized first message about their latest article. Then they pass the shortlisted `profileUrl` values to [LinkedIn Profile Scraper & Email Finder](https://apify.com/khadinakbar/linkedin-profile-email-scraper) to look for work emails.\n\n## Pricing\n\nThis Actor uses **Pay per event**. Apify platform usage is included in the event price, so you pay one event per profile returned plus one start event per run. Profiles marked not found are free, and `full` and `compact` cost the same. The live Pricing tab on this page shows the current price.\n\n- 200 profiles = 200 profile events + 1 start event.\n- `maxProfiles` caps each run, so it doubles as a cost ceiling.\n\n## Profile enrichment with AI agents (MCP)\n\nConnect this Actor to an AI agent through [Apify MCP](https://mcp.apify.com) and ask in plain language:\n\n> Look up these 5 LinkedIn profiles and tell me each person's current company, how long they have been there, their location and follower count. Use compact output and tell me the run outcome.\n\nAgent checklist:\n\n1. Pass URLs or handles in `profileUrls`; use `outputMode: \"compact\"` to keep responses small.\n2. Read rows with `get-dataset-items`, then read `OUTPUT` for counts of profiles resolved, not found and charged.\n3. Keep `profileUrl` as the stable ID when joining with other data.\n\n## API example\n\n```bash\ncurl -X POST \"https://api.apify.com/v2/acts/khadinakbar~linkedin-profile-details-scraper/run-sync-get-dataset-items\" \\\n  -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"profileUrls\": [\"https://www.linkedin.com/in/williamhgates/\"], \"outputMode\": \"compact\"}'\n```\n\n## Related LinkedIn tools from the same developer\n\n| Your next step | Use | Why |\n|---|---|---|\n| When you still need to find the people first | [LinkedIn People Search Scraper](https://apify.com/khadinakbar/linkedin-people-search-scraper) | Profiles by job title, company, school and location |\n| When you then want work emails for these people | [LinkedIn Profile Scraper & Email Finder](https://apify.com/khadinakbar/linkedin-profile-email-scraper) | Profiles plus email lookup |\n| When you want what these people post | [LinkedIn Batch Profile Posts Scraper](https://apify.com/khadinakbar/linkedin-batch-profile-posts-scraper) | Recent public posts for a list of profiles |\n| When you want profile data plus recent posts and company pages | [LinkedIn Fresh Profile Data Scraper](https://apify.com/khadinakbar/linkedin-fresh-profile-data-scraper) | Profiles with recent posts and optional company enrichment |\n| When you then want details on each person's company | [LinkedIn Company Search Scraper](https://apify.com/khadinakbar/linkedin-company-search-scraper) | Company pages with industry, size and location |\n\n## Best results\n\n| Starting situation | Helpful action | Expected outcome |\n|---|---|---|\n| A spreadsheet of profile URLs | Paste the column into `profileUrls` as is | One row per profile, duplicates skipped |\n| Only names, no URLs | Start with LinkedIn People Search Scraper | URLs to pass in here |\n| An agent with a small context window | Use `outputMode: \"compact\"` | Shorter rows at the same price |\n| Joining to company data | Use the `companyUrl` inside `experience` | A clean key for company lookups |\n\n## Builder's note\n\nI found that most people arrive with a column of profile URLs and want a spreadsheet back, so each profile becomes one flat row with counts beside the full arrays. I learned that the logged-out profile leaves out the headline and skills, so the README and output describe exactly what the public view contains.\n\n## FAQ\n\n### Does it return the profile headline or skills?\n\nLinkedIn keeps the headline and skills behind its login, so they are outside the public view this Actor reads. The About section, current company and work history often tell you much of the same story.\n\n### Can I use handles instead of URLs?\n\nYes. `williamhgates` and `https://www.linkedin.com/in/williamhgates/` return the same profile.\n\n### Does it return email addresses?\n\nEmails are outside this Actor. Pass the `profileUrl` values to LinkedIn Profile Scraper & Email Finder.\n\n### What happens if a profile does not exist?\n\nIt is counted in `OUTPUT` as not found and is not billed.\n\n### Can I scrape company pages with it?\n\nCompany URLs are skipped. Use LinkedIn Company Search Scraper for companies.\n\n## Responsible use\n\nThis Actor collects public LinkedIn profile data, which is personal data protected by laws such as the GDPR and CCPA. Use it only with a lawful basis such as legitimate B2B interest, honor opt-outs, keep data no longer than you need, and respect LinkedIn's terms. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) for more context. LinkedIn is a trademark of LinkedIn Corporation. This independent Actor is not affiliated with, associated with, or endorsed by LinkedIn. For questions or bugs, open a ticket in the Issues tab.\n",
      "dockerfile": "./Dockerfile",
      "environmentVariables": {
        "SCRAPECREATORS_API_KEY": "@SCRAPECREATORS_API_KEY",
        "SOCIAVAULT_API_KEY": "@SOCIAVAULT_API_KEY",
        "SOCIALVAULT_API_KEY": "@SOCIALVAULT_API_KEY"
      },
      "changelog": "0.1 - Initial provider-backed LinkedIn profile details scraper. Input person profile URLs/handles, output one flat row per profile with identity, about, location, follower/connection counts, experience (organizations + dates), education, and published articles. ScrapeCreators primary, SociaVault fallback.",
      "minMemoryMbytes": 256,
      "defaultMemoryMbytes": 512,
      "defaultRunOptions": {
        "build": "latest",
        "memoryMbytes": 512,
        "timeoutSecs": 1800
      }
    },
    "buildNumber": "0.1.4",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01137
    }
  }
}