VOOZH about

URL: https://apify.com/coregent/linkedin-jobs-hiring-signals-scraper

โ‡ฑ LinkedIn Jobs & Hiring Signals Scraper ยท Apify ยท Apify


๐Ÿ‘ LinkedIn Jobs & Hiring Signals Scraper avatar

LinkedIn Jobs & Hiring Signals Scraper

Pricing

from $1.80 / 1,000 job-results

Go to Apify Store

LinkedIn Jobs & Hiring Signals Scraper

Scrape LinkedIn job listings by keyword, location, or search URL and turn them into clean, CSV-ready hiring-signal data - no LinkedIn login or cookies required.

Pricing

from $1.80 / 1,000 job-results

Rating

0.0

(0)

Developer

๐Ÿ‘ Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Share

๐Ÿ‘ LinkedIn Jobs & Hiring Signals Scraper

Scrape LinkedIn job listings by keyword + location or by direct jobs search URL, and turn them into clean, flat, CSV-ready rows โ€” plus lightweight hiring-signal fields (company jobs in run, seniority, role category, remote flag, hiring-signal score + reason tags). Built for recruiters, sales teams, staffing agencies, and market researchers.

No LinkedIn login, no cookies, no session IDs. The actor uses LinkedIn's public guest jobs surface over HTTP, so it stays fast and cost-predictable. You pay one flat event per unique job row that passes your filters.

โœจ Why this scraper

  • Jobs-first, hiring-intelligence focused โ€” not a generic profile scraper. Every row carries derived signals that make the data useful for sales, recruiting, and market research.
  • Two input modes โ€” keyword + location, or paste LinkedIn jobs search URLs directly (filters preserved).
  • 30 flat fields โ€” job identity, company, role metadata, posting details, and hiring signals. No nested objects, drops straight into Sheets/Excel/CRMs.
  • Pay-Per-Event โ€” one flat job-result event per saved unique job. Duplicates and filtered rows are never charged.
  • No login / cookies / sessions โ€” just keywords or URLs.
  • Transparent hiring-signal score โ€” rule-based (no AI), explained below.

๐Ÿš€ Quick start โ€” sample inputs

Example 1 โ€” keyword + location

{
"searchQueries":["data engineer","analytics engineer"],
"locations":["Australia","Singapore"],
"maxResults":100,
"sortBy":"recent",
"datePosted":"pastWeek",
"workplaceTypes":["remote","hybrid"],
"employmentTypes":["full_time","contract"],
"includeDescription":true,
"includeCompanySignals":true,
"companyExcludeKeywords":["recruitment agency"],
"titleExcludeKeywords":["intern"],
"saveOnlyUniqueItems":true,
"proxyConfiguration":{"useApifyProxy":true}
}

Example 2 โ€” direct LinkedIn jobs search URL + custom residential proxy via your own provider

{
"jobSearchUrls":[
"https://www.linkedin.com/jobs/search/?keywords=sales%20manager&location=United%20States&f_TPR=r604800"
],
"maxResults":250,
"includeDescription":true,
"includeCompanySignals":true,
"titleIncludeKeywords":["sales","account executive"],
"saveOnlyUniqueItems":true,
"proxyConfiguration":{
"useApifyProxy":false,
"proxyUrls":["http://user:pass@proxy.iproyal.com:12321"]
}
}

Provide at least one of searchQueries (with optional locations) or jobSearchUrls. If you provide both, the actor runs both and deduplicates across the whole run.

The actor blocks Apify Residential proxy; if you need residential routing, supply your own provider via proxyConfiguration.proxyUrls as shown. See ๐Ÿšฆ Proxy policy below.


๐Ÿ“ฆ Output

The dataset has one view: Jobs & hiring signals โ€” a 30-column flat table.

๐Ÿ‘ Jobs & hiring signals โ€” table view

Output fields (30)

search_query, search_location, source_url, job_id, job_url, job_title, company_name, company_linkedin_url, company_id, job_location, country_hint, workplace_type, employment_type, seniority_level, job_function, industries, posted_time_text, posted_at_estimate, applicants_count, salary_text, easy_apply, description_text, description_length, role_category, is_remote, company_jobs_in_run, hiring_signal_score, hiring_signal_label, reason_tags, scraped_at.

Sample record โ€” Jobs & hiring signals

