A Notion template to help you keep track of the papers you read 📜, their authors 👤, your notes 📝, and more 🔥
If you ❤️ or simply use this project, don't forget to give the repository a ⭐, it means a lot to us !
This project was built as a Notion-based alternative to reference management software such as Zotero and Mendeley.
It is composed of the NoRA Notion template for you to build on top of, as well as NoRA-Tools to programmatically:
- 🔥 upload papers to your NoRA library as easily as with Zotero Connector from a simple URL or an identifier
- 🔥 move all your already-existing Zotero library to NoRA
The NoRA Notion template provides you with a structure of interconnected databases to keep track of your research papers and notes. More specifically, the template contains the following databases:
🏗️ Projects📜 Papers👤 People🏢 Affiliations🤹 Conferences & journals🧲 Key topics
The inner workings of the template are quite straightforward, the best way to get familiar with it is probably to play with it 😉 !
The NoRA-Tools provide functionalities to programmatically upload data to your NoRA template. The main functionalities are:
- uploading a paper and associated metadata to NoRA from a URL or from an identifier (DOI, ISBN, PMID, arXiv ID), exactly like with Zotero Connector
- uploading your whole Zotero library to NoRA
- Python ≥ 3.9
- pip
- Node.js ≥ 18 and ≤ 20
- Notion account with API credentials
- (optional) Zotero account with API credentials
Note: We have experienced issues with too-recent
node.jsversions such asnode 23so we recommend making sure you usenode 20for now. You can check your version by runningnode -v.
Simply duplicate the NoRA template to your personal Notion account.
Note: You can freely modify or extend the NoRA template. However, keep in mind that if you want to use NoRA-Tools after modifying some sensitive page fields, you may need to adjust your Notion configuration accordingly.
Next, you will need to prepare some private keys needed to upload data to your NoRA. To this end, do the following:
- Create an integration for your NoRA workspace
- Recover your API secret token
- For each database in the NoRA template (i.e. Papers, People, Affiliations, Venues, Topics):
- Give your integration permission to access this database
- Recover your database ID. For this, open the database page in a browser. The
database ID is a 32-alphanumeric-character that can be recovered from the URL of the page:
https://www.notion.so/this_is_your_32_character_database_id?v=you_can_ignore_the_rest
Once you have recovered your API secret token and the database IDs, you should have something like this:
notion:
token: your_api_secret_token
papers_db_id: your_papers_database_id
people_db_id: your_people_database_id
affiliations_db_id: your_affiliations_database_id
venues_db_id: your_venues_database_id
topics_db_id: your_topics_database_idKeep these safe somewhere, we will need these in a bit!
If you intend to move your whole Zotero library to Notion, you will need to get some private keys to download your library. To this end, you will need to:
- Get your Zotero library ID by checking the UserID in your profile settings
- Create a Zotero API key in your profile settings
You should then have something like this:
zotero:
library_id: your_library_id
api_token: your_api_keyKeep these safe somewhere, we will need these in a bit!
Open a terminal and run
pip install git+https://github.com/drprojects/nora.git👩💻 NoRA from source for developers
If you want to extend NoRA-Tools to your need, you can install from source:
# Get the source code
git clone --recurse-submodules https://github.com/drprojects/nora
# Install the python dependencies
cd nora
pip install -e .
# Install the node.js server
cd src/nora/translation_server
npm install
cd ../..then configure you API keys
nora configurethis will prompt you to pass your secret keys, which will be saved in
~/.nora/user.yaml.
⚠️ Are you using a `.netrc` file with a `default` configuration?
If you are using a ~/.netrc file to keep track of your passwords locally,
and have declared a default account among your configurations, the requests
library will crash when trying to connect to Notion. Please remove your
default account and all should be fine 😉
Open a terminal and run
pip uninstall noraNoRA-Tools mimics the behavior of the Zotero Connector, which has two mechanisms for uploading a paper.
From a URL:
nora url https://arxiv.org/abs/2204.07548From an identifier (DOI, ISBN, PMID, arXiv ID):
nora id 2204.07548nora zotero-uploadYou can further customize the behavior of NoRA-Tools by manually editing
your personal config file located at ~/.nora/user.yaml.
Modifying database names in NoRA️
By default, NoRA-Tools expect the attribute fields (e.g. column names in Notion)
of your papers, people, etc. to have specific values. If you want to adjust
those, you can do so by overwriting the keys in your personal config file
~/.nora/user.yaml:
# If you happen to modify your field names in Notion, update the
# following database-specific keys
person_keys:
name: 'Name'
affiliations: '🏢 Affiliations'
papers: '📜 Papers'
website: 'Website'
paper_keys:
name: 'Name'
authors: '👤 Authors'
abstract: 'Abstract'
topics: '🧲 Key topics'
url: 'URL'
to_read: 'Reading status'
year: 'Year'
venue: '🤹 Venue'
affiliation_keys:
name: 'Name'
venue_keys:
name: 'Name'Parsing of `🤹 Conferences & journals` from metadata
By default, when parsing a paper from a remote database, NoRA-Tools will try to
figure out which 🤹 Conferences & journals to place it under. To this end,
the metadata of the searched article will be parsed and matched against a list
of pre-defined conferences and papers. If a match is found, the corresponding
acronym will be attached to the paper in NoRA.
NORA-Tools comes with a predefined set of venue-acronyms matches which can be
found in the venues parameter of your ~/.nora/user.yaml like so:
venues:
"text to be matched when searching the conference/journal": 'name used in NoRA'When searching for a match, we use the following procedure: 1. Exact matches of full-text keys (longer first) 2. Exact matches of acronyms (longer first) 3. Fuzzy fallback if nothing matches 4. None if no sufficiently satisfying match is found
Feel free to edit or extend the venues of your ~/.nora/user.yaml to suit
your need and domain of research.
Skipping Zotero collections when migrating Zotero library to Notion
By default, when calling nora zotero-upload, the collections (i.e. folders)
in your Zotero library will be used to populate the Key Topics field of
your papers in NoRA. If you want to exclude some of your collections from this
behavior, your may do so by specifying them in your ~/.nora/user.yaml:
zotero:
ignored_collections: ['collection name 1', 'collection name 2']NoRA is released under the MIT License.
MIT License
Copyright (c) 2023-2025 Damien Robert
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.