# Docker Hub Image Scraper - Repositories & Tags (`thirdwatch/docker-hub-scraper`) Actor

Search public Docker Hub images and export pulls, stars, descriptions, official status, update timestamps, and recent tags and digests.

- **URL**: https://apify.com/thirdwatch/docker-hub-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 docker images

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Docker Hub Image Scraper

> Export structured public Docker Hub container images for discovery, comparison, monitoring, and governance.

### What you get

Search the public Docker Hub catalog and save one deduplicated row per container image. Results include image identity, pull and star counts, official status, update time, recent tags, immutable digests, and image size. Use discovery inputs for market maps and exact-name inputs, when available, for stable monitoring cohorts.

### Output fields

| Field group | Description |
|---|---|
| Identity | Canonical `image`, display name, and source URL. |
| Release evidence | Current version or tag data and source timestamps when published. |
| Adoption signals | Public download, install, pull, star, or rating metrics available from the source. |
| Ownership and links | Public author, owner, project, repository, documentation, or homepage references. |
| Classification | Public tags, categories, keywords, packaging, or status values. |
| Provenance | Search query and named upstream source for traceable analysis. |

### Example output

```json
{"image":"library/postgres","pullCount":1000000000,"starCount":13000,"isOfficial":true,"lastUpdated":"2026-07-20T10:00:00Z","tags":[{"name":"latest","digest":"sha256:abc123","fullSize":160000000}],"url":"https://hub.docker.com/r/library/postgres"}
````

### Input parameters

| Parameter | Required | Description |
|---|---|---|
| `queries` | No | Up to five public repository search phrases. |
| `images` | No | Up to 25 exact namespace/image names or repository URLs. |
| `includeTags` | No | Include recent tag metadata; defaults to true. |
| `tagsPerImage` | No | Recent tags embedded per image, from 1 to 25. |
| `maxResultsPerQuery` | Yes | Maximum images requested per search; defaults to 25. |
| `maxResults` | Yes | Maximum unique images across all modes; defaults to 100. |

At least one discovery or exact-name input is required. Result limits apply after cross-input deduplication, and only saved unique rows are charged.

### Use cases

- **Developers:** discover alternatives and compare public release evidence.
- **Platform teams:** monitor versions, tags, compatibility, and activity for a fixed portfolio.
- **Security teams:** build an evidence inventory before joining vulnerability and deployment data.
- **Product researchers:** map a developer ecosystem with repeatable queries and dated snapshots.

### Limitations

Only public Docker Hub repositories are available. Search ranking is controlled by Docker Hub, tag enrichment adds requests, and mutable tag names should not replace immutable digests in a supply-chain audit.

### Compared to alternatives

Current Apify Store alternatives include crawlerbros/dockerhub-scraper and nexgendata/docker-hub-scraper. Thirdwatch combines discovery and bounded monitoring inputs where the source permits them, saves canonical evidence URLs, deduplicates before charging, provides exactly four PPE tiers, and ships ten ready-to-save Task recipes plus a five-article workflow library. Compare current Store listings directly because competitor features and pricing can change.

### FAQ

#### Does this Actor access private packages or accounts?

No. It collects only metadata available from the public source and does not sign in, bypass access controls, or request private registry credentials.

#### How should I monitor a fixed portfolio?

Use exact names where supported, keep result limits explicit, save the input as an Apify Task, and retain dated datasets. Do not let an empty or failed run overwrite the previous successful snapshot.

#### Are popularity metrics quality or security scores?

No. Downloads, installs, pulls, stars, and ratings help prioritize review, but they do not replace vulnerability, provenance, license, maintainership, or internal deployment evidence.

#### Where can I find more workflows?

Visit [Thirdwatch developer-data scrapers](https://thirdwatch.dev/scrapers/docker-hub-scraper) and the related [GitHub](https://apify.com/thirdwatch/github-repositories-scraper?fpr=9m2cd6), [npm](https://apify.com/thirdwatch/npm-package-scraper?fpr=9m2cd6), and [OSV](https://apify.com/thirdwatch/osv-vulnerability-scraper?fpr=9m2cd6) Actors.

Last verified: 2026-07

# Actor input Schema

## `queries` (type: `array`):

Keywords to search across public Docker Hub repositories.

## `images` (type: `array`):

Exact namespace/image names or Docker Hub repository URLs.

## `includeTags` (type: `boolean`):

Fetch recent tag names, digests, sizes, and update timestamps for every image.

## `tagsPerImage` (type: `integer`):

Maximum recent tags saved inside each image record.

## `maxResultsPerQuery` (type: `integer`):

Maximum images requested for each search query.

## `maxResults` (type: `integer`):

Maximum unique Docker Hub images saved across all input modes.

## Actor input object example

```json
{
  "queries": [
    "postgres database"
  ],
  "images": [],
  "includeTags": true,
  "tagsPerImage": 5,
  "maxResultsPerQuery": 25,
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/docker-hub-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/docker-hub-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call thirdwatch/docker-hub-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thirdwatch/docker-hub-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Docker Hub Image Scraper - Repositories & Tags",
        "description": "Search public Docker Hub images and export pulls, stars, descriptions, official status, update timestamps, and recent tags and digests.",
        "version": "1.0",
        "x-build-id": "OOBDdK0ByMpzy7tpX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thirdwatch~docker-hub-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thirdwatch-docker-hub-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/thirdwatch~docker-hub-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thirdwatch-docker-hub-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/thirdwatch~docker-hub-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thirdwatch-docker-hub-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "maxResultsPerQuery",
                    "maxResults"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "maxItems": 5,
                        "type": "array",
                        "description": "Keywords to search across public Docker Hub repositories.",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "default": [
                            "postgres database"
                        ]
                    },
                    "images": {
                        "title": "Exact images",
                        "maxItems": 25,
                        "type": "array",
                        "description": "Exact namespace/image names or Docker Hub repository URLs.",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        },
                        "default": []
                    },
                    "includeTags": {
                        "title": "Include recent tags",
                        "type": "boolean",
                        "description": "Fetch recent tag names, digests, sizes, and update timestamps for every image.",
                        "default": true
                    },
                    "tagsPerImage": {
                        "title": "Tags per image",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "Maximum recent tags saved inside each image record.",
                        "default": 5
                    },
                    "maxResultsPerQuery": {
                        "title": "Results per query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum images requested for each search query.",
                        "default": 25
                    },
                    "maxResults": {
                        "title": "Maximum total results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum unique Docker Hub images saved across all input modes.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
