Docker Hub Repositories Scraper

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

Data fields

FieldTypeDescription
typestringRepository or tag row.
repositorystringCanonical Docker Hub namespace/name.
namespacestringDocker Hub namespace.
namestringRepository name.
hubUrlstringPublic repository page.
shortDescriptionstring | nullValue exported as shortDescription.
fullDescriptionstring | nullValue exported as fullDescription.
fullDescriptionTruncatedbooleanValue exported as fullDescriptionTruncated.

Input preview

queriesSearch queries
repositoriesRepositories
namespacesNamespaces
includeTagsInclude tags
outputModeOutput mode
maxRepositoriesMaximum repositories

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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

Field Type Description
queries string[] Docker Hub search terms such as postgres or redis.
repositories string[] Exact repositories as namespace/name; official images like postgres resolve to library/postgres.
namespaces string[] Public namespaces to enumerate, such as library or bitnami.
includeTags boolean Fetch tag metadata for each repository.
outputMode string repositories for one row per repository with nested tags, or tags for one row per tag.
maxRepositories integer Maximum unique repositories to output.
maxTagsPerRepository integer Maximum tags to fetch per repository.
descriptionMaxLength integer Maximum characters kept from full descriptions.
maxRuntimeSeconds integer Optional 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.

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"}

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."

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.

Common questions

Questions and answers reused from the canonical actor README.

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.