Hugging Face Hub: Models and Datasets With Download Counts
Pricing
from $1.40 / 1,000 repository rows
Hugging Face Hub: Models and Datasets With Download Counts
Public Hugging Face Hub repositories as rows: model or dataset id, owner, task tag, library, licence, languages, 30-day and all-time downloads, likes, trending score, gated status, parameter count and commit dates. Filter by task, licence, owner, size or update window; sort as you need.
Pricing
from $1.40 / 1,000 repository rows
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn the public Hugging Face Hub catalogue into a table. One run lists model or dataset repositories through the Hub's own public API and writes one row per repository: id, owner, task tag, library, licence, languages, downloads in the last 30 days and all time, likes, trending score, gated status, parameter count and precision, base models, creation and last-commit dates. Filter by task, licence, owner, language, size band or update window, sort the way the Hub sorts, and keep only the columns you need. For engineers choosing a model, teams reviewing licences, and agents that need today's shortlist. No API key, no proxy and no browser — only public metadata, never model or dataset files.
Need it tailored to your workflow? Missing a field, a filter, another source or a different output format? Open an issue and describe what you need — we read every request and adapt the actor.
Use cases
- Shortlist a model for one task under a licence and a size limit: text-generation models of at most 8B parameters under Apache 2.0, ranked by downloads — the list a self-hosting decision starts from.
- Watch what one lab ships: every public repository of
google,Qwen,meta-llamaor your own vendor list, with sizes, licences and commit dates, re-run on a schedule. - Today's trending repositories: the Hub's own short-term ranking as rows, for a newsletter, a dashboard or an AI-watch agent.
- Release tracking: everything published or committed in the last 24 hours or 7 days in one field, with
onlyNewso a scheduled run reports only what moved. - Find evaluation or training data: datasets by task category, language, size band and format, with stored bytes and download counts next to each other.
- Keep a catalogue table fresh: one dataset that joins models and datasets in the same row shape, exported to a sheet, a warehouse or an agent's context.
Input
Every field is optional. The keyword and the filters are combined with AND: a repository must satisfy all of them.
| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
repoType | string (strict list) | models | models or datasets. One run reads one index. An off-list value is refused by the platform before the run starts, with the allowed values in the message. |
search | string | — | Keyword handed to the Hub's own search (matched against id and owner). Travels exactly as typed; no correction. |
repoIds | string[] | — | Up to 50 exact ids (Qwen/Qwen3-0.6B, cais/mmlu) or Hub addresses. When set, the actor looks these up instead of searching, and each row carries the detail columns. An id the Hub does not serve anonymously becomes one row with found: false. |
pipelineTag | string (free text + suggestions) | — | Models only. One Hub task id, e.g. text-generation. Case, spaces and separators are read the same; the aliases below are accepted; any other spelling stops the run and names the closest ids. See Tasks. |
library | string (free text + suggestions) | — | One library or weight format (transformers, gguf, diffusers, mlx, polars …), checked against the vocabulary of the chosen index. See Libraries. |
licenses | string[] | — | Up to 5 Hub licence ids (apache-2.0, mit, …), with or without the license: prefix. One request per value. See Licences. |
languages | string[] | — | Up to 5 language codes (en, ru, zh). Lower-cased and passed through unchanged — no correction and no suggestions, because the Hub carries thousands of language tags. |
taskCategories | string[] | — | Datasets only. Up to 5 dataset task categories (question-answering, text-generation, …). See Dataset task categories. |
tagFilters | string[] | — | Up to 10 raw Hub tags, all of which a repository must carry (size_categories:1K<n<10K, modality:text, format:parquet, base_model:Qwen/Qwen3-0.6B, conversational). Passed through unchanged. |
authors | string[] | — | Up to 25 owners. The Hub matches an owner case-sensitively; another case is looked up once on the Hub's own user or organisation record and re-queried in the canonical spelling, which the run status reports. One request per owner and page. |
minDownloads | integer | — | Drop repositories with fewer 30-day downloads. Applied by the actor after reading the rows. |
minLikes | integer | — | Drop repositories with fewer likes. |
minParametersMillions | integer | — | Models only. 7000 = 7B. Repositories without a safetensors weight index have no count and drop out as soon as a bound is set. |
maxParametersMillions | integer | — | Models only. 1000 = up to 1B. Set both for a band. |
gatedAccess | string (strict list) | any | any, open (files downloadable by anyone) or gated (access must be requested). Off-list values are refused by the platform before the run. |
createdSince | string (date) | — | Keep repositories first published on or after this date (2026-01-31). |
updatedSince | string (date) | — | Keep repositories whose last commit is on or after this date. |
sinceHours | integer | — | 1–8760. Rolling commit window counted in UTC from the run start; combined with the dates above, the later floor wins. |
onlyNew | boolean | false | Remember what this input delivered and write only repositories that are new or whose commit changed since the last run. |
includeParameterCount | boolean | true | Models: add parameterCount and parameterPrecisions. Costs no extra request. |
includeCardMetadata | boolean | true | Add license, baseModels and the dataset prettyName from the card header. Costs no extra request. |
includeModelConfig | boolean | false | Models: add modelType and architectures from the configuration file. No extra request, but a much larger response. |
includeRepoDetails | boolean | false | Add sha, fileCount, spacesCount, inferenceStatus and, for models, repoSizeBytes — one extra request per row. |
sort | string (strict list) | downloads | downloads (rolling 30 days), likes, trendingScore, createdAt, lastModified. All-time downloads cannot be sorted on. Off-list values are refused by the platform before the run. |
sortDirection | string (strict list) | desc | desc works with every key. asc is served by the Hub for createdAt only; with any other key the run stops at once and the message names the two ways forward. |
maxItems | integer | 25 | 1–1000. Hard cap on the rows written, and so on the cost. The Hub serves up to 100 repositories per request. |
fields | string[] | all | Keep only these columns, in this order. id, repoType, found, url and fetchedAt are always kept — the ones you do not list come first, a listed one stays where you put it. An unknown name is reported in the run status. |
hfToken | string (secret) | — | Your own read-only Hugging Face token. Raises the Hub's quota for this run from 500 to 1,000 requests per 5 minutes and counts it against your account. Sent to the Hub only; never written to the dataset, the log or SUMMARY. It does not unlock gated or private repositories. |
Strict lists vs free text. repoType, gatedAccess, sort and sortDirection are closed lists: Apify refuses an off-list value with HTTP 400 before the run starts and the error names the allowed values, so there is nothing for the actor to correct. pipelineTag, library, licenses and taskCategories are free text with a dropdown of suggestions: case, spaces, separators, accents and the aliases listed below are accepted, and any other spelling stops the run with the closest ids named — never a wider result set. search, languages and tagFilters travel exactly as typed.
Reference
Tasks (pipelineTag, models)
52 ids on 2026-10-21, and the Hub keeps adding them — this field accepts any id the Hub publishes, not only the list below:
any-to-any, audio-classification, audio-text-to-text, audio-to-audio, automatic-speech-recognition, depth-estimation, document-question-answering, feature-extraction, fill-mask, graph-ml, image-classification, image-feature-extraction, image-segmentation, image-text-to-image, image-text-to-text, image-text-to-video, image-to-3d, image-to-image, image-to-text, image-to-video, keypoint-detection, mask-generation, object-detection, question-answering, reinforcement-learning, robotics, sentence-similarity, summarization, table-question-answering, tabular-classification, tabular-regression, text-classification, text-generation, text-ranking, text-to-3d, text-to-audio, text-to-image, text-to-speech, text-to-video, time-series-forecasting, token-classification, translation, unconditional-image-generation, video-classification, video-text-to-text, video-to-video, visual-document-retrieval, visual-question-answering, voice-activity-detection, zero-shot-classification, zero-shot-image-classification, zero-shot-object-detection
Accepted aliases: llm, textgen, causal-lm → text-generation; txt2img, text2image, image-generation → text-to-image; vlm, vision-language, multimodal-chat → image-text-to-text; asr, speech-to-text, speech2text, transcription → automatic-speech-recognition; embeddings, embedding → feature-extraction; qa → question-answering; tts, speech-synthesis → text-to-speech; ner, named-entity-recognition → token-classification; sentiment-analysis → text-classification; masked-lm → fill-mask; summarisation → summarization.
Dataset task categories (taskCategories)
The dataset index uses its own 52-value list, mostly the same words: question-answering, text-generation, text-classification, token-classification, summarization, translation, automatic-speech-recognition, audio-classification, image-classification, image-to-text, text-to-image, text-retrieval, text-ranking, table-question-answering, table-to-text, tabular-classification, tabular-regression, multiple-choice, feature-extraction, sentence-similarity, object-detection, image-segmentation, depth-estimation, video-classification, video-text-to-text, visual-question-answering, visual-document-retrieval, zero-shot-classification, zero-shot-image-classification, zero-shot-object-detection, reinforcement-learning, robotics, time-series-forecasting, graph-ml, mask-generation, any-to-any, text-to-3d, image-to-3d, text-to-audio, text-to-speech, text-to-video, image-to-image, image-to-video, image-text-to-text and a few more. The task aliases above work here too.
Libraries
Models: transformers, pytorch, tf, jax, safetensors, gguf, diffusers, peft, sentence-transformers, timm, onnx, openvino, mlx, transformers.js, keras, tf-keras, sklearn, spacy, flair, nemo, espnet, speechbrain, fastai, setfit, coreml, tflite, executorch, stable-baselines3, ml-agents, llamafile, paddlepaddle, open_clip, fasttext and about 20 more.
Datasets: datasets, pandas, polars, dask, mlcroissant, webdataset, distilabel, argilla, fiftyone, lerobot, lance and a few newer ones.
Accepted aliases: llama.cpp, llamacpp, ollama → gguf; scikit-learn, scikit → sklearn; sbert → sentence-transformers; hf-transformers, huggingface-transformers → transformers; core-ml → coreml; open-vino → openvino; hf-datasets → datasets.
Licences
82 ids. The frequent ones: apache-2.0, mit, other, openrail, openrail++, creativeml-openrail-m, cc-by-4.0, cc-by-sa-4.0, cc-by-nc-4.0, cc-by-nc-sa-4.0, cc-by-nc-nd-4.0, cc0-1.0, cc, gemma, llama2, llama3, llama3.1, llama3.2, llama3.3, llama4, bsd-3-clause, bsd-2-clause, bsd, gpl-3.0, gpl-2.0, agpl-3.0, afl-3.0, artistic-2.0, unlicense, wtfpl, odc-by, cdla-permissive-2.0, bigscience-bloom-rail-1.0, bigcode-openrail-m, c-uda.
Accepted aliases: apache, apache2, apache-2 → apache-2.0; mit-license → mit; cc0, public-domain → cc0-1.0; bsd3 → bsd-3-clause; gpl3 → gpl-3.0; open-rail → openrail.
Dataset facets for tagFilters
| Group | Values |
|---|---|
size_categories: | n<1K, 1K<n<10K, 10K<n<100K, 100K<n<1M, 1M<n<10M, 10M<n<100M, 100M<n<1B, 1B<n<10B, 10B<n<100B, 100B<n<1T, n>1T |
modality: | text, image, audio, video, tabular, timeseries, geospatial, document, 3d |
format: | parquet, json, csv, text, arrow, webdataset, imagefolder, audiofolder, optimized-parquet, agent-traces |
language: | any Hub language code (language:en); on the model index the same filter is the bare code (en) — the actor writes the right form for the index you chose |
library: | dataset libraries, e.g. library:polars |
| other | arxiv:2505.09388, base_model:<id>, region:us, conversational, synthetic, code, medical, legal, finance |
Sort keys
| Value | Order | Notes |
|---|---|---|
downloads | 30-day downloads | The Hub's downloads is a rolling 30-day figure, not a total |
likes | all-time likes | |
trendingScore | the Hub's short-term ranking | Moves through the day |
createdAt | first publication | The only key that also accepts asc |
lastModified | last commit |
All-time downloads are written in every row but cannot be sorted on: the Hub answers HTTP 400 for that order, and for asc with anything but createdAt.
Examples
Trending repositories right now
{ "repoType": "models", "sort": "trendingScore", "sortDirection": "desc", "maxItems": 25 }
The most used text-generation models
{ "repoType": "models", "pipelineTag": "text-generation", "sort": "downloads", "sortDirection": "desc", "maxItems": 25 }
Apache 2.0 weights for a product review
{ "repoType": "models", "licenses": ["apache-2.0"], "sort": "likes", "sortDirection": "desc", "maxItems": 25 }
Small language models that fit a laptop
{ "repoType": "models", "pipelineTag": "text-generation", "maxParametersMillions": 1000, "sort": "downloads", "maxItems": 20 }
Everything one organisation ships, trimmed to seven columns
{ "repoType": "models", "authors": ["google"], "sort": "downloads", "includeModelConfig": true, "maxItems": 20,"fields": ["id", "author", "downloads30Days", "likes", "parameterCount", "license", "gatedMode"] }
Question-answering datasets, most used first
{ "repoType": "datasets", "taskCategories": ["question-answering"], "sort": "downloads", "sortDirection": "desc", "maxItems": 25 }
English corpora for text generation
{ "repoType": "datasets", "taskCategories": ["text-generation"], "languages": ["en"], "sort": "downloads", "maxItems": 20 }
A keyword watch list for a schedule
{ "repoType": "models", "search": "llama", "sort": "lastModified", "sinceHours": 168, "onlyNew": true, "maxItems": 20 }
Output
One row per repository. A real row from a cloud run (sort: trendingScore, long arrays trimmed with "…"):
{"id": "deepseek-ai/DeepSeek-V4.1-Flash-1017","repoType": "model","name": "DeepSeek-V4.1-Flash-1017","author": "deepseek-ai","url": "https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash-1017","found": true,"fetchedAt": "2026-10-21T21:13:07.622Z","pipelineTag": "image-text-to-text","libraryName": "transformers","license": "mit","languages": [],"tags": ["transformers","safetensors","deepseek_v41","text-generation","image-text-to-text","…"],"downloads30Days": 42122,"downloadsAllTime": 42122,"likes": 2143,"trendingScore": 1897,"gated": false,"gatedMode": "open","parameterCount": 763205315794,"parameterPrecisions": ["BF16","F32","F8_E4M3","I8"],"baseModels": [],"createdAt": "2026-10-17T02:40:38.000Z","lastModified": "2026-10-17T05:46:55.000Z","daysSinceUpdate": 4.6,"sha": null}
| Field | Type | When it is filled |
|---|---|---|
id | string | Always — owner/name as the Hub writes it |
repoType | string | Always — model or dataset |
name | string | Always — the part after the owner |
author | string | Always — the owner handle |
url | string | Always — the repository page on the Hub |
description | string | Datasets: the first 400 characters of the card, plain text |
prettyName | string | Datasets with includeCardMetadata, when the card declares one |
pipelineTag | string | Models, when the owner declared a task |
libraryName | string | Models, when the owner declared a library |
license | string | When the card header or a license: tag has one |
languages | string[] | When the owner declared languages (often empty) |
taskCategories | string[] | Datasets, from the card and the tags |
tags | string[] | Always — every Hub tag of the repository |
sizeCategory | string | Datasets, e.g. 1K<n<10K |
modalities | string[] | Datasets, e.g. text, image |
formats | string[] | Datasets, e.g. parquet |
downloads30Days | number | Always for list rows — downloads of the last 30 days |
downloadsAllTime | number | List rows; the per-repository record does not carry it |
likes | number | Always |
trendingScore | number | List rows |
gated | boolean | Always |
gatedMode | string | Always — open, auto (instant click-through) or manual (owner approval) |
parameterCount | number | Models with includeParameterCount, when the Hub publishes a safetensors weight index |
parameterPrecisions | string[] | Same — e.g. ["BF16"], ["F32","I8"] |
baseModels | string[] | Models with includeCardMetadata, when the card or the tags name one |
modelType | string | Models with includeModelConfig |
architectures | string[] | Models with includeModelConfig |
repoSizeBytes | number | Datasets always; models with includeRepoDetails |
fileCount | number | With includeRepoDetails or an exact-id lookup |
spacesCount | number | Same — how many Hub demos use the repository |
inferenceStatus | string | Same — e.g. warm, cold |
createdAt | string | Always — ISO 8601 UTC |
lastModified | string | Always — last commit, ISO 8601 UTC |
daysSinceUpdate | number | Always — days between the last commit and the run |
sha | string | With includeRepoDetails or an exact-id lookup — the commit hash |
found | boolean | Always — false on a marker row for an id the Hub will not serve |
notFoundReason | string | Marker rows only |
fetchedAt | string | Always — when the run read the Hub, ISO 8601 UTC |
Dataset views: Repositories (overview), Size and lineage, New and recently changed, Datasets.
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~huggingface-hub-models/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"repoType":"models","pipelineTag":"text-generation","sort":"downloads","maxItems":25}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/huggingface-hub-models').call({ repoType: 'models', licenses: ['apache-2.0'], sort: 'likes', maxItems: 25 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/huggingface-hub-models").call(run_input={"repoType": "datasets", "taskCategories": ["question-answering"], "maxItems": 25})items = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/huggingface-hub-models tool with the same JSON input. One row per repository; use fields to trim the row to what the model needs (["id","pipelineTag","parameterCount","downloads30Days","license"] keeps the answer short).
Pricing
Pay per event: $0.001 per run start + $0.002 per dataset row. Every run pays the start event, also a run that writes nothing; every row written to the dataset is paid, marker rows with found: false included. On a paid Apify plan the row price falls with the Store tier (Bronze $0.0018, Silver $0.0016, Gold and above $0.0014); the start event stays $0.001.
Worked examples at the full price:
- the default run, 25 rows: $0.001 + 25 × $0.002 = $0.051
- a typical shortlist, 50 rows: $0.001 + 50 × $0.002 = $0.101
- a full catalogue page of 500 rows: $0.001 + 500 × $0.002 = $1.001
Rows dropped by minDownloads, minLikes or the parameter band are never written and never billed — they only cost the requests that read them. The run also stops at the "Maximum cost per run" you set when starting it: it then ends successfully, keeps every row you already paid for and says so in its status ("Stopped at your spending limit: N rows delivered").
Limits & FAQ
- Speed. Measured in the Apify cloud on 2026-10-21. A list page of up to 100 repositories costs one request, so the default 25-row run takes about 4 seconds and a 1,000-row run about 15 seconds (ten pages at one request per second). With
includeRepoDetailsevery row costs one more request: 300 models with their own records took 306 seconds (304 requests, 59.5 rows per minute), and a run given only 60 seconds wrote 43 complete rows and stopped itself. So the default run timeout of 15 minutes covers the largest input the schema allows (1,000 rows) in list mode, while in detail mode about 750 rows fit; past that the run stops before the timeout, keeps and bills only the rows it finished, and says so in its status. - The Hub's rate limit. The API allows 500 requests per 5-minute window per IP address for anonymous callers (1,000 with a free account's token). This actor paces itself at 1 request per second — 300 per window — reads the
RateLimitheader the Hub returns and slows down further when the window runs low. Apify servers share their IP addresses between customers, so a run can meet a window that other traffic has already used: the actor then waits and continues more slowly, and a run that is refused from its very first request stops at once with a message telling you to start again in a few minutes or to add your own token (hfToken). - The run stops before its timeout, with the rows kept. When the run timeout or your maximum cost per run is reached, the actor stops starting new work, keeps every row already written and ends successfully with "Stopped before the run timeout: N rows saved" or "Stopped at your spending limit: N rows delivered".
downloadsis a 30-day figure. The Hub'sdownloadscounts the last 30 days;downloadsAllTimeis the total. Only the 30-day figure can be sorted on, and the trending score moves through the day, so two runs hours apart legitimately differ.- Parameter counts are not universal. They come from the safetensors weight index the Hub publishes. A repository shipped only as GGUF, as pickled PyTorch or as external files has
parameterCount: nulland drops out of a parameter band; the run status says how many rows were dropped for a missing count. - Owner-declared metadata is often missing. Languages, licences and task tags exist only where the owner wrote them into the card. A language filter therefore finds fewer repositories than exist, especially on the model index.
- A hidden repository answers 401, not 404. Deleted, renamed, private and misspelt ids are indistinguishable from outside, so an exact-id lookup that fails is written as one row with
found: falseand a reason — never a failed run. - Several filter values cost several requests. Repeated Hub filters are ANDed, so each licence, language, task category and owner needs its own request per page; the rows of the combinations are merged in the order you listed them, each combination in the order you chose. A 25-owner watch list makes at least 25 requests.
- Gated repositories are listed with their metadata; their files are never read. No model or dataset files are downloaded at all — only metadata.
- Private repositories are invisible: the actor reads the Hub without a login, and a token you supply raises the quota only.
- Questions or problems: open an issue on the Issues tab of this actor.
Made by Yadroo. Sibling actors: openalex-works, arxiv-papers, github-repo-intel, pypi-package-intel, npm-package-intel.