PAGES
← all tools
◆ Reconnaissance & OSINT

colly

v2.2.0 open-source

Colly is a Go framework that lets you build web scrapers and crawlers to extract structured data from websites.

Summary

colly is an open-source Go library for building web crawlers, scrapers, and spiders, free to use in any project that imports it. It handles the mechanics of crawling directly in code rather than as a standalone service: cookie and session handling, request delays and per-domain concurrency limits, caching, robots.txt compliance, and context-based cancellation so requests can be stopped mid-crawl. This suits developers building data collection pipelines, OSINTOSINTOpen-source intelligence, collecting and analyzing information from publicly available sources. Investigators use it to learn about people, infrastructure or threats. tooling, or archiving jobs who want that logic in Go rather than assembled from separate scraping utilities. First committed in 2017 and now at 140 contributors, it sees modest ongoing activity with 25 commits in the past year, though its last release was over 500 days ago.

Colly is a Go framework that lets you build web scrapers and crawlers to extract structured data from websites.

How colly helps

How do I pull structured data off a site without hand-rolling HTTP, retries, and HTML parsing?

a collector walks the pages you point it at and hands parsed HTML elements to callbacks you register, so extraction logic sits in Go code instead of glue scripts

How do I keep a crawl from hammering a target site or getting blocked?

per-domain concurrency limits and request delays are set on the collector, and robots.txt rules are honored automatically before a request goes out

How do I stop a long-running crawl cleanly when I've got what I need?

requests carry a context, so cancelling it or hitting a deadline halts in-flight requests, and a running queue can be stopped mid-crawl once a match condition is met

How do I avoid re-fetching pages I've already scraped in an earlier run?

responses are written to a cache, so a repeated visit to the same URL is served from disk instead of hitting the network again

How do I keep a crawl within a fixed budget of requests?

a cap on the total number of requests a collector will make stops the crawl once it's reached, regardless of how many links remain queued

Will a redirect chain let a scraper wander outside the domains I meant to target?

URL filters are checked on every redirect hop, not just the initial request, so a redirected page landing outside the allowed pattern is dropped

all 12 features, with the evidence for each →

Languages

Not documented

Features

12 capabilities

Built from colly's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

What colly offers you

  • Web management console1
  • Command-line interface
All capabilities 12 capabilities
Request Flow Control shipped Provides mechanisms to limit request volume and filter URLs during redirects. 4 releases · first seen Nov 2019

release

  • Adds MaxRequests parameter to cap the total number of requests a collector will make. v2.2.0 · Mar 2025 · source · release history
  • Applies URL filters (checkFilters) consistently on redirects, not just initial requests. v2.2.0 · Mar 2025 · source · release history
  • The Collector.RedirectHandler struct field is removed; use Collector.SetRedirectHandler to configure redirects instead v2.0.0 · Nov 2019 · source · release history
  • Replaces the RedirectHandler member with Collector.SetRedirectHandler function for redirect logic v2.0.0 · Nov 2019 · source · release history
Robust Content Parsing shipped Implements content sniffing to handle responses with missing or incorrect Content-Type headers. 3 releases · 1 other source · first seen Aug 2018

release

  • Implements content sniffing for HTML parsing, improving handling of responses with missing or incorrect Content-Type headers. v2.2.0 · Mar 2025 · source · release history
  • Unmarshaling now supports slices of pointers and structs, enabling complex data parsing from JSON responses v1.1.0 · Aug 2018 · source · release history
  • Response body decompression now supports gzip encoded content automatically v1.1.0 · Aug 2018 · source · release history

example

  • Parse a JSON array containing structs where one field is a pointer, now supported by the unmarshaler. var items []MyStruct err := collector.UnmarshalJSON(resp.Body, &items) if err != nil { log.Fatal(err) } v1.1.0 · Aug 2018 · source
Graceful Queue Management shipped Allows stopping a running crawl queue mid-execution via context cancellation or explicit halt signals. 2 releases · 1 other source · first seen Aug 2018

