cd /news/ai-crawlers/common-crawl-data-stored-on-a-huggin… Β· home β€Ί topics β€Ί ai-crawlers β€Ί article
[ARTICLE Β· art-131992] src=commoncrawl.org β†— pub= topic=ai-crawlers verified=true sentiment=↑ positive

Common Crawl Data Stored on a Hugging Face Bucket

Common Crawl has mirrored selected crawl archives to a Hugging Face Storage Bucket since April 2026, alongside its existing AWS S3 distribution, using the same directory layout such as crawl-data/CC-MAIN-2026-17/. The bucket supports S3-like object storage with CDN pre-warming in several regions, and users can access it via the Hugging Face CLI, mount it as a local filesystem with hf-mount, or point existing S3 pipelines at the S3-compatible API. Common Crawl says the Hugging Face hosting lets users apply Hugging Face ecosystem tools, including the fsspec-compatible hf:// protocol and the warcio WARC reader, to large-scale crawl data.

read6 min views1 publishedSep 16, 2026
Common Crawl Data Stored on a Hugging Face Bucket
Image: source

Since April 2026, parts of our crawl archive have been available on a Hugging Face Storage Bucket, in addition to being available on AWS S3. Having the data on the Hugging Face (HF) lets you use the tools available in the HF ecosystem, making large-scale crawl data easier to access. This blog post uses practical examples to show you how to get started.

Accessing the data through Hugging Face Storage Buckets #

Selected crawl archives are mirrored in a Hugging Face Storage Bucket, using the same directory layout as S3 (e.g. crawl-data/CC-MAIN-2026-17/). See the bucket README for a list of currently available crawls. Storage Buckets provide S3-like object storage on the Hugging Face Hub. You can browse files in the browser, transfer data with the hf CLI, or mount the bucket as a local filesystem. The bucket has CDN pre-warming enabled in several regions, which can improve read throughput when your compute runs nearby. For more detail, see the announcement blog post.

Using the Hugging Face CLI

Install the Hugging Face CLI, then list or download files:

hf buckets list commoncrawl/commoncrawl/crawl-data/CC-MAIN-2026-17
hf buckets cp hf://buckets/commoncrawl/commoncrawl/crawl-data/CC-MAIN-2026-17/segments/.../warc/CC-MAIN-....warc.gz ./local-path/

Mounting the bucket as a local filesystem

Install hf-mount, then mount the bucket. Files are fetched on read, so any local tool can access the data without down the full archive first:

hf-mount start bucket commoncrawl/commoncrawl /mnt/commoncrawl
ls /mnt/commoncrawl/crawl-data/CC-MAIN-2026-17/

See the access patterns guide for backend options and caching.

Using an existing S3 pipeline

Keep your current code or command and point to the S3-compatible API for buckets. Data will be fetched using the same client but from Hugging Face instead of AWS. See the S3 compatibility documentation for more info.

Reading WARC files from Hugging Face #

Hugging Face provides file-system-like access to models, datasets, and buckets via the hf:// protocol, i.e., a pythonic fsspec-compatible file interface to the Hugging Face Hub. The WARC reader/writer tool warcio fully supports fsspec. Make sure to install the optional warcio dependencies and the huggingface_hub package.

import fsspec
from warcio.archiveiterator import ArchiveIterator

with fsspec.open('hf://buckets/commoncrawl/commoncrawl/crawl-data/CC-MAIN-2026-17/segments/1775805908305.14/warc/CC-MAIN-20260410081153-20260410111153-00000.warc.gz', 'rb') as stream:
    for i, record in enumerate(ArchiveIterator(stream)):
        if i >= 10:
            break

        print(record.rec_type)

        if record.rec_type == 'response':
            print(record.rec_headers.get_header('WARC-Target-URI'))

The code will print the first ten WARC record types and the URLs of response records:

warcinfo
request
response
http://003ms.ru/catalog/lekarstvennye-sredstva/nervnaya-sistema/antigrippin-312/tabletki-250-mgplus3-mgplus50-mg-dlya-detej-30-shtuk-shipuchie
metadata
request
...

You can also use the warcio CLI directly to read from the HF bucket:

warcio index hf://buckets/commoncrawl/commoncrawl/crawl-data/CC-MAIN-2026-17/segments/1775805908305.14/warc/CC-MAIN-20260410081153-20260410111153-00000.warc.gz -f offset,content-type,http:content-type,warc-target-uri | head -n 10

Querying the URL index via Hugging Face #

