Docker Hub images - search, tags, pulls (public API)
Pricing
from $5.00 / 1,000 records
Docker Hub images - search, tags, pulls (public API)
Docker Hub scraper on the public v2 API: search images or list named repositories, one row each - namespace, name, description, stars, pulls, official flag, last update, newest tags with size/digest/platforms, URL. No login. $5 per 1,000 rows + $0.10 per run.
Pricing
from $5.00 / 1,000 records
Rating
0.0
(0)
Developer
RetrainMap Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Returns: one row per Docker Hub repository (image): namespace, name, description, stars, pull count, official flag, last update, registration date, status, the newest N tags (name, last pushed, size, digest, platforms), Hub URL and docker pull command.
Input: { "query": "nginx", "max_records": 50 } or { "repositories": ["postgres", "bitnami/redis"] } — a query, a list, or both.
Price: $5.00 per 1,000 rows ($0.005 per repository row) plus $0.10 per run. Pay per event; no subscription.
Search Docker Hub the way the website does — by keyword — or look up a list of
repositories you already know, and get a flat, normalised row per image, ready for CSV or
JSON: which images exist for a technology, how popular they are (stars, pulls), when they
were last pushed, which tags are current and how big they are. No Docker Hub login, no
token: only the public hub.docker.com/v2 endpoints the Hub website itself uses.
The default input (query nginx, 50 rows, details + 10 newest tags) succeeds within 5
minutes and returns rows — Apify auto-tests it daily.
Data source and status
| Publisher | Docker, Inc. — Docker Hub (https://hub.docker.com) |
| API | GET /v2/search/repositories/?query=&page_size=&page= (search), GET /v2/repositories/{namespace}/{name}/ (detail), GET /v2/repositories/{namespace}/{name}/tags?page_size=&ordering=last_updated (tags). Public, no key. Reference: https://docs.docker.com/reference/api/hub/latest/ |
| What this Actor reads | Plain GET requests, at most one per request_interval_ms (default 500 ms), 1 search page per 100 results plus up to 2 requests per repository (detail, tags) |
| Refresh cadence | Live on every run — pull_count and last_updated are Docker Hub's current values; fetched_at on each row is the fetch time |
| Limits (measured 2026-09-06) | Anonymous search paging stops at 200 results per query (page 3 of 100 answers HTTP 403 "pagination too large for anonymous requests"); the Actor stops there and flags stopped_by_anonymous_paging_cap in the run summary. Narrow the query, or pass explicit repositories, for more |
| Terms | Docker's Terms of Service and the Docker Hub rate limits apply (https://www.docker.com/legal/docker-terms-service/). This Actor reads public repository metadata only, never image layers, and never pulls images |
| Known caveats | Official images live under the library namespace (nginx = library/nginx); last_updated, date_registered and status come from the detail request (empty when fetch_details is off); tags are the newest N by last_updated, tag_count is the repository's total; an unknown repository is skipped, counted in not_found and logged |
Honesty note: the rows are Docker Hub's own fields renamed and flattened — nothing is inferred, summarised or classified by this Actor, and a run stops with an error rather than guess when the API's shape changes.
Identification: the requests carry a product-token User-Agent and the operator's contact
address in the standard From: header (RFC 9110 §10.1.2).
Input
| Field | Type | Meaning |
|---|---|---|
query | string | Search term (Docker Hub search). Empty = no search |
repositories | array | Explicit repositories: nginx, library/postgres, bitnami/redis, or a hub.docker.com/r/... URL |
official_only | boolean | Keep only Docker Official Images (default false) |
include_tags | boolean | Fetch the newest tags per repository (default true) |
tags_per_repo | integer | 1-100, default 10 |
fetch_details | boolean | Fetch the repository detail (default true) |
max_records | integer | Default 100, at most 5,000 (search itself yields at most 200 per query) |
request_interval_ms | integer | Default 500 (floor 200) |
contact_email | string | Sent in the From: header |
Example — official Postgres and Redis images with their 5 newest tags, plus the top official postgres search hits:
{ "repositories": ["postgres", "library/redis"], "query": "postgres", "official_only": true, "tags_per_repo": 5, "max_records": 12 }
Output (dataset row)
namespace, name, repository (nginx or bitnami/redis), description, star_count,
pull_count, is_official, is_automated, last_updated, date_registered, status,
repository_type, full_description_chars, tag_count, tags (list of
{name, last_pushed, last_pulled, size, digest, platforms}url, pull_command, fetched_at, source.
A run summary (filters, Docker Hub's own match count, pages, requests, repositories not
found, whether the paging cap or the pay-per-event budget stopped the run) is stored as
RUN_SUMMARY in the run's key-value store.
Pricing (pay per event)
| Event | Price |
|---|---|
run-start — once per run | $0.10 |
record — per row written | $0.005 |
The default run (≤ 50 rows) costs at most $0.35; 1,000 repository rows cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.
Operator
Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with Docker, Inc. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.