A Zotero plugin that enhances your research workflow with intelligent metadata discovery and automated file management.
- Attachment Validation: Automatically detect and remove broken file links while preserving valid PDFs and weblinks
- Smart Cleanup: Bulk processing to maintain clean, working attachments across your library
- Multi-API Metadata Fetching: Comprehensive metadata updates using 6+ APIs (CrossRef, OpenAlex, Semantic Scholar, OpenLibrary, Google Books, DBLP)
- Automatic DOI/ISBN Discovery: Find missing identifiers through intelligent title and author matching
- Support for Multiple Item Types: Journal articles, conference papers, preprints, and books
- Fallback Strategies: Multiple search approaches when primary methods fail
- Multi-Source File Search: Access content from 8+ sources including:
- Open Access: Unpaywall, CORE, Internet Archive
- Preprint Servers: arXiv with high reliability
- Academic Repositories: Library Genesis, Sci-Hub
- Custom Resolvers: Multiple mirror support with automatic fallback
- Smart Download Logic: Only downloads when needed, avoids duplicates
- Stored File Creation: All downloads create local stored files (never links)
Retrieval Flow Diagram
The retrieval flow is based on the following diagram:
This diagram was inspired by this Reddit post about accessing scientific papers.
- Published Version Discovery: Automatically find journal publications of arXiv preprints
- Smart Type Conversion: Convert arXiv journal articles to proper preprint format
- Version Management: Handle transitions from preprint to published versions
- Metadata Synchronization: Update bibliographic information when published versions are found
- Concurrent Processing: Handle multiple items simultaneously with intelligent rate limiting
- Progress Tracking: Real-time progress dialogs for large batch operations
- Error Resilience: Continue processing even when individual items fail
- Detailed Reporting: Comprehensive success/failure summaries with actionable insights
- One-Click Access: Right-click context menu integration
- Email Configuration: Simple setup for API access requirements
- Minimal Configuration: Works out-of-the-box with optional email for enhanced features
- Multilingual Support: English and Chinese locales included
- Download the latest release XPI file
- In Zotero 7, go to
Tools→Add-ons - Click the gear icon and select "Install Add-on From File..."
- Select the downloaded XPI file
- Restart Zotero
Note: This extension requires Zotero 7.0 or later. For Zotero 6.x compatibility, use an earlier version of this extension.
- Clone or download this repository
- Install dependencies:
npm install - Run
./build.shto create the XPI package - Install as described above
- Right-click on any item in your Zotero library
- Select
Zotadata→Configure Email - Enter your email address (required for Unpaywall API)
Note: Your email is stored locally in Zotero preferences and only used for API requests to services like Unpaywall. The plugin will prompt you for an email the first time you use features that require it.
Right-click on selected items in your Zotero library to access:
- Validate References: Check and clean up attachments for selected items - removes broken file links while preserving valid PDFs and weblinks
- Update Metadata: Fetch and update metadata for journal articles, conference papers, preprints, and books using multiple APIs (CrossRef, OpenAlex, Semantic Scholar, OpenLibrary, Google Books) - can auto-discover missing DOIs/ISBNs
- Retrieve Files: Search and download missing PDF files from multiple sources (Unpaywall, arXiv, CORE, Library Genesis, Sci-Hub, Internet Archive) - only processes items without existing PDFs
- Process Preprints: Handle arXiv papers by finding published versions, updating metadata, downloading published PDFs, or converting to proper preprint format when no published version exists
Select multiple items to process them all at once. A progress dialog will show the status of each operation.
File retrieval success varies significantly by source type:
High Success Rate:
- arXiv Preprints: Very reliable due to arXiv's open access mandate and stable infrastructure
- Open Access Articles: Good success via Unpaywall for legitimately open access content
Moderate to Low Success Rate:
- Paywalled Journal Articles: More challenging due to publisher restrictions and legal considerations
- Books: Particularly difficult to obtain, especially recent publications
- Recent Papers: Sci-Hub has significantly reduced new uploads due to ongoing legal challenges
For difficult-to-find content, consider these community-recommended approaches:
- Anna's Archive: A promising source with about 5-minute wait time for link generation, but it is free.
- Google: Google is always our friend as the resource might be shared in reddit, github or some niche forums.
Note: This plugin automates the search across legitimate and widely-used academic sources. For content not available through these channels, manual research through additional academic resources may be necessary.
This plugin integrates with several external APIs and services:
- Purpose: Fetch metadata for DOIs
- Rate Limit: 50 requests/second (polite pool)
- Authentication: None required (email recommended)
- Purpose: Comprehensive academic work metadata and DOI discovery
- Rate Limit: Very generous, no authentication required
- Authentication: None required
- Purpose: AI-powered paper search and metadata
- Rate Limit: Reasonable limits for academic use
- Authentication: None required
- Purpose: Book metadata and ISBN discovery
- Rate Limit: Standard API limits
- Authentication: None required for basic use
- Purpose: Find open access PDF links
- Rate Limit: 100,000 requests/day
- Authentication: Email address required
- Purpose: Search and download arXiv papers
- Rate Limit: 3 seconds between requests
- Authentication: None required
- Purpose: Search academic papers for full-text access
- Rate Limit: 10,000 requests/month (free tier)
- Authentication: API key required for higher limits (Not implemented yet)
- Purpose: Academic paper and book repository
- Rate Limit: Subject to site availability
- Authentication: None required
- Purpose: Academic paper access service
- Rate Limit: Subject to site availability and blocking
- Authentication: None required
- Purpose: Open access books and historical documents
- Rate Limit: Standard API limits
- Authentication: None required
zotero-zotadata/
├── manifest.json # Plugin metadata (Zotero 7 format)
├── bootstrap.js # Plugin bootstrap for Zotero 7
├── prefs.js # Default preferences
├── assets/ # Documentation assets
│ ├── images/ # Screenshots and diagrams
│ └── workflows/ # Workflow diagrams and flowcharts
├── content/
│ └── zotadata.js # Main logic
├── chrome/content/
│ ├── preferences.xul # Settings dialog
│ └── progress.xul # Progress window
├── locale/
│ ├── en-US/ # English translations
│ └── zh-CN/ # Chinese translations
├── skin/default/
│ └── zotadata.css # Styles
└── README.md # This file
- Node.js (for build tools and dependencies)
- Zotero 7.0 or later
- Firefox 115+ based platform
- Clone the repository
- Install dependencies:
npm install - Make your changes to the source files
- Make changes to the source files
- Run
./build.shto create XPI package - Test in Zotero 7 development environment
- Unit test the API integration functions
- Test with various item types and DOI formats
- Verify UI responsiveness and error handling
- Test with both Zotero 7 stable and beta versions
This version has been completely rewritten for Zotero 7 compatibility:
- Extension Format: Migrated from
install.rdftomanifest.json - Architecture: Changed from XUL overlays to bootstrapped extension
- APIs: Updated to use Zotero 7 compatible APIs
- Window Management: Adapted to new Zotero 7 window lifecycle
- Preferences: Moved to root-level
prefs.jsfile
When developing this plugin for Zotero 7, ensure the following in your manifest.json:
manifest_version: Must be set to2. Despite Zotero 7 being based on a newer Firefox core that uses Manifest V3 for web extensions, Zotero's own bootstrapped plugins still expectmanifest_version: 2.applicationskey: Zotero-specific properties (likeid,strict_min_version,strict_max_version, andupdate_url) must be within anapplications.zoteroobject.update_url: This field withinapplications.zoterois mandatory for Zotero 7.0.15+ (and possibly earlier Zotero 7 versions). Even for local development, a placeholder URL (e.g.,"https://example.com/update.json") must be provided, otherwise the plugin installation will fail with an "Extension is invalid" error.
Failure to include update_url will result in an error message in the Zotero debug log similar to:
ERROR Loading extension '[email protected]': Reading manifest: applications.zotero.update_url not provided
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly with Zotero 7
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.

