LinkedIn Jobs Scraper with Company Contacts avatar

LinkedIn Jobs Scraper with Company Contacts

Pricing

from $2.00 / 1,000 job scrapeds

Go to Apify Store
LinkedIn Jobs Scraper with Company Contacts

LinkedIn Jobs Scraper with Company Contacts

Scrape LinkedIn job postings without a login or cookies, then follow each hiring company to its own website and pull contact e-mail addresses, checked against live MX records. Also returns the person who posted the job when LinkedIn shows one.

Pricing

from $2.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Mehmet

Mehmet

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Categories

Share

Scrapes LinkedIn job postings and goes to the hiring company's own website to find verified contact details.

You give it a job title and a location. You get back the postings, and for each one the company's real website plus e-mail addresses pulled from that website and checked against live MX records.

No LinkedIn account, no cookies, no session token. It reads the same public pages LinkedIn serves to a logged-out visitor.


How this compares — checked, not claimed

I went through eight other LinkedIn job scrapers on this Store and read their full input and output schemas on 7 September 2026. I could not run them: my Apify plan does not permit running other people's public Actors, and the platform says so outright. So this is a comparison of what they say they return, not of results I benchmarked.

Two of the eight do deliver an e-mail address. worldunboxer takes the first e-mail in the job description; fantastic-jobs extracts a hiring-manager e-mail with AI. Both read only the posting text. I measured that source: 15% of postings contain an e-mail at all.

Four of the eight resolve the company's website. They hand you the URL.

What I have not found in any of them, and what this Actor does: take that website, crawl its contact pages, and return e-mail addresses checked against live MX records — the 92% step chained onto an 82% step, instead of stopping at the URL.

Where they were ahead: five of the eight return the person who posted the job. This Actor did not, until this check found the gap. It does now.

The numbers, measured

I ran this against live LinkedIn postings on 7 September 2026 before publishing. Sample: 40 postings for the job-data numbers, 24 postings for the company-website chain.

Rate
Postings returning title, company and full description100%
Postings that expose the company's LinkedIn page100%
Company's own website resolved from that page92%
E-mail address inside the job description itself15%
Website in the job description itself10%
Postings that name the person who posted them20%

That 92% is the number that matters, and it is why this Actor exists. The job description almost never contains a contact — only 15% do. The company's website almost always can be found, and a business website usually publishes an address.

For what happens after the website is resolved, my Website Contact Scraper measured 82% of responding business websites giving up an e-mail or phone number, on a sample of 100 real businesses. Chaining the two: expect a contact on roughly three out of four postings. I have not yet measured the full chain end to end on a large sample, and I will publish that number here when I have — I would rather show you the two measured links than a single number I guessed.

What you get per job

{
"jobId": "4400000001",
"url": "https://www.linkedin.com/jobs/view/4400000001/",
"title": "Product Marketing Manager",
"company": "Rentman",
"companyLinkedInUrl": "https://nl.linkedin.com/company/rentman",
"companyWebsite": "https://rentman.io",
"location": "Utrecht, Netherlands",
"postedText": "9 hours ago",
"applicants": 29,
"seniority": "Mid-Senior level",
"employmentType": "Full-time",
"jobFunction": "Marketing",
"industries": "Software Development",
"description": "…full posting text…",
"posterName": "Barbara Horváth",
"posterHeadline": "Recruitment Specialist at Tetra Pak",
"posterProfileUrl": "https://hu.linkedin.com/in/barbara-horvath-4361a089",
"contacts": [
{
"email": "work@rentman.io",
"source": "job-description",
"emailStatus": "deliverable_domain"
},
{
"email": "info@rentman.io",
"source": "company-website",
"foundOn": "https://rentman.io/contact",
"emailStatus": "deliverable_domain"
}
],
"scrapedAt": "2026-09-07T21:14:00.000Z"
}

posterName / posterHeadline / posterProfileUrl are the person LinkedIn shows as having posted the job. Present on about one posting in five — when it is there, it is usually the recruiter or the hiring manager, which is often a better lead than a generic company inbox.

Every contact says where it came from: job-description (in the posting text) or company-website (found by scanning the company's site, with the exact page in foundOn). You can filter on that.

contacts absent means contact lookup was off. contacts: [] means it was on and nothing was found. Those are different things and the output keeps them different.

About emailStatus

Apify's platform blocks outbound port 25, so no scraper here can do a real SMTP mailbox check — including the ones that imply they can. What this Actor does is a DNS MX lookup: deliverable_domain means the domain accepts mail, not that the individual mailbox exists. It is stated plainly rather than dressed up.

Verification is included in the base price. It is not sold as an add-on.

Filters — and something you should know about them

LinkedIn's public search endpoint accepts a pile of filter parameters. Most of them do nothing. I checked each one by reading the postings that came back, on 7 September 2026:

FilterLinkedIn applies it?Evidence
Posted within N daysyesunfiltered: 0 of 6 posted in the last day; filtered: 6 of 6
Companyyesasked for company 1035, got 6 of 6 Microsoft
Employment typenoasked for Contract, got six Full-time postings
Senioritynoidentical results to no filter
Remote / hybridno0 of 6 remote either way
Under 10 applicantsnoreturned postings with 74–200 applicants

So this Actor sends LinkedIn only the two that work, and applies the rest itself, on the real fields read from each posting. That means they actually work — and it means a filtered posting is downloaded before it is discarded. Discarded postings are never charged.

Max jobs counts postings delivered, not postings looked at. With a strict filter the run keeps paging until it has what you asked for, up to ten times that many postings examined; then it stops and tells you the filter was too strict rather than quietly returning less.

Available filters: posted within N days and company id (LinkedIn-side); employment type, seniority, remote/hybrid/on-site, max applicants, title must contain, title must not contain (applied here).

Settings

Three fields on the first screen: keywords, location, max jobs. Everything else is folded away and optional.

  • Find company contact details — off by default. Turning it on adds requests (the company page plus a few pages of the company website), so you opt in.
  • Only return jobs that have a contact — skips postings where nothing was found. You are not charged for skipped postings.
  • Advanced — paste LinkedIn search URLs straight from your browser, or use LinkedIn's own geoId for precise locations.

What it does not do

  • No profiles, no connections, no messages. Job postings and public company pages only.
  • No login, no cookies. If a page needs an account, this Actor does not go there.
  • Expired postings are skipped, not billed. LinkedIn returns HTTP 200 with an empty shell for dead postings; those produce no record and no charge.
  • It is not a browser. Plain HTTP, which is why it is cheap. If LinkedIn ever moves this data behind a browser check, this Actor will report fewer results rather than quietly switching to something more expensive.

Cost

Pay per event. You are charged for a job only when a record is actually delivered, and a second, smaller event when contact details were found for it. If pricing is ever misconfigured on my side, the run stops instead of handing you data for free — a failed run is easier to notice than a silently unbilled one.

Rate limiting

Requests are spaced deliberately. This Actor is not built to hammer LinkedIn, and running it with a huge maxJobs will be slow on purpose.


Built by garnet_puppet. If a field is missing or a company website resolves wrong, tell me which posting and I will fix it — the parsers are tested against real page structures and I would rather know.