Updated Jul 14, 2026

Recon

Pull a domain archive from Common Crawl without touching the host

Extract URLs for a specific target from commoncrawl.org indexes.

Agent

overview

What ccpy does

ccpy queries Common Crawl for every URL recorded under a target domain. The data already sits in the archive, so you collect paths, parameters, and long-dead endpoints without sending a request to the host.

Point it at a domain and it walks monthly indexes. Narrow with --year, crawl one snapshot with --index, or use --list and --update when you want control over which indexes you read. Output is a broad historical URL list, including paths gone from the live site.

Trickest runs ccpy as a managed Recon node: domain in, file and folder of URLs out. Seed an endpoint inventory early, then pass results to httpx and a fuzzer so live and forgotten paths both get tested.

source github.com/si9int/cc.py

use cases

Where ccpy fits

Seed an endpoint inventory passively

Pull a domain's historical URLs from Common Crawl to build a broad starting set of paths and parameters without sending any traffic to the target.

Recover forgotten and removed paths

Surface URLs the archive recorded that no longer appear on the live site, often the stale endpoints worth probing for old bugs.

Scope a crawl by year or index

Limit results to a single year to focus on a time window, or crawl one Common Crawl index in full when you want every recorded path from that snapshot.

Feed probing and fuzzing stages

Hand the recovered URLs to httpx to find which still respond, then to a fuzzer or nuclei so both live and historical paths get tested.

reference

ccpy inputs and flags

5 inputs
NameTypeFlagDescription
domainSTRING·Domain to extract archived URLs for.
crawl-indexSTRING--indexCrawl one specific Common Crawl index, pulling all its pages.
yearSTRING--yearLimit results to a specific year (default all).
list-indexesBOOLEAN--listList all available Common Crawl indexes.
update-index-fileBOOLEAN--updateRefresh the local index file before querying.

Showing key inputs. ccpy exposes 5 inputs in total.

example

Run ccpy

ccpy · command
# list available indexes, then extract 2021 URLs for a domaincc.py --listcc.py --domain example.com --year 2021
sample output
https://example.com/https://example.com/index.phphttps://example.com/login?redirect=%2Faccounthttps://example.com/blog/2019/03/release-noteshttps://example.com/wp-content/uploads/2018/report.pdfhttps://example.com/api/v1/users?id=1042https://static.example.com/js/app.min.jshttps://example.com/old/admin/config.bak…  (2,317 URLs saved to output/example.com.txt)

guidance

Choosing ccpy

Use ccpy for passive URL discovery from Common Crawl at the start of a workflow. It reads an archive, not the target, so nothing reaches the host. It finds URLs; it does not test them. Follow with httpx, and pair with gau or waymore for wider archive coverage.

gau

Pulls URLs from Wayback, Common Crawl, and more in one tool. ccpy focuses purely on Common Crawl.

waymore

Aggressive archive harvester across many sources. ccpy is the lighter, Common Crawl-only option.

waybackrobots

Pulls historical robots.txt entries from Wayback. ccpy returns the broader archived URL set.

faq

ccpy questions

No. It reads Common Crawl's public archive, so every URL comes from an external index and the host sees nothing. That makes it a quiet passive recon step before any active scanning.

Run ccpy yourself

A domain feeds ccpy, which pulls its archived URLs from Common Crawl and hands them to httpx so only the still-live paths land as a queryable output.

Facts on this page come from the live Trickest tool library.