dhulihan
dhulihan

Reputation: 11303

Github: Can I see the number of downloads for a repo?

In Github, is there a way I can see the number of downloads for a repo?

Upvotes: 219

Views: 193039

Answers (22)

Mariano Ruiz
Mariano Ruiz

Reputation: 4759

The Python script solution from @pedro-lobito works, but if you have more than one asset on each release, only shows the first one. Here is a modified version that display all of them:

import requests

owner = "twbs"
repo = "bootstrap"
h = {"Accept": "application/vnd.github.v3+json"}
u = f"https://api.github.com/repos/{owner}/{repo}/releases?per_page=100"
r = requests.get(u, headers=h).json()

print(f"Downloads from **https://github.com/repos/{owner}/{repo}/releases**:\n")

for rel in r:
  pub = rel['published_at']
  tag = rel['tag_name']
  for i, asset in enumerate(rel['assets']):
    filename = asset['name'] 
    dls = asset['download_count']
    print(f"{pub if i == 0 else ' ' * len(pub)}    |     {tag if i == 0 else ' ' * len(tag)}\t|    {filename}    \t ↓ {dls} ")

Here is how the output looks like:

Downloads from **https://github.com/repos/twbs/bootstrap/releases**:

2024-02-20T15:19:46Z    |     v5.3.3    |    bootstrap-5.3.3-dist.zip        ↓ 1162276 
                        |               |    bootstrap-5.3.3-examples.zip        ↓ 473083 
2023-09-14T14:26:29Z    |     v5.3.2    |    bootstrap-5.3.2-dist.zip        ↓ 630456 
                        |               |    bootstrap-5.3.2-examples.zip        ↓ 252203 
2023-07-26T08:01:13Z    |     v5.3.1    |    bootstrap-5.3.1-dist.zip        ↓ 174781 
                        |               |    bootstrap-5.3.1-examples.zip        ↓ 81405 
2023-05-30T15:23:41Z    |     v5.3.0    |    bootstrap-5.3.0-dist.zip        ↓ 234076 
                        |               |    bootstrap-5.3.0-examples.zip        ↓ 117433 
2023-04-03T07:31:30Z    |     v5.3.0-alpha3 |    bootstrap-5.3.0-alpha3-dist.zip         ↓ 196592 
                        |                   |    bootstrap-5.3.0-alpha3-examples.zip         ↓ 106537 
2023-03-24T14:35:39Z    |     v5.3.0-alpha2 |    bootstrap-5.3.0-alpha2-dist.zip         ↓ 35628 
                        |                   |    bootstrap-5.3.0-alpha2-examples.zip         ↓ 19180 
2022-12-24T16:39:27Z    |     v5.3.0-alpha1 |    bootstrap-5.3.0-alpha1-dist.zip         ↓ 444934 
                        |                   |    bootstrap-5.3.0-alpha1-examples.zip         ↓ 193164 

...

Upvotes: 1

Rashid
Rashid

Reputation: 375

Yes, on GitHub Cloud a traffic option is added under insight section where we could find the repository clone and download information. Here is the link of official doc> https://docs.github.com/en/repositories/viewing-activity-and-data-for-your-repository/viewing-traffic-to-a-repository

Upvotes: 0

Pedro Lobito
Pedro Lobito

Reputation: 99011

11 years later...
Here's a small python3 snippet to retrieve the download count of the last 100 release assets:

import requests

owner = "twbs"
repo = "bootstrap"
h = {"Accept": "application/vnd.github.v3+json"}
u = f"https://api.github.com/repos/{owner}/{repo}/releases?per_page=100"
r = requests.get(u, headers=h).json()
r.reverse() # older tags first
for rel in r:
  if rel['assets']:
    tag = rel['tag_name']
    dls = rel['assets'][0]['download_count']
    pub = rel['published_at']
    print(f"Pub: {pub} | Tag: {tag} | Dls: {dls} ")

Pub: 2013-07-18T00:03:17Z | Tag: v1.2.0 | Dls: 1193 
Pub: 2013-08-19T21:20:59Z | Tag: v3.0.0 | Dls: 387786 
Pub: 2013-10-30T17:07:16Z | Tag: v3.0.1 | Dls: 102278 
Pub: 2013-11-06T21:58:55Z | Tag: v3.0.2 | Dls: 381136 
...
Pub: 2020-12-07T16:24:37Z | Tag: v5.0.0-beta1 | Dls: 93943 