{
"search_query":"data engineer",
"search_location":"Australia",
"source_url":"https://www.linkedin.com/jobs/search/?keywords=data+engineer&location=Australia&f_TPR=r604800&sortBy=DD",
"job_id":"3928475610",
"job_url":"https://www.linkedin.com/jobs/view/3928475610",
"job_title":"Senior Data Engineer",
"company_name":"Example Analytics Pty Ltd",
"company_linkedin_url":"https://www.linkedin.com/company/example-analytics",
"company_id":"example-analytics",
"job_location":"Sydney, New South Wales, Australia",
"country_hint":"Australia",
"workplace_type":"hybrid",
"employment_type":"full_time",
"seniority_level":"senior",
"job_function":"Engineering and Information Technology",
"industries":"Software Development",
"posted_time_text":"3 days ago",
"posted_at_estimate":"2026-05-21",
"applicants_count":43,
"salary_text":null,
"easy_apply":false,
"description_text":"Example Analytics is hiring a Senior Data Engineer to build and maintain data pipelines...",
"description_length":842,
"role_category":"engineering",
"is_remote":false,
"company_jobs_in_run":3,
"hiring_signal_score":90,
"hiring_signal_label":"strong",
"reason_tags":"multiple_open_roles,fresh_posting,full_time_role,senior_role,detailed_description,company_profile_available,low_applicant_count",
"scraped_at":"2026-05-24T06:00:00.000Z"
}

๐ŸŽฏ Hiring-signal score

Transparent rule-based score (0โ€“100) computed from extracted fields โ€” no AI, no external enrichment.

SignalPoints
Company has 3+ jobs in this run+25
Company has 2 jobs in this run+15
Posted within the last 7 days+15
Full-time role+10
Senior / director / executive seniority+10
Description length โ‰ฅ 500 chars+10
Company LinkedIn URL present+10
Applicants count present and under 100+10
Remote role+10

Score is capped at 100.

Labels: strong (80โ€“100) ยท good (60โ€“79) ยท moderate (40โ€“59) ยท weak (0โ€“39).

reason_tags is a comma-separated list explaining the score โ€” e.g. multiple_open_roles, fresh_posting, full_time_role, senior_role, detailed_description, company_profile_available, low_applicant_count, remote_role, plus target_company_match / target_title_match when your include filters matched.


๐Ÿ’ฐ Pricing

Pay-Per-Event. One flat event per saved row (final per-event price is configured on the Apify console):

EventCharged when
job-resultOnce per unique job row that passed all filters and was successfully written to the dataset.

So your bill is simply results_saved ร— price_per_event. The actor honors the user-configured per-run spending cap (Apify eventChargeLimitReached) and stops cleanly when reached.

Not charged:

  • Duplicates (deduplicated by job_id, canonical job_url, and title+company keys).
  • Rows filtered out by keyword / workplace / employment / date filters.
  • Rows missing a job_id or job_title.
  • Failed or blocked requests.

๐Ÿšฆ Proxy policy

Use Apify Datacenter proxy or no proxy for normal runs โ€” both work for LinkedIn's public guest jobs surface at this actor's conservative concurrency.

