Link Search Menu Expand Document

Zotero To Notion: Tractable Lit Review (I)


Ever wondered how to stay on top of scientific literature? Meet ZoteroToNotion, a Python-based, fully open-source package, that allows you to automatically keep track of your literature review collected on Zotero in Notion.


Table of contents
  1. Description
  2. GitHub Repository
  3. Usage
    1. Zotero Setup
    2. Interfacing with Notion
    3. Running the script
  4. Requirements
  5. Directory Structure
  6. Sources

ZoteroToNotion in actionZoteroToNotion in action

Description

This project allows you to export newly added or recently updated documents in Zotero (local database, synced via Google Drive) to your Notion database via the Notion APIs and by reading the zotero.sqlite database LOCALLY. If you’d like the export to happen as soon as you make a change in Zotero, then you can run the script scripts/runZoteroToNotion.sh peridocially at a reasonable frequency via a crontab job.

GitHub Repository

You can find the all the assosciated code for ZoteroToNotion in this github repository

Usage

Zotero Setup

  • Ensure that the plugins BetterBib and Zotfile are installed in your version of Zotero.
  • If you want to run this on an automated schedule on server using Crontab, one option is to sync your local Zotero database via Google Drive (follow instructions online) and use it as a READ_ONLY_DIRECTORY.

Interfacing with Notion

  • Register a private integration on your Notion workspace (follow instructions online)
  • Obtain its notionToken
  • Create a database on Notion to contain all the entries from Zotero. Make sure it has the following properties. If you want to add more properties or remove, modify the function getDataFromZoteroDatabases and getNotionPageEntryFromPropObj in lib/port_utils.py.
Title property: Citation
Text properties: Title, UID, Authors, Venue, Year, Abstract, Type, BibTex, Filename, Collection Names, Zotero Tags
Url properties: URL
Date properties: Created At, Last Modified At
  • Get its databaseID and add it to secrets/secrets_notion.json in the following format:
{
    "notionToken": "your notion token",
    "databaseID": "your notion database ID"
}

Running the script

  • Create a python conda env using requirements.txt
  • Run the python script src/zoteroToNotion.py with --copyZotero argument as True (default)
  • Currently, the logic reads all items from the Zotero database and all items in the Notion database. For each item in Zotero, we check if it already exists in Notion. If yes, we check if the last modified time on Zotero is AFTER the last edited time in Notion. If yes, we update the Notion entry. If not, there’s nothing to update. If the Zotero item doesn’t exist in Notion, we create a brand new row in Notion.
  • You can periodically run this file again as a script scripts/runZoteroToNotion.sh using a crontab job to get periodic updates. For more information on Crontab, check out this reference.

Requirements

You can install all the requirements using the following command:

pip install -r requirements.txt
pip install -e .

Directory Structure

.
+-- docs/
|   +-- images/
|   |   +-- demo.png
|   |   +-- icon.png
+-- globalStore/
|   +-- constants.py
+-- lib/
|   +-- port_utils.py
|   +-- utils.py
+-- notebooks/
|   +-- Trial_ZoteroDatabase.py
+-- scripts/
|   +-- runZoteroToNotion.sh
+-- secrets/
|   +-- secrets_notion.json
|   +-- secrets_zotero.json
+-- src/
|   +-- zoteroToNotion.py
+-- tests/
|   +-- testNotionAPI.py
|   +-- testZoteroRead.py
+-- .gitignore
+-- juyptext.toml
+-- LICENSE
+-- README.md
+-- requirements.txt
+-- STDOUTlog_examples.txt

Sources



If you use this in your work and want to adapt this code, please consider starring the github repo or forking from it!

You can cite it as:

@misc{ nanbhas2023zoteroToNotion,
  title         = "Zotero To Notion: Tractable Lit Review (I)",
  author        = "Bhaskhar, Nandita",
  howpublished  = "GitHub Repo, https://github.com/nanbhas/ZoteroToNotion",
  year          = "2023",
  url           = "https://web.stanford.edu/~nanbhas/projects/zotero-to-notion/"
}