Automated workflow to enrich DOI (Digital Object Identifier) links with publication metadata and author details, outputting structured data to Google Sheets for lead generation.
This n8n workflow automates the process of enriching academic DOI links with comprehensive publication metadata. It reads DOI lists from Google Sheets, queries the CrossRef API for metadata, and writes structured output back to sheetsβperfect for academic lead generation, research analysis, and publication tracking.
- β Automated DOI Processing - Reads DOI links from Google Sheets input
- β Rich Metadata Extraction - Retrieves titles, authors, affiliations, journals, abstracts
- β Error Handling - Gracefully handles invalid DOIs with proper failure tracking
- β Open Access Detection - Identifies OA publications via license information
- β Rate Limiting - Respects API quotas with built-in delays
- β Structured Output - 17-column format ready for analysis and lead generation
| Technology | Purpose |
|---|---|
| n8n | Workflow orchestration platform |
| CrossRef API | World's largest academic metadata database |
| Google Sheets API | Input/output data management |
- Manual Trigger - Start processing on demand
- Read DOI List - Fetch DOIs from Google Sheets input tab
- Filter Pending DOIs - Process only items with "Pending" status
- Loop Over DOIs - Sequential processing with batching
- Get CrossRef Metadata - Query CrossRef API with error handling
- Check API Success - Branch logic for success/failure handling
- Format Success Data - Structure 17-column output with full metadata
- Format Failed Data - Mark failed DOIs with error status
- Append to Output Sheet - Write results to Google Sheets
- Rate Limit Delay - 2-second pause between requests
Performance with 10 Sample DOIs:
- β 7/10 Successful (70% with mock data)
- β 3/10 Failed (invalid mock DOIs)
- π― Expected Real-World Rate: 85-90% (for valid open access DOIs)
Successfully Enriched Publishers:
- PLoS ONE
- MDPI (Antibiotics, Sensors, Cancers)
- Springer (Insights into Imaging)
- Cell
- And more...
- n8n instance (self-hosted or cloud)
- Google account with Sheets API access
- CrossRef API access (free, no key required)
-
Import Workflow
# Download workflow.json from this repository # In n8n: Settings > Import from File > Select workflow.json
-
Configure Google Sheets Credentials
- Create OAuth2 credentials in n8n
- Authorize access to your Google account
- Update Sheet IDs in "Read DOI List" and "Append to Output Sheet" nodes
-
Prepare Input Sheet
- Create a Google Sheet with two tabs:
- Input Tab: Columns:
DOI,Status,Last_Updated - Output Tab: Auto-populated with 17 columns
- Input Tab: Columns:
- Add DOIs with
Status = "Pending"
- Create a Google Sheet with two tabs:
-
Update Sheet References
Read DOI List node: - Document ID: YOUR_SHEET_ID - Sheet Name: "DOI_Mock_Data" (or your input tab name) Append to Output Sheet node: - Document ID: YOUR_SHEET_ID - Sheet Name: "Sayfa1" (or your output tab name) -
Test Workflow
- Click "Execute Workflow"
- Check output tab for results
- Verify status tracking (Success/Failed)
The workflow creates a 17-column structured output:
| Column | Description | Example |
|---|---|---|
| DOI | Digital Object Identifier | 10.1371/journal.pone.0308174 |
| Title | Publication title | "Machine Learning in Healthcare" |
| Authors | Complete author list | "Smith, J.; Doe, A.; Brown, M." |
| First_Author_Name | First author name | "John Smith" |
| First_Author_Affiliation | Institutional affiliation | "MIT, USA" |
| First_Author_Email | Email address | "N/A" (not in public APIs) |
| First_Author_LinkedIn | LinkedIn profile | "N/A" (not in public APIs) |
| Corresponding_Author_Name | Corresponding author | "N/A" (requires OpenAlex) |
| Corresponding_Author_Email | Contact email | "N/A" (requires OpenAlex) |
| Corresponding_Author_Affiliation | Institution | "N/A" (requires OpenAlex) |
| Publication_Date | Date published | "2024-01-15" |
| Journal | Journal name | "PLoS ONE" |
| Keywords | Publication keywords | "N/A" (sparse in CrossRef) |
| Open_Access | OA status | "Yes" / "No" |
| Abstract | Abstract text (500 chars) | "This study investigates..." |
| Status | Processing status | "Success" / "Failed - DOI not found" |
| Processed_Date | Processing timestamp | "2025-10-01T14:30:00Z" |
// HTTP Request Node Configuration
URL: https://api.crossref.org/works/{{$json.DOI}}
Method: GET
Headers:
User-Agent: mailto:research@example.com
Error Handling: Continue on Error// Code Node - Rate Limit Delay
await new Promise(resolve => setTimeout(resolve, 2000));
return $input.all();// IF Node Condition
{{ $json.message !== undefined && $json.status === 'ok' }}- Issue: CrossRef metadata rarely includes email addresses
- Reason: Privacy regulations (GDPR), publisher policies
- Solution: Phase 2 enhancement with OpenAlex API + Hunter.io integration
- Issue: No direct API for LinkedIn discovery
- Solution: ORCID β LinkedIn mapping or manual review workflow
- Issue: CrossRef
subjectfield is often empty - Solution: PubMed API integration or AI extraction from abstracts
- Issue: CrossRef doesn't flag corresponding authors
- Solution: OpenAlex API has
is_correspondingflag
- Benefit: Richer author metadata, corresponding author identification
- Coverage: +10-15% affiliation data
- Timeline: 1-2 days
- Option A: Pattern generation (30-40% coverage, free)
- Option B: Hunter.io API (60-70% coverage, $49-$399/month)
- Timeline: 0.5-1 day
- Option A: ORCID profile mapping (10-15% coverage, legal, free)
- Option B: Web scraping (50-60% coverage, violates ToS, risky)
- Timeline: 1-2 days
- Option A: PubMed API (60% for indexed papers)
- Option B: AI extraction from title/abstract (90%, ~$0.05 per DOI)
- Timeline: 0.5-1 day
| Metric | Value |
|---|---|
| Single DOI processing | ~3 seconds |
| 10 DOIs | ~60 seconds |
| 100 DOIs | ~5 minutes |
| 1000 DOIs | ~50 minutes |
| API success rate | 100% for valid DOIs |
| Expected enrichment rate | 85-90% |
- Cause: DOI doesn't exist or CrossRef doesn't have metadata
- Solution: Verify DOI is correct (try on doi.org)
- Cause: Google Sheets connection lost
- Solution: Re-authenticate Google credentials in n8n
- Cause: Publisher didn't provide to CrossRef
- Solution: Consider Phase 2 (OpenAlex) for better coverage
- Cause: Too many requests in short time
- Solution: Increase delay in "Rate Limit Delay" node
n8n-doi-enrichment/
βββ README.md # This file
βββ workflow.json # Importable n8n workflow
βββ workflow-screenshot.png # Visual workflow diagram
βββ DOI_Mock_Data.csv # Sample input data
βββ DOI_Output_Template.csv # Expected output structure
βββ DOI_Project_Final_Summary.md # Complete project documentation
βββ Requirements_vs_Deliverables.md # Gap analysis
βββ LICENSE # MIT License
- Academic Lead Generation - Identify authors for outreach campaigns
- Research Analysis - Track publications by topic/journal/institution
- Open Access Monitoring - Identify freely available research
- Citation Management - Build structured bibliographic databases
- Institutional Reporting - Track departmental publications
- Grant Compliance - Verify OA requirements for funded research
- CrossRef API: FREE β (unlimited, polite pool)
- Google Sheets API: FREE β (within quota)
- n8n: $20/month (self-hosted: FREE)
- Total: $0-20/month
- This workflow uses only public academic APIs
- No personal data collection beyond published metadata
- GDPR-compliant (no email scraping or unauthorized data gathering)
Contributions, issues, and feature requests are welcome!
This project is licensed under the MIT License - see the LICENSE file for details.
UMUR KIZILDAS
- GitHub: @umur957
- CrossRef for providing free, comprehensive academic metadata API
- n8n community for excellent automation platform
- Open Access movement for making research freely available
Built with β€οΈ using n8n
