zenodo_get: a downloader for Zenodo records

January 24, 2026 ยท View on GitHub

CI CircleCI Build status Coverage Status pyversion PyPI - License DOI

A Python tool for downloading files from Zenodo records. Requires Python 3.10+.

Installation

The simplest way (no installation needed) is using uvx, a tool runner from uv:

uvx zenodo_get RECORD_ID_OR_DOI

Alternatively, install with pipx or pip:

pipx install zenodo-get
# or
pip install zenodo-get

Usage

uvx zenodo_get RECORD_ID_OR_DOI

Common Options

OptionDescription
-o DIROutput directory (created if needed)
-g PATTERNFilter files by glob pattern (e.g., -g "*.pdf")
-mGenerate md5sums.txt for verification
-w FILEWrite URLs to file instead of downloading (-w - for stdout)
-eContinue on error (skip failed files)
-nStart fresh (don't resume previous download)
-v NVerbosity level 0-4 (default: 2)

Retry Options

OptionDescription
--max-http-retries NHTTP retries with exponential backoff (default: 5)
--backoff-factor NBackoff multiplier in seconds (default: 0.5)
-R NApplication-level retries for checksum failures (default: 1)
-p NPause between retries in seconds (default: 3)
-t NConnection timeout in seconds (default: 25)

Examples

# Download all files from a record
uvx zenodo_get 1234567

# Download only PDFs to a specific directory
uvx zenodo_get 1234567 -g "*.pdf" -o ./downloads

# Generate URL list for external download manager
uvx zenodo_get 1234567 -w urls.txt

# Use DOI instead of record ID
uvx zenodo_get -d 10.5281/zenodo.1234567

Exit Codes

  • 0: All files downloaded successfully
  • Non-zero: Error occurred (checksum mismatch, download failure, timeout, etc.)

Python API

You can use zenodo_get as a library in your Python projects.

Installation

# Add to your project
uv add zenodo-get
# or
pip install zenodo-get

Usage

from zenodo_get import download

# Download all files from a record
download("10.5281/zenodo.1234567", output_dir="./data")

# Download only specific files using glob pattern
download(
    record_or_doi="1234567",
    output_dir="./data",
    file_glob="*.csv",
)

# Multiple glob patterns
download(
    record_or_doi="1234567",
    output_dir="./data",
    file_glob=["*.csv", "*.json"],
)

Parameters

ParameterTypeDefaultDescription
record_or_doistr-Zenodo record ID or DOI
output_dirstr | Path"."Output directory
file_globstr | tuple"*"Filter files by glob pattern(s)
md5boolFalseGenerate md5sums.txt
continue_on_errorboolFalseContinue on download errors
start_freshboolFalseDon't resume previous download
timeoutfloat15.0Connection timeout in seconds
exceptions_on_failureboolTrueRaise exceptions on errors

Citation

If you use this tool in academic work:

uvx zenodo_get --cite