Implementation guide · Updated 2026-09-03
Build daily LinkedIn job alerts with n8n
Import one workflow, search a bounded set of public jobs, retain stable source identity, and route only newly delivered records to Slack, Telegram, or email.
What the workflow does
A schedule or manual trigger builds one strict LinkedIn search, selects Actor build latest through Apify’s bounded asynchronous run endpoint, validates six-root nomad-agent-job-v1 rows, removes repeated jobKey values inside the response, and sends each new job down exactly one configured channel.
Actor-side cross-run deduplication is always enabled for this alert. The stable opaque scope means later scheduled calls return only jobs not previously delivered in that scope. An empty response sends no notification.
1. Import without activating
- Create a new inactive workflow and import
linkedin-daily-job-alerts.json. - Read every node, especially Configuration, input validation, canonical-row validation, and the three delivery branches.
- Do not publish yet. The file contains placeholders and no credentials.
2. Add scoped credentials
Create one n8n Header Auth credential and assign it to all three Apify HTTP nodes:
Authorization: Bearer YOUR_APIFY_TOKENAdd only the destination credential for the chosen branch: Slack, Telegram, or SMTP. For email, configure a sender address already verified by your mail provider. Do not put tokens in workflow JSON, input fields, query strings, logs, or screenshots.
3. Configure the bounded search
- Choose
slack,telegram, oremailand replace the matching destination placeholder. - Set a stable opaque dedupe scope such as an internal workflow ID—not a person’s email or name.
- Choose one keyword, location, recency, and supported work arrangements.
- Keep
maxItemsat ten or lower for the first run and the charge cap at or below the template’s $1 upper guard; a smaller cap is better when testing. - Leave translation, AI enrichment, raw output, and analytics disabled.
advancedInputJson can add supported Actor fields, but final safeguards reapply the exact schema, cap, and dedupe configuration.
4. Prove one named destination
- Execute the workflow manually.
- Open the returned Apify run and verify terminal success, build
latest, input, charge, and dataset. - Inspect the normalized source record and its
jobKey. - Confirm the expected message appears in the exact Slack channel, Telegram chat, or mailbox.
- Run the same fixture again. Previously delivered job keys should not create repeat messages.
- Test an empty response and confirm the workflow sends nothing.
- Only then activate the daily schedule.
Compact alert versus tracker
This fast alert verifies the returned run’s immutable build and validates its canonical dataset, but it does not read or reconcile nomad-agent-run-summary-v4. Use the maintained n8n Google Sheets tracker when summary validation, one bounded partial retry, or full delivered-count reconciliation is required before delivery.
Troubleshooting
- Configuration error: replace destination, sender, and dedupe placeholders; keep the supported build and item/charge bounds.
- No alert: distinguish clean empty/deduplicated output from a failed run or wrong destination branch.
- Repeated alert: confirm the same opaque dedupe scope and that only one scheduled copy of the workflow is active.
- Wrong destination: confirm the selected
deliveryChanneland credential are on the matching branch. - Malformed rows: stop delivery and inspect Actor/build/source; do not relax the six-root validator.