Fix: detail-page fetching no longer stalls runs. Wellfound's DataDome serves
listing/search pages but blocks rapid job-detail hits, so each fetchDescriptions
detail load was waiting out a 60s timeout and still returning an empty description
— ~60s of dead time per job. Detail loads now use a short 25s readiness budget and
auto-disable for the rest of the run after 4 consecutive blocks with no success.
All listing fields (title, company, salary, location, type, date) come from Apollo,
so records stay complete; descriptions populate when detail pages aren't blocked.
0.4
Fix: "under maintenance" loop. A default-input run (no filters) used to call
Actor.fail(), so every run launched with default input — including Apify's
automated Store health checks — ended FAILED and kept flipping the Actor into
"under maintenance". Empty input now crawls the Wellfound /jobs landing page
and finishes SUCCESS instead.
Fix: residential-first proxy. Wellfound's DataDome anti-bot reliably blocks
direct and datacenter connections from cloud IPs. The Actor now defaults to
RESIDENTIAL sticky sessions (rotating the exit IP on each retry) instead of
starting with no proxy and escalating — the no-proxy/datacenter tiers just
wasted attempts and returned empty datasets. A user-supplied proxy still wins.
Fix: location search returned a capped page. Location-only searches used
/jobs?location=<slug>, which Wellfound ignores — it serves a ~49-card landing
page with no pagination. Switched to /location/<slug>, the genuine paginated
result page (~50 jobs/page, distinct jobs per ?page=N).
Add:startUrls is now exposed in the input schema (bulk search/detail URLs).
Ops: set minMemoryMbytes to 4096 so the Camoufox/Firefox browser has
enough memory and runs don't OOM-fail.
0.3
Fix: Apollo state extraction. Wellfound now nests its Apollo cache one level
deeper (pageProps.apolloState.data instead of pageProps.apolloState). The
extractor now unwraps that .data layer, so the reliable JSON path is used
again instead of falling back to brittle DOM scraping. This restores correct,
per-job company names, locations, job types, and descriptions
(previously every row shared one wrong company and had empty location/type).
Perf: because full descriptions now come from the listing's Apollo state,
the scraper no longer opens a separate detail page per job, eliminating the
~60s-per-job overhead that made fetchDescriptions runs time out.
Fix: removed pay-per-event charge calls (the Actor is not on PPE pricing),
which were logging a warning on every pushed row.