Free, open-source tool to visualise publication patterns of any academic journal indexed in OpenAlex. Live at journaltrends.com.
Paste any journal's ISSN — or type its name — and the page renders interactive charts of country, institution, and author publication trends, plus Problematic Paper Screener integrity-flag rates and Scopus indexing status. All processing happens client-side in the browser; aggregated results are cached by the sibling backend so subsequent visits are instant.
A project of India Research Watch (IRW), built to help researchers compare journals before submitting and to surface integrity signals that often correlate with predatory practices.
- Reviews of Modern Physics
- Nature
- Or paste any ISSN at journaltrends.com
- Country / institution / author trends with fractional counting + year-on-year breakdown
- Problematic Paper Screener integration — flag rates over time, detector mix, country/institution concentration of flagged papers
- Scopus indexing card showing current Active/Inactive status, coverage years, and any "delisted by Scopus" history (with an orange marker on the charts)
- Pretty per-journal URLs (
/journal/<slug>-<issn>) with SEO-optimised prerendered HTML, per-journal OG thumbnails (LinkedIn/X/Slack previews show the country chart), and JSON-LD Periodical + Dataset schemas - Journal-name autocomplete over a bundled index of 84K+ active journals
- Per-chart share buttons (LinkedIn, X, native Web Share API, downloadable PNG)
- Honest data-coverage handling — papers with no OpenAlex country attribution land in a labelled "Unknown" bucket rather than being silently dropped. See the blog post for the methodology + planned recovery via author-affiliation history.
Static SPA on Netlify + Flask + SQLite backend on PythonAnywhere (sibling repo: journal-trends-backend).
┌─────────────────────────┐ ┌──────────────────────────┐
│ Browser (Netlify) │ GET /api/stats/<issn> ──→ │ journal-trends-backend │
│ vanilla JS, Chart.js │ │ Flask + SQLite │
│ no build step │ ←── 200 cached agg ─────── │ on PythonAnywhere │
│ │ or 404 │ │
│ on 404: │ │ cached aggregations │
│ fetch OpenAlex direct │ ─── api.openalex.org ──→ │ PPS dataset │
│ aggregate in-browser │ │ Scopus extension list │
│ render charts │ POST /api/stats/<issn> ─→ │ │
│ │ ←── 201 stored ─────────── │ │
└─────────────────────────┘ └──────────────────────────┘
Netlify also proxies:
/journal/<slug>-<issn> → backend SEO-prerender route
/journal/<slug>-<issn>.png → backend OG-thumbnail route
/sitemap.xml → backend dynamic sitemap
Plain HTML/CSS/JS — no build step.
Option 1: Frontend-only (uncached journals fetch from OpenAlex directly):
python -m http.server 8000
# open http://localhost:8000Option 2: Full stack (recommended) — start the backend, which also serves the frontend in dev mode:
cd ../journal-trends-backend
python app.py # serves on http://localhost:5000
# open http://localhost:5000ES modules require an HTTP origin — opening
index.htmlviafile://may fail in some browsers.
This repo includes netlify.toml with the redirect / proxy / cache-header rules. Either connect Netlify to the repo, or drag-and-drop the folder via app.netlify.com. Build command is empty; publish directory is ..
The bundled data/journal_index.json is refreshed monthly by running the sibling backend's scripts/build_journal_index.py and committing the result here.
journal-trends/
index.html entry
blog/ long-form posts referenced from the UI
data/journal_index.json bundled name → ISSN index (~84K journals)
src/
main.js bootstrap
api/ OpenAlex + backend clients
storage/cache.js IndexedDB cache for fetched works
aggregate/ single-pass aggregation
ui/ search, autocomplete, share, tour, tabs, scopus card
charts/ Chart.js renderers
style/ dark theme + layout
netlify.toml
CHANGELOG.md VERSION LICENSE
Issues and pull requests welcome. The project uses:
- Semantic versioning (
v0.17.1, etc.) with per-release git tags - Conventional commits (
feat:,fix:,chore:,docs:, …) - Keep-a-Changelog style in
CHANGELOG.md
For larger changes, opening an issue first to discuss is appreciated.
MIT — see LICENSE.
Publication data from OpenAlex:
Priem, J., Piwowar, H., & Orr, R. (2022). OpenAlex: A fully-open index of scholarly works, authors, venues, institutions, and concepts. arXiv. arxiv.org/abs/2205.01833
Problematic-paper flags from The Problematic Paper Screener:
Cabanac, G., Labbé, C., & Magazinov, A. (2022). The 'Problematic Paper Screener' automatically selects suspect publications for post-publication (re)assessment. arXiv. arxiv.org/abs/2210.04895
Journal indexing status and discontinuation history from the Scopus Source List (Elsevier, CC BY 4.0).