list and batch download files on gumroad
Clarify and expand code comments
Use argument for directory path in grab.sh


browse  log 



You can also use your local clone with git send-email.


This project provides a go script gumroad_fetch.go to list all the files associated with a valid gumroad subscription and the URL of the resource, and a shell script grab.sh that uses that list to incrementally download every file in the subscription, or every file you want to download. grab.sh is meant to work well over a long period of time and several download sessions that can be stopped and continued at any time.

Tested under Linux with Go (1.18) and dash shell ( Simple and portable but probably has some easily fixable line delimiter bug on Mac or under Windows using Cygwin or similar.


gumroad_fetch.go requires Go to build but otherwise only depends on the stdlib. grab.sh requires wget and a POSIX compliant shell.


There are some constants in gumroad_fetch.go that need to be set.

These are GUMROAD_EMAIL and RESOURCE_ID. GUMROAD_EMAIL is the email that is subscribed to a feed. You can get the RESOURCE_ID from the URL you use to access the feed, for example if the URL is https://app.gumroad.com/d/54ca9138c0de04a832aa135fd31925b7, the RESOURCE_ID is 54ca9138c0de04a832aa135fd31925b7.

These are constants rather than user input because handling user input would mean handling user input.

$ $EDITOR gumroad_fetch.go   # Set constants
$ go build gumroad_fetch.go  # Build script

You can download all files available in the subscription with ./grab.sh [directory].

However if you want to only download some of the files, the shell script has logic to only download the files remaining in a file defined in the shell script, by default ./list.csv.

$ ./gumroad_fetch > list.csv # Pre-generate list.csv
$ $EDITOR list.csv           # Remove some lines from list.csv
$ ./grab.sh                  # Begin archival - grab.sh will rewrite list.csv,
                             # but won't overwrite any removed lines