- A run can no longer spend more time than it has. Nothing in this actor
knew what time it was:
fetchHtml booked its worst case up front (three
attempts at a 30-second request timeout, plus backoff, was ~95 seconds one
page could cost) under loops with no ceiling. A run killed by the platform
timeout loses its own status message and reads, from the Store, as an actor
that does not work. This is the defect already fixed in the sibling actors on
the same LinkedIn guest engine, which was vendored five ways.
- Every fetch now plans against the time that is actually left: the request
timeout is clamped to it, a backoff that would outlive the budget is not
slept, and a fetch the clock ended is reported as the clock, never as
LinkedIn refusing.
- The run's closing status names what it did not do, and a run the clock ended
no longer reports "nothing found" — that is a claim it has not earned.
First release. A LinkedIn jobs monitor built on the same public guest-API engine as LinkedIn Jobs Scraper, wrapped with persistence and delta detection:
- Save one or more searches (keyword + location + filters, or a pasted LinkedIn jobs search URL) and each run reports only the jobs not seen before.
- The first run per saved search is a baseline: it ships the current result set flagged
monitorStatus: "baseline" instead of reading as a false "everything is new" alert.
- Each saved search keeps its own independent memory, keyed by its own filters, so editing your search list never disturbs another search's history.
- A
run-summary row is pushed for every search on every run, including zero-new runs. A quiet day is a normal, successful outcome for a monitor, not a failure.
- Optional Slack / webhook digest of the new roles found, sent only when there is something genuinely new to report.
- Company + job data only. No personal profiles, no applicants, no login and no API key.