LinkedIn Jobs Monitor
Pricing
from $1.50 / 1,000 new jobs
LinkedIn Jobs Monitor
The LinkedIn Jobs Monitor watches job searches on a schedule and returns only postings that were not there before β capturing titles, companies, locations, posted dates, salaries, seniority and applicant counts, with no charge on days when nothing new appears.
Pricing
from $1.50 / 1,000 new jobs
Rating
0.0
(0)
Developer
FalconScrape
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
π LinkedIn Jobs Monitor
Watch LinkedIn job searches on a schedule and get back only the postings that weren't there last time.
Every other LinkedIn job scraper is one-shot: run it today, run it tomorrow, and tomorrow you get the same 900 jobs back plus a handful of new ones β and you pay for all 900 again. This monitor remembers every job it has already reported to you, forever, and hands you only the difference.
Point it at your searches, put it on a daily schedule, and you have a job feed instead of a job dump.
β¨ Features
- Only new jobs, ever. Each run is compared against everything the monitor has reported before, keyed on LinkedIn's own job ID. A job you've already seen is never delivered twice and never charged twice.
- Quiet days are free. No start fee, no per-check fee. If nothing new was posted, the run finds nothing, charges nothing, and finishes successfully β it doesn't fail and it doesn't wake you up.
- Memory that survives. The seen-list is stored permanently in your own account, so it works across weeks and months of scheduled runs, not just within one run.
- Multiple titles and locations in one monitor. Every keyword is watched against every location.
- Two levels of depth, so you pay for what you need:
- Listing β title, company, location, posted date, logo, links
- + Job detail β full description, posted salary parsed into min/max/currency/period, seniority, employment type, job function, industries, applicant count, apply type
- Worldwide by default. Leave the location empty and you watch everywhere, not just the country the server happens to sit in.
- Only filters that actually work. Posted-within window, keyword and location genuinely narrow the search. Workplace type, experience level, job type and salary band are deliberately not offered: LinkedIn accepts them on this endpoint and then ignores them, so exposing them would hand you unfiltered data that looks filtered.
- Nothing is silently dropped. If a run stops at your item limit, the jobs it didn't reach stay unreported and are picked up by the next run. Every run writes a
RUN_SUMMARYsaying what it found, what it already knew, and why it stopped. - No proxy needed. Runs clean without one; proxy support is there as a fallback for high volume, not a requirement.
π οΈ How It Works
- Enter the keywords and locations you want to watch.
- Pick a posted within window β how far back each run looks.
- Run it once. The first run has no history, so it reports everything it finds and becomes your baseline.
- Put it on a schedule (see below). Every run after that returns only what's new.
β° Setting up the schedule
In the Apify Console, open the actor β Schedules β Create new schedule, pick a frequency (daily is the usual choice) and attach this actor with your input. That's it β no other configuration is needed. The monitor picks up its own memory on every run.
Match the posted within window to how often you run it, with room to spare:
| Schedule | Suggested window |
|---|---|
| Hourly | Past 24 hours |
| Daily | Past 3 days |
| Weekly | Past week |
A wider window than your schedule strictly needs costs a few extra requests and finds nothing extra to charge you for β anything already reported is filtered out. A window that's too tight is the one that can miss jobs, if a run is ever delayed.
π Monitor ID
By default the memory is tied to the exact keywords, locations and window you entered β so editing any of them starts a fresh monitor, and the next run re-reports everything as new.
If you expect to tweak a query over time (add a job title, add a city), set a Monitor ID such as eu-engineering. Runs sharing an ID share one memory, so you can change the query without being sent your whole feed again.
π Getting notified when there's something new
Open the actor β Integrations and connect Slack, email, a webhook, Zapier or Make to the ACTOR.RUN.SUCCEEDED event.
One thing to set up correctly, because it is easy to get wrong: Apify only has run-state events β CREATED, SUCCEEDED, FAILED, ABORTED, TIMED_OUT, RESURRECTED. There is no "only if the dataset has rows" trigger. A run that finds nothing new succeeds with an empty dataset by design, so a plain "notify me on success" hook will ping you every single day whether or not there is anything to see β which is exactly the noise this actor exists to remove.
Filter on the run's own numbers instead. Every run writes a RUN_SUMMARY record to its key-value store:
{ "newJobs": 12, "jobsChecked": 240, "alreadyReportedBefore": 228, "remembered": 1043 }
- Webhook / Zapier / Make β read
newJobsfromRUN_SUMMARY(or the dataset item count) and drop the event when it's0. - Slack / email integration β send the dataset, and add a filter step for a non-empty result before the message goes out.
Set that up once and a quiet week is genuinely silent.
π Output Fields
Listing (every run)
| Field | Description |
|---|---|
jobId | LinkedIn job posting ID β the key the monitor remembers |
jobUrl | Canonical LinkedIn job URL |
title | Job title |
companyName | Hiring company name |
companyUrl | Company LinkedIn URL, normalised so it works as a join key |
companySlug | Company slug |
location | Job location |
postedDate | Posting date (YYYY-MM-DD) |
postedTimeAgo | Relative posting age, e.g. "10 hours ago" |
companyLogo | Company logo image |
sourceQuery | Which watched search this job came from |
scrapedAt | ISO 8601 timestamp of when the monitor first found the job |
Job detail
| Field | Description |
|---|---|
description | Full job description text |
salaryText | Posted salary range as displayed |
salaryMin / salaryMax | Parsed salary bounds |
salaryCurrency / salaryPeriod | Currency, and year / hour / month |
seniorityLevel | Entry level, Mid-Senior level, ... |
employmentType | Full-time, Part-time, Contract, ... |
jobFunction | Job function |
industries | Industries |
applicantCount | Applicant count as a number |
numApplicantsCaption | Applicant caption as displayed |
applyType | easyApply or offsite (external ATS) |
jobTitle / jobLocation | Title and location from the posting page |
criteria | Original name/value criteria list |
similarJobs | Similar jobs LinkedIn surfaces alongside this posting |
peopleAlsoViewed | Jobs that viewers of this posting also viewed |
Salary is only present where the employer posts it β common in the US, rare elsewhere. Fields with no data are null, never invented.
π Sample Output Data
{"jobId": "4448051837","jobUrl": "https://www.linkedin.com/jobs/view/4448051837","title": "Public Health Nurse I - Limited Service","companyName": "State of Vermont","companyUrl": "https://www.linkedin.com/company/state-of-vermont","companySlug": "state-of-vermont","location": "Newport, VT","postedDate": "2026-08-05","postedTimeAgo": "10 hours ago","companyLogo": "https://media.licdn.com/dms/image/v2/C4E0BAQEQo8ZcYGAzIQ/company-logo_100_100/0/1631332078814","sourceQuery": "f_TPR=r604800&keywords=registered nurse&location=Vermont","scrapedAt": "2026-08-06T05:32:01.291Z"}
With job detail depth, each new job also carries the description, parsed salary, seniority and applicant count:
{"jobId": "4419374453","title": "Associate, Scoring Service","companyName": "Pearson","location": "Montana, United States","postedDate": "2026-08-01","salaryText": "$19.50 - $33.99","salaryMin": 19.5,"salaryMax": 33.99,"salaryCurrency": "$","salaryPeriod": "hour","seniorityLevel": "Not Applicable","employmentType": "Full-time","jobFunction": "Other","industries": "Education Administration Programs and E-Learning Providers","applicantCount": 25,"applyType": "offsite"}
Each run also writes a RUN_SUMMARY to the key-value store:
{"newJobs": 12,"jobsChecked": 240,"alreadyReportedBefore": 228,"remembered": 1043,"truncated": false,"truncationReason": null,"searchRequests": 24}
π° Pricing
Pay only for jobs you haven't already been given:
| Event | Price (Free plan) | Price (Gold plan) |
|---|---|---|
| New job found | $0.004 | $0.0015 |
| New job with full details | $0.006 | $0.0025 |
There is no run fee and no monitoring fee. A scheduled run that finds nothing new costs nothing at all, so watching a quiet niche is free until it stops being quiet.
A daily monitor turning up 20 new jobs a day costs about $2.40/month on the Free plan and $0.90/month on Gold.
β FAQ
What happens on the very first run?
It has no history, so everything it finds is new and gets reported β that's your baseline. Keep maxItems low on the first run if you're watching a broad search and don't want the whole backlog.
I changed my keywords and got everything again. Why? By default the memory is tied to the exact query. Set a Monitor ID and reuse it, and you can edit the query freely without losing history.
Will it ever send me the same job twice? Only if a run is interrupted between delivering a job and saving its memory β the monitor deliberately errs toward a duplicate rather than silently dropping a job you paid to be told about.
Does zero results mean it's broken? No. Zero new jobs is the normal outcome on a quiet day and the run succeeds. A run only fails when LinkedIn actually refuses the search.
Do I need a LinkedIn account or cookies? No. Only publicly visible job data is collected.
I want the whole search, not just what's new. Use the LinkedIn Jobs Search Scraper, which goes past LinkedIn's 1,000-result cap in a single run. For all open roles at named companies, use the LinkedIn Company Jobs Scraper.
π More LinkedIn Actors
Same data source, different slice:
- LinkedIn Video Transcript Scraper β AI transcripts of the videos in LinkedIn posts, with author and engagement data.
- LinkedIn Job Details Scraper β full job postings with parsed salary, seniority and applicant counts.
- LinkedIn Jobs Search Scraper β job search results past LinkedInβs 1,000-result cap.
- LinkedIn Company Jobs Scraper β every open role at named companies.
- LinkedIn Company Scraper β company profiles β headcount, industry, specialties, open roles.
- LinkedIn Decision Maker Finder β decision-maker profiles at companies you target.