release

  • Supports Stop() in the queue, allowing graceful halt of queued crawl jobs. v2.2.0 · Mar 2025 · source · release history
  • Added ForEachWithBreak method to HTMLElement to allow early termination during element iteration v1.1.0 · Aug 2018 · source · release history

example

  • Stop scraping a list of URLs as soon as a specific item is found, avoiding unnecessary network requests. html.ForEachWithBreak(".item", func(e *colly.HTMLNode) bool { if e.Attr("data-skip") == "true" { return false // Stop iteration } fmt.Println(e.Text) return true }) v1.1.0 · Aug 2018 · source
HTTP Header Customization shipped Enables setting custom Host headers and other outbound request headers. 2 releases · first seen Aug 2018

release

  • Adds Host and custom header support, giving finer control over outbound request headers. v2.2.0 · Mar 2025 · source · release history
  • New Accept HTTP header is added by default to every request in all collectors v1.1.0 · Aug 2018 · source · release history
Visited State Tracking shipped Maintains a record of visited URLs during a crawl to prevent revisiting them. 1 release · first seen Nov 2019

release

  • Adds Collector.HasVisited method to check if an URL has already been visited during a crawl v2.0.0 · Nov 2019 · source · release history
Configurable State Storage shipped Provides interchangeable storage backends, such as Redis or SQLite3, for persisting crawl state. 1 release · first seen May 2018

release

  • Supports Redis and SQLite3 storage backends alongside the default memory backend v1.0.0 · May 2018 · source · release history
Debugging Interface shipped Offers inspection tools including console logging and a web-based UI for live request and response debugging. 1 release · first seen May 2018

Also counts toward: Web management console

release

  • Debuggers interface with LogDebugger for console output and WebDebugger for web interface inspection v1.0.0 · May 2018 · source · release history
Distributed Execution shipped Supports scaling crawls across multiple worker threads through a shared request queue. 1 release · first seen May 2018

release

  • Supports distributed scraping via request queue management across worker threads v1.0.0 · May 2018 · source · release history
Environment Configuration shipped Allows fine-tuning tool behavior at runtime using environment variables without requiring a rebuild. 1 release · first seen May 2018

release

  • Configurable via environment variables for fine-tuning without rebuilding v1.0.0 · May 2018 · source · release history
Proxy Rotation shipped Distributes outbound requests across multiple proxy hosts using built-in switcher mechanisms. 1 release · first seen May 2018

release

  • Proxies/proxy switchers allow distributing requests among multiple hosts for scaling v1.0.0 · May 2018 · source · release history
Response Caching shipped Stores previously fetched responses locally to minimize redundant network requests and external traffic. 1 release · first seen May 2018

release

  • extensions package includes RequestCaching support to cache responses and reduce external traffic v1.0.0 · May 2018 · source · release history
User-Agent Generation shipped Provides extension helpers to automatically generate randomized User-Agent headers for outbound requests. 1 release · first seen May 2018

release

  • extensions package provides helpers like RandomUserAgent to generate random User Agents v1.0.0 · May 2018 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for colly, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail colly puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

5 entries

  1. March 20251
  2. November 20191
  3. February 20191
  4. August 20181
  5. May 20181
    Show

    5 entries

    Project health

    Issue, contributor and maintainer activity in gocolly/colly, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 13 −1 vs prior 12 months
    2. Maintainers 1 +1 joined · −2 left, last 12 months
    3. Bus factor 1 committers behind half the commits
    4. Community-filed 95% of issues opened, last 12 months
    5. Median time to close 38 days first maintainer reply 38 days
    6. Open backlog 146 of 580 issues ever filed
    1. Issues opened / month 0 · 0 communitymaintainers
    2. Open backlog 146
    3. Contributors / month 1
    4. Commits / month 3
    5. Stars 25,518
    Issue themes, last 12 months
    • questions 5%
    • other 95%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →