Query the data directly
Everything behind this page is a 4 MB SQLite file and a dependency-free JSON API.
Start the server, then hit it from a notebook, curl, or the browser.
python3 ~/qbgeo/api.py # http://127.0.0.1:8077
Every endpoint accepts from/to for a custom birth-year window
(overriding era), basis=nationality|birth|work,
jewsplit=0|1, and metric=percap|rca|share|count.
GET /fields
GET /countries?era=Modern
GET /cell?group=NL&field=Auditory Fine Arts
GET /matrix?field=Physics&era=Modern&min=8
GET /people?group=HU&field=Other Science / Math
GET /top?metric=percap&from=1450&to=1750&min=10
GET /search?q=pareto
GET /population?country=IE
Or go straight to SQL
Three tables: person, person_field, population.
sqlite3 ~/qbgeo/qbgeo.sqlite
SELECT p.nationality, SUM(pf.answerlines) AS n
FROM person p
JOIN person_field pf ON pf.person_id = p.id
WHERE pf.field = 'Auditory Fine Arts'
AND p.birth_year BETWEEN 1450 AND 1750
GROUP BY 1 ORDER BY n DESC LIMIT 10;
Raw corpus
~/qbgeo/qb.sqlite (401 MB) holds every question:
188,531 tossups and 477,345 bonus parts from QBReader, 2000–2026,
with full text, category, difficulty, set and year.