PackageTrack
Sign in Get early access

spatie/crawler

Crawl all internal links found on a website

9.4.2 20M downloads/mo #769 most downloaded on Packagist spatie/crawler

What this package is like to depend on

Last release 16 days ago

07 Aug 2026

Release timing varies

gaps range from 8 days to 5 months

Nearly every release is documented

notes for 119 of 129 stable releases

Nothing withdrawn

no release was ever pulled

11 years old

129 releases · first in 2015

16 releases in the last 12 months

see the full history below

Release timeline

129 releases · Nov 2015 to Aug 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 129
  1. 9.4.2 07 Aug 2026
    Release notes

    What's Changed

    • Fix SitemapUrlParser extracting no URLs from namespaced sitemaps by @witheez in #512

    New Contributors

    Full Changelog: 9.4.1...9.4.2

    Open source →
    Release notes

    What's Changed

    • Fix SitemapUrlParser extracting no URLs from namespaced sitemaps by @witheez in https://github.com/spatie/crawler/pull/512

    New Contributors

    • @witheez made their first contribution in https://github.com/spatie/crawler/pull/512

    Full Changelog: https://github.com/spatie/crawler/compare/9.4.1...9.4.2

    Open source →
  2. 9.4.1 22 Jul 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: 9.4.0...9.4.1

    Open source →
    Release notes

    What's Changed

    • Fix Guzzle 8 exception handling for responses and retries by @GrahamCampbell in https://github.com/spatie/crawler/pull/510

    New Contributors

    • @GrahamCampbell made their first contribution in https://github.com/spatie/crawler/pull/510

    Full Changelog: https://github.com/spatie/crawler/compare/9.4.0...9.4.1

    Open source →
  3. 9.4.0 20 Jul 2026
    Release notes

    Added support for Guzzle 8 alongside Guzzle 7.

    Open source →
    Release notes

    Added support for Guzzle 8 alongside Guzzle 7.

    Open source →
  4. 9.3.2 12 Jun 2026
    Release notes

    What's Changed

    • Skip signal handler registration when pcntl functions are disabled by @poldixd in #508

    New Contributors

    Full Changelog: 9.3.1...9.3.2

    Open source →
    Release notes

    What's Changed

    • Skip signal handler registration when pcntl functions are disabled by @poldixd in https://github.com/spatie/crawler/pull/508

    New Contributors

    • @poldixd made their first contribution in https://github.com/spatie/crawler/pull/508

    Full Changelog: https://github.com/spatie/crawler/compare/9.3.1...9.3.2

    Open source →
  5. 9.3.1 18 May 2026
    Release notes

    What's Changed

    Full Changelog: 9.3.0...9.3.1

    Open source →
    Release notes

    What's Changed

    • Skip fnmatch for URLs longer than FILENAME_MAX by @mattiasgeniar in https://github.com/spatie/crawler/pull/505

    Full Changelog: https://github.com/spatie/crawler/compare/9.3.0...9.3.1

    Open source →
  6. 9.3.0 15 Apr 2026
    Release notes

    What's Changed

    • Add a shouldStopCallback hook for graceful external stops by @kissifrot in #504

    Full Changelog: 9.2.1...9.3.0

    Open source →
    Release notes

    What's Changed

    • Add a shouldStopCallback hook for graceful external stops by @kissifrot in https://github.com/spatie/crawler/pull/504

    Full Changelog: https://github.com/spatie/crawler/compare/9.2.1...9.3.0

    Open source →
  7. 9.2.1 20 Mar 2026
    Release notes

    What's Changed

    Full Changelog: 9.0.1...9.2.1

    Open source →
    Release notes

    What's Changed

    • Close response body streams after processing by @freekmurze in https://github.com/spatie/crawler/pull/503

    Full Changelog: https://github.com/spatie/crawler/compare/9.0.1...9.2.1

    Open source →
  8. 9.2.0 19 Mar 2026
    Release notes

    Full Changelog: 9.1.0...9.2.0

    Open source →
    Release notes

    Full Changelog: https://github.com/spatie/crawler/compare/9.1.0...9.2.0

    Open source →
  9. 9.1.0 18 Mar 2026
    Release notes
    • Add urlParser() method to allow setting a custom URL parser

    Co-Authored-By: Claude Opus 4.6 (1M context) [email protected]

    • Fix styling

    Co-authored-by: Claude Opus 4.6 (1M context) [email protected]
    Co-authored-by: freekmurze [email protected]

    Open source →
  10. 9.0.1 19 Mar 2026
    Release notes

    What's fixed

    When the crawler reached its time limit, crawl limit, or was interrupted via a signal, any HTTP requests that were still in-flight in the Guzzle pool would eventually fail (e.g. due to their per-request timeout) and get reported to crawlFailed. These URLs were dispatched but never truly crawled, so reporting them as failures was misleading.

    The CrawlRequestFailed handler now checks whether the crawler has reached its limits before reporting a failure. If it has, the failure is silently ignored.

    Regular request failures (timeouts, connection errors, server errors) that happen during normal crawling are still reported as before.

    Open source →
    Release notes

    Fixed

    • Fixed allow_redirects default: changed from false to ['track_redirects' => true] so redirects are followed and the redirect history header is populated correctly
    • Non-parseable responses (e.g. binary files filtered by allowedMimeTypes) now notify observers via crawled() with an empty body instead of being silently skipped
    • URLs containing control characters are now detected and reported as malformed
    • Dot segments (/../, /./) in extracted URLs are now normalized per RFC 3986
    • Custom client options passed to Crawler::create() now merge with defaults instead of replacing them (pass null to remove a default)
    • CrawlRequestFailed now wraps non-RequestException errors so observers always receive a RequestException
    • Removed unused classes: Url, ResponseWithCachedBody, InvalidUrl

    Added

    • stream() method to opt-in to streaming HTTP responses for reduced memory usage
    • matchWww() method to treat www.example.com and example.com as equivalent when using internalOnly()
    • includeSubdomains() now works as a flag on internalOnly() and composes with matchWww()
    • CrawlResponse::redirectHistory() and CrawlResponse::wasRedirected() for inspecting redirect chains
    • CrawlObserver::crawlFailed() now receives a ?TransferStatistics parameter for detecting timeouts
    • addObserver() now accepts variadic arguments: addObserver($obs1, $obs2)
    • CrawlRequestFailed now preserves the original request from ConnectException (retaining custom headers like X-Started-At)
    Open source →
  11. 9.0.0 02 Mar 2026
    Release notes

    Major rewrite. See UPGRADING.md for a full list of breaking changes.

    Changed

    • Replace UriInterface with plain string URLs throughout the API
    • Replace ResponseInterface with CrawlResponse in observer callbacks
    • CrawlProfile is now an interface instead of an abstract class
    • CrawlObserverCollection no longer implements ArrayAccess or Iterator
    • Default scheme changed from http to https
    • JavaScript rendering is now driver-based (Browsershot moved to suggest)
    • UrlParser interface redesigned to return ExtractedUrl[] instead of adding to queue directly
    • CrawlQueue::has() now accepts string instead of CrawlUrl|UriInterface
    • start() now returns a FinishReason enum
    • URL is now required in Crawler::create()

    Added

    • CrawlResponse object with status(), body(), dom(), header(), transferStats(), and more
    • CrawlProgress tracking with urlsCrawled, urlsFailed, urlsFound, urlsPending
    • FinishReason enum: Completed, CrawlLimitReached, TimeLimitReached, Interrupted
    • Closure callbacks: onCrawled(), onFailed(), onFinished(), onWillCrawl()
    • foundUrls() to collect all URLs as CrawledUrl objects
    • fake() for testing without HTTP requests
    • Scope helpers: internalOnly(), includeSubdomains(), shouldCrawl()
    • Shorter method names: depth(), concurrency(), delay(), limit(), userAgent()
    • Throttling: FixedDelayThrottle and AdaptiveThrottle
    • Resource type extraction: alsoExtract(), extractAll(), ResourceType enum
    • URL normalization in ArrayCrawlQueue
    • Graceful shutdown via SIGINT/SIGTERM
    • alwaysCrawl() and neverCrawl() pattern overrides
    • retry() for automatic retries on connection errors and 5xx responses
    • TransferStatistics with typed timing accessors
    • CloudflareRenderer for JavaScript rendering
    • JavaScriptRenderer interface for custom renderers
    • Request configuration: basicAuth(), token(), withoutVerifying(), proxy(), cookies(), queryParameters(), middleware()

    Removed

    • CrawlUrl::create() static factory (use new CrawlUrl(...) instead)
    • Spatie\Crawler\Url class
    • ResponseWithCachedBody (replaced by CrawlResponse)
    • nicmart/tree dependency
    • spatie/browsershot as a required dependency (moved to suggest)
    • setBrowsershot() and getBrowsershot() methods
    • startCrawling() method (use start())
    • setUrlParserClass() (use parseSitemaps() or pass a UrlParser directly)
    Open source →
  12. 8.5.0 21 Feb 2026
    Release notes

    Add Laravel 13 support

    Open source →
  13. 8.4.7 26 Nov 2025
    Release notes

    What's Changed

    • Update nicmart/tree dependency version to ^0.10 by @robinmiau in https://github.com/spatie/crawler/pull/497

    New Contributors

    • @robinmiau made their first contribution in https://github.com/spatie/crawler/pull/497

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.6...8.4.7

    Open source →
  14. 8.4.6 26 Nov 2025

    Nothing published for this version

  15. 8.4.5 28 Oct 2025
    Release notes

    What's Changed

    • When fetching robots.txt, use the same User-Agent as defined by the user by @mattiasgeniar in https://github.com/spatie/crawler/pull/491

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.4...8.4.5

    Open source →
  16. 8.4.4 22 Oct 2025
    Release notes

    What's Changed

    • Update issue template by @AlexVanderbist in https://github.com/spatie/crawler/pull/488
    • fix(CrawlUrl): Use before initialization is now impossible by @Voltra in https://github.com/spatie/crawler/pull/490

    New Contributors

    • @Voltra made their first contribution in https://github.com/spatie/crawler/pull/490

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.3...8.4.4

    Open source →
  17. 8.4.3 20 May 2025
    Release notes

    What's Changed

    • Do not try robots.txt when ignored by @kissifrot in https://github.com/spatie/crawler/pull/485

    New Contributors

    • @kissifrot made their first contribution in https://github.com/spatie/crawler/pull/485

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.2...8.4.3

    Open source →
  18. 8.4.2 24 Feb 2025
    Release notes

    What's Changed

    • set spatie/browsershot minimal version to 5.0.5 by @grafst in https://github.com/spatie/crawler/pull/484

    New Contributors

    • @grafst made their first contribution in https://github.com/spatie/crawler/pull/484

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.1...8.4.2

    Open source →
  19. 8.4.1 17 Feb 2025
    Release notes

    Full Changelog: https://github.com/spatie/crawler/compare/8.4.0...8.4.1

    Open source →
  20. 8.4.0 16 Dec 2024
    Release notes

    What's Changed

    • Add execution time limit by @VincentLanglet in https://github.com/spatie/crawler/pull/480

    New Contributors

    • @VincentLanglet made their first contribution in https://github.com/spatie/crawler/pull/480

    Full Changelog: https://github.com/spatie/crawler/compare/8.3.1...8.4.0

    Open source →
  21. 8.3.1 09 Dec 2024
    Release notes

    What's Changed

    • Upgrade spatie/browsershot to 5.0 by @hasansoyalan in https://github.com/spatie/crawler/pull/478

    New Contributors

    • @hasansoyalan made their first contribution in https://github.com/spatie/crawler/pull/478

    Full Changelog: https://github.com/spatie/crawler/compare/8.3.0...8.3.1

    Open source →
  22. 8.3.0 02 Dec 2024
    Release notes

    What's Changed

    • Add support for PHP 8.4 by @pascalbaljet in https://github.com/spatie/crawler/pull/477

    Full Changelog: https://github.com/spatie/crawler/compare/8.2.3...8.3.0

    Open source →
  23. 8.2.3 31 Jul 2024
    Release notes

    What's Changed

    • Fix setParsableMimeTypes() by @superpenguin612 in https://github.com/spatie/crawler/pull/470

    Full Changelog: https://github.com/spatie/crawler/compare/8.2.2...8.2.3

    Open source →
  24. 8.2.2 31 Jul 2024

    Nothing published for this version

  25. 8.2.1 16 Jul 2024
    Release notes

    What's Changed

    • Check original URL against depth tree when visited link is a redirect by @superpenguin612 in https://github.com/spatie/crawler/pull/467

    New Contributors

    • @superpenguin612 made their first contribution in https://github.com/spatie/crawler/pull/467

    Full Changelog: https://github.com/spatie/crawler/compare/8.2.0...8.2.1

    Open source →
  26. 8.2.0 15 Feb 2024
    Release notes

    What's Changed

    • Fix wording in documentation by @adamtomat in https://github.com/spatie/crawler/pull/460
    • Add Laravel/Illuminate 11 Support by @Jubeki in https://github.com/spatie/crawler/pull/461

    New Contributors

    • @adamtomat made their first contribution in https://github.com/spatie/crawler/pull/460
    • @Jubeki made their first contribution in https://github.com/spatie/crawler/pull/461

    Full Changelog: https://github.com/spatie/crawler/compare/8.1.0...8.2.0

    Open source →
  27. 8.1.0 02 Jan 2024
    Release notes

    What's Changed

    • feat: custom link parser by @Velka-DEV in https://github.com/spatie/crawler/pull/458

    New Contributors

    • @Velka-DEV made their first contribution in https://github.com/spatie/crawler/pull/458

    Full Changelog: https://github.com/spatie/crawler/compare/8.0.4...8.1.0

    Open source →
  28. 8.0.4 29 Dec 2023
    Release notes
    • allow Browsershot v4
    Open source →
  29. 8.0.3 22 Nov 2023
    Release notes

    What's Changed

    • Fix return type by @riesjart in https://github.com/spatie/crawler/pull/452

    New Contributors

    • @riesjart made their first contribution in https://github.com/spatie/crawler/pull/452

    Full Changelog: https://github.com/spatie/crawler/compare/8.0.2...8.0.3

    Open source →
  30. 8.0.2 20 Nov 2023
    Release notes

    What's Changed

    • Define only needed methods in observer implementation by @buismaarten in https://github.com/spatie/crawler/pull/449

    New Contributors

    • @buismaarten made their first contribution in https://github.com/spatie/crawler/pull/449

    Full Changelog: https://github.com/spatie/crawler/compare/8.0.1...8.0.2

    Open source →
  31. 8.0.1 19 Jul 2023
    Release notes

    What's Changed

    • Check if rel attribute contains nofollow by @robbinbenard in https://github.com/spatie/crawler/pull/445

    New Contributors

    • @robbinbenard made their first contribution in https://github.com/spatie/crawler/pull/445

    Full Changelog: https://github.com/spatie/crawler/compare/8.0.0...8.0.1

    Open source →
  32. 8.0.0 04 Jun 2023
    Release notes
    • add linkText to crawl observer methods
    • upgrade dependencies
    Open source →
  33. 7.1.3 24 Jan 2023
    Release notes
    • support Laravel 10
    Open source →
  34. 7.1.2 30 May 2022
    Release notes

    What's Changed

    • Feat/convert phpunit tests to pest by @mansoorkhan96 in https://github.com/spatie/crawler/pull/401
    • Add the ability to change the default baseUrl scheme by @arnissolle in https://github.com/spatie/crawler/pull/402

    New Contributors

    • @arnissolle made their first contribution in https://github.com/spatie/crawler/pull/402

    Full Changelog: https://github.com/spatie/crawler/compare/7.1.1...7.1.2

    Open source →
  35. 7.1.1 20 Mar 2022

    Nothing published for this version

  36. 7.1.0 14 Jan 2022
    Release notes
    • allow Laravel 9 collections
    Open source →
  37. 7.0.5 15 Nov 2021

    Nothing published for this version

  38. 7.0.4 12 Nov 2021

    Nothing published for this version

  39. 7.0.3 11 Nov 2021

    Nothing published for this version

  40. 7.0.2 14 Sep 2021
    Release notes
    • allow psr7 v2
    Open source →
  41. 7.0.1 01 Aug 2021
    Release notes
    • change response type hint (#371)
    Open source →
  42. 7.0.0 27 Apr 2021
    Release notes
    • require PHP 8+
    • drop support for PHP 7.x
    • convert syntax to PHP 8
    • no API changes have been made
    Open source →
  43. 6.0.2 14 Apr 2021

    Nothing published for this version

  44. 6.0.1 26 Feb 2021
    Release notes
    • bugfix: infinite loops when a CrawlProfile prevents crawling (#358)
    Open source →
  45. 6.0.0 02 Dec 2020
    Release notes
    • add setCurrentCrawlLimit and setTotalCrawlLimit
    • internal refactors
    Open source →
  46. 5.0.2 27 Nov 2020
    Release notes
    • add support for PHP 8.0
    Open source →
  47. 5.0.1 09 Oct 2020
    Release notes
    • tweak variable naming in ArrayCrawlQueue (#326)
    Open source →
  48. 5.0.0 29 Sep 2020
    Release notes
    • improve chucked reading of response
    • move observer / profiles / queues to separate namespaces
    • typehint all the things
    • use laravel/collections instead of tightenco package
    • remove support for anything below PHP 7.4
    • remove all deprecated functions and classes
    Open source →
  49. 4.7.6 01 Dec 2020

    Nothing published for this version

  50. 4.7.5 13 Sep 2020
    Release notes
    • treat connection exceptions as request exceptions
    Open source →
  51. 4.7.4 15 Jul 2020
    Release notes
    • fix: method and property name error (#311)
    Open source →
  52. 4.7.3 15 Jul 2020
    Release notes
    • add crawler option to allow crawl links with rel="nofollow" (#310)
    Open source →
  53. 4.7.2 06 May 2020
    Release notes
    • only crawl links that are completely parsed
    Open source →
  54. 4.7.1 14 Apr 2020
    Release notes
    • fix curl streaming responses (#295)
    Open source →
  55. 4.7.0 13 Apr 2020
    Release notes
    • add setParseableMimeTypes() (#293)
    Open source →
  56. 4.6.9 11 Apr 2020
    Release notes
    • fix LinkAdder not receiving the updated DOM (#292)
    Open source →
  57. 4.6.8 13 Mar 2020
    Release notes
    • allow tightenco/collect 7 (#282)
    Open source →
  58. 4.6.7 09 Mar 2020
    Release notes
    • respect maximum response size when checking Robots Meta tags (#281)
    Open source →
  59. 4.6.6 31 Jan 2020
    Release notes
    • allow Guzzle 7
    Open source →
  60. 4.6.5 23 Nov 2019
    Release notes
    • allow symfony 5 components
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive