3.18.0 (2026-08-04)
Bug Fixes
- allow any
clickOptionsinenqueueLinksByClickingElements(#3823) (abcbfb1) - avoid duplicate final crawler persistence (#3866) (79dd6c4), closes #3167
- basic-crawler: declare
@apify/datastructuresas a dependency (#3815) (4e9d227) - core: avoid re-submitting already-enqueued requests in addRequestsBatched (#3843) (704c269), closes #2456 #2456 #2456 #3120
- core: cap retries for unprocessed requests in addRequestsBatched (#3765) (b3170a6), closes #3764
- core: clear
AutoscaledPool.pause()polling interval on timeout (#3847) (42b8914) - core: ignore explicitly undefined baseUrl in enqueueLinks helpers (#3924) (a58a9c1)
- core: keep crawler enqueue limits when options carry explicit undefined (#3927) (5f1b0ab), closes #3924 #3924
- core: keep same-domain filtering after an off-domain redirect (#3923) (9b312ef), closes #3921
- core: remove
RequestListpersist state listener onteardown(#3846) (63394ee) - core: skip malformed cookie fragments in mergeCookies (#3822) (b3c3ef2)
- core: unblock backpressured sitemap load on persistState (#3863) (0b31a8b)
- declare missing dependencies (#3817) (5a9a661)
- filter sitemap-derived URLs by enqueue strategy (#3797) (9dc3160)
- impit-client: honor redirect handler for session cookie parity (#3938) (9371301)
- make crawler terminal status message reliably delivered (#3733) (7aed264)
- memory-storage: don't increment
handledRequestCountwhen updating a handled request (#3827) (4739d48) - memory-storage: prevent storage names from escaping the storage directory (#3715) (a04c297)
- memory-storage: use platform basename in key-value store warning (#3864) (dcefe01)
- playwright,puppeteer: only intercept requests for non-GET methods or payloads (#3819) (1942f1e)
- playwright: silence transient errors in
enqueueLinksByClickingElements(#3732) (7b98cc3), closes #3216 - read properties directly from
GotScrapingHttpClientresponse (#3807) (c673c8d) - respect falsy transformRequestFunction return in context enqueueLinks (#3925) (6cb4fc3), closes #3920
- sitemap: recognize sitemap_index as a valid input sitemap url (#3909) (eacab5e)
- stagehand: wait for Stagehand to register a page before using it (#3865) (238214f)
- update handleCloudflareChallenge for new Cloudflare challenge markup (#3717) (5baa8bd), closes #3629 apify/camoufox-js#283 #3629
- utils: advance the CPU tick baseline in systemInfoV2 getCurrentCpuTicks (#3824) (bb23800)
- utils: allow apostrophes and asterisks in extracted URLs (#3790) (e9baffd), closes #2755
- utils: prevent ReDoS in social email regex (#3845) (d6a2b39)
- utils: prevent sitemap metadata leak across url without loc (#3795) (895ed62)
- utils: use article:* selectors for article Open Graph properties (#3789) (b660506)
Features
- core: infer default-route handler userData from its schema (#3919) (37d0ccb)
- impit-client: add
cacheClientsoption to disableImpitclient reuse (#3771) (af9cb8c), closes #3769 #3769 - opt-in schema validation of request userData per router label (#3851) (c7347f9), closes #3747 #3748 #3747 #3082
- support
puppeteer@25(#3869) (1430062), closes #3772 - type-safe router labels via per-label userData map (#3747) (1124aca), closes #3082