Apify Residential proxy is not supported. The actor will fail at startup if proxyConfiguration.apifyProxyGroups includes RESIDENTIAL. Reason: in pay-per-event actors, residential bandwidth (~/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's Custom proxy URLs field โ€” that traffic goes through your provider, not Apify, and is unaffected:

http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777

๐Ÿ“Š Run summary

After each run, a RUN_SUMMARY entry is written to the key-value store:

{
"inputs_total":4,
"successful_inputs":3,
"failed_inputs":1,
"raw_results_found":420,
"results_saved":100,
"duplicates_removed":37,
"filtered_out":19,
"charged_events":100,
"charge_failures":0,
"blocked_requests":2,
"retry_count":8,
"detail_pages_visited":84,
"runtime_seconds":312,
"scraped_at":"2026-05-24T06:00:00.000Z"
}

charged_events equals the number of successfully saved unique rows.


โš™๏ธ Filters

FilterStageEffect
datePostedSource-sideany / past24h / pastWeek / pastMonth. Enforced at LinkedIn where stable.
workplaceTypesSource + postremote / hybrid / onsite.
employmentTypesSource + postfull_time / part_time / contract / temporary / internship / volunteer / other.
titleIncludeKeywords / titleExcludeKeywordsPre-extractionCase-insensitive substring on job title. Exclusion wins.
companyIncludeKeywords / companyExcludeKeywordsPre-extractionCase-insensitive substring on company name. Exclusion wins.
saveOnlyUniqueItemsBoth stagesDrop duplicates across queries (recommended ON).

Filters are applied before any dataset push or event charge.


๐Ÿšง Limitations (V1)

  • Public guest data only: no login, cookies, or member-only content. Some fields (employment type, seniority, industries, applicants count, description) come from the job detail page and only populate when includeDescription (or an employment/workplace filter) triggers a detail visit.
  • easy_apply comes from the job detail page (true = applied on LinkedIn / Easy Apply, false = redirects to the company site). It stays null when detail pages are not visited (includeDescription: false and no employment/workplace filter) or for expired listings.
  • salary_text is kept as raw text (no min/max/currency split) and is only present when LinkedIn shows it.
  • No recruiter/contact extraction, email enrichment, company-website crawling, or AI scoring.
  • LinkedIn guest pagination tops out around ~1,000 results per search source; split broad searches into narrower queries for more coverage.
  • maxResults caps saved unique rows across the whole run (not per query).

โ“ FAQ

Do I need a LinkedIn account or cookies? No. The actor only uses LinkedIn's public guest jobs endpoints.

Why are some rows missing description / seniority / employment type? Those come from the job detail page. They populate when includeDescription: true (default) or when you set an employment/workplace filter. With includeDescription: false and no such filter, runs are faster but return card-only fields.

How is company_jobs_in_run computed? It counts how many saved jobs in this run belong to the same company โ€” a simple, cheap hiring-demand signal. It is computed across the run's saved set; no extra company-page requests are made.

Can I paste a LinkedIn jobs search URL? Yes โ€” put it in jobSearchUrls. Its existing filters are preserved and the actor paginates it for you.

Can I export to CSV? Yes โ€” every field is flat (no nested objects). Use Apify's CSV / Excel export, or call the dataset API with format=csv.

Will I get blocked? The actor uses conservative concurrency, realistic headers, session rotation, and retry/backoff. Default Apify Proxy is sufficient for typical small/medium runs. For large runs, split searches and/or supply your own proxy provider.


๐Ÿ› ๏ธ Technical notes

  • Stack: Node.js 22 ยท Apify SDK 3 ยท Crawlee CheerioCrawler ยท Cheerio + native fetch. No browser.
  • Endpoints: LinkedIn public guest seeMoreJobPostings (search) and jobPosting (detail).
  • Concurrency: min=1, max=5 (conservative; tune after real runs).
  • Memory: 1 GB min ยท 2 GB default ยท 4 GB max.
  • Proxy: Apify Proxy enabled by default; custom configs accepted; Apify Residential rejected at startup.

You might also like

LinkedIn Advanced Jobs + Recruiter Details Scraper

coregent/linkedin-advanced-jobs-recruiter-details-scraper

Scrape public LinkedIn job listings by keyword, location, or URL into clean, CSV-ready rows with hiring-signal fields and visible recruiter indicators - no login, cookies, or Apify residential proxy.

2

LinkedIn Hiring Posts Scraper ๐Ÿš€

apt_marble/linkedin-hiring-posts-scraper

Find companies actively hiring from public LinkedIn posts ๐Ÿš€ Extract recruiter names, hiring roles, companies, locations, post URLs, and fresh hiring intent data by keyword, industry, or location โ€” no LinkedIn login or cookies required.

LinkedIn Job Scraper

crawlworks/linkedin-jobs-scraper

Scrape job listings from LinkedIn.com including title, company, location, and posting details. Fast, reliable LinkedIn jobs data scraper for hiring, research, and analytics.

815

5.0

LinkedIn Jobs Scraper โ€” Jobs by Keyword & Location, No Login

nexgendata/linkedin-jobs-scraper

Scrape LinkedIn job listings without login or cookies. Search by keyword, location, job type. Extract title, company, salary, description, requirements. No authentication needed. Export to JSON, CSV, Excel.

LinkedIn Jobs Scraper โ€” Hiring Intelligence for Half the Price

herus13/linkedin-jobs-scraper

Scrape LinkedIn job listings with company enrichment. 30 data fields, no login required.

LinkedIn Jobs Scraper

dataharvest/linkedin-jobs-scraper

Scrape job listings from LinkedIn Jobs.

Linkedin Job Scraper

happitap/linkedin-job-scraper

Scrape publicly available LinkedIn job listings without login to identify companies actively hiring. Designed for sales, recruitment, and research teams who need hiring-intent signals without managing LinkedIn accounts or cookies.

Ashby Hiring Intelligence Scraper

coregent/ashby-hiring-intelligence-scraper

Scrape public Ashby job boards by board name or URL into clean, CSV-ready hiring-signal data - titles, locations, departments, compensation, descriptions, remote flags, and signal tags. No login or cookies required.

2

LinkedIn Jobs Scraper

pramodkonde17/linkedin-jobs-scraper

Scrape job listings from LinkedIn's public job search

56

LinkedIn Search Jobs Scraper

api-empire/linkedin-search-jobs-scraper

LinkedIn Search Jobs Scraper extracts job listings from any LinkedIn search query. Capture titles, companies, locations, descriptions, salaries, and posting dates. Ideal for market research, hiring, lead generation, and workflows needing structured LinkedIn job search data.