Ingest Common Crawl index in ClickHouse
- Python 99.8%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| client | ||
| documentation | ||
| ingestion | ||
| svr | ||
| tests | ||
| .gitignore | ||
| .pylintrc | ||
| AGENTS.md | ||
| config_cc4ail.yaml.sample | ||
| config_client.yaml.sample | ||
| config_svr.yaml.sample | ||
| config_svr_token.yaml.sample | ||
| LICENSE | ||
| pytest.ini | ||
| README.md | ||
| release_notes.md | ||
| requirements-dev.txt | ||
| requirements-svr.txt | ||
| requirements.txt | ||
CommonCrawl-Ingestor
########### XXXX ########## ___
####### XXXXXXXXXXXXXXXX ####### / ___|___ _ __ ___ _ __ ___ ___ _ __
#### XXXXXXXXXXXXXXXXXXXXXX #### | | / _ \| '_ ` _ \| '_ ` _ \ / _ \| '_ \
##### XXXXXXXXXXXXXXXXXXXX #### | |__| (_) | | | | | | | | | | | (_) | | | |
##### XXXXXXXXXXXXXXXX ##### \____\___/|_| |_| |_|_| |_| |_|\___/|_| |_|
#### XXXXXXXXXXX #### / ___|_ __ __ ___ _| |
XXXXXXXXXXX XXXXXXX X # | | | '__/ _` \ \ /\ / / |
XXXXXXXXXXX XX XXXXX# | |___| | | (_| |\ V V /| |
XXXXXXXXXXXX XXXXXXX \____|_| \__,_| \_/\_/ |_| _
XXXXXXXXXXX XXXXXXXXXXXX# __ __/ ___| ___| |_
XXXXXXXXXXX XXXXXXXXXXXXXXX # \ \ /\ / / | _ / _ \ __|
# XXXXXXXXXX XXXXXXXXXXXXXXXXX# \ V V /| |_| | __/ |_
## XXXXXXXXX XXXXXXXXXXXXXXX## \_/\_/ \____|\___|\__|
### XXXXXXXX XXXXXXXXXXX ###
##### XXXXXX XXXXXXXX ##### circl.lu
######## XXX ##### XXXX #######
Common Crawl metadata ingestion and search using ClickHouse. Search archived records by URL, FQDN, domain, or SHA-1; retrieve response bodies from Common Crawl WARC storage.
Full guides: documentation/.
Install
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
cp config_svr.yaml.sample config_svr.yaml
For SVR/SRVAIL servers, install requirements-svr.txt. Developers should install requirements-dev.txt, which
includes both runtime sets and Black, Pylint, pytest, and coverage tools.
Client configuration is optional:
cp config_client.yaml.sample config_client.yaml
Basic search
# Download archived URL
python client/ccwget-local.py https://circl.lu/pub/tr-73/
# Show metadata without downloading
python client/ccwget-local.py https://circl.lu/pub/tr-73/ --info
# List URLs for FQDN
python client/ccwget-local.py --list-fqdn www.circl.lu
# Enumerate subdomains across all crawls
python client/ccwget-local.py --domain-enumeration .circl.lu --alltime
# Search SHA-1
python client/ccwget-local.py --sha1 67df35fd332c2956c96771fd68a75680de5df4a4 --info
# Search one year
python client/ccwget-local.py --list-fqdn www.circl.lu --year 2024
# Authenticated queued client (set CCWGET_TOKEN first)
python client/ccwget-remote.py https://circl.lu/pub/tr-73/
# Download every archived occurrence instead of the first one
python client/ccwget-remote.py --all https://circl.lu/pub/tr-73/
# Extract passive-DNS observations from archived WARC headers
python client/ccwget-remote.py -pdns www.circl.lu
Basic operations
# Ingest newest Common Crawl dataset
python -m ingestion.getlatest
# Build or refresh SHA-1 index for one year
python -m ingestion.create_idx 2025
# Export FQDN lists
python -m svr.export_ccmain_fqdn
Current ingestion and HTTP services have important operational limits. Read operator runbook before ingestion or network exposure.