Demo

Upvotes: 3

Max_Payne
Max_Payne

Reputation: 155

There's a nice Chrome extension that does exactly what you want: GitHub Release Downloads

enter image description here

Upvotes: 0

Andry
Andry

Reputation: 2727

New implementation:

Port into GitHub composite action to reuse workflow code base.

https://github.com/andry81-devops/github-accum-stats

With additional features:

  1. Can count traffic clones or/and views.
  2. Can use GitHub composite action to reuse workflow code base: https://docs.github.com/en/actions/creating-actions/creating-a-composite-action

GitHub workflow file example:

.github/workflows/accum-gh-clone-stats.yml


Previous implementation (marked as obsolete):

This implementation based on GitHub Actions + statistic accumulation into separate repository: https://github.com/andry81-devops/github-clone-count-badge

based on: https://github.com/MShawon/github-clone-count-badge

With some advantages:

  1. Repository to track and repository to store traffic statistic are different, and you may directly point the statistic as commits list: https://github.com/{{REPO_OWNER}}/{{REPO}}--gh-stats/commits/master/traffic/clones
  2. Workflow is used accum-traffic-clones.sh bash script to accumulate traffic clones
  3. The script accumulates statistic both into a single file and into a set of files grouped by year and allocated per day: traffic/clones/by_year/YYYY/YYYY-MM-DD.json

GitHub workflow file example:

.github/workflows/myrepo-gh-clone-stats.yml

Upvotes: 2

kefir500
kefir500

Reputation: 4414

I have created three solutions to fetch the download count and other statistics for GitHub releases. Each of these implementations are able to accumulate the GitHub API pagination results, which means that calculating the total number of downloads won't be an issue.

Web Application

Node.js Implementation

Python Implementation

Upvotes: 3

jwaliszko
jwaliszko

Reputation: 17074

Based on VonC and Michele Milidoni answers I've created this bookmarklet which displays downloads statistics of github hosted released binaries.

Note: Because of issues with browsers related to Content Security Policy implementation, bookmarklets can temporarily violate some CSP directives and basically may not function properly when running on github while CSP is enabled.

Though its highly discouraged, you can disable CSP in Firefox as a temporary workaround. Open up about:config and set security.csp.enable to false.

Upvotes: 1

VonC
VonC

Reputation: 1328712

Update 2019:

Ustin's answer points to:


Update 2017

You still can use the GitHub API to get the download count for your releases (which is not exactly what was asked)
See "Get a single release", the download_count field.

There is no longer a traffic screen mentioning the number of repo clones.
Instead, you have to rely on third-party services like:

Git 2.14.2 release


Update August 2014

GitHub also proposes the number of clones for repo in its Traffic Graph:
See "Clone Graphs"

https://i.sstatic.net/uycEZ.png


Update October 2013

As mentioned below by andyberry88, and as I detailed last July, GitHub now proposes releases (see its API), which has a download_count field.

Michele Milidoni, in his (upvoted) answer, does use that field in his python script.
(very small extract)

c.setopt(c.URL, 'https://api.github.com/repos/' + full_name + '/releases')
for p in myobj:
    if "assets" in p:
        for asset in p['assets']:
            print (asset['name'] + ": " + str(asset['download_count']) +
                   " downloads")

Original answer (December 2010)

I am not sure you can see that information (if it is recorded at all), because I don't see it in the GitHub Repository API:

$ curl http://github.com/api/v2/yaml/repos/show/schacon/grit
---
repository:
  :name: grit
  :owner: schacon
  :source: mojombo/grit # The original repo at top of the pyramid
  :parent: defunkt/grit # This repo's direct parent
  :description: Grit is a Ruby library for extracting information from a
  git repository in an object oriented manner - this fork tries to
  intergrate as much pure-ruby functionality as possible
  :forks: 4
  :watchers: 67
  :private: false
  :url: http://github.com/schacon/grit
  :fork: true
  :homepage: http://grit.rubyforge.org/
  :has_wiki: true
  :has_issues: false
  :has_downloads: true

