Scrapers

LinkedIn jobs (guest)

High-volume LinkedIn jobs scraper via the unauthenticated jobs-guest endpoint. Sibling to the full LinkedIn jobs scraper, which authenticates and pulls hiring-manager metadata. This actor trades depth for breadth: title, company, location, posted_at per card, no detail page by default.

Updated today

Overview

At a glance
Worker
ultron-linkedin-jobs-guest
Runtime
Python + httpx, no browser
Endpoint
linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search
Cap
1000 jobs per query
Proxy
Residential US (mandatory)
Default delay
1500 ms, +50% jitter
Webhook target
scraper-webhook.51ultron.com/apify

Used when a workspace needs a wide net of job postings (e.g. "all senior backend roles in the EU posted last 7 days") and depth-per-posting is not critical. For account-targeted outreach where you need hiring manager + apply URL + full description, the authenticated sibling is the right tool; see /docs/ingest/jobs.

Input schema

.actor/INPUT_SCHEMA.jsonjson
1{
2 "queries": ["senior backend engineer", "site reliability"],
3 "location": "United States", // free text, optional
4 "geoId": "103644278", // numeric override, overrides location
5 "postedWithinDays": 7, // 1 to 90
6 "experienceLevels": ["mid_senior", "director"],
7 "maxItemsPerQuery": 100, // 1 to 1000
8 "fetchDetail": false, // 10x slower when true
9 "proxyConfiguration": {
10 "useApifyProxy": true,
11 "apifyProxyGroups": ["RESIDENTIAL"],
12 "apifyProxyCountry": "US"
13 },
14 "requestDelayMs": 1500
15}

Filters

Mapping our input to LinkedIn's query params.

Input fieldLinkedIn paramNotes
queries[]keywordsURL-encoded once per iteration.
locationlocationFree text. LinkedIn resolves it server-side.
geoIdgeoIdNumeric LinkedIn id, overrides location when set. 103644278 = United States.
postedWithinDaysf_TPR=r<seconds>1 to r86400, 7 to r604800, 30 to r2592000. Other values pick the nearest bucket and we post-filter client-side.
experienceLevels[]f_E=<lvl>internship=1, entry=2, associate=3, mid_senior=4, director=5, executive=6.
maxItemsPerQuery(client only)We page via start=N until the endpoint returns 0 cards or the cap is reached.

Crawl flow

src/__main__.pypy
1# Per query:
2# 1. Build the endpoint URL with keywords, location/geoId, f_TPR, f_E, start=0.
3# 2. Loop pages, incrementing start by 25 each iteration.
4# The endpoint returns 10 to 25 cards per page.
5# 3. Parse each card: jobId, title, company, location, applyUrl, postedAt.
6# 4. If fetchDetail: GET linkedin.com/jobs/view/<jobId>/ per card.
7# Parse descriptionHtml + seniorityLevel + employmentType + industries.
8# Adds a 10x latency multiplier.
9# 5. Push rows as kind="job".
10# 6. Sleep requestDelayMs + 50% jitter between every request.
11# 7. Abort the query when one page returns 0 cards or the cap is hit.

Output shape

dataset-row.jsonjson
1{
2 "kind": "job",
3 "source": "linkedin",
4 "jobId": "3984728479",
5 "title": "Senior Backend Engineer",
6 "company": "Linear",
7 "location": "Remote, USA",
8 "postedAt": "2026-05-17T00:00:00Z",
9 "applyUrl": "https://www.linkedin.com/jobs/view/3984728479/",
10
11 // Only populated when fetchDetail = true
12 "descriptionHtml": "<div>...</div>",
13 "seniorityLevel": "Mid-Senior level",
14 "employmentType": "Full-time",
15 "industries": ["Computer Software"],
16
17 "scrapedAt": "2026-05-19T12:00:00Z"
18}

Compared to the auth scraper

ConcernGuest (this actor)Auth (ultron-jobs)
ThroughputHigh (1000 jobs / query, no session limit)Low to medium (account rate-limited)
Detail per jobCard-level fields, optional detail pageFull job page, hiring manager metadata, apply method
Account riskNone (unauth)Session may be flagged with sustained use
Use whenWide net, low-fidelity job intentTargeted outreach, decision-maker capture
CostLowHigher (auth session + Playwright)

Webhook contract

actor.jsonjson
1{
2 "eventTypes": ["ACTOR.RUN.SUCCEEDED", "ACTOR.RUN.FAILED", "ACTOR.RUN.TIMED_OUT", "ACTOR.RUN.ABORTED"],
3 "requestUrl": "https://scraper-webhook.51ultron.com/apify",
4 "payload": { "actorName": "linkedin-jobs-guest", "source": "linkedin", "datasetId": "<id>" }
5}

File map

actors/linkedin-jobs-guest
.actor
actor.json
INPUT_SCHEMA.json
src
__main__.py
Dockerfile
requirements.txt
README.md