rankr is a platform for aggregating the results of different academic rankings.
rankr crawls university ranking tables and aggregates the results. It currently supports QS, Shanghai (ARWU), and Times Higher Education (THE) world university rankings.
To aggregate results across ranking systems, rankr needs a shared identity for each institution. It uses ROR (the Research Organization Registry), a free, open database of ~100,000 research organizations; for example, the ROR ID for MIT is 042nb2s44.
rankr loads the entire ROR data dump into a local SQLite database (via SQLAlchemy), then for each crawled ranking row tries to match the institution to its ROR record using, in order:
- a manual overrides file (
matches.json). - the institution's profile URL in the ranking table;
- an exact name + country match;
- ROR's affiliation-matching API; and
- fuzzy matching;
ROR metadata wins on any discrepancy, i.e., if a ranking lists an institution under Country A but ROR records Country B, Country B is used.
- backend/ β a Python CLI (
uv,Typer,SQLAlchemy,requests, andPydantic) that crawls the rankings and buildsdata/rankr.sqlite. - frontend/ β an
Astrosite (withshadcn/uicomponents) deployed toCloudflare Workers. Because the data only changes when the crawler re-runs, the whole site is prerendered at build time fromrankr.sqliteand served as static assets. Nothing queries a database at request time.
Migrating from the previous FastAPI/PostgreSQL and ReactJS stack to the current architecture reduced hosting costs and enhanced performance.
backend/data/rankr.sqlite is the single source of truth. After a re-crawl:
cd frontend
bun run logos # only if new institutions appeared
bun run deploy # projects the data, prerenders the pages, verifies, deploysNew years, new institutions, the year selector, the search corpus and the sitemap are all derived from the data. Adding a whole new ranking system is the one manual step (an entry in RANKING_SYSTEMS in frontend/src/lib/site.ts).
See frontend/cloudflare-deploy.md for the full runbook, including bun run report for traffic reports.
rankr is in archive mode. It is no longer actively maintained, and the data is not updated.