An interactive 3D map of the UPSC Civil Services syllabus, built from 12 years of real question papers.
Every topic in the syllabus is a mountain. The more marks the examiner has set on a topic, the taller and hotter it rises. Topics that have never been asked stay flat. Glowing trails show how the examiner moves from one topic to the next inside a paper.
Open the map: https://rishabhrising.github.io/upsc-examiner-atlas/
- See what matters at a glance. Peaks are topics the examiner keeps returning to; low ground is syllabus that is rarely or never tested.
- Zoom from subject to exact sub-topic. Continents are subjects (Polity, Economy, History…), regions are official syllabus lines, mountains are topics, and summits are exact sub-topics such as "Article 21: life, liberty, privacy".
- Click any mountain or summit to see its official syllabus line, the standard books to read, marks by year, and every question asked there.
- Filter by paper (Prelims GS-I, Essay, GS-I to GS-IV) and by year range. Switch height between marks and number of questions, or weight recent years more.
- Follow the examiner through any single paper, question by question.
- Replay the years and watch the mountains grow from 2015 to 2026.
- Find the gaps. The "Untrodden summits" list shows every sub-topic never asked in the current view.
| Papers | Questions | |
|---|---|---|
| Mains GS-I to GS-IV | 2015–17, 2019, 2021–26 | ~780 |
| Essay | 2015, 2017–26 | ~90 |
| Prelims GS-I | 2017–21, 2023–26 | ~810 |
In total, 1,678 questions are mapped onto 14 subjects, 60 syllabus lines, 202 topics and 646 sub-topics.
How marks are counted:
- Prelims: 2 marks per question. CSAT is aptitude, so it is not mapped.
- Mains: the printed marks.
- Essay: each topic counts about 31 marks, because candidates choose one of four topics per section.
- A question that spans two topics splits its marks 60/40.
Some years are missing because they were not in the source collection (Mains GS 2018 and 2020, Prelims 2022). A few questions that were unreadable in the scanned PDFs are left out rather than guessed.
How questions were tagged. The official papers were read with OCR. Each question was then assigned a topic by reading it, and a sub-topic by keyword matching. Treat the tags as a careful first pass, not an official classification. Corrections are welcome.
A single self-contained HTML page using three.js. Python scripts turn the papers into data.
taxonomy.json subjects, syllabus lines and topics (official syllabus text, reference books)
subtopics/*.txt sub-topics per topic, with keywords used for matching
questions/*.json Mains questions: [paper, number, marks, "topic|topic2", text]
questions/pre_*.txt Prelims questions: number|topic,topic2|summary
atlas_template.html the 3D map (three.js, no build step)
build_atlas.py merges everything into index.html / Examiners_Atlas.html
ocr_papers.py, ocr_prelims.py, clean_ocr.py, condense_prelims.py OCR helpers for scanned papers
To rebuild after editing the data:
python build_atlas.py # writes index.html
python build_atlas.py --report # also lists questions that fell back to a default sub-topic
To add a new year:
- OCR the paper with
ocr_papers.pyorocr_prelims.py. These expect the PDFs in../11_Previous_Year_Papers_UPSC/<year>/. - Add its questions to
questions/. - Run
build_atlas.py.
This is an independent study aid. It is not affiliated with or endorsed by the Union Public Service Commission. Question papers are published by UPSC at https://upsc.gov.in/examinations/previous-question-papers. This project stores short summaries and paraphrases for reference. The syllabus text is quoted from the official UPSC notification (05/2026-CSE).
Code is MIT licensed.