Back to blog
· 5 min read

Extract Job Title & Company from a LinkedIn Profile URL

linkedinlead generationdata extractionweb scrapingpython

The short answer

You have a list of LinkedIn profile URLs and you want two columns next to them: job title and company. Here is what you can actually get, and under which conditions:

FieldFrom the URL alone (no login)With your LinkedIn session
Current companyYesYes
Name, location, profile pictureYesYes
HeadlineOnly when the member wrote oneYes
Job titleNoYes
Dated work history, education, skillsNoYes

The company comes back for every profile without any account involved. The job title does not: LinkedIn does not put the job title of an ordinary profile on its public page, so no scraper can read it there. To get it, you run the extraction with your own LinkedIn session.

Why the headline is not the job title

Most “job title” columns you’ll find in scraped datasets are actually the headline, the free-text line under a member’s name. Sometimes it is a title (“Head of Data at Acme”). Often it isn’t (“Helping SaaS founders scale | Ex-Google | Speaker”). And when a member never wrote one, LinkedIn displays the employer’s name in its place, which is not a headline either.

If your use case is routing leads by seniority or filtering by role, treat the headline as a hint and the job title as the field you match on. Mixing the two is how a CRM ends up with “Ex-Google” in the title column.

Doing it in bulk

Our LinkedIn Profiles & Companies scraper takes profile URLs directly. Turn URL mode on and pass up to 500 URLs per run:

{
  "action": "get-profiles",
  "keywords": [
    "https://www.linkedin.com/in/first-profile/",
    "https://www.linkedin.com/in/second-profile/"
  ],
  "isUrl": true,
  "limit": 1,
  "fetchDetails": true
}

That run returns, for each profile, the full name, profile URL, location, currentCompany and currentCompanyUrl, plus the headline when one exists. To add job titles and dated work history, fill in two more fields: cookies (your LinkedIn session, exported from a browser where you are signed in) and userAgent (the browser those cookies came from).

The same run from Python

If the URLs live in a spreadsheet or a database, call the Actor through the Apify API with the official apify-client package:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

profile_urls = [
    "https://www.linkedin.com/in/first-profile/",
    "https://www.linkedin.com/in/second-profile/",
]

run = client.actor("silentflow/linkedin-profiles-companies-scraper-ppr").call(
    run_input={
        "action": "get-profiles",
        "keywords": profile_urls,
        "isUrl": True,
        "limit": 1,
        "fetchDetails": True,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("profileUrl"), item.get("currentCompany"), item.get("headline"))

From there, join the results back onto your list by profile URL and push them wherever the list lives: CRM, sheet or warehouse. If this is part of a recurring feed rather than a one-off clean-up, the same rules apply as for any automated lead generation pipeline: schedule it, deduplicate on the profile URL, and keep the extraction date on every row.

What it costs

Pay-per-result at about $0.0037 per profile, no subscription: 1,000 profile URLs come to roughly $3.70. You can start with Apify’s free credit and test on ten URLs before running the full list.

Other ways to get the same columns

  • By hand. Fine for twenty profiles, painful past a hundred, and you’ll still be reading headlines, not titles.
  • Sales Navigator exports. Titles are visible to a paid seat; our Sales Navigator scraper turns lead searches into structured lists if you already pay for one.
  • Enrichment APIs. B2B data providers sell title and company lookups by email or domain. Coverage is good for large companies and patchy for everyone else, and the data is only as fresh as their last crawl.

For the wider picture of what the profiles scraper returns, including company pages and keyword search, see our LinkedIn profiles guide.

  • This is personal data. A name next to a job title and an employer is personal data under GDPR. Have a legitimate interest you can explain, collect only the columns you use, and honor objections.
  • Your session, your responsibility. Running with your own cookies means the requests are made as your LinkedIn account. LinkedIn’s terms restrict automated access, so keep volumes reasonable and use an account you are prepared to have challenged.
  • Enrich, don’t republish. Using titles to route and qualify your own leads is a normal sales workflow. Publishing scraped profiles is not.

Launch your scraping project

Need to automate data collection? Tell us what you need, we'll get back to you within 24 hours.

Send message