{
  "data": {
    "id": "JteCNP5dwF4dlarbr",
    "actId": "URxDfNQ18JNUJmz71",
    "userId": "EHZuu33ooBoneDvke",
    "startedAt": "2026-02-06T14:54:53.644Z",
    "finishedAt": "2026-02-06T14:55:07.110Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 13414,
      "runTimeSecs": 13.414,
      "computeUnits": 0.014904444444444444,
      "imageSizeBytes": 310122791
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper + Email Finder Input\",\n  \"description\": \"Scrape LinkedIn profiles and find emails without cookies. Provide profile URLs and configure email enrichment sources.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"List of LinkedIn profile URLs to scrape. You can paste full URLs (https://www.linkedin.com/in/williamhgates) or just the username (williamhgates). Supports bulk -- add as many as you need.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates\"\n      ],\n      \"minItems\": 1\n    },\n    \"enableEmailEnrichment\": {\n      \"title\": \"Enable Email Enrichment\",\n      \"type\": \"boolean\",\n      \"description\": \"Find email addresses using multiple OSINT sources (Google dorking, GitHub commits, SMTP verification, Holehe). Runs in parallel with scraping for maximum speed.\",\n      \"default\": true,\n      \"prefill\": false,\n      \"sectionCaption\": \"Email Enrichment\",\n      \"sectionDescription\": \"Configure how email discovery works. Each source can be individually enabled or disabled.\"\n    },\n    \"enableGoogleDorking\": {\n      \"title\": \"Google Dorking\",\n      \"type\": \"boolean\",\n      \"description\": \"Search Google for publicly available email addresses associated with the person.\",\n      \"default\": true\n    },\n    \"enableGithubSearch\": {\n      \"title\": \"GitHub Commits Search\",\n      \"type\": \"boolean\",\n      \"description\": \"Search GitHub public commits and events for email addresses.\",\n      \"default\": true\n    },\n    \"enableSmtpVerification\": {\n      \"title\": \"SMTP Pattern Verification\",\n      \"type\": \"boolean\",\n      \"description\": \"Generate common email patterns (firstname.lastname@company.com, etc.) and verify via SMTP handshake.\",\n      \"default\": true\n    },\n    \"enableHolehe\": {\n      \"title\": \"Holehe Platform Validation\",\n      \"type\": \"boolean\",\n      \"description\": \"Validate discovered emails against 120+ online platforms to confirm they are real accounts. Slower but more accurate.\",\n      \"default\": false\n    },\n    \"githubToken\": {\n      \"title\": \"GitHub Personal Access Token\",\n      \"type\": \"string\",\n      \"description\": \"Optional. Increases GitHub API rate limit from 60 to 5,000 requests/hour. Create one at https://github.com/settings/tokens\",\n      \"editor\": \"textfield\",\n      \"isSecret\": true\n    },\n    \"delayMin\": {\n      \"title\": \"Minimum Delay (seconds)\",\n      \"type\": \"number\",\n      \"description\": \"Minimum delay between profile requests to avoid rate limiting.\",\n      \"default\": 3,\n      \"minimum\": 0.5,\n      \"maximum\": 60,\n      \"unit\": \"seconds\",\n      \"sectionCaption\": \"Advanced\",\n      \"sectionDescription\": \"Fine-tune scraper behavior. Defaults work well for most use cases.\"\n    },\n    \"delayMax\": {\n      \"title\": \"Maximum Delay (seconds)\",\n      \"type\": \"number\",\n      \"description\": \"Maximum delay between profile requests.\",\n      \"default\": 7,\n      \"minimum\": 1,\n      \"maximum\": 120,\n      \"unit\": \"seconds\"\n    },\n    \"maxRetries\": {\n      \"title\": \"Max Retries Per Profile\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of retry attempts per profile on failure (login wall, timeout, etc.). Each retry uses a fresh proxy IP.\",\n      \"default\": 3,\n      \"minimum\": 1,\n      \"maximum\": 10\n    }\n  },\n  \"required\": [\n    \"profileUrls\"\n  ]\n}",
    "readme": "# LinkedIn Profile Scraper + Email Finder (No Cookies)\r\n\r\nScrape LinkedIn profiles and find verified email addresses -- **no login, no cookies, no account needed**.\r\n\r\nPaste LinkedIn profile URLs, click Start, and get full profile data + discovered emails in your dataset. **Works in bulk** -- paste 10 or 10,000 URLs.\r\n\r\n## Why Use This LinkedIn Scraper?\r\n\r\nOther LinkedIn scrapers ask for your session cookies and risk getting your account **permanently banned**. This Actor doesn't touch your LinkedIn account at all.\r\n\r\nIt reads the publicly available structured data (JSON-LD) that LinkedIn embeds in every public profile page -- the same data Google and Bing use to index profiles. Your account stays safe.\r\n\r\n**Zero cookies. Zero login. Zero account risk.**\r\n\r\n## What You Get\r\n\r\nFor each profile URL you provide, the Actor extracts:\r\n\r\n| Data Point | Example |\r\n|------------|---------|\r\n| Full name | Bill Gates |\r\n| Headline | Co-chair, Founder, Co-founder |\r\n| Location | Seattle, Washington, United States |\r\n| About / Bio | Chair of the Gates Foundation... |\r\n| Profile photo | Direct CDN URL |\r\n| Followers count | 39,858,197 |\r\n| Work experience | Company, title, dates for each role |\r\n| Education | School, degree, field, dates |\r\n| Skills | Listed skills |\r\n| Published articles | Headline, date, URL, likes count |\r\n| Email address | Discovered via 4 independent OSINT sources |\r\n| Email confidence | high / medium / low |\r\n\r\n### Sample Output\r\n\r\n```json\r\n{\r\n    \"linkedin_url\": \"https://www.linkedin.com/in/williamhgates\",\r\n    \"full_name\": \"Bill Gates\",\r\n    \"headline\": \"Co-chair, Founder, Co-founder\",\r\n    \"location\": \"Seattle, Washington, United States\",\r\n    \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.\",\r\n    \"followers\": 39858197,\r\n    \"current_company\": \"Gates Foundation\",\r\n    \"experiences\": [\r\n        { \"company\": \"Gates Foundation\", \"start_date\": \"2000\" },\r\n        { \"company\": \"Breakthrough Energy\", \"start_date\": \"2015\" },\r\n        { \"company\": \"Microsoft\", \"start_date\": \"1975\" }\r\n    ],\r\n    \"educations\": [\r\n        { \"school\": \"Harvard University\", \"start_date\": \"1973\", \"end_date\": \"1975\" }\r\n    ],\r\n    \"articles\": [\r\n        {\r\n            \"headline\": \"Expanding access to health care through AI\",\r\n            \"date_published\": \"2026-01-23\",\r\n            \"likes\": 4380\r\n        }\r\n    ],\r\n    \"best_email\": \"bill@gatesfoundation.org\",\r\n    \"best_email_confidence\": \"medium\"\r\n}\r\n```\r\n\r\n## Bulk Scraping\r\n\r\nThis Actor is built for bulk. Paste hundreds or thousands of LinkedIn profile URLs and the Actor processes them efficiently:\r\n\r\n- **Parallel pipeline** -- Email enrichment runs in the background while the next profile is being scraped. No wasted time waiting.\r\n- **Automatic proxy rotation** -- Each request gets a fresh residential IP. If a request fails, the retry uses a different IP.\r\n- **Configurable delays** -- Control the speed vs. safety tradeoff with min/max delay settings.\r\n- **Resilient** -- Failed profiles are logged but don't stop the run. Results are pushed to the dataset as each profile completes.\r\n\r\n## Email Discovery -- Not Just Guessing\r\n\r\nUnlike scrapers that just guess `firstname.lastname@company.com` and call it a day, this Actor uses **4 independent sources** to find and verify emails:\r\n\r\n| Source | What it does | Confidence |\r\n|--------|-------------|------------|\r\n| **Google Dorking** | Searches Google for publicly posted emails tied to the person's name and company | **High** |\r\n| **GitHub Commits** | Scans public git commit history and events for email addresses | **High** |\r\n| **SMTP Verification** | Generates 10 common email patterns and verifies them against the company mail server | **Medium** |\r\n| **Holehe Validation** | Checks if the email is registered on 120+ platforms (Twitter, Spotify, Adobe, etc.) | Boosts confidence |\r\n\r\nThe best email is automatically selected and ranked. Each source can be toggled on or off individually.\r\n\r\nEmail enrichment runs **in parallel** with profile scraping, so enabling it adds minimal extra time when processing multiple profiles.\r\n\r\n## How to Use\r\n\r\n### Quick Start\r\n\r\n1. Paste one or more LinkedIn profile URLs (or just the username, like `williamhgates`)\r\n2. Click **Start**\r\n3. Download results as JSON, CSV, or Excel\r\n\r\nThat's it. Residential proxy is configured automatically -- no setup needed.\r\n\r\n### Input Example\r\n\r\n```json\r\n{\r\n    \"profileUrls\": [\r\n        \"https://www.linkedin.com/in/williamhgates\",\r\n        \"https://www.linkedin.com/in/satyanadella\",\r\n        \"jeffweiner08\"\r\n    ],\r\n    \"enableEmailEnrichment\": true\r\n}\r\n```\r\n\r\n### Input Options\r\n\r\n| Field | Default | Description |\r\n|-------|---------|-------------|\r\n| Profile URLs | *(required)* | LinkedIn profile URLs or usernames to scrape. Supports bulk. |\r\n| Enable Email Enrichment | `true` | Run the multi-source email discovery pipeline (runs in parallel) |\r\n| Google Dorking | `true` | Search Google for publicly available emails |\r\n| GitHub Commits Search | `true` | Search GitHub commit history for emails |\r\n| SMTP Verification | `true` | Verify email patterns via mail server handshake |\r\n| Holehe Validation | `false` | Check emails against 120+ platform registrations |\r\n| GitHub Token | - | Optional token for higher GitHub API limits |\r\n| Min/Max Delay | 3-7 sec | Throttling between requests |\r\n| Max Retries | 3 | Retry attempts per profile on failure |\r\n\r\n## Proxy\r\n\r\nThe Actor **automatically uses Apify residential proxies** -- no configuration needed. Every request goes through a rotating residential IP to avoid LinkedIn's bot detection. Each retry attempt gets a fresh IP.\r\n\r\nYou don't need to set up or configure anything for proxies.\r\n\r\n## Output & Dataset Views\r\n\r\nResults are stored in the default dataset with **3 pre-built views**:\r\n\r\n- **Overview** -- Name, headline, company, location, best email, followers at a glance\r\n- **Emails** -- Focused view: name, company, email, confidence, all discovered emails\r\n- **Full Data** -- Everything including work history, education, articles, skills\r\n\r\nExport to **JSON**, **CSV**, **Excel**, or **XML** directly from the Output tab.\r\n\r\n## Use Cases\r\n\r\n- **Sales & Lead Generation** -- Build prospect lists with verified contact info\r\n- **Recruiting & Talent Sourcing** -- Enrich candidate profiles with email addresses\r\n- **Market Research** -- Analyze competitor teams, track executive movements\r\n- **CRM Enrichment** -- Feed LinkedIn data directly into your CRM pipeline\r\n- **Journalism & OSINT** -- Research public figures and professionals\r\n- **Bulk Outreach** -- Scrape thousands of profiles and export to your email tool\r\n\r\n## Integrations\r\n\r\nConnect this Actor to your workflow:\r\n\r\n- **Zapier / Make** -- Trigger on new dataset items, send to CRM or email tool\r\n- **Google Sheets** -- Auto-export results to a spreadsheet\r\n- **API** -- Call the Actor via REST API and poll for results\r\n- **Webhooks** -- Get notified when a run completes\r\n\r\n## Technical Details\r\n\r\n### How It Works\r\n\r\n1. **Fetch** -- Sends an HTTP request to the public LinkedIn profile URL using browser-grade headers and rotating residential proxies\r\n2. **Parse JSON-LD** -- Extracts the structured data LinkedIn embeds in `<script type=\"application/ld+json\">` tags (same data search engines use)\r\n3. **Parse HTML** -- Scrapes supplementary fields (connections, skills) from the page HTML\r\n4. **Email Enrichment (parallel)** -- While the next profile is being fetched, email enrichment runs concurrently in the background using Google, GitHub, SMTP, and Holehe\r\n5. **Push to Dataset** -- Each profile is pushed to the dataset as soon as scraping + enrichment completes\r\n\r\n### Anti-Detection Features\r\n\r\n- Rotates through 9 realistic User-Agent strings (Chrome, Firefox, Safari, Edge -- all 2025/2026 versions)\r\n- Sets matching `Sec-Ch-Ua`, `Sec-Ch-Ua-Platform`, and `Sec-Fetch-*` headers per UA\r\n- Residential proxy automatically enabled -- fresh IP on every request\r\n- Fresh proxy IP on every retry attempt (not just per profile)\r\n- Randomized delays between requests with configurable min/max\r\n- Detects login walls, HTTP 999 (LinkedIn's bot detection code), and rate limits\r\n- Exponential backoff on failures (3s, 6s, 12s...)\r\n\r\n### Rate Limits & Throughput\r\n\r\n| Scenario | Approximate Speed |\r\n|----------|-------------------|\r\n| Profile scraping only | ~10-20 profiles/minute |\r\n| With email enrichment (parallel) | ~8-15 profiles/minute |\r\n| Large bulk runs (1000+) | ~500-1000 profiles/hour |\r\n\r\nEmail enrichment runs in parallel with scraping, so it adds minimal overhead when processing multiple profiles.\r\n\r\n## Limitations\r\n\r\n- Only works with **public** LinkedIn profiles (visible without logging in)\r\n- Some profiles may return login walls even with proxies -- the Actor retries with fresh IPs automatically\r\n- Email discovery depends on publicly available data; not every person has a discoverable email\r\n- Google dorking may trigger CAPTCHAs after many queries in sequence\r\n- GitHub email search works best for people active in open source\r\n\r\n## Pricing\r\n\r\nThis Actor runs on the Apify platform. You pay only for compute and proxy usage:\r\n\r\n- **Compute**: ~0.1 compute units per profile (with email enrichment)\r\n- **Proxy**: Residential proxy traffic is billed separately by Apify\r\n\r\n## Legal\r\n\r\nThis Actor scrapes only publicly available data from LinkedIn profiles that are visible without authentication. Users are responsible for complying with LinkedIn's Terms of Service, applicable data protection laws (GDPR, CCPA), and local regulations regarding web scraping and personal data processing.\r\n\r\n## Changelog\r\n\r\n### v0.2\r\n\r\n- Parallel email enrichment -- enrichment runs concurrently with scraping for significantly faster bulk runs\r\n- Residential proxy is now automatic -- no user configuration needed\r\n- Simplified input -- removed proxy settings field\r\n- Results pushed to dataset as each profile completes (streaming output)\r\n- Improved bulk handling with progress status updates\r\n\r\n### v0.1\r\n\r\n- Initial release\r\n- Full profile extraction: name, headline, location, about, experiences, education, skills, articles, followers\r\n- Multi-source email enrichment: Google dorking, GitHub commits, SMTP verification, Holehe validation\r\n- Apify Proxy integration with automatic IP rotation on retries\r\n- 3 dataset views: Overview, Emails, Full Data\r\n- Configurable throttling, retry count, and per-source email toggles\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Scraper + Email Finder (No Cookies)",
      "description": "Scrape LinkedIn profiles and find verified emails without cookies or login. Extracts name, headline, company, experience, education, skills, articles, followers, and email addresses using 4 OSINT sources. Bulk support with parallel email enrichment and automatic residential proxy rotation.",
      "version": "0.2",
      "buildTag": "latest",
      "input": {
        "title": "LinkedIn Profile Scraper + Email Finder Input",
        "description": "Scrape LinkedIn profiles and find emails without cookies. Provide profile URLs and configure email enrichment sources.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "List of LinkedIn profile URLs to scrape. You can paste full URLs (https://www.linkedin.com/in/williamhgates) or just the username (williamhgates). Supports bulk -- add as many as you need.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates"
            ],
            "minItems": 1
          },
          "enableEmailEnrichment": {
            "title": "Enable Email Enrichment",
            "type": "boolean",
            "description": "Find email addresses using multiple OSINT sources (Google dorking, GitHub commits, SMTP verification, Holehe). Runs in parallel with scraping for maximum speed.",
            "default": true,
            "prefill": false,
            "sectionCaption": "Email Enrichment",
            "sectionDescription": "Configure how email discovery works. Each source can be individually enabled or disabled."
          },
          "enableGoogleDorking": {
            "title": "Google Dorking",
            "type": "boolean",
            "description": "Search Google for publicly available email addresses associated with the person.",
            "default": true
          },
          "enableGithubSearch": {
            "title": "GitHub Commits Search",
            "type": "boolean",
            "description": "Search GitHub public commits and events for email addresses.",
            "default": true
          },
          "enableSmtpVerification": {
            "title": "SMTP Pattern Verification",
            "type": "boolean",
            "description": "Generate common email patterns (firstname.lastname@company.com, etc.) and verify via SMTP handshake.",
            "default": true
          },
          "enableHolehe": {
            "title": "Holehe Platform Validation",
            "type": "boolean",
            "description": "Validate discovered emails against 120+ online platforms to confirm they are real accounts. Slower but more accurate.",
            "default": false
          },
          "githubToken": {
            "title": "GitHub Personal Access Token",
            "type": "string",
            "description": "Optional. Increases GitHub API rate limit from 60 to 5,000 requests/hour. Create one at https://github.com/settings/tokens",
            "editor": "textfield",
            "isSecret": true
          },
          "delayMin": {
            "title": "Minimum Delay (seconds)",
            "type": "number",
            "description": "Minimum delay between profile requests to avoid rate limiting.",
            "default": 3,
            "minimum": 0.5,
            "maximum": 60,
            "unit": "seconds",
            "sectionCaption": "Advanced",
            "sectionDescription": "Fine-tune scraper behavior. Defaults work well for most use cases."
          },
          "delayMax": {
            "title": "Maximum Delay (seconds)",
            "type": "number",
            "description": "Maximum delay between profile requests.",
            "default": 7,
            "minimum": 1,
            "maximum": 120,
            "unit": "seconds"
          },
          "maxRetries": {
            "title": "Max Retries Per Profile",
            "type": "integer",
            "description": "Maximum number of retry attempts per profile on failure (login wall, timeout, etc.). Each retry uses a fresh proxy IP.",
            "default": 3,
            "minimum": 1,
            "maximum": 10
          }
        },
        "required": [
          "profileUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Scraper + Email Finder Output",
        "description": "Scraped LinkedIn profile data including name, headline, experience, education, skills, articles, followers, and discovered email addresses with confidence scores.",
        "properties": {
          "profiles": {
            "type": "string",
            "title": "Scraped Profiles",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "readme": "# LinkedIn Profile Scraper + Email Finder (No Cookies)\r\n\r\nScrape LinkedIn profiles and find verified email addresses -- **no login, no cookies, no account needed**.\r\n\r\nPaste LinkedIn profile URLs, click Start, and get full profile data + discovered emails in your dataset. **Works in bulk** -- paste 10 or 10,000 URLs.\r\n\r\n## Why Use This LinkedIn Scraper?\r\n\r\nOther LinkedIn scrapers ask for your session cookies and risk getting your account **permanently banned**. This Actor doesn't touch your LinkedIn account at all.\r\n\r\nIt reads the publicly available structured data (JSON-LD) that LinkedIn embeds in every public profile page -- the same data Google and Bing use to index profiles. Your account stays safe.\r\n\r\n**Zero cookies. Zero login. Zero account risk.**\r\n\r\n## What You Get\r\n\r\nFor each profile URL you provide, the Actor extracts:\r\n\r\n| Data Point | Example |\r\n|------------|---------|\r\n| Full name | Bill Gates |\r\n| Headline | Co-chair, Founder, Co-founder |\r\n| Location | Seattle, Washington, United States |\r\n| About / Bio | Chair of the Gates Foundation... |\r\n| Profile photo | Direct CDN URL |\r\n| Followers count | 39,858,197 |\r\n| Work experience | Company, title, dates for each role |\r\n| Education | School, degree, field, dates |\r\n| Skills | Listed skills |\r\n| Published articles | Headline, date, URL, likes count |\r\n| Email address | Discovered via 4 independent OSINT sources |\r\n| Email confidence | high / medium / low |\r\n\r\n### Sample Output\r\n\r\n```json\r\n{\r\n    \"linkedin_url\": \"https://www.linkedin.com/in/williamhgates\",\r\n    \"full_name\": \"Bill Gates\",\r\n    \"headline\": \"Co-chair, Founder, Co-founder\",\r\n    \"location\": \"Seattle, Washington, United States\",\r\n    \"about\": \"Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.\",\r\n    \"followers\": 39858197,\r\n    \"current_company\": \"Gates Foundation\",\r\n    \"experiences\": [\r\n        { \"company\": \"Gates Foundation\", \"start_date\": \"2000\" },\r\n        { \"company\": \"Breakthrough Energy\", \"start_date\": \"2015\" },\r\n        { \"company\": \"Microsoft\", \"start_date\": \"1975\" }\r\n    ],\r\n    \"educations\": [\r\n        { \"school\": \"Harvard University\", \"start_date\": \"1973\", \"end_date\": \"1975\" }\r\n    ],\r\n    \"articles\": [\r\n        {\r\n            \"headline\": \"Expanding access to health care through AI\",\r\n            \"date_published\": \"2026-01-23\",\r\n            \"likes\": 4380\r\n        }\r\n    ],\r\n    \"best_email\": \"bill@gatesfoundation.org\",\r\n    \"best_email_confidence\": \"medium\"\r\n}\r\n```\r\n\r\n## Bulk Scraping\r\n\r\nThis Actor is built for bulk. Paste hundreds or thousands of LinkedIn profile URLs and the Actor processes them efficiently:\r\n\r\n- **Parallel pipeline** -- Email enrichment runs in the background while the next profile is being scraped. No wasted time waiting.\r\n- **Automatic proxy rotation** -- Each request gets a fresh residential IP. If a request fails, the retry uses a different IP.\r\n- **Configurable delays** -- Control the speed vs. safety tradeoff with min/max delay settings.\r\n- **Resilient** -- Failed profiles are logged but don't stop the run. Results are pushed to the dataset as each profile completes.\r\n\r\n## Email Discovery -- Not Just Guessing\r\n\r\nUnlike scrapers that just guess `firstname.lastname@company.com` and call it a day, this Actor uses **4 independent sources** to find and verify emails:\r\n\r\n| Source | What it does | Confidence |\r\n|--------|-------------|------------|\r\n| **Google Dorking** | Searches Google for publicly posted emails tied to the person's name and company | **High** |\r\n| **GitHub Commits** | Scans public git commit history and events for email addresses | **High** |\r\n| **SMTP Verification** | Generates 10 common email patterns and verifies them against the company mail server | **Medium** |\r\n| **Holehe Validation** | Checks if the email is registered on 120+ platforms (Twitter, Spotify, Adobe, etc.) | Boosts confidence |\r\n\r\nThe best email is automatically selected and ranked. Each source can be toggled on or off individually.\r\n\r\nEmail enrichment runs **in parallel** with profile scraping, so enabling it adds minimal extra time when processing multiple profiles.\r\n\r\n## How to Use\r\n\r\n### Quick Start\r\n\r\n1. Paste one or more LinkedIn profile URLs (or just the username, like `williamhgates`)\r\n2. Click **Start**\r\n3. Download results as JSON, CSV, or Excel\r\n\r\nThat's it. Residential proxy is configured automatically -- no setup needed.\r\n\r\n### Input Example\r\n\r\n```json\r\n{\r\n    \"profileUrls\": [\r\n        \"https://www.linkedin.com/in/williamhgates\",\r\n        \"https://www.linkedin.com/in/satyanadella\",\r\n        \"jeffweiner08\"\r\n    ],\r\n    \"enableEmailEnrichment\": true\r\n}\r\n```\r\n\r\n### Input Options\r\n\r\n| Field | Default | Description |\r\n|-------|---------|-------------|\r\n| Profile URLs | *(required)* | LinkedIn profile URLs or usernames to scrape. Supports bulk. |\r\n| Enable Email Enrichment | `true` | Run the multi-source email discovery pipeline (runs in parallel) |\r\n| Google Dorking | `true` | Search Google for publicly available emails |\r\n| GitHub Commits Search | `true` | Search GitHub commit history for emails |\r\n| SMTP Verification | `true` | Verify email patterns via mail server handshake |\r\n| Holehe Validation | `false` | Check emails against 120+ platform registrations |\r\n| GitHub Token | - | Optional token for higher GitHub API limits |\r\n| Min/Max Delay | 3-7 sec | Throttling between requests |\r\n| Max Retries | 3 | Retry attempts per profile on failure |\r\n\r\n## Proxy\r\n\r\nThe Actor **automatically uses Apify residential proxies** -- no configuration needed. Every request goes through a rotating residential IP to avoid LinkedIn's bot detection. Each retry attempt gets a fresh IP.\r\n\r\nYou don't need to set up or configure anything for proxies.\r\n\r\n## Output & Dataset Views\r\n\r\nResults are stored in the default dataset with **3 pre-built views**:\r\n\r\n- **Overview** -- Name, headline, company, location, best email, followers at a glance\r\n- **Emails** -- Focused view: name, company, email, confidence, all discovered emails\r\n- **Full Data** -- Everything including work history, education, articles, skills\r\n\r\nExport to **JSON**, **CSV**, **Excel**, or **XML** directly from the Output tab.\r\n\r\n## Use Cases\r\n\r\n- **Sales & Lead Generation** -- Build prospect lists with verified contact info\r\n- **Recruiting & Talent Sourcing** -- Enrich candidate profiles with email addresses\r\n- **Market Research** -- Analyze competitor teams, track executive movements\r\n- **CRM Enrichment** -- Feed LinkedIn data directly into your CRM pipeline\r\n- **Journalism & OSINT** -- Research public figures and professionals\r\n- **Bulk Outreach** -- Scrape thousands of profiles and export to your email tool\r\n\r\n## Integrations\r\n\r\nConnect this Actor to your workflow:\r\n\r\n- **Zapier / Make** -- Trigger on new dataset items, send to CRM or email tool\r\n- **Google Sheets** -- Auto-export results to a spreadsheet\r\n- **API** -- Call the Actor via REST API and poll for results\r\n- **Webhooks** -- Get notified when a run completes\r\n\r\n## Technical Details\r\n\r\n### How It Works\r\n\r\n1. **Fetch** -- Sends an HTTP request to the public LinkedIn profile URL using browser-grade headers and rotating residential proxies\r\n2. **Parse JSON-LD** -- Extracts the structured data LinkedIn embeds in `<script type=\"application/ld+json\">` tags (same data search engines use)\r\n3. **Parse HTML** -- Scrapes supplementary fields (connections, skills) from the page HTML\r\n4. **Email Enrichment (parallel)** -- While the next profile is being fetched, email enrichment runs concurrently in the background using Google, GitHub, SMTP, and Holehe\r\n5. **Push to Dataset** -- Each profile is pushed to the dataset as soon as scraping + enrichment completes\r\n\r\n### Anti-Detection Features\r\n\r\n- Rotates through 9 realistic User-Agent strings (Chrome, Firefox, Safari, Edge -- all 2025/2026 versions)\r\n- Sets matching `Sec-Ch-Ua`, `Sec-Ch-Ua-Platform`, and `Sec-Fetch-*` headers per UA\r\n- Residential proxy automatically enabled -- fresh IP on every request\r\n- Fresh proxy IP on every retry attempt (not just per profile)\r\n- Randomized delays between requests with configurable min/max\r\n- Detects login walls, HTTP 999 (LinkedIn's bot detection code), and rate limits\r\n- Exponential backoff on failures (3s, 6s, 12s...)\r\n\r\n### Rate Limits & Throughput\r\n\r\n| Scenario | Approximate Speed |\r\n|----------|-------------------|\r\n| Profile scraping only | ~10-20 profiles/minute |\r\n| With email enrichment (parallel) | ~8-15 profiles/minute |\r\n| Large bulk runs (1000+) | ~500-1000 profiles/hour |\r\n\r\nEmail enrichment runs in parallel with scraping, so it adds minimal overhead when processing multiple profiles.\r\n\r\n## Limitations\r\n\r\n- Only works with **public** LinkedIn profiles (visible without logging in)\r\n- Some profiles may return login walls even with proxies -- the Actor retries with fresh IPs automatically\r\n- Email discovery depends on publicly available data; not every person has a discoverable email\r\n- Google dorking may trigger CAPTCHAs after many queries in sequence\r\n- GitHub email search works best for people active in open source\r\n\r\n## Pricing\r\n\r\nThis Actor runs on the Apify platform. You pay only for compute and proxy usage:\r\n\r\n- **Compute**: ~0.1 compute units per profile (with email enrichment)\r\n- **Proxy**: Residential proxy traffic is billed separately by Apify\r\n\r\n## Legal\r\n\r\nThis Actor scrapes only publicly available data from LinkedIn profiles that are visible without authentication. Users are responsible for complying with LinkedIn's Terms of Service, applicable data protection laws (GDPR, CCPA), and local regulations regarding web scraping and personal data processing.\r\n\r\n## Changelog\r\n\r\n### v0.2\r\n\r\n- Parallel email enrichment -- enrichment runs concurrently with scraping for significantly faster bulk runs\r\n- Residential proxy is now automatic -- no user configuration needed\r\n- Simplified input -- removed proxy settings field\r\n- Results pushed to dataset as each profile completes (streaming output)\r\n- Improved bulk handling with progress status updates\r\n\r\n### v0.1\r\n\r\n- Initial release\r\n- Full profile extraction: name, headline, location, about, experiences, education, skills, articles, followers\r\n- Multi-source email enrichment: Google dorking, GitHub commits, SMTP verification, Holehe validation\r\n- Apify Proxy integration with automatic IP rotation on retries\r\n- 3 dataset views: Overview, Emails, Full Data\r\n- Configurable throttling, retry count, and per-source email toggles\r\n"
    },
    "buildNumber": "0.2.2",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.2"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.014904444444444444
    }
  }
}