Common Crawl's URL Index (previously known as the Columnar Index) is one of the indexes available for querying the Common Crawl corpus. As the name suggests, it is an index to the WARC files and URLs in the Common Crawl corpus, stored in a columnar format (Apache Parquet). This format is suited to efficient analytical and/or bulk queries of the data, saving time and computing resources. The index files are also available on the Common Crawl HF bucket. DuckDB can be used to query the index without down all the data.

Index schema

Let's first look at the schema of the index:

duckdb -c "DESCRIBE FROM read_parquet('https://huggingface.co/buckets/commoncrawl/commoncrawl/resolve/cc-index/table/cc-main/warc/crawl=CC-MAIN-2026-17/subset=warc/part-00000-ee7620e8-27a7-4c74-846b-a92b039dae92.c000.gz.parquet')"

The DuckDB CLI will print the schema of the URL index:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Describe                       β”‚
β”‚                                                     β”‚
β”‚ url_surtkey                varchar                  β”‚
β”‚ url                        varchar                  β”‚
β”‚ url_host_name              varchar                  β”‚
β”‚ url_host_tld               varchar                  β”‚
β”‚ url_host_2nd_last_part     varchar                  β”‚
β”‚ url_host_3rd_last_part     varchar                  β”‚
β”‚ url_host_4th_last_part     varchar                  β”‚
β”‚ url_host_5th_last_part     varchar                  β”‚
β”‚ url_host_registry_suffix   varchar                  β”‚
β”‚ url_host_registered_domain varchar                  β”‚
β”‚ url_host_private_suffix    varchar                  β”‚
...

Querying the URL index with Python

In addition to the CLI, you can also use the DuckDB Python client to run queries:

import duckdb

duckdb.sql('INSTALL httpfs; LOAD httpfs;')


from huggingface_hub import hffs


index_files = list(hffs.glob("buckets/commoncrawl/commoncrawl/cc-index/table/cc-main/warc/crawl=*/subset=*/part-00000-*.parquet"))

print(f"Found {len(index_files):,} index files on HF bucket")

http_index_files = [f.replace("buckets/commoncrawl/commoncrawl/", "https://huggingface.co/buckets/commoncrawl/commoncrawl/resolve/") for f in index_files]


duckdb.sql(
    f"SELECT crawl, subset, COUNT(*) FROM read_parquet({http_index_files!r}, hive_partitioning = true) GROUP BY crawl, subset"
).show()


duckdb.sql(f"""SELECT COUNT(*) AS count,
       url_host_registered_domain
FROM read_parquet({http_index_files!r}, hive_partitioning = true) 
WHERE crawl = 'CC-MAIN-2026-17' AND subset = 'warc'
  AND url_host_tld = 'ru'
GROUP BY  url_host_registered_domain
HAVING (COUNT(*) >= 100)
ORDER BY  count DESC""").show()

The last query in the Python script will produce something like this (it only represents parts of the crawl since we query only selected index files):

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ count  β”‚ url_host_registered_domain β”‚
β”‚ int64  β”‚          varchar           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 166381 β”‚ yandex.ru                  β”‚
β”‚  28067 β”‚ zr.ru                      β”‚
β”‚  23968 β”‚ zin.ru                     β”‚
β”‚  18272 β”‚ zarplata.ru                β”‚
β”‚  16030 β”‚ zab.ru                     β”‚
β”‚  13283 β”‚ yugzone.ru                 β”‚
β”‚  12003 β”‚ yapl.ru                    β”‚
...

Download speed #

We conducted initial experiments to evaluate the download speed for extracting individual records from the crawl archive. The evaluation involved fetching homepage URLs, i.e., sending many small range requests to the download server. We ran the experiment using CDX Toolkit and with various client-server combinations like down from S3 or HF bucket to an US-edge or EU-edge client but also to cloud-based clients.

The results showed that from S3 to S3 (us-east-1) achieved the highest download speed (up to 3,500 records/s), whereas from HF to HF was up to 1,500 records/s. Down from the HF bucket to an edge client was significantly slower due to rate limiting and the many small range requests (< 100 records/s). Note that these experiments provide preliminary findings and should not be treated as a definitive benchmark. We strongly recommend conducting your own measurements before committing to large data transfers.

Jupyter Notebooks #

In our cc-notebooks repository on GitHub, you can find ready-to-use Jupyter notebooks for the examples in this blog post and more:

We welcome feedback on the Common Crawl Hugging Face Bucket. Β Please contact us on our Discord or Google Group.

Malte Ostendorff

Erratum: #

Content is truncated #

More details

── more in #ai-crawlers 4 stories Β· sorted by recency
── more on @common crawl 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/common-crawl-data-st…] indexed:0 read:6min 2026-09-16 Β· β€”