{
  "data": {
    "id": "1OcufiRWenRXCdbfH",
    "actId": "KNgPwPTErLIMPav3Y",
    "userId": "xzVFaix94sH2dEGxe",
    "startedAt": "2026-07-28T08:08:03.149Z",
    "finishedAt": "2026-07-28T08:08:33.551Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 30324,
      "runTimeSecs": 30.324,
      "computeUnits": 0.03369333333333333,
      "imageSizeBytes": 2553346560
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "h2klQ6GSImPZXQB8y",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Details Extractor and Email Finder Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileScraperMode\": {\n      \"title\": \"Profile Scraper Mode (change this to find email)\",\n      \"type\": \"string\",\n      \"description\": \"Choose the mode for scraping LinkedIn profiles. 'Profile details' scrapes detailed profile information, while 'Profile details + email search' attempts to find the email address of the profile owner.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"Profile details no email ($4 per 1k)\",\n        \"Profile details + email search ($10 per 1k)\"\n      ],\n      \"default\": \"Profile details no email ($4 per 1k)\",\n      \"prefill\": \"Profile details no email ($4 per 1k)\"\n    },\n    \"queries\": {\n      \"title\": \"Target URLs\",\n      \"type\": \"array\",\n      \"description\": \"List of LinkedIn profile URLs or Public Identifiers (last part in the URL) to scrape.\",\n      \"editor\": \"stringList\",\n      \"default\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/towhid-rahman\"\n      ],\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates\",\n        \"https://www.linkedin.com/in/towhid-rahman\"\n      ]\n    },\n    \"urls\": {\n      \"title\": \"Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"List of LinkedIn profile URLs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"publicIdentifiers\": {\n      \"title\": \"Public Identifiers (last part in the URL)\",\n      \"type\": \"array\",\n      \"description\": \"List of LinkedIn Public Identifiers. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"profileIds\": {\n      \"title\": \"LinkedIn Profile IDs\",\n      \"type\": \"array\",\n      \"description\": \"List of LinkedIn profile IDs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"connectionProxy\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Apify proxy configuration. Residential recommended.\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": true,\n        \"apifyProxyGroups\": [\n          \"RESIDENTIAL\"\n        ],\n        \"apifyProxyCountry\": \"US\"\n      }\n    }\n  }\n}",
    "readme": "# LinkedIn Profile Details Extractor and Email Finder\n\nOur powerful tool allows you to gather detailed information from LinkedIn profiles while prioritizing security and adhering to platform policies. You can collect complete data from the experience, education, and skills sections of any profile.\n\nOptionally, our tool can also try to find email addresses for LinkedIn profiles, which is ideal for lead generation, recruitment, and networking. We perform comprehensive validation checks, including SMTP checks, to ensure the email addresses are valid and deliverable. Adaptive cost: if a LinkedIn profile is not complete enough to perform the email search - we will not charge you for the search.\n\n## Key Benefits\n\n- **No cookies or account required**: Access profile data without sharing cookies or risking account restrictions.\n- **Low pricing**: $4 per 1000 detailed profiles or $10 per 1000 profiles with email address search.\n- **Fast response times & concurrency**: Scrape multiple profiles rapidly in parallel.\n- **Real-time scraping**: Always fresh data extracted on demand.\n- **Find more Linkedin scraping actors**: [https://apify.com/scrapeai](https://apify.com/scrapeai)\n\n---\n\n## How It Works\n\nSimply provide one of the following:\n\n- **List of LinkedIn public identifiers** (e.g., `williamhgates` from `https://www.linkedin.com/in/williamhgates`)\n- **List of LinkedIn profile URLs**\n- **List of LinkedIn profile IDs** (e.g., `ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`)\n\n### Email Search\n\nBy selecting the `\"Profile details + email search ($10 per 1k)\"` profile scraper mode, you can enable our tool to perform email search for LinkedIn profiles, which is ideal for lead generation, recruitment, and networking. We perform comprehensive validation checks, including SMTP checks, to ensure the email addresses are valid and deliverable. Adaptive cost: if a LinkedIn profile is not complete enough to perform the email search - we will not charge you for the search.\n\n> **Important Note:** The scraper cannot extract emails directly from a LinkedIn profile as this information is not publicly available on the platform. The email search is performed independently and it is not guaranteed to find an email for every profile.\n\n---\n\n## Data You'll Receive\n\n- Profile summary and headline\n- Current and previous work experience\n- Educational qualifications\n- Location and contact information\n- Skills and endorsements\n- Recommendations and connections\n- Certifications and projects\n- Volunteer experience, courses, publications, honors, and awards\n\n---\n\n## ⬇️ Input Parameters\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `profileScraperMode` | string | Optional | Choose scraper mode: `Profile details no email ($4 per 1k)` or `Profile details + email search ($10 per 1k)` |\n| `queries` | array | Optional | List of LinkedIn profile URLs or Public Identifiers (last part in the URL) to scrape |\n| `urls` | array | Optional | List of LinkedIn profile URLs to scrape |\n| `publicIdentifiers` | array | Optional | List of LinkedIn Public Identifiers |\n| `profileIds` | array | Optional | List of LinkedIn profile IDs to scrape |\n\n### Example Input\n\n```json\n{\n  \"profileScraperMode\": \"Profile details no email ($4 per 1k)\",\n  \"queries\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/towhid-rahman\"\n  ]\n}\n```\n\n---\n\n## ⬆️ Sample Output Data\n\n```json\n{\n  \"id\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\",\n  \"publicIdentifier\": \"towhid-rahman\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/towhid-rahman\",\n  \"firstName\": \"Towhid\",\n  \"lastName\": \"Rahman, PharmD\",\n  \"headline\": \"Pharmacology | Medical Science Liasion | Pharmacovigilence | Regulatory Toxicologist | Process Validation | Project Management | Leadership | Photography\",\n  \"about\": \"I find myself at a unique crossroads where science meets compassion. With over eight years of experience in pharmacology...\",\n  \"openToWork\": false,\n  \"hiring\": false,\n  \"photo\": \"https://media.licdn.com/dms/image/v2/C5603AQEbgBlEFwrtUg/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1567218693232?e=1756944000&v=beta&t=duzOKV11a_IbPCE_7FCXqaTh1O6Q1TR7IZmpGEmxGAE\",\n  \"premium\": false,\n  \"influencer\": false,\n  \"location\": {\n    \"linkedinText\": \"Los Angeles, California, United States\",\n    \"countryCode\": \"US\",\n    \"parsed\": {\n      \"text\": \"Los Angeles, CA, United States\",\n      \"countryCode\": \"US\",\n      \"regionCode\": null,\n      \"country\": \"United States\",\n      \"countryFull\": \"United States of America\",\n      \"state\": \"California\",\n      \"city\": \"Los Angeles\"\n    }\n  },\n  \"verified\": true,\n  \"registeredAt\": \"2017-07-29T17:39:39.165Z\",\n  \"topSkills\": \"Pharmacology • Patient Counseling\",\n  \"connectionsCount\": 261,\n  \"followerCount\": 264,\n  \"currentPosition\": [\n    {\n      \"companyName\": \"CVS Health\"\n    }\n  ],\n  \"experience\": [\n    {\n      \"position\": \"Staff Pharmacist | Prescription Dispensing, Drug Utilization Review, Regulatory Compliance\",\n      \"location\": \"Thousand Oaks, California, United States\",\n      \"employmentType\": \"Full-time\",\n      \"workplaceType\": \"On-site\",\n      \"companyName\": \"CVS Health\",\n      \"companyLinkedinUrl\": \"https://www.linkedin.com/company/cvshealth/\",\n      \"companyId\": \"4680\",\n      \"companyUniversalName\": \"cvshealth\",\n      \"duration\": \"1 yr 7 mos\",\n      \"description\": \"* Exceeded daily production targets by 15% in a high-demand pharmacy environment...\",\n      \"skills\": [\n        \"Scientific Liaison\",\n        \"Cultural Awareness\",\n        \"Resource Optimization\"\n      ],\n      \"startDate\": {\n        \"month\": \"Jan\",\n        \"year\": 2024,\n        \"text\": \"Jan 2024\"\n      },\n      \"endDate\": {\n        \"text\": \"Present\"\n      }\n    }\n  ],\n  \"education\": [\n    {\n      \"schoolName\": \"Western University of Health Sciences\",\n      \"schoolLinkedinUrl\": \"https://www.linkedin.com/company/26345/\",\n      \"degree\": \"Doctor of Pharmacy\",\n      \"fieldOfStudy\": \"Pharmacy\",\n      \"skills\": [\"Healthcare System Knowledge\"],\n      \"startDate\": {\n        \"month\": \"Aug\",\n        \"year\": 2018,\n        \"text\": \"Aug 2018\"\n      },\n      \"endDate\": {\n        \"month\": \"May\",\n        \"year\": 2022,\n        \"text\": \"May 2022\"\n      },\n      \"period\": \"Aug 2018 - May 2022\"\n    }\n  ],\n  \"certifications\": [],\n  \"projects\": [],\n  \"volunteering\": [],\n  \"receivedRecommendations\": [],\n  \"skills\": [],\n  \"courses\": [],\n  \"publications\": [],\n  \"patents\": [],\n  \"honorsAndAwards\": [],\n  \"languages\": [],\n  \"featured\": null,\n  \"moreProfiles\": [],\n  \"query\": {\n    \"publicIdentifier\": \"towhid-rahman\",\n    \"profileId\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\"\n  },\n  \"status\": 200,\n  \"entityId\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\",\n  \"requestId\": \"86e7119b-a788-42d9-a80a-a7b52fa5a455\"\n}\n```\n\n---\n\n## LinkedIn Profiles API\n\nThe Actor stores results in an Apify dataset. You can export data in various formats such as CSV, JSON, XLS, etc., and scrape/access data on demand using the Apify API.\n",
    "changelog": "# Changelog\r\n\r\n## [1.1.0] - 2025-05-21\r\n\r\n### Added\r\n- Added `src/schema/input.js` — dedicated input validation module replacing inline validation in `main.js`\r\n- Added `src/errors/` — `ScraperError`, `ErrorTypes`, `ErrorHandler` modules for structured error handling\r\n\r\n### Changed\r\n- Refactored `main.js` to use `validateInput()` from `src/schema/input.js`\r\n- Extracted ad extraction logic to `src/utils/extraction.js`\r\n- Route handler moved to `src/routes.js` with clean separation of concerns\r\n- Improved README.md with accurate input/output documentation\r\n- Dataset schema views updated for Apify Storage table display\r\n\r\n### Fixed\r\n- Scroll pagination handles edge cases where LinkedIn renders ads lazily\r\n- Country parameter correctly appended to search URL query string\r\n\r\n## [1.0.0] - 2025-03-15\r\n\r\n### Added\r\n- Initial release: LinkedIn Ad Library scraper\r\n- Scrapes public ads from `linkedin.com/ad-library/search` for a given advertiser query\r\n- Infinite-scroll extraction using `button.infinite-scroller__show-more-button`\r\n- Extracts advertiser name, ad text, ad format, media URL, media title, and link\r\n- Configurable `maxItems`, `query`, and `country` inputs\r\n- Apify dataset integration with structured output\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Details Extractor and Email Finder",
      "description": "Gather complete data from the experience, education, and skills sections of any LinkedIn profile. Optionally perform email address search with SMTP validation.",
      "version": "1.0",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "publicIdentifier": {
              "type": "string",
              "title": "Public Identifier"
            },
            "linkedinUrl": {
              "type": "string",
              "title": "LinkedIn URL"
            },
            "firstName": {
              "type": "string",
              "title": "First Name"
            },
            "lastName": {
              "type": "string",
              "title": "Last Name"
            },
            "headline": {
              "type": "string",
              "title": "Headline"
            },
            "about": {
              "type": [
                "string",
                "null"
              ],
              "title": "About"
            },
            "openToWork": {
              "type": "boolean",
              "title": "Open to Work"
            },
            "hiring": {
              "type": "boolean",
              "title": "Hiring"
            },
            "photo": {
              "type": [
                "string",
                "null"
              ],
              "title": "Photo"
            },
            "premium": {
              "type": "boolean",
              "title": "Premium"
            },
            "influencer": {
              "type": "boolean",
              "title": "Influencer"
            },
            "location": {
              "type": "object",
              "title": "Location"
            },
            "verified": {
              "type": "boolean",
              "title": "Verified"
            },
            "registeredAt": {
              "type": [
                "string",
                "null"
              ],
              "title": "Registered At"
            },
            "topSkills": {
              "type": [
                "string",
                "null"
              ],
              "title": "Top Skills"
            },
            "connectionsCount": {
              "type": [
                "integer",
                "null"
              ],
              "title": "Connections Count"
            },
            "followerCount": {
              "type": [
                "integer",
                "null"
              ],
              "title": "Follower Count"
            },
            "currentPosition": {
              "type": "array",
              "title": "Current Position"
            },
            "experience": {
              "type": "array",
              "title": "Experience"
            },
            "education": {
              "type": "array",
              "title": "Education"
            },
            "certifications": {
              "type": "array",
              "title": "Certifications"
            },
            "projects": {
              "type": "array",
              "title": "Projects"
            },
            "volunteering": {
              "type": "array",
              "title": "Volunteering"
            },
            "receivedRecommendations": {
              "type": "array",
              "title": "Received Recommendations"
            },
            "skills": {
              "type": "array",
              "title": "Skills"
            },
            "courses": {
              "type": "array",
              "title": "Courses"
            },
            "publications": {
              "type": "array",
              "title": "Publications"
            },
            "patents": {
              "type": "array",
              "title": "Patents"
            },
            "honorsAndAwards": {
              "type": "array",
              "title": "Honors and Awards"
            },
            "languages": {
              "type": "array",
              "title": "Languages"
            },
            "featured": {
              "type": [
                "object",
                "array",
                "null"
              ],
              "title": "Featured"
            },
            "moreProfiles": {
              "type": "array",
              "title": "More Profiles"
            },
            "email": {
              "type": [
                "string",
                "null"
              ],
              "title": "Email"
            },
            "query": {
              "type": "object",
              "title": "Query"
            },
            "status": {
              "type": "integer",
              "title": "Status"
            },
            "entityId": {
              "type": "string",
              "title": "Entity ID"
            },
            "requestId": {
              "type": "string",
              "title": "Request ID"
            }
          },
          "views": {
            "overview": {
              "title": "LinkedIn Profiles Overview",
              "transformation": {
                "fields": [
                  "publicIdentifier",
                  "firstName",
                  "lastName",
                  "headline",
                  "topSkills",
                  "email",
                  "linkedinUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "publicIdentifier": {
                    "label": "Public Identifier",
                    "format": "text"
                  },
                  "firstName": {
                    "label": "First Name",
                    "format": "text"
                  },
                  "lastName": {
                    "label": "Last Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "topSkills": {
                    "label": "Top Skills",
                    "format": "text"
                  },
                  "email": {
                    "label": "Email",
                    "format": "text"
                  },
                  "linkedinUrl": {
                    "label": "LinkedIn URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "input": {
        "title": "LinkedIn Profile Details Extractor and Email Finder Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileScraperMode": {
            "title": "Profile Scraper Mode (change this to find email)",
            "type": "string",
            "description": "Choose the mode for scraping LinkedIn profiles. 'Profile details' scrapes detailed profile information, while 'Profile details + email search' attempts to find the email address of the profile owner.",
            "editor": "select",
            "enum": [
              "Profile details no email ($4 per 1k)",
              "Profile details + email search ($10 per 1k)"
            ],
            "default": "Profile details no email ($4 per 1k)",
            "prefill": "Profile details no email ($4 per 1k)"
          },
          "queries": {
            "title": "Target URLs",
            "type": "array",
            "description": "List of LinkedIn profile URLs or Public Identifiers (last part in the URL) to scrape.",
            "editor": "stringList",
            "default": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/towhid-rahman"
            ],
            "prefill": [
              "https://www.linkedin.com/in/williamhgates",
              "https://www.linkedin.com/in/towhid-rahman"
            ]
          },
          "urls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "List of LinkedIn profile URLs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "publicIdentifiers": {
            "title": "Public Identifiers (last part in the URL)",
            "type": "array",
            "description": "List of LinkedIn Public Identifiers. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "profileIds": {
            "title": "LinkedIn Profile IDs",
            "type": "array",
            "description": "List of LinkedIn profile IDs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "connectionProxy": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify proxy configuration. Residential recommended.",
            "editor": "proxy",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# LinkedIn Profile Details Extractor and Email Finder\n\nOur powerful tool allows you to gather detailed information from LinkedIn profiles while prioritizing security and adhering to platform policies. You can collect complete data from the experience, education, and skills sections of any profile.\n\nOptionally, our tool can also try to find email addresses for LinkedIn profiles, which is ideal for lead generation, recruitment, and networking. We perform comprehensive validation checks, including SMTP checks, to ensure the email addresses are valid and deliverable. Adaptive cost: if a LinkedIn profile is not complete enough to perform the email search - we will not charge you for the search.\n\n## Key Benefits\n\n- **No cookies or account required**: Access profile data without sharing cookies or risking account restrictions.\n- **Low pricing**: $4 per 1000 detailed profiles or $10 per 1000 profiles with email address search.\n- **Fast response times & concurrency**: Scrape multiple profiles rapidly in parallel.\n- **Real-time scraping**: Always fresh data extracted on demand.\n- **Find more Linkedin scraping actors**: [https://apify.com/scrapeai](https://apify.com/scrapeai)\n\n---\n\n## How It Works\n\nSimply provide one of the following:\n\n- **List of LinkedIn public identifiers** (e.g., `williamhgates` from `https://www.linkedin.com/in/williamhgates`)\n- **List of LinkedIn profile URLs**\n- **List of LinkedIn profile IDs** (e.g., `ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`)\n\n### Email Search\n\nBy selecting the `\"Profile details + email search ($10 per 1k)\"` profile scraper mode, you can enable our tool to perform email search for LinkedIn profiles, which is ideal for lead generation, recruitment, and networking. We perform comprehensive validation checks, including SMTP checks, to ensure the email addresses are valid and deliverable. Adaptive cost: if a LinkedIn profile is not complete enough to perform the email search - we will not charge you for the search.\n\n> **Important Note:** The scraper cannot extract emails directly from a LinkedIn profile as this information is not publicly available on the platform. The email search is performed independently and it is not guaranteed to find an email for every profile.\n\n---\n\n## Data You'll Receive\n\n- Profile summary and headline\n- Current and previous work experience\n- Educational qualifications\n- Location and contact information\n- Skills and endorsements\n- Recommendations and connections\n- Certifications and projects\n- Volunteer experience, courses, publications, honors, and awards\n\n---\n\n## ⬇️ Input Parameters\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `profileScraperMode` | string | Optional | Choose scraper mode: `Profile details no email ($4 per 1k)` or `Profile details + email search ($10 per 1k)` |\n| `queries` | array | Optional | List of LinkedIn profile URLs or Public Identifiers (last part in the URL) to scrape |\n| `urls` | array | Optional | List of LinkedIn profile URLs to scrape |\n| `publicIdentifiers` | array | Optional | List of LinkedIn Public Identifiers |\n| `profileIds` | array | Optional | List of LinkedIn profile IDs to scrape |\n\n### Example Input\n\n```json\n{\n  \"profileScraperMode\": \"Profile details no email ($4 per 1k)\",\n  \"queries\": [\n    \"https://www.linkedin.com/in/williamhgates\",\n    \"https://www.linkedin.com/in/towhid-rahman\"\n  ]\n}\n```\n\n---\n\n## ⬆️ Sample Output Data\n\n```json\n{\n  \"id\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\",\n  \"publicIdentifier\": \"towhid-rahman\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/towhid-rahman\",\n  \"firstName\": \"Towhid\",\n  \"lastName\": \"Rahman, PharmD\",\n  \"headline\": \"Pharmacology | Medical Science Liasion | Pharmacovigilence | Regulatory Toxicologist | Process Validation | Project Management | Leadership | Photography\",\n  \"about\": \"I find myself at a unique crossroads where science meets compassion. With over eight years of experience in pharmacology...\",\n  \"openToWork\": false,\n  \"hiring\": false,\n  \"photo\": \"https://media.licdn.com/dms/image/v2/C5603AQEbgBlEFwrtUg/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1567218693232?e=1756944000&v=beta&t=duzOKV11a_IbPCE_7FCXqaTh1O6Q1TR7IZmpGEmxGAE\",\n  \"premium\": false,\n  \"influencer\": false,\n  \"location\": {\n    \"linkedinText\": \"Los Angeles, California, United States\",\n    \"countryCode\": \"US\",\n    \"parsed\": {\n      \"text\": \"Los Angeles, CA, United States\",\n      \"countryCode\": \"US\",\n      \"regionCode\": null,\n      \"country\": \"United States\",\n      \"countryFull\": \"United States of America\",\n      \"state\": \"California\",\n      \"city\": \"Los Angeles\"\n    }\n  },\n  \"verified\": true,\n  \"registeredAt\": \"2017-07-29T17:39:39.165Z\",\n  \"topSkills\": \"Pharmacology • Patient Counseling\",\n  \"connectionsCount\": 261,\n  \"followerCount\": 264,\n  \"currentPosition\": [\n    {\n      \"companyName\": \"CVS Health\"\n    }\n  ],\n  \"experience\": [\n    {\n      \"position\": \"Staff Pharmacist | Prescription Dispensing, Drug Utilization Review, Regulatory Compliance\",\n      \"location\": \"Thousand Oaks, California, United States\",\n      \"employmentType\": \"Full-time\",\n      \"workplaceType\": \"On-site\",\n      \"companyName\": \"CVS Health\",\n      \"companyLinkedinUrl\": \"https://www.linkedin.com/company/cvshealth/\",\n      \"companyId\": \"4680\",\n      \"companyUniversalName\": \"cvshealth\",\n      \"duration\": \"1 yr 7 mos\",\n      \"description\": \"* Exceeded daily production targets by 15% in a high-demand pharmacy environment...\",\n      \"skills\": [\n        \"Scientific Liaison\",\n        \"Cultural Awareness\",\n        \"Resource Optimization\"\n      ],\n      \"startDate\": {\n        \"month\": \"Jan\",\n        \"year\": 2024,\n        \"text\": \"Jan 2024\"\n      },\n      \"endDate\": {\n        \"text\": \"Present\"\n      }\n    }\n  ],\n  \"education\": [\n    {\n      \"schoolName\": \"Western University of Health Sciences\",\n      \"schoolLinkedinUrl\": \"https://www.linkedin.com/company/26345/\",\n      \"degree\": \"Doctor of Pharmacy\",\n      \"fieldOfStudy\": \"Pharmacy\",\n      \"skills\": [\"Healthcare System Knowledge\"],\n      \"startDate\": {\n        \"month\": \"Aug\",\n        \"year\": 2018,\n        \"text\": \"Aug 2018\"\n      },\n      \"endDate\": {\n        \"month\": \"May\",\n        \"year\": 2022,\n        \"text\": \"May 2022\"\n      },\n      \"period\": \"Aug 2018 - May 2022\"\n    }\n  ],\n  \"certifications\": [],\n  \"projects\": [],\n  \"volunteering\": [],\n  \"receivedRecommendations\": [],\n  \"skills\": [],\n  \"courses\": [],\n  \"publications\": [],\n  \"patents\": [],\n  \"honorsAndAwards\": [],\n  \"languages\": [],\n  \"featured\": null,\n  \"moreProfiles\": [],\n  \"query\": {\n    \"publicIdentifier\": \"towhid-rahman\",\n    \"profileId\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\"\n  },\n  \"status\": 200,\n  \"entityId\": \"ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI\",\n  \"requestId\": \"86e7119b-a788-42d9-a80a-a7b52fa5a455\"\n}\n```\n\n---\n\n## LinkedIn Profiles API\n\nThe Actor stores results in an Apify dataset. You can export data in various formats such as CSV, JSON, XLS, etc., and scrape/access data on demand using the Apify API.\n",
      "changelog": "# Changelog\r\n\r\n## [1.1.0] - 2025-05-21\r\n\r\n### Added\r\n- Added `src/schema/input.js` — dedicated input validation module replacing inline validation in `main.js`\r\n- Added `src/errors/` — `ScraperError`, `ErrorTypes`, `ErrorHandler` modules for structured error handling\r\n\r\n### Changed\r\n- Refactored `main.js` to use `validateInput()` from `src/schema/input.js`\r\n- Extracted ad extraction logic to `src/utils/extraction.js`\r\n- Route handler moved to `src/routes.js` with clean separation of concerns\r\n- Improved README.md with accurate input/output documentation\r\n- Dataset schema views updated for Apify Storage table display\r\n\r\n### Fixed\r\n- Scroll pagination handles edge cases where LinkedIn renders ads lazily\r\n- Country parameter correctly appended to search URL query string\r\n\r\n## [1.0.0] - 2025-03-15\r\n\r\n### Added\r\n- Initial release: LinkedIn Ad Library scraper\r\n- Scrapes public ads from `linkedin.com/ad-library/search` for a given advertiser query\r\n- Infinite-scroll extraction using `button.infinite-scroller__show-more-button`\r\n- Extracts advertiser name, ad text, ad format, media URL, media title, and link\r\n- Configurable `maxItems`, `query`, and `country` inputs\r\n- Apify dataset integration with structured output\r\n"
    },
    "buildNumber": "1.0.1",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03369333333333333
    }
  }
}