LinkedIn Company Jobs Monitor — New, Changed & Closed Roles avatar

LinkedIn Company Jobs Monitor — New, Changed & Closed Roles

Pricing

from $7.00 / 1,000 company monitoreds

Go to Apify Store
LinkedIn Company Jobs Monitor — New, Changed & Closed Roles

LinkedIn Company Jobs Monitor — New, Changed & Closed Roles

Monitor public LinkedIn company job pages and turn them into a reliable change feed: new openings, edits, reopenings, and safely confirmed closures. No LinkedIn login or cookies required. Optionally add official apply URLs, live status, verification confidence, and ghost-job risk.

Pricing

from $7.00 / 1,000 company monitoreds

Rating

0.0

(0)

Developer

Kamer Ozkan

Kamer Ozkan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Monitor public LinkedIn company job pages and turn them into a reliable change feed: new openings, edits, reopenings, and safely confirmed closures. Optionally add the official application URL, current job status, verification confidence, and ghost-job risk to the same row.

No LinkedIn login or cookies are required from the user. Apify Proxy is enabled by default to isolate company sessions and improve reliability.

What you get

  • new — first time a job is seen
  • changed — title, location, company, URL, or posting date changed
  • reopened — a previously closed job reappeared
  • closed — absent from the configured number of complete scans
  • current — unchanged open job when full-snapshot mode is enabled
  • official apply URL and ATS provider when verification is enabled
  • low, review, high, or unknown ghost-job risk
  • signed HTTPS webhook delivery for Slack relays, Make, Zapier, n8n, CRMs, and data pipelines

Unlike snapshot scrapers, repeated runs only return changes. State is preserved per watchlist so the dataset is ready for alerts, recruiting intelligence, sales triggers, and hiring-market research.

Set emitCurrentSnapshot: true when a full open-jobs snapshot is more useful than a changes-only feed.

Quick start

{
"companies": [
"https://www.linkedin.com/company/tiny-spec-inc/"
],
"stateNamespace": "auto",
"closureConfirmationScans": 2,
"verifyApplyLinks": true,
"verificationMaxTotalChargeUsd": 2
}

Accepted company inputs:

  • https://www.linkedin.com/company/tiny-spec-inc/
  • LinkedIn company jobs/search URLs containing f_C
  • numeric LinkedIn company IDs such as 30920

Use the company's current canonical LinkedIn URL. If LinkedIn silently redirects an obsolete slug to an unrelated company, the Actor rejects it instead of returning a valid-looking dataset for the wrong organization.

Saved Tasks using stateNamespace: "auto" are isolated automatically. API callers should set one stable, unique namespace per independent watchlist. Each run accepts up to 100 companies. Split larger portfolios across Tasks with different namespaces so every shard has an independent state and reliability score. Companies with 1,000 or more open LinkedIn jobs are not supported by this version; the Actor fails clearly instead of returning a misleading partial inventory.

One dataset, including verification

Official apply-link verification no longer creates a disconnected final result. The verification Actor runs as an enrichment step and the selected fields are merged into this Actor's default dataset:

{
"eventType": "new",
"detectedAt": "2026-07-26T10:00:00.000Z",
"companyId": "30920",
"companyName": "Slack",
"companyUrl": "https://www.linkedin.com/company/tiny-spec-inc/",
"jobId": "4440979323",
"title": "Circular Center Program Manager",
"jobTitle": "Circular Center Program Manager",
"location": "United States",
"jobUrl": "https://www.linkedin.com/jobs/view/4440979323",
"postedAt": "2026-07-25",
"firstSeenAt": "2026-07-26T10:00:00.000Z",
"lastSeenAt": "2026-07-26T10:00:00.000Z",
"changedFields": [],
"source": "linkedin_public_jobs",
"verificationStatus": "completed",
"officialApplyUrl": "https://jobs.example.com/apply/123",
"applyMethod": "OFFSITE",
"jobStatus": "ACTIVE",
"safeToPublish": true,
"reviewRequired": false,
"verificationConfidence": 0.98,
"sourceProvider": "greenhouse",
"companyWebsite": "https://example.com/",
"verifiedAt": "2026-07-26T10:01:00.000Z",
"verificationEvidence": ["official_inventory_match"],
"ghostJobRisk": "low"
}