You can only see if it has downloads or not.


Adam Jagosz reports in the comments:

I got it to work with

 curl -H "Accept: application/vnd.github.v3+json"   https://api.github.com/repos/:user/:repo/releases

A couple of things that I had wrong:

  • I needed an actual Github release (not just git tag, even though Github does display those under releases, ugh).
  • And the release needs an asset file other than the zipped source that is added automatically in order to get the download count.

Upvotes: 155

dr_nyt
dr_nyt

Reputation: 341

I had made a web app that shows GitHub release statistics in a clean format: https://hanadigital.github.io/grev/

Upvotes: 11

user1767754
user1767754

Reputation: 25154

Here is a python solution using the pip install PyGithub package

from github import Github
g = Github("youroauth key") #create token from settings page


for repo in g.get_user().get_repos():
    if repo.name == "yourreponame":
        releases = repo.get_releases()
        for i in releases:
            if i.tag_name == "yourtagname":
                for j in i.get_assets():
                    print("{} date: {} download count: {}".format(j.name, j.updated_at, j._download_count.value))

Upvotes: 0

Ustin
Ustin

Reputation: 588

Answer from 2019:

  1. For number of clones you can use https://developer.github.com/v3/repos/traffic/#clones (but be aware that it returns count only for last 14 days)
  2. For get downloads number of your assets (files attached to the release), you can use https://developer.github.com/v3/repos/releases/#get-a-single-release (exactly "download_count" property of the items of assets list in response)

Upvotes: 2

T.Todua
T.Todua

Reputation: 56557

VISITOR count should be available under your dashboard > Traffic (or stats or insights):

enter image description here

Upvotes: 14

voice
voice

Reputation: 1326

Very late, but here is the answer you want:

https://api.github.com/repos/ [git username] / [git project] /releases

Next, find the id of the project you are looking for in the data. It should be near the top, next to the urls. Then, navigate to

https://api.github.com/repos/ [git username] / [git project] /releases/ [id] / assets

The field named download_count is your answer.

EDIT: Capitals matter in your username and project name

Upvotes: 7

Aveek Saha
Aveek Saha

Reputation: 121

To check the number of times a release file/package was downloaded you can go to https://githubstats0.firebaseapp.com

It gives you a total download count and a break up of of total downloads per release tag.

Upvotes: 7

Allen Luce
Allen Luce

Reputation: 8389

I ended up writing a scraper script to find my clone count:

#!/bin/sh
#
# This script requires:
#   apt-get install html-xml-utils
#   apt-get install jq
#
USERNAME=dougluce
PASSWORD="PASSWORD GOES HERE, BE CAREFUL!"
REPO="dougluce/node-autovivify"

TOKEN=`curl https://github.com/login -s -c /tmp/cookies.txt | \
     hxnormalize | \
     hxselect 'input[name=authenticity_token]' 2>/dev/null | \
     perl -lne 'print $1 if /value=\"(\S+)\"/'`

curl -X POST https://github.com/session \
     -s -b /tmp/cookies.txt -c /tmp/cookies2.txt \
     --data-urlencode commit="Sign in" \
     --data-urlencode authenticity_token="$TOKEN" \
     --data-urlencode login="$USERNAME" \
     --data-urlencode password="$PASSWORD" > /dev/null

curl "https://github.com/$REPO/graphs/clone-activity-data" \
     -s -b /tmp/cookies2.txt \
     -H "x-requested-with: XMLHttpRequest" | jq '.summary'

This'll grab the data from the same endpoint that Github's clone graph uses and spit out the totals from it. The data also includes per-day counts, replace .summary with just . to see those pretty-printed.

Upvotes: 3

IvanRF
IvanRF

Reputation: 7265

As already stated, you can get information about your Releases via the API.

For those using WordPress, I developed this plugin: GitHub Release Downloads. It allows you to get the download count, links and more information for releases of GitHub repositories.

To address the original question, the shortcode [grd_count user="User" repo="MyRepo"] will return the number of downloads for a repository. This number corresponds to the sum of all download count values of all releases for one GitHub repository.

Example: Example

Upvotes: 1

