Docker Hub Repositories Scraper avatar

Docker Hub Repositories Scraper

Pricing

from $0.03 / 1,000 item extracteds

Go to Apify Store
Docker Hub Repositories Scraper

Docker Hub Repositories Scraper

Export public Docker Hub repository and tag metadata including pulls, stars, digests, architectures, timestamps, and descriptions.

Pricing

from $0.03 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Docker Hub Repositories Scraper helps teams turn public container image pages into clean datasets. Use it to compare popular base images, audit release cadence, inventory tag digests, and monitor public repository metadata without manual copying.

Who is this for

  • DevOps and platform teams tracking base image popularity, pulls, and tag freshness.
  • Security and supply-chain teams exporting image digests, architectures, and timestamps for public dependencies.
  • Product and market researchers comparing public container repository adoption across vendors.

What data can it export

  • Public repository identity, namespace, Docker Hub URL, descriptions, type, status, and trust flags.
  • Pull counts, star counts, registration and update timestamps.
  • Bounded tag metadata including tag names, IDs, digests, architecture, OS, image size, and push/pull timestamps.
  • Namespace inventories for public Docker Hub organizations.

Example input

{
"repositories": ["library/postgres", "library/redis"],
"includeTags": true,
"maxRepositories": 10,
"maxTagsPerRepository": 5,
"outputMode": "repositories"
}

Example output

{
"type": "repository",
"repository": "library/postgres",
"namespace": "library",
"name": "postgres",
"hubUrl": "https://hub.docker.com/r/library/postgres",
"shortDescription": "The PostgreSQL object-relational database system...",
"starCount": 14962,
"pullCount": 10980699991,
"isOfficial": true,
"tagCount": 1379,
"tagLimitReached": true,
"tags": [
{
"tagName": "latest",
"imageDigest": "sha256:...",
"architecture": "amd64",
"os": "linux",
"lastPushed": "2026-07-01T00:00:00Z"
}
],
"scrapedAt": "2026-07-14T00:00:00.000Z"
}

Input settings

FieldTypeDescription
queriesstring[]Docker Hub search terms such as postgres or redis.
repositoriesstring[]Exact repositories as namespace/name; official images like postgres resolve to library/postgres.
namespacesstring[]Public namespaces to enumerate, such as library or bitnami.
includeTagsbooleanFetch tag metadata for each repository.
outputModestringrepositories for one row per repository with nested tags, or tags for one row per tag.
maxRepositoriesintegerMaximum unique repositories to output.
maxTagsPerRepositoryintegerMaximum tags to fetch per repository.
descriptionMaxLengthintegerMaximum characters kept from full descriptions.
maxRuntimeSecondsintegerOptional self-imposed cap (31–270 seconds). Before it is reached, the Actor stops taking new repositories, writes PENDING_REPOSITORIES, and leaves time to shut down cleanly.

Output fields

Repository mode includes repository, namespace, name, hubUrl, shortDescription, fullDescription, repositoryType, status, isPrivate, isOfficial, isAutomated, starCount, pullCount, dateRegistered, lastUpdated, lastModified, hubUser, sourceQueries, sourceInputs, tagCount, tagLimitReached, tags, and scrapedAt.

Tag mode includes repository, tagName, tagId, tagUrl, lastUpdated, lastPushed, lastPulled, fullSize, imageDigest, architecture, os, osVersion, variant, status, images, and scrapedAt.

Input recipes

Search popular database images

{"queries":["postgres","mysql","redis"],"includeTags":true,"maxRepositories":30,"maxTagsPerRepository":3,"outputMode":"repositories"}

Export tag digest inventory

{"repositories":["library/postgres"],"includeTags":true,"maxRepositories":5,"maxTagsPerRepository":25,"outputMode":"tags"}

Enumerate a vendor namespace

{"namespaces":["bitnami"],"includeTags":false,"maxRepositories":50,"outputMode":"repositories"}

Pricing

This Actor uses pay-per-event pricing:

  • Start event: $0.005 per run. Each saved repository row in repository mode, or each saved tag row in tag mode, is one paid item. Failed requests and diagnostic records are not charged.
Apify usage tierPrice per saved itemApprox. price per 1,000 saved items
Free$0.0000573465.7346 cents
Starter / Bronze$0.0000498664.9866 cents
Scale / Silver$0.0000388953.8895 cents
Business / Gold$0.0000299192.9919 cents
Platinum$0.0000199461.9946 cents
Diamond$0.0000139621.3962 cents

Tips and limits

  • Keep maxTagsPerRepository bounded for official images with thousands of tags.
  • Use outputMode: "tags" when you need a flat export of tag digests and architecture metadata.
  • Use repository mode when you want one row per image with a compact nested tag sample.
  • The Actor only exports public Docker Hub metadata and does not access private repositories or vulnerability scan data.
  • Every repository is saved progressively. If the run approaches its time limit, PENDING_REPOSITORIES records the unprocessed work and RUN_SUMMARY explains what completed and why.
  • Use maxRuntimeSeconds when you need a predictable bounded run. The pending-work record lists canonical repository names so you can run those names again in a later job; it never silently changes your search or namespace filters.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/docker-hub-repositories-scraper').call({
repositories: ['library/postgres'],
includeTags: true,
maxTagsPerRepository: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/docker-hub-repositories-scraper').call(run_input={
'repositories': ['library/postgres'],
'includeTags': True,
'maxTagsPerRepository': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~docker-hub-repositories-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"repositories":["library/postgres"],"includeTags":true,"maxTagsPerRepository":10}'

MCP and agents

Use this Actor from AI agents through Apify MCP:

$claude mcp add apify https://mcp.apify.com/?tools=fetch_cat/docker-hub-repositories-scraper

JSON config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=fetch_cat/docker-hub-repositories-scraper"
}
}
}

Example prompts:

  • "Export the latest public tags for library/postgres from Docker Hub."
  • "Find Docker Hub repositories matching redis and summarize pull counts."
  • "Create a CSV of image digests and architectures for library/nginx."

FAQ

Can it scrape private repositories? No. It only exports public Docker Hub metadata.

Does it return vulnerability or SBOM data? No. Those fields are not publicly available for arbitrary repositories.

Why are tag counts capped? Popular official images can have thousands of tags. The cap keeps runs fast and predictable.

Support

Questions or issues? Open the Issues tab on the Actor page and include:

  • The input JSON you used.
  • The expected output.
  • The actual output or error message.
  • A reproducible public URL from Docker Hub, such as a repository or namespace page.
  • Your Apify run ID.