Closed rows use verificationStatus: "not_applicable". If verification is disabled, rows use not_requested; failures and cost-limit skips are also explicit. When verification is enabled, at least 95% of submitted jobs must receive a result by default. Otherwise the run fails without committing state, webhooks, or company-scan billing, allowing a safe retry of the same events.

Verification is performed by kamerozkan/linkedin-job-apply-link-verifier, which currently charges $0.004 per completed job decision. maxJobsToVerify and verificationMaxTotalChargeUsd are hard cost guards; verification is off by default.

Pricing

  • Company monitored: $0.01 per company scan
  • Dataset output: $0.00001 per event row
  • Actor start: $0.00005
  • Optional verification child Actor: $0.004 per completed job decision

Platform usage for this monitoring Actor is included in its event pricing.

Daily monitoring

For production:

  1. Configure the companies and save the input as an Apify Task.
  2. Schedule the Task hourly or daily.
  3. Leave stateNamespace on auto to isolate each saved Task, or set a stable custom value.
  4. Use a unique namespace when testing so production history is not changed.

Daily is the best default. Hourly runs suit fast sales or recruiting alerts. Runs sharing the same state store and namespace are protected by a renewable, crash-safe lease. If schedules overlap, the later run waits briefly for the first; if the lease stays busy, it exits before scanning, company charging, emitting events, or touching state. A hard crash releases the lease automatically within 90 seconds.

Webhook delivery

Set webhookUrl to an HTTPS endpoint. Every non-empty run sends enriched events in batches. Add webhookSecret to receive an HMAC-SHA256 signature:

x-hiring-signals-signature: sha256=<hex digest of the exact request body>

The webhook retries each batch three times. A failed batch remains in a durable outbox inside the watchlist state store and is replayed with the same delivery ID, body, and signature on the next run. Delivery status and pending batch counts are included in the OUTPUT summary. A webhook failure never deletes dataset output or silently drops an alert.

Closure safety and pagination

LinkedIn's public guest endpoint can return variable page sizes. This Actor:

  • reads the public search page's reported total as a coverage target
  • forces LinkedIn's Worldwide scope instead of inheriting the crawler IP's country
  • captures the larger first-page result set before requesting fragments
  • keeps a stable cookie jar and proxy session for each company
  • advances by the page size actually returned
  • bypasses stale edge-cache fragments so pagination offsets are honored
  • confirms an empty terminal page twice
  • retries repeated or no-progress pages
  • retries transient company failures up to eight times with a fresh network session
  • uses all eight attempts when necessary to seek a closure-safe inventory
  • fails fast on permanent invalid/removed company URLs instead of wasting retry sessions
  • rejects canonical slug mismatches instead of silently scanning a different company
  • unions complementary retry inventories so transient page shifts do not create gaps
  • treats challenge pages and unverified empty HTML as incomplete, never as zero jobs
  • marks capped or unstable scans as incomplete
  • never closes a missing job after an incomplete scan
  • does not charge the primary company-scan event for incomplete scans
  • charges completed company scans only after dataset, outbox, and watchlist state commit
  • requires two complete missing scans by default before emitting closed
  • fails the run quality gate below 95% usable company coverage while preserving partial output
  • enforces a 95% fully closure-safe gate by default with strictClosureQualityGate

This favors false-negative closures over false positives.

The run-level success rate accepts a terminal snapshot only when it is complete or has at least 98% of LinkedIn's reported inventory. A 98–99.99% snapshot is useful for additions and analytics but remains complete: false, so it can never advance missing-job counters or emit closures. closureSafeRate reports the stricter fully-complete rate separately.

Privacy-minimized output

The output schema excludes recruiter names, personal profile links, emails, phone numbers, applicant identities, and raw job descriptions. It processes company job listings and job lifecycle facts.

This is privacy-minimized by design, not a blanket legal guarantee. Users remain responsible for applicable law, contractual terms, and how they use the output.

Run summary

The OUTPUT key-value-store record reports:

  • requested, successful, failed, complete, and incomplete company scans
  • completion rate, total scan attempts, fetched pages, and retry recoveries
  • jobs seen and events emitted by type
  • verification run and merged-result counts
  • webhook delivery counts and failures
  • durable webhook outbox pending/replayed counts
  • state-lease ownership
  • rolling 30-day scan and closure-safe SLOs; the window becomes mature after seven samples spanning at least six days
  • pay-per-event billing counters

Local development

npm install
npm run check
npx apify-cli validate-schema