Dataspryva

LinkedIn Profile, Certifications & Company Data Extractor

Turn LinkedIn profile URLs into structured records with work history, education, certifications, honors, volunteer work, personal projects and current-employer company details, with no login required.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
profileUrlsarrayrequiredPublic LinkedIn profile URLs (https://www.linkedin.com/in/username) or bare usernames. Full URLs, 'in/username' shorthand, regional subdomains and URLs with tracking parameters are all accepted.
enrichCompanybooleanoptionalAlso read the current employer's own public LinkedIn page for employee count, size range, industry, headquarters, address, founded year, followers, website, logo, description, slogan, type and specialties. Uses the actor's free public access path; one fetch per unique company per run.
includeStatusRowsbooleanoptionalAdd one structured status row when a run returns no profiles or only some of the requested profiles (for example a 404 or a privacy-restricted profile). Turn off for a dataset of profile records only.

Download the published input schema

View complete JSON
{
  "properties": {
    "enrichCompany": {
      "default": true,
      "description": "Also read the current employer's own public LinkedIn page for employee count, size range, industry, headquarters, address, founded year, followers, website, logo, description, slogan, type and specialties. Uses the actor's free public access path; one fetch per unique company per run.",
      "editor": "checkbox",
      "prefill": true,
      "title": "Enrich Current Company",
      "type": "boolean"
    },
    "includeStatusRows": {
      "default": true,
      "description": "Add one structured status row when a run returns no profiles or only some of the requested profiles (for example a 404 or a privacy-restricted profile). Turn off for a dataset of profile records only.",
      "editor": "checkbox",
      "prefill": true,
      "title": "Include Status Rows",
      "type": "boolean"
    },
    "profileUrls": {
      "description": "Public LinkedIn profile URLs (https://www.linkedin.com/in/username) or bare usernames. Full URLs, 'in/username' shorthand, regional subdomains and URLs with tracking parameters are all accepted.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "prefill": [
        "https://www.linkedin.com/in/williamhgates"
      ],
      "title": "Profile URLs or Usernames",
      "type": "array"
    }
  },
  "required": [
    "profileUrls"
  ],
  "schemaVersion": 1,
  "title": "LinkedIn Profile, Certifications & Company Data Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalDataset containing all scraped LinkedIn profile records.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per requested LinkedIn profile: identity, About, current company and school, the public connections indicator, work/education links, every self-authored section LinkedIn renders to guests (certifications, recommendations, languages, services, publications, patents, courses, honors, organizations, volunteering, projects, skills, badges, websites), and optional current-employer firmographics.",
  "properties": {
    "results": {
      "description": "Dataset containing all scraped LinkedIn profile records.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "LinkedIn profiles",
      "type": "string"
    }
  },
  "title": "LinkedIn Profile, Certifications & Company Data Extractor Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "certifications": {
            "format": "object",
            "label": "Certifications"
          },
          "connectionsCount": {
            "format": "number",
            "label": "Connections"
          },
          "connectionsText": {
            "format": "text",
            "label": "Connections (text)"
          },
          "currentCompany": {
            "format": "object",
            "label": "Current Company"
          },
          "currentSchool": {
            "format": "object",
            "label": "Current School"
          },
          "currentTitle": {
            "format": "text",
            "label": "Current Title"
          },
          "followersCount": {
            "format": "number",
            "label": "Followers"
          },
          "headline": {
            "format": "text",
            "label": "Headline"
          },
          "inputUrl": {
            "format": "text",
            "label": "Input URL"
          },
          "languages": {
            "format": "object",
            "label": "Languages"
          },
          "location": {
            "format": "text",
            "label": "Location"
          },
          "name": {
            "format": "text",
            "label": "Name"
          },
          "order": {
            "format": "number",
            "label": "Order"
          },
          "profilePicture": {
            "format": "link",
            "label": "Photo"
          },
          "profileUrl": {
            "format": "link",
            "label": "Profile URL"
          },
          "publications": {
            "format": "object",
            "label": "Publications"
          },
          "recommendations": {
            "format": "object",
            "label": "Recommendations"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "skills": {
            "format": "object",
            "label": "Skills"
          },
          "summary": {
            "format": "text",
            "label": "Summary"
          }
        }
      },
      "title": "Detailed",
      "transformation": {
        "fields": [
          "name",
          "headline",
          "location",
          "summary",
          "profileUrl",
          "profilePicture",
          "currentTitle",
          "currentCompany",
          "currentSchool",
          "followersCount",
          "connectionsCount",
          "connectionsText",
          "certifications",
          "recommendations",
          "languages",
          "publications",
          "skills",
          "inputUrl",
          "order",
          "scrapedAt"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "connectionsText": {
            "format": "text",
            "label": "Connections"
          },
          "followersCount": {
            "format": "number",
            "label": "Followers"
          },
          "headline": {
            "format": "text",
            "label": "Headline"
          },
          "location": {
            "format": "text",
            "label": "Location"
          },
          "name": {
            "format": "text",
            "label": "Name"
          },
          "profileUrl": {
            "format": "link",
            "label": "Profile URL"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          }
        }
      },
      "title": "Overview",
      "transformation": {
        "fields": [
          "name",
          "headline",
          "location",
          "profileUrl",
          "followersCount",
          "connectionsText",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

LinkedIn Profile, Certifications & Company Data Extractor

Give this actor a list of public LinkedIn profile URLs (or just usernames) and it returns one structured record per person: identity, About text, current company and school, the public connection indicator, work and education links, every self-authored section LinkedIn shows to logged-out visitors, and firmographics for the person's current employer. No LinkedIn account, cookie, session token, or proxy setup is required.

What it does

  • Reads the public guest view of each profile, plus the richer server-rendered view LinkedIn sends to link-preview crawlers when available
  • Extracts certifications with credential IDs and verification links, honors and awards, test scores, organization memberships, volunteer work, projects, publications, patents, courses, instructor courses, language skills, services, recommendations received, public skill tokens, badges, and listed websites
  • Reads the top-card layer for the current company link, current school, followers, and the public connections figure
  • Optionally reads the current employer's own public LinkedIn page for company size, industry, headquarters, address, founded year, follower count, website, logo, description, slogan, organization type, and specialties
  • Never invents data: a field LinkedIn withholds or masks is omitted from that record, and a profile that belongs to a different member is discarded rather than pushed
  • Omits empty values recursively — no null, empty string, or empty list reaches the dataset

Output per profile

  • name, headline, location, summary
  • headlineRedacted — true when LinkedIn replaced a withheld headline with the current company in its public preview line (the replacement itself is not pushed as a headline)
  • profileUrl, profilePicture
  • currentTitle — current role title when LinkedIn exposes it publicly for this profile
  • allTitles[] — titles published in the profile's structured data (masked entries removed)
  • currentCompany — current employer with name, url, slug, companyId when the company link is numeric. With enrichCompany on it also carries employeeCount, size, industry, website, headquarters, address, foundedYear, followersCount, description, slogan, organizationType, logoUrl, and specialties[]
  • currentSchool — school shown on the profile top card (name, url)
  • currentPositions[], pastPositions[] — company, companyUrl, startDate, endDate, location, description; when LinkedIn renders the full Experience list, entries also carry title, dateRange, and duration
  • experiences[] — currentPositions and pastPositions combined
  • education[] and educations[] — the same list under both keys (school, schoolUrl, startDate, endDate, plus degree, fieldOfStudy, gpa, dateRange when LinkedIn's richer public view includes them)
  • followersCount, connectionsCount (exact number when public), connectionsText (for example "500+" when only the capped indicator is public)
  • recentArticles[] — recent posts or articles with title, url, publishedDate, text, and likes
  • certifications[] — name, issuer, issuerUrl, issueDate, credentialId, credentialUrl
  • recommendations[] — recommender, recommenderUrl, text
  • languages[] — language, proficiency
  • services[] — name, url
  • publications[] — title, url, publisher, date, description
  • patents[] — title, url, filedDate, number, description
  • courses[] — title, number
  • instructorCourses[] — title, url, duration
  • honorsAndAwards[] — title, issuer, date, description
  • testScores[] — name, score, date
  • organizations[] — name, position, description
  • volunteerExperience[] — role, organization, description
  • projects[] — title, dateRange, description
  • skills[] — public skill names when the profile exposes them
  • badges[], isTopVoice, isCreator — public profile badges
  • websites[] — label, url for personal or portfolio links
  • inputUrl — the value you supplied for this row
  • order — zero-based position in your input list
  • scrapedAt — ISO 8601 timestamp of extraction

When LinkedIn serves only a sign-up preview for a profile, the row is built from the available preview metadata and contains the identity-level fields only.

Status rows

A run can add one status row (disable with includeStatusRows: false):

  • No profiles readable: _status: "no_data", _reason, _message, _help, scrapedAt
  • Some profiles readable: _status: "partial_results", _reason, _failureBreakdown, _message, scrapedAt, alongside the successful rows

Failure reasons: auth_wall (profile hides itself from guests), not_found (confirmed 404), blocked (all access paths failed without a 404), identity_mismatch (LinkedIn resolved the URL to a different member), invalid_url, and error. Filter on _status if you want only profile rows.

Input

Field Type Default Description
profileUrls array – Required. Public LinkedIn profile URLs or bare usernames. Accepts full URLs, linkedin.com/in/name, in/name, regional subdomains, and URLs with query parameters.
enrichCompany boolean true Also read the current employer's public company page for firmographics. One fetch per unique company per run.
includeStatusRows boolean true Add one structured status row when a run yields no profiles or only some of the requested profiles.

Example: several profiles

{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates",
    "satyanadella",
    "in/reidhoffman"
  ]
}

Example: profile only, no employer enrichment

{
  "profileUrls": ["https://www.linkedin.com/in/charlywargnier"],
  "enrichCompany": false
}

Example: records only, no status rows

{
  "profileUrls": ["https://www.linkedin.com/in/abdulmananraja"],
  "includeStatusRows": false
}

Use cases

  • Recruiting and candidate research — review public certifications, education, languages, and project history before an outreach
  • Sales and CRM enrichment — append current role, employer, and company firmographics to a list of profile URLs
  • Credential and award research — collect public certifications, honors, publications, and patents across a population
  • Talent-market analysis — study the distribution of public skills, languages, and employers in a cohort
  • Profile monitoring — refresh a saved URL list and compare current employer, school, and public sections over time

How access works

The actor selects the cheapest working public access path automatically: a direct browser-style request, then LinkedIn's public link-preview view, then an anti-bot proxy only if both free paths are blocked. For company pages it also tries a regional host and a public translation mirror before the proxy. You never configure a proxy, and you never supply a cookie, login, or API key.

Honest limits

  • LinkedIn withholds the real headline, per-role titles, and degree/field for most logged-out profiles. The actor pushes them only when the public page actually renders them; otherwise the field is absent.
  • The exact connection count is usually hidden. The public 500+ form is returned as connectionsText; connectionsCount appears only when an exact number is public.
  • Public skills are rare in the guest view, so skills is often absent.
  • Email addresses and phone numbers are not public. The actor never guesses or fabricates them.
  • A profile whose owner hides it from logged-out visitors returns a status row, not data.
  • Search by name and company-page listing are separate actors in this suite; this actor starts from profile URLs or usernames.

FAQ

Do I need a LinkedIn account or cookies? No. The actor never asks for LinkedIn credentials, session cookies, or tokens.

Does this work for ordinary profiles or only famous ones? It is built for everyday professional profiles. LinkedIn's public link-preview view serves the same server-rendered sections for ordinary accounts; the actor reads that view, not a cached snapshot.

Why are some fields missing on a particular profile? LinkedIn either hides that field from logged-out visitors or the profile owner never filled it in. The record omits it instead of returning a placeholder.

Can I get an email address or phone number? No. Those are not part of the public guest view, and this actor does not use third-party contact databases.

Does it support non-US profiles? Yes. Regional LinkedIn profile URLs are normalized to the canonical profile, and the public sections are read in the locale LinkedIn serves.

Is the data live? Yes. Every record is read from the live public page at run time.

Is this affiliated with LinkedIn? No. It reads publicly available pages and is not affiliated with or endorsed by LinkedIn.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build 0lmeugxvN8unWYVXn. Documentation is regenerated from the default published build; private drafts are not included.