Jan Ehrhardt
Jan Ehrhardt

Reputation: 405

The Github API does not provide the needed information anymore. Take a look at the releases page, mentioned in Stan Towianski's answer. As we discussed in the comments to that answer, the Github API only reports the downloads of 1 of the three files he offers per release.

I have checked the solutions, provided in some other answers to this questions. Vonc's answer presents the essential part of Michele Milidoni's solution. I installed his gdc script with the following result

# ./gdc stant
mdcsvimporter.mxt: 37 downloads
mdcsvimporter.mxt: 80 downloads
How-to-use-mdcsvimporter-beta-16.zip: 12 downloads

As you can clearly see, gdc does not report the download count of the tar.gz and zip files.

If you want to check without installing anything, try the web page where Somsubhra has installed the solution, mentioned in his answer. Fill in 'stant' as Github username and 'mdcsvimporter2015' as Repository name and you will see things like:

Download Info:
mdcsvimporter.mxt(0.20MB) - Downloaded 37 times.
Last updated on 2015-03-26

Alas, once again only a report without the downloads of the tar.gz and zip files. I have carefully examined the information that Github's API returns, but it is not provided anywhere. The download_count that the API does return is far from complete nowadays.

Upvotes: 5

Stan Towianski
Stan Towianski

Reputation: 409

To try to make this more clear:
for this github project: stant/mdcsvimporter2015
https://github.com/stant/mdcsvimporter2015
with releases at
https://github.com/stant/mdcsvimporter2015/releases

go to http or https: (note added "api." and "/repos")
https://api.github.com/repos/stant/mdcsvimporter2015/releases

you will get this json output and you can search for "download_count":

    "download_count": 2,
    "created_at": "2015-02-24T18:20:06Z",
    "updated_at": "2015-02-24T18:20:07Z",
    "browser_download_url": "https://github.com/stant/mdcsvimporter2015/releases/download/v18/mdcsvimporter-beta-18.zip"

or on command line do:
wget --no-check-certificate https://api.github.com/repos/stant/mdcsvimporter2015/releases

Upvotes: 2

Somsubhra
Somsubhra

Reputation: 1219

I have written a small web application in javascript for showing count of the number of downloads of all the assets in the available releases of any project on Github. You can try out the application over here: http://somsubhra.github.io/github-release-stats/

Upvotes: 116

andy-berry-dev
andy-berry-dev

Reputation: 2324

GitHub has deprecated the download support and now supports 'Releases' - https://github.com/blog/1547-release-your-software. To create a release either use the GitHub UI or create an annotated tag (http:// git-scm.com/book/ch2-6.html) and add release notes to it in GitHub. You can then upload binaries, or 'assets', to each release.

Once you have some releases, the GitHub API supports getting information about them, and their assets.

curl -i \
https://api.github.com/repos/:owner/:repo/releases \
-H "Accept: application/vnd.github.manifold-preview+json"

Look for the 'download_count' entry. Theres more info at http://developer.github.com/v3/repos/releases/. This part of the API is still in the preview period ATM so it may change.

Update Nov 2013:

GitHub's releases API is now out of the preview period so the 'Accept' header is no longer needed - http://developer.github.com/changes/2013-11-04-releases-api-is-official/

It won't do any harm to continue to add the 'Accept' header though.

Upvotes: 13

Michele
Michele

Reputation: 673

As mentioned, GitHub API returns downloads count of binary file releases. I developed a little script to easly get downloads count by command line.

Upvotes: 8

Rarylson Freitas
Rarylson Freitas

Reputation: 197

Formerly, there was two methods of download code in Github: clone or download as zip a .git repo, or upload a file (for example, a binary) for later download.

When download a repo (clone or download as zip), Github doesn't count the number of downloads for technical limitations. Clone a repository is a read-only operation. There is no authentication required. This operation can be done via many protocols, including HTTPS, the same protocol that the web page uses to show the repo in the browser. It's very difficult to count it.

See: http://git-scm.com/book/en/Git-on-the-Server-The-Protocols

Recently, Github deprecate the download functionality. This was because they understand that Github is focused in building software, and not in distribute binaries.

See: https://github.com/blog/1302-goodbye-uploads

Upvotes: 7

Related Questions