{
  "data": {
    "id": "NgMGxTxqJXeyaDd8n",
    "actId": "CpKdr4Fj86fIBt4l3",
    "userId": "mNkrgat6tvfzObZLt",
    "startedAt": "2026-09-21T12:06:32.456Z",
    "finishedAt": "2026-09-21T12:06:37.984Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 5412,
      "runTimeSecs": 5.412,
      "computeUnits": 0.006013333333333333,
      "imageSizeBytes": 355343872
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Public Profile Enricher\",\n  \"description\": \"Provide public LinkedIn profile URLs. The Actor accesses only the public guest view and returns one auditable dataset item for every submitted URL that can be written within the run spending limit.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"LinkedIn profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"Public LinkedIn profile URLs in the form https://www.linkedin.com/in/username. Duplicates are preserved so every submitted input can have a corresponding result unless the run spending limit is reached.\",\n      \"editor\": \"stringList\",\n      \"minItems\": 1,\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 1\n      },\n      \"prefill\": [\n        \"https://www.linkedin.com/in/satyanadella/\"\n      ]\n    }\n  },\n  \"required\": [\n    \"profileUrls\"\n  ]\n}",
    "readme": "Turn public LinkedIn profile URLs into structured, auditable profile data without supplying a LinkedIn login or cookies. Submit one or more `/in/` URLs and receive one Dataset item per processed input, including explicit status and data-quality information.\n\n## What this Actor does\n\nThe Actor reads LinkedIn's public guest view and extracts the fields the page exposes, such as name, headline, location, follower and connection counts, profile picture, About, experience, education, skills, certifications, and languages. Missing values remain `null` or empty arrays; they are not inferred.\n\n## Use cases\n\n- Enrich public professional-profile lists for research or CRM review.\n- Audit which public fields are available before a data workflow uses them.\n- Monitor public professional identity and career information over time.\n\n## How to use\n\n1. Open the Actor in Apify Console.\n2. Add one or more public LinkedIn profile URLs.\n3. Click **Start** and open the Dataset when the run finishes.\n\nWhile the run is active, the Apify log shows only safe customer-facing milestones: start, each processed profile, and the final completed count. Proxy credentials, cookies, retry internals, and transport diagnostics are never written to the user log.\n\n## Input\n\n`profileUrls` is required and accepts public URLs in the form `https://www.linkedin.com/in/<public-identifier>/`. At least one URL is required. Duplicates are preserved, so the same successful URL submitted twice can create two results and two charges. Company, job, post, and non-LinkedIn URLs are returned with `status: \"invalid_url\"`.\n\nThis exact input produced the complete output example below:\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella/\"\n  ]\n}\n```\n\n## Output\n\nThe default Dataset contains one auditable row per processed URL. `inputIndex` is its zero-based position in `profileUrls`, so duplicate inputs remain distinguishable. Start with `success`, `status`, and `error`; successful rows contain `profile` and `dataQuality`. Possible non-success statuses include `invalid_url`, `not_found`, `login_required`, `blocked`, `rate_limited`, `network_error`, and `parse_error`. The Key-value store's `SUMMARY` record reports run totals and any URLs left after a spending limit.\n\nThis is the complete first Dataset item from a real successful run:\n\n```json\n{\n  \"inputIndex\": 0,\n  \"success\": true,\n  \"status\": \"success\",\n  \"inputUrl\": \"https://www.linkedin.com/in/satyanadella/\",\n  \"profileUrl\": \"https://www.linkedin.com/in/satyanadella/\",\n  \"publicIdentifier\": \"satyanadella\",\n  \"scrapedAt\": \"2026-08-26T10:25:18.872435Z\",\n  \"error\": null,\n  \"profile\": {\n    \"fullName\": \"Satya Nadella\",\n    \"headline\": null,\n    \"location\": \"Redmond, Washington, United States\",\n    \"followers\": \"12M\",\n    \"followersText\": \"12M followers\",\n    \"connections\": \"500+\",\n    \"connectionsText\": \"500+ connections\",\n    \"about\": null,\n    \"profilePictureUrl\": \"https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1579726625398?e=2147483647&v=beta&t=Rr7WT9uBM0byOij0oT_KirejIMVE4HK4r8NGIp0zjdI\",\n    \"experience\": [],\n    \"education\": [],\n    \"skills\": [],\n    \"certifications\": [],\n    \"languages\": []\n  },\n  \"dataQuality\": {\n    \"level\": \"extended\",\n    \"publicFields\": [\n      \"fullName\",\n      \"location\",\n      \"followers\",\n      \"connections\",\n      \"profilePictureUrl\"\n    ],\n    \"publicFieldCount\": 5\n  }\n}\n```\n\nResults can be exported from Apify as JSON, JSONL, CSV, Excel, XML, or RSS.\n\n## Pricing\n\nThe verified pricing model is pay per event. Each successful profile row creates one `profile` event; invalid URLs and unsuccessful extractions do not create that charge. Apify resolves the price automatically from the user's Store plan:\n\n| Apify plan | Price per profile | Equivalent per 1,000 profiles |\n|---|---:|---:|\n| Free | $0.001 | $1.00 |\n| Bronze | $0.0009 | $0.90 |\n| Silver | $0.0008 | $0.80 |\n| Gold | $0.00075 | $0.75 |\n| Platinum | $0.00075 | $0.75 |\n| Diamond | $0.00075 | $0.75 |\n\nDuplicate inputs are processed independently and can each be charged when successful. Apify platform usage such as storage or data transfer may still apply according to your plan.\n\n## Related Actors\n\n| Actor | Best for |\n|---|---|\n| [LinkedIn Company Profile Scraper - No Login](https://apify.com/datascraperes/linkedin-company) | Enriching the public company behind a person or employer. |\n| [Instagram Profile Scraper - No Login](https://apify.com/datascraperes/instagram-profile-scraper-no-login) | Collecting public creator or brand profile data from Instagram. |\n| [TikTok Profile Scraper – Bio, Stats & Playlists](https://apify.com/datascraperes/tiktok-profile-scraper) | Comparing public identity, audience, and profile signals on TikTok. |\n\n## Limits and data quality\n\nLinkedIn decides which fields appear in its public guest view, so coverage varies by profile, region, and time. Use `dataQuality.publicFields` instead of assuming every successful profile has the same sections. A temporary block or rate limit may produce a status row rather than profile data; retry temporary failures later. A run spending limit can stop processing before every URL is completed, with remaining URLs recorded in `SUMMARY.remaining`.\n\n## Frequently asked questions\n\n### Does the Actor require a LinkedIn account?\n\nNo. It uses only the public guest view and does not accept LinkedIn credentials or cookies.\n\n### Why are some profile fields null or empty?\n\nThe public page did not expose those fields at collection time. The Actor does not guess or enrich unavailable values from other sources.\n\n## Responsible use\n\nUse only publicly available data for lawful purposes. You are responsible for complying with LinkedIn's terms, applicable privacy and data-protection laws, and the rights of the people represented in the data. Do not use the results for spam, harassment, discrimination, or unlawful high-impact decisions.\n\n## Support\n\nOpen an issue in the Actor's **Issues** tab and include the run ID, a reproducible public input URL, and the unexpected status or field.\n\n[Web guide, API examples and sample dataset on GitHub](https://github.com/datacrawler-edu/linkedin-public-profile-scraper)\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-public-profile-scraper",
      "title": "LinkedIn Public Profile Enricher",
      "description": "Extract public LinkedIn profiles without login or cookies. Pay per successful profile event: $1.00 per 1,000 on Free, $0.90 Bronze, $0.80 Silver, and $0.75 per 1,000 on Gold, Platinum or Diamond. Unsuccessful inputs do not create a profile charge.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "Turn public LinkedIn profile URLs into structured, auditable profile data without supplying a LinkedIn login or cookies. Submit one or more `/in/` URLs and receive one Dataset item per processed input, including explicit status and data-quality information.\n\n## What this Actor does\n\nThe Actor reads LinkedIn's public guest view and extracts the fields the page exposes, such as name, headline, location, follower and connection counts, profile picture, About, experience, education, skills, certifications, and languages. Missing values remain `null` or empty arrays; they are not inferred.\n\n## Use cases\n\n- Enrich public professional-profile lists for research or CRM review.\n- Audit which public fields are available before a data workflow uses them.\n- Monitor public professional identity and career information over time.\n\n## How to use\n\n1. Open the Actor in Apify Console.\n2. Add one or more public LinkedIn profile URLs.\n3. Click **Start** and open the Dataset when the run finishes.\n\nWhile the run is active, the Apify log shows only safe customer-facing milestones: start, each processed profile, and the final completed count. Proxy credentials, cookies, retry internals, and transport diagnostics are never written to the user log.\n\n## Input\n\n`profileUrls` is required and accepts public URLs in the form `https://www.linkedin.com/in/<public-identifier>/`. At least one URL is required. Duplicates are preserved, so the same successful URL submitted twice can create two results and two charges. Company, job, post, and non-LinkedIn URLs are returned with `status: \"invalid_url\"`.\n\nThis exact input produced the complete output example below:\n\n```json\n{\n  \"profileUrls\": [\n    \"https://www.linkedin.com/in/satyanadella/\"\n  ]\n}\n```\n\n## Output\n\nThe default Dataset contains one auditable row per processed URL. `inputIndex` is its zero-based position in `profileUrls`, so duplicate inputs remain distinguishable. Start with `success`, `status`, and `error`; successful rows contain `profile` and `dataQuality`. Possible non-success statuses include `invalid_url`, `not_found`, `login_required`, `blocked`, `rate_limited`, `network_error`, and `parse_error`. The Key-value store's `SUMMARY` record reports run totals and any URLs left after a spending limit.\n\nThis is the complete first Dataset item from a real successful run:\n\n```json\n{\n  \"inputIndex\": 0,\n  \"success\": true,\n  \"status\": \"success\",\n  \"inputUrl\": \"https://www.linkedin.com/in/satyanadella/\",\n  \"profileUrl\": \"https://www.linkedin.com/in/satyanadella/\",\n  \"publicIdentifier\": \"satyanadella\",\n  \"scrapedAt\": \"2026-08-26T10:25:18.872435Z\",\n  \"error\": null,\n  \"profile\": {\n    \"fullName\": \"Satya Nadella\",\n    \"headline\": null,\n    \"location\": \"Redmond, Washington, United States\",\n    \"followers\": \"12M\",\n    \"followersText\": \"12M followers\",\n    \"connections\": \"500+\",\n    \"connectionsText\": \"500+ connections\",\n    \"about\": null,\n    \"profilePictureUrl\": \"https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1579726625398?e=2147483647&v=beta&t=Rr7WT9uBM0byOij0oT_KirejIMVE4HK4r8NGIp0zjdI\",\n    \"experience\": [],\n    \"education\": [],\n    \"skills\": [],\n    \"certifications\": [],\n    \"languages\": []\n  },\n  \"dataQuality\": {\n    \"level\": \"extended\",\n    \"publicFields\": [\n      \"fullName\",\n      \"location\",\n      \"followers\",\n      \"connections\",\n      \"profilePictureUrl\"\n    ],\n    \"publicFieldCount\": 5\n  }\n}\n```\n\nResults can be exported from Apify as JSON, JSONL, CSV, Excel, XML, or RSS.\n\n## Pricing\n\nThe verified pricing model is pay per event. Each successful profile row creates one `profile` event; invalid URLs and unsuccessful extractions do not create that charge. Apify resolves the price automatically from the user's Store plan:\n\n| Apify plan | Price per profile | Equivalent per 1,000 profiles |\n|---|---:|---:|\n| Free | $0.001 | $1.00 |\n| Bronze | $0.0009 | $0.90 |\n| Silver | $0.0008 | $0.80 |\n| Gold | $0.00075 | $0.75 |\n| Platinum | $0.00075 | $0.75 |\n| Diamond | $0.00075 | $0.75 |\n\nDuplicate inputs are processed independently and can each be charged when successful. Apify platform usage such as storage or data transfer may still apply according to your plan.\n\n## Related Actors\n\n| Actor | Best for |\n|---|---|\n| [LinkedIn Company Profile Scraper - No Login](https://apify.com/datascraperes/linkedin-company) | Enriching the public company behind a person or employer. |\n| [Instagram Profile Scraper - No Login](https://apify.com/datascraperes/instagram-profile-scraper-no-login) | Collecting public creator or brand profile data from Instagram. |\n| [TikTok Profile Scraper – Bio, Stats & Playlists](https://apify.com/datascraperes/tiktok-profile-scraper) | Comparing public identity, audience, and profile signals on TikTok. |\n\n## Limits and data quality\n\nLinkedIn decides which fields appear in its public guest view, so coverage varies by profile, region, and time. Use `dataQuality.publicFields` instead of assuming every successful profile has the same sections. A temporary block or rate limit may produce a status row rather than profile data; retry temporary failures later. A run spending limit can stop processing before every URL is completed, with remaining URLs recorded in `SUMMARY.remaining`.\n\n## Frequently asked questions\n\n### Does the Actor require a LinkedIn account?\n\nNo. It uses only the public guest view and does not accept LinkedIn credentials or cookies.\n\n### Why are some profile fields null or empty?\n\nThe public page did not expose those fields at collection time. The Actor does not guess or enrich unavailable values from other sources.\n\n## Responsible use\n\nUse only publicly available data for lawful purposes. You are responsible for complying with LinkedIn's terms, applicable privacy and data-protection laws, and the rights of the people represented in the data. Do not use the results for spam, harassment, discrimination, or unlawful high-impact decisions.\n\n## Support\n\nOpen an issue in the Actor's **Issues** tab and include the run ID, a reproducible public input URL, and the unexpected status or field.\n\n[Web guide, API examples and sample dataset on GitHub](https://github.com/datacrawler-edu/linkedin-public-profile-scraper)\n",
      "input": {
        "title": "LinkedIn Public Profile Enricher",
        "description": "Provide public LinkedIn profile URLs. The Actor accesses only the public guest view and returns one auditable dataset item for every submitted URL that can be written within the run spending limit.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "LinkedIn profile URLs",
            "type": "array",
            "description": "Public LinkedIn profile URLs in the form https://www.linkedin.com/in/username. Duplicates are preserved so every submitted input can have a corresponding result unless the run spending limit is reached.",
            "editor": "stringList",
            "minItems": 1,
            "items": {
              "type": "string",
              "minLength": 1
            },
            "prefill": [
              "https://www.linkedin.com/in/satyanadella/"
            ]
          }
        },
        "required": [
          "profileUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Public Profile Enricher output",
        "description": "Links to one result per completed profile URL and a non-sensitive run summary, including any remaining URLs after a spending limit.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Profile results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "summary": {
            "type": "string",
            "title": "Run summary",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/SUMMARY"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "type": "object",
            "properties": {
              "inputIndex": {
                "type": "integer",
                "description": "Zero-based position of this submitted URL, preserving duplicate inputs."
              },
              "success": {
                "type": "boolean"
              },
              "status": {
                "type": "string"
              },
              "inputUrl": {
                "type": "string"
              },
              "profileUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "publicIdentifier": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "scrapedAt": {
                "type": "string"
              },
              "error": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "profile": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "dataQuality": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Coverage of fields publicly exposed by the fetched profile page."
              }
            },
            "required": [
              "inputIndex",
              "success",
              "status",
              "inputUrl",
              "profileUrl",
              "publicIdentifier",
              "scrapedAt",
              "error",
              "profile",
              "dataQuality"
            ]
          },
          "views": {
            "overview": {
              "title": "Profiles",
              "transformation": {
                "fields": [
                  "inputIndex",
                  "success",
                  "status",
                  "profile.fullName",
                  "profile.headline",
                  "profile.location",
                  "dataQuality.level",
                  "profileUrl",
                  "publicIdentifier",
                  "error",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "inputIndex": {
                    "label": "Input index",
                    "format": "number"
                  },
                  "success": {
                    "label": "Success",
                    "format": "boolean"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "profile.fullName": {
                    "label": "Name",
                    "format": "text"
                  },
                  "profile.headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "profile.location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "dataQuality.level": {
                    "label": "Data quality",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile",
                    "format": "link"
                  },
                  "publicIdentifier": {
                    "label": "Identifier",
                    "format": "text"
                  },
                  "error": {
                    "label": "Error",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "datetime"
                  }
                }
              }
            }
          }
        }
      },
      "environmentVariables": {
        "RESIDENTIAL_PROXY_URL": "@linkedin_profile_residential_proxy"
      },
      "defaultMemoryMbytes": 256,
      "minMemoryMbytes": 256,
      "maxMemoryMbytes": 512
    },
    "buildNumber": "1.0.41",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.006013333333333333
    }
  }
}