MindCase
Kritish Puri

Automate a LinkedIn Job Alert Bot for Hiring Signals

Poll LinkedIn Jobs daily, diff against what you've already seen, and only get notified about postings that are actually new.

linkedinautomate
Automate a LinkedIn job alert bot for hiring signals

A one-time pull of LinkedIn job postings tells you who's hiring right now. It doesn't tell you when a target account opens a new role tomorrow. For that you need a bot, not a report — something that checks on a schedule and only bothers you when there's something new to see.

This is different from pulling job data once for a list of companies, which an earlier post already covers. That's a snapshot. This is the alert layer on top of it.

What actually triggers an alert?

A LinkedIn job posting isn't announced anywhere outside LinkedIn itself — there's no webhook, no push notification you can subscribe to. The only way to know a posting is new is to have already seen everything that existed before it.

That means an alert bot is really two pieces: a poll that runs on a schedule, and a diff that compares this run's results against every job ID you've already alerted on.

How do you set up the recurring poll?

LinkedIn Jobs takes jobTitles (required), locations, company (an array, up to 10 companies per run), and a postedLimit filter with real options of 1h, 24h, week, or month. Set postedLimit to 24h and sortBy to date, and run it once a day — each run only returns postings from the last 24 hours, so you're not re-fetching the same 200 jobs every time just to find the two new ones.

curl -X POST "https://api.mindcase.co/v1/data/linkedin/jobs/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "params": {
    "jobTitles": "senior software engineer",
    "company": ["Stripe", "Notion", "Linear"],
    "postedLimit": "24h",
    "sortBy": "date",
    "maxResults": 50
  }
}'

# $0.001 per job returned

Wire that call to whatever scheduler you already use — a cron job, a GitHub Action, an n8n or Zapier trigger. Mindcase doesn't run the schedule for you; it just answers the question each time you ask it.

How do you avoid alerting on the same job twice?

postedLimit: "24h" narrows the window, but it doesn't guarantee zero overlap — a job posted at 11pm might show up in two consecutive daily runs depending on exactly when each one fires. The fix is a dedupe step on your side, not LinkedIn's.

Every row returned includes a real jobId field. Keep a running list of every jobId you've already alerted on — a text file, a database table, a Redis set, whatever fits your stack — and only send a notification for IDs that aren't in it yet. After alerting, add the new IDs to the list. That's the entire mechanism: no job reaches you twice, and nothing requires LinkedIn to tell you anything it doesn't already return.

How do you cut down on low-signal alerts?

A bare title search on something like "engineer" returns a wide net — every seniority level, every workplace type, every posting whether it's been live an hour or gone stale with 200 applicants. jobTitles and postedLimit narrow the when; a few other real filters narrow the quality.

experienceLevel (entry, mid-senior, director, executive, and others) filters to the seniority band you actually care about, and under10Applicants — a real boolean field — flags postings that haven't already been flooded, which is closer to "a hiring manager will actually see your response" than raw posting age is. Stack those with company and postedLimit in the same call, and the alert you get is already close to a shortlist instead of a firehose you filter by hand afterward.

What can't you get from Mindcase?

Two cases.

A true push notification. There's no webhook or subscription — you are always the one polling. The closest you get to "real-time" is polling often enough that the delay between a posting going live and your next run feels real-time to you.

A guarantee that postedLimit is exact to the minute. It's LinkedIn's own stated posting-age filter, not a Mindcase-side timestamp comparison — treat it as "recent," and let your own jobId dedupe be the thing that actually decides whether an alert fires, not the filter alone.

Which endpoint should you use for which job?

EndpointInputPriceBest for
LinkedIn JobsJob title + filters (company, location, postedLimit)$0.001 / jobRecurring alert bot on new postings
Naukri JobsKeyword + filtersReal-time, India-specific hiring signalsSame pattern, India job market
Indeed JobsKeyword + locationGlobal job board coverageSame pattern, broader board coverage

FAQ

No. LinkedIn Jobs runs against public job postings — no login, no session, no LinkedIn account required.

The company filter accepts up to 10 per run. For more, split your company list across multiple calls with the same postedLimit and sortBy settings, and merge the dedupe list across all of them.

You'll still catch anything posted within the last 24 hours of whenever you next run it, since postedLimit is relative to the call time, not a fixed clock. Anything posted more than 24 hours before your next run won't show up in that window, but the jobId dedupe means nothing you do catch gets alerted twice.

A batch pull answers who's hiring right now, once. This bot answers who just started hiring, continuously — same endpoint, different cadence and a dedupe step on top.