All open jobs of the companies you list, from LinkedIn's public job pages, no login. Title, location, posted date, seniority, employment type, function, salary, applicants and full description, plus company firmographics. Filter by keyword, location, date, seniority; monitor new jobs.
Open LinkedIn jobs of the companies you list, from LinkedIn's public (guest) job pages — no login, no cookies. LinkedIn's public search stops at about 1,000 jobs per company and search; every row carries LinkedIn's own job count, so the gap is visible.
Companies by LinkedIn company URL (country subdomains too), slug, numeric company ID or name. A name becomes LinkedIn's usual slug and must match the company name on that page; otherwise the run says so and asks for the URL instead of returning a namesake's jobs. When a word taken as a slug lands on a page with no jobs, the run names that page and its size (for example /company/notion/ is a 39-person "Notion"; Notion Labs is /company/notionhq/).
A company given only by its numeric ID still gets its firmographics: the slug is read from its job cards and the company page is checked to carry the same ID.
Empty location means worldwide. LinkedIn itself searches the United States only when no location is sent (measured: Stripe 625 US vs 942 worldwide), so the Actor always asks for "Worldwide".
Keywords, location and "posted within" (24 hours, week, month) are applied by LinkedIn. Seniority and job type are applied by the Actor to the values each job page states, because LinkedIn's own seniority, job-type and workplace filters have no effect on its public pages (measured on company and keyword searches). Because LinkedIn cannot filter, the Actor reads the page of every listed job to test it: each page read is charged as a job detail, matched or not, and delivered jobs as jobs. A rare filter cannot run up a bill — the Actor reads at most 20 listed jobs per requested job (at least 50) and says so when this stops it. Many employers state no seniority on LinkedIn at all (measured: Vercel, Microsoft, HubSpot, Snowflake, OpenAI — 100 % "Not Applicable"); when the first 20 pages read all say so, the seniority filter stops for that company after those 20 pages and the run explains why. There is no workplace (on-site / remote / hybrid) filter or column: LinkedIn's public pages do not state it reliably.
Per job: title, location, posted date, seniority, employment type, job function, industries, applicant count (with "over" / "among the first" bounds), listing badge, description as readable text (line breaks and bullets kept) and as HTML, job URL. No job-poster field: LinkedIn shows the hiring team to signed-in members only.
Salary from LinkedIn's pay box, or — where the employer states pay only in the description — from the description, under strict rules: a pay word or a pay period in the same sentence, a currency, plausible bounds; bonus, stipend, funding and revenue amounts are not pay. Lines under a "Pay Range" heading or a lead-in ending in a colon ("The reasonably estimated yearly salary for this role at Datadog is:") count, and "Minimum / Maximum hourly" lines form one range. A range in another country's currency than the job's (a London job quoting its Amsterdam range) is left out; the job's country is read from the last part of LinkedIn's location, so "Sydney, New South Wales, Australia" is Australian and "Dublin, CA" American. salarySource says where the figure came from, salaryRaw quotes it. Cents are kept for hourly pay. One stated amount is the exact pay (salaryMin = salaryMax); "up to $X" fills only salaryMax, "starting at $X" only salaryMin.
Company data on every row: name, LinkedIn ID and URL, website, domain (the registrable domain: news.microsoft.com → microsoft.com; hosting-platform sites keep their full host; a social profile is not a domain), industry, employee count, followers, headquarters, founding year when the page states one.
When the website LinkedIn lists is a campaign link or does not look like the company's (Figma lists figma.bot/Config2026Recap), its redirect is followed once and the landing domain is used if it matches the company (figma.com); a careers site that lands on an applicant-tracking system keeps the company's own domain.
LinkedIn's own open-job count for each company and search (linkedinJobCount), with linkedinJobCountIsLowerBound when LinkedIn shows "2,000+".
The same company listed twice in one run (URL and name, or name and ID) is scraped and charged once, under the first input that names it; the other input's report says which one.
Monitoring mode: only jobs a named monitor has not returned before. Jobs left out by the seniority / job-type filter are remembered too, so a monitor does not read them again.
Three companies at a time; each company's jobs are read ten at a time while the next result page loads. Requests use HTTP/1.1 (HTTP/2 through the proxy failed on some fresh sessions).
Every company writes its outcome to the SOURCE_REPORT record (with LinkedIn's count and request counters); companies that fail or return nothing leave an explanatory, unbilled row.
Standby-ready: the same code answers GET /jobs when started in Standby mode.
Private test build 0.1.1 passed seniority, job-type and workplace choices to LinkedIn, which ignores them, and labelled every job with the chosen workplace type; replaced in 0.1.2 by the Actor-side filters above.