A Zotero plugin for syncing items into Notion
Concept by @arhoff π©π»βπ¬ | Built with β€οΈ by @dvanoni
- Allows you to integrate your reference manager, task list, reading notes, analytical tables, and drafts in one location.
- The name of database entries is the in-text citation, which allows you to easily link to references when writing in Notion.
- Create custom views to filter and sort large reference lists by project, tag, author, etc.
- Backlinks make it easy to locate any of the notes and drafts that mention a reference.
- Link references to entries in other databases, such as projects, tasks, manuscripts in your publication pipeline, publishing outlets, etc.
The Notero plugin watches for Zotero items being added to or modified within any collections that you specify in the Notero preferences. Whenever an item is added or modified, Notero does a few things:
- Save a page with the Zotero item's properties (title, authors, etc.) into the Notion database specified in Notero preferences.
- Add a
notion
tag to the Zotero item. - Add an attachment to the Zotero item that links to the page in Notion.
In addition to providing a convenient way to open a Notion page from Zotero, the link attachment also serves as a reference for Notero so that it can update existing pages instead of creating duplicate pages for a given Zotero item.
By default, Notero will sync items in your monitored collections whenever they are modified. You can disable this functionality by unchecking the Sync when items are modified option in Notero preferences.
If you disable Sync when items are modified and would like to trigger a re-sync of an item, you can remove the item from the monitored collection and add it back in.
The latest release of the plugin is available on GitHub. See the changelog for release notes.
Detailed setup instructions are below.
-
Obtain a Notion internal integration token from https://www.notion.com/my-integrations.
- See Notion developer docs for detailed instructions.
-
Create the database that you would like to sync Zotero items into.
- See examples below that you can duplicate into your Notion workspace.
-
Share the database with the integration you created in step 1.
- See Notion developer docs for detailed instructions.
-
Take note of the database ID.
-
From the Notion developer docs, here's a quick procedure to find the database ID:
Open the database as a full page in Notion. Use the Share menu to Copy link. Now paste the link in your text editor so you can take a closer look. The URL uses the following format:
https://www.notion.so/{workspace_name}/{database_id}?v={view_id}
Find the part that corresponds to
{database_id}
in the URL you pasted. It is a 36 character long string. This value is your database ID.
-
-
Configure the database properties as desired. See the database properties section below for more details.
Notero can sync data for the properties listed below. The only property required by Notero is one with the Title property type. The other properties are optional, so you can use only the ones that suit your needs.
The Title property can be named something other than Name
as long as it
does not conflict with any of the other property names. The name and type of
the other properties must be configured exactly as specified here.
Property Name | Property Type | Required |
---|---|---|
Name |
Title | Yes |
Abstract |
Text | No |
Authors |
Text | No |
DOI |
URL | No |
Editors |
Text | No |
File Path |
Text | No |
Full Citation |
Text | No |
In-Text Citation |
Text | No |
Item Type |
Select | No |
Tags |
Multi-select | No |
Title |
Text | No |
URL |
URL | No |
Year |
Number | No |
Zotero URI |
URL | No |
- Download the latest version
of the
.xpi
file.- Note for Firefox users: You'll need to right-click the
.xpi
file link and choose Save Link As... in order to properly download the file.
- Note for Firefox users: You'll need to right-click the
- Open the Zotero Add-ons Manager via the Tools β Add-ons menu item.
- Install the
.xpi
file by either:- dragging and dropping it into the Add-ons Manager window or
- selecting it using the Install Add-on From File... option in the gear menu in the top-right corner of the window
- Restart Zotero to activate the plugin.
- Open the Notero preferences from the Tools β Notero Preferences... menu item, and enter the required preferences.
While this would be nice, it's unfortunately beyond the scope of this plugin. Getting updates from Notion into Zotero would require setting up a hosted service that subscribes to webhooks from Notion and then uses the Zotero API to update items in Zotero. Notion has yet to release official webhook support, but there are some third-party tools that can be used for this. In theory, this is technically possible, but it would be a separate project.
To sync multiple items that are already in a monitored collection, you can trigger a sync by adding a temporary tag to them. Create a new tag, add it to all the items by selecting them and dragging them onto the tag, then delete the tag.
Video example of syncing multiple items
syncing-multiple-items.mp4
If you receive the following error:
APIResponseError: Could not find database with ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
This most likely means you have not given Notero access to your Notion database. Ensure you follow all the steps from the Configure Notion section. Clicking the Share button in the top-right corner of your database should show the Notero integration as follows:
If you receive the following error:
APIResponseError: property is not a property that exists
This can happen if you previously synced items into one Notion database and then change your Notero preferences to specify a different database. Notero may be trying to update pages in the old database instead of creating pages in the new database, and this error can occur if different properties were configured in the different databases.
To solve this, you should delete the old database in Notion and then permanently delete it from the Trash in Notion.
We provide some example Notion databases that have been configured with all the properties synced by Notero.
Once you've opened one of the examples, click the Duplicate button in the top-right corner of the page to duplicate it into your Notion workspace.
An empty database that contains only the properties synced by Notero. Useful if you want to start from scratch and customize it yourself.
A database with multiple views and some sample entries. See below for descriptions of how you can use the different views.
- Table view enables easy editing of entries.
- Easily navigate to the original source by clicking on the
DOI
orURL
property.- DOIs for books may need to be copy & pasted manually from the
Extra
field in Zotero.
- DOIs for books may need to be copy & pasted manually from the
- Click on the
Zotero URI
property to view/edit the entry in Zotero or to export the bibliography entry in a different citation style.
- Keep track of promising references you need to locate, books and articles you requested via interlibrary loan, and works that are relevant enough to warrant taking in-depth notes or writing a memo.
- Quickly analyze and compare attributes of literature you are reviewing (e.g., theoretical framework, sample, methods used, key findings, etc.)
- Easily link to other works using the
Related References
property (e.g., articles in the same special issue, book chapters in the same edited book, studies and commentary that respond to or extend other works).
- Add a cover image (e.g., right click β copy image address from Amazon).
- Keep track of which books you own, borrow, and lend to others.
- Add due dates and reminders for library books and interlibrary loans.
Notero was scaffolded with generator-zotero-plugin and is built with zotero-plugin-webpack.
The steps below should allow you to build and run Notero yourself.
-
To avoid any potential damage to your default Zotero profile, you can create a new profile for development purposes.
-
Configure Zotero to run the plugin directly from source. Because the
start
script already handles most of the steps, you only need to ensure your Zotero profile directory has a directory namedextensions
.- Note: The
start
script does not currently support Windows. If developing on Windows, you will need to follow all the configuration steps in the Zotero docs.
- Note: The
-
Create a
profile.json
file by copyingprofile.json.example
. This file is used by thezotero-start
command to determine where to install the extension when running a development build.dir
is the absolute path to your Zotero profile directorylog
is the name of the file that Zotero debug output will be written toname
is the name of your Zotero profile (e.g.default
)
-
Install dependencies:
npm ci
-
Build the plugin and start Zotero with it installed:
npm start
The
start
script runszotero-start
which performs a number of steps:-
Executes
npm run build
to build the plugin into thebuild/
directory. -
Removes the
extensions.json
file and Notero.xpi
file from your Zotero profile directory. -
Writes a new
.xpi
file containing the absolute path to thebuild/
directory. -
Starts Zotero with the profile specified in
profile.json
and the following command line arguments:-purgecaches -jsconsole -ZoteroDebugText
If you would like to see the commands without executing them, you can run:
npm start -- --dryRun
-
-
Run the
version
script (not to be confused withnpm version
) to runstandard-version
. This will create a new commit with a bumped package version and updated changelog, and then it will create a version tag on the commit.npm run version
-
Push the new version to GitHub:
git push --follow-tags
-
GitHub Actions will run the
release
workflow upon any new commit. This workflow will build the.xpi
file and then use thezotero-plugin-release
command fromzotero-plugin-webpack
to create a GitHub release with the.xpi
file.