
Pyzotero: An API Client for the Zotero API
Quickstart
uv add pyzotero or pip install pyzotero or conda install conda-forge::pyzotero
- You'll need the ID of the personal or group library you want to access:
- Your personal library ID is available here, in the section
Your userID for use in API calls
- For group libraries, the ID can be found by opening the group's page:
https://www.zotero.org/groups/groupname, and hovering over the group settings link. The ID is the integer after /groups/
- You'll also need† to get an API key here
- Are you accessing your own Zotero library?
library_type is 'user'
- Are you accessing a shared group library?
library_type is 'group'.
Then:
from pyzotero import zotero
zot = zotero.Zotero(library_id, library_type, api_key)
items = zot.top(limit=5)
for item in items:
print(f"Item: {item['data']['itemType']} | Key: {item['data']['key']}")
Documentation
Full documentation of available Pyzotero methods, code examples, and sample output is available on Read The Docs.
Command-Line Interface
Pyzotero includes an optional command-line interface for searching and querying your local Zotero library. The CLI must be installed separately (see Installation).
Basic Usage
The CLI connects to your local Zotero installation and allows you to search your library, list collections, and view item types:
pyzotero search -q "machine learning"
pyzotero search -q "climate change" --fulltext
pyzotero search -q "methodology" --itemtype book --itemtype journalArticle
pyzotero search --collection ABC123 -q "test"
pyzotero search -q "climate" --json
pyzotero listcollections
pyzotero itemtypes
Search Behaviour
By default, pyzotero search searches only top-level item titles and metadata fields.
When the --fulltext flag is used, the search expands to include all full-text indexed content, including PDFs and other attachments. Since most full-text content comes from PDF attachments rather than top-level items, the CLI automatically retrieves the parent bibliographic items for any matching attachments. This ensures you receive useful bibliographic records (journal articles, books, etc.) rather than raw attachment items.
Output Format
By default, the CLI outputs human-readable text with a subset of metadata including:
- Title, authors, date, publication
- Volume, issue, DOI, URL
- PDF attachments (with local file paths)
Use the --json flag to output structured JSON.
Installation
- Using uv:
uv add pyzotero
- Using pip:
pip install pyzotero
- Using Anaconda:
conda install conda-forge::pyzotero
Optional: Command-Line Interface
Pyzotero includes an optional command-line interface for searching and querying your local Zotero library. As it uses the local API server introduced in Zotero 7, it requires "Allow other applications on this computer to communicate with Zotero" to be enabled in Zotero's Settings > Advanced.
Installing the CLI
To install Pyzotero with the CLI:
- Using uv:
uv add "pyzotero[cli]"
- Using pip:
pip install "pyzotero[cli]"
Using the CLI without installing
If you just want to use the CLI without permanently installing Pyzotero, you can run it directly:
- Using uvx:
uvx --from "pyzotero[cli]" pyzotero search -q "your query"
- Using pipx:
pipx run --spec "pyzotero[cli]" pyzotero search -q "your query"
See the Command-Line Interface section below for usage details.
Installing from Source
- From a local clone, if you wish to install Pyzotero from a specific branch:
Example:
git clone git://github.com/urschrei/pyzotero.git
cd pyzotero
git checkout main
uv sync
Testing
Run pytest . from the top-level directory. This requires the dev dependency group to be installed: uv sync --dev / pip install --group dev
Issues
The latest commits can be found on the main branch, although new features are currently rare. If you encounter an error, please open an issue.
Pull Requests
Pull requests are welcomed. Please read the contribution guidelines. In particular, please base your PR on the main branch.
Versioning
As of v1.0.0, Pyzotero is versioned according to Semver; version increments are performed as follows:
- MAJOR version will increment with incompatible API changes,
- MINOR version will increment when functionality is added in a backwards-compatible manner, and
- PATCH version will increment with backwards-compatible bug fixes.
Citation
Pyzotero has a DOI:

You may also cite Pyzotero using CITATION.cff.
A sample citation (APA 6th edition) might look like:
Stephan Hügel, The Pyzotero Authors (2019, May 18). urschrei/pyzotero: Version v1.3.15. http://doi.org/10.5281/zenodo.2917290
License
Pyzotero is licensed under the Blue Oak Model Licence 1.0.0. See LICENSE.md for details.
† This isn't strictly true: you only need an API key for personal libraries and non-public group libraries.