Notion
If you are using Notion you might already have Notero installed to manage you references and annotations.
One issue that always bugged me and I never had the time to explore is that autotagging in Zotero is not fantastic.
And when I am in research deep dive I am not always great in adding meta data. So, while catering for my pain management, aka reading in bed I have time to explore.
This is the result
What’s in the guide
Part 1 — Notion setup
Add a Tags property (Multi-select, exact capitalisation) to your Notero database. The property schema table lists all supported Notero fields. Connect Notero via OAuth and enable “Sync when items are modified” — that’s the hook the whole pipeline relies on.
Part 2 — Actions & Tags configuration
Install the plugin, store your API key securely in Zotero’s own preferences (not in the script), and create a createItem → Script action.
Part 3 — The automation script
The core JavaScript uses async/await and fetch() inside Zotero’s privileged context. It:
Guards against non-regular items and missing/short abstracts
Reads the key from Zotero.Prefs (never hardcoded)
Sends title + abstract to the LLM with a librarian-style system prompt
Parses the JSON array response with a regex fallback for non-compliant models
De-duplicates against existing tags, then calls item.saveTx() — which automatically triggers Notero’s sync
Part 4 — Provider swaps
Drop-in replacements for Anthropic Claude and local Ollama, including the CORS flag Ollama needs to accept requests from Zotero.
Part 5 — Timing details
Explains why saveTx() is the correct sync trigger, plus a Zotero.Notifier observer pattern for when the browser connector saves abstract metadata in a second pass.
Part 6 — Troubleshooting table
Seven common failure modes with specific fixes.
Part 7 — Enhancements
Colour-coding AI tags teal in Zotero’s tag panel, writing to a separate Extra field instead of mixing with manual tags, and exporting the action to a .yml backup.
Documents for Download
https://www.perplexity.ai/computer/tasks/7b5c7a49-22ce-4d7d-b688-5c3ff805bdc2