YÖK Atlas — Türkiye University Program & Admission Statistics
Retrieves official program-level statistics from YÖK Atlas (Yükseköğretim
Kurulu Atlası — the Council of Higher Education's program atlas) for any
undergraduate (lisans) or associate (önlisans) program in Türkiye: quotas,
placements, minimum admission scores, success ranks, and academic-staff head
counts by title. It wraps the keyless YÖK Atlas JSON API through the
maintained yokatlas-py package, so the same query yields the same structured
records — no HTML scraping, no API key.
This is the statistics skill. It does not look up an individual
academic's CV, publications, or affiliation — that is alterlab-yok-akademik,
a separately architected YÖK system (see the routing table below).
When to Use This Skill
Use it when the user wants program- or university-level numbers from YÖK Atlas:
YÖK Atlas'tan Boğaziçi Bilgisayar Mühendisliği taban puanını ve başarı sırasını çıkar
Compare the kontenjan and yerleşen counts for all Tıp programs at state universities
What was the minimum SAY score for Hacettepe Elektrik-Elektronik Mühendisliği last year?
List every university in YÖK Atlas and the academic-staff counts for a given program
How many professors vs. araştırma görevlisi does this department have?
→ Run scripts/yokatlas_lookup.py (a thin yokatlas-py wrapper), read the JSON,
then present the requested statistics as a table. Always state the data year and
that figures come from YÖK Atlas.
Canonical Turkish terms (English gloss on first use)
| Turkish |
Gloss |
API field |
| kontenjan |
quota (seats offered) |
kontenjan |
| yerleşen |
placed (students enrolled) |
yerlesen |
| taban puan |
minimum admission score |
min_puan |
| başarı sırası |
success rank (national rank of last placed student) |
basari_sirasi |
| puan türü |
score type (SAY/SÖZ/EA/DİL/TYT) |
puan_turu |
| lisans / önlisans |
bachelor's / associate degree |
birim_turu_id 46 / 47 |
| kılavuz kodu |
guide code (unique program id) |
kilavuzKodu |
Academic-staff title counts are returned as prof (profesör), doc (doçent),
dou (doktor öğretim üyesi), ogr_gor (öğretim görevlisi), and ar_gor
(araştırma görevlisi — research assistant).
⚠️ Endpoint caveat (read before scraping anything)
As of April 2026 YÖK Atlas migrated from server-rendered PHP to a React SPA
backed by a JSON API. The legacy PHP endpoints are dead — lisans.php?y=…,
lisans-panel.php, and tercih-sihirbazi-*.php now return only an empty SPA
shell. Never scrape them. Use only the JSON API under
/api/tercih-kilavuz/ (or, as this skill does, yokatlas-py which wraps it).
Endpoint and field details: references/api_endpoints.md.
Does NOT Trigger — route these elsewhere
| The user actually wants… |
Route to |
| An academic's CV, publications, projects, theses supervised, or official affiliation (akademik.yok.gov.tr) |
alterlab-yok-akademik |
| A graduate thesis (tez) — full text, abstract, originality/novelty check (Ulusal Tez Merkezi) |
alterlab-yok-tez |
| Whether a journal is indexed in TR Dizin, or a journal/article search |
alterlab-trdizin |
| Articles hosted on DergiPark (harvest, BibTeX, journal scope) |
alterlab-dergipark |
| Computing doçentlik (associate-professor) eligibility points |
alterlab-docentlik-eligibility |
| Computing akademik teşvik (academic-incentive) score |
alterlab-akademik-tesvik |
| Scaffolding a TÜBİTAK ARDEB 1001/1002-A proposal |
alterlab-tubitak-proposal |
| Publication metadata for an author (DOIs, citations, h-index) |
alterlab-research-lookup / alterlab-openalex |
This skill answers "what are the admission/quota/staff numbers for this
program or university?" — nothing about an individual scholar's output.
How It Works
The data source
| Surface |
What it returns |
/api/tercih-kilavuz/universiteler |
the university list ({universiteAdi, universiteId}) — verified live |
/api/tercih-kilavuz/universite-iller |
provinces (il) |
/api/tercih-kilavuz/universite-programlar |
programs per university |
/api/tercih-kilavuz/search |
program search with SearchFilters |
yokatlas-py (MIT, Python >=3.10) exposes these as module-level functions
search_programs(filters_dict, size=…), get_program(kilavuz_kodu), and
list_universities() (227 records on the 2026-06-06 live check; plus a
YokAtlasClient / SearchFilters / Program object API). It normalizes
Turkish characters (İ/ı, Ş/ş, Ğ/ğ, Ç/ç, Ö/ö, Ü/ü)
for fuzzy matching, so "boğaziçi" and "bogazici" both resolve. Full filter
and field reference: references/api_endpoints.md.
Pipeline
Pick the operation from the request: list universities, search programs,
or fetch one program by its kılavuz kodu (guide code).
Build filters. The common SearchFilters fields are puan_turu
(SAY/SÖZ/EA/DİL/TYT), universite, program, il (province),
universite_turu (DEVLET/VAKIF), and min_basari_sirasi/max_basari_sirasi
for a success-rank window. See references/api_endpoints.md for the full list.
Run the helper:
uv run --with yokatlas-py python \
skills/turkish-academia/alterlab-yokatlas/scripts/yokatlas_lookup.py \
search --puan-turu SAY --universite "boğaziçi" --program "bilgisayar" --size 20
Other subcommands:
# All universities (id + name)
uv run --with yokatlas-py python .../yokatlas_lookup.py universities
# One program's multi-year statistics by guide code
uv run --with yokatlas-py python .../yokatlas_lookup.py program --kod 102210277
The script prints a JSON envelope ({"tool", "operation", "count", "results"}).
If yokatlas-py or the network is unavailable it prints a structured
{"error": …, "manual_instructions": …} and exits non-zero — it never
fabricates statistics.
Read the JSON and report. For each program surface the year, kontenjan,
yerlesen, min_puan, basari_sirasi, and (when asked) the staff counts.
Each Program carries up to four years (current + history); state which
year a number is from.
Cross-link if the user drifts. If they then ask about a person's CV or
publications, hand off to alterlab-yok-akademik; for theses,
alterlab-yok-tez.
Worked Patterns
- Program benchmarking. Search the same
program across universite_turu
DEVLET vs VAKIF, then tabulate min_puan / basari_sirasi side by side.
- Student advising. Given a target başarı sırası, filter with
max_basari_sirasi to list programs realistically in reach.
- Institutional research. Fetch a program by kılavuz kodu and report the
staff mix (
prof/doc/dou/ogr_gor/ar_gor) and the kontenjan→yerleşen
fill rate across the available years.
More query recipes: references/query_recipes.md.
Caveats & Self-Check
- Pin the wrapper.
yokatlas-py is pinned to >=0.6.0; the upstream JSON
API changed once (April 2026) and broke every legacy scraper. If results look
empty or malformed, re-verify the package version before reporting.
- v0.6.0 dropped demographic breakdowns (gender / high-school-type splits).
Do not promise those fields — only the staff/quota/score fields above are returned.
- Score type matters. A program's
min_puan is only meaningful next to its
puan_turu; always report them together.
- Data year. Numbers are historical (latest plus three prior years). Never
imply a figure is "current admissions" without naming its year.
- Did the script reach the network? If it returned an
error envelope, say
so and relay the manual_instructions — do not infer numbers from memory.
References
references/api_endpoints.md — the /api/tercih-kilavuz/ endpoints, the full
SearchFilters field list, enums (puan türü, university type, birim türü), and
the returned statistic fields, with the legacy-PHP-dead caveat.
references/query_recipes.md — worked yokatlas_lookup.py invocations for
benchmarking, advising, and institutional-research questions.
Part of the AlterLab Academic Skills suite.
1---2name: alterlab-yokatlas3description: Retrieves Türkiye higher-education program and admission statistics from YÖK Atlas (yokatlas.yok.gov.tr) — quotas (kontenjan), placements (yerleşen), minimum admission scores (taban puan), success ranks (başarı sırası), and per-title academic-staff counts — via the keyless yokatlas-py (>=0.6.0, MIT) wrapper over the JSON API at /api/tercih-kilavuz/ (search, universiteler, universite-programlar), with SearchFilters for puan türü (SAY/SÖZ/EA/DİL/TYT), university type (DEVLET/VAKIF), province, and success-rank ranges. Use when the request mentions YÖK Atlas, program statistics, kontenjan/quota data, taban puan/minimum admission score, başarı sırası/success rank, placement counts, or program staff counts for institutional research, program benchmarking, or student advising. For an academic's CV/profile/affiliation prefer alterlab-yok-akademik; for theses prefer alterlab-yok-tez. Legacy PHP endpoints are dead post-April-2026; only the JSON API is used. Part of the AlterLab Academic Skills suite.4license: MIT5---67# YÖK Atlas — Türkiye University Program & Admission Statistics89Retrieves official program-level statistics from **YÖK Atlas** (Yükseköğretim10Kurulu Atlası — the Council of Higher Education's program atlas) for any11undergraduate (*lisans*) or associate (*önlisans*) program in Türkiye: quotas,12placements, minimum admission scores, success ranks, and academic-staff head13counts by title. It wraps the **keyless** YÖK Atlas JSON API through the14maintained `yokatlas-py` package, so the same query yields the same structured15records — no HTML scraping, no API key.1617This is the **statistics** skill. It does **not** look up an individual18academic's CV, publications, or affiliation — that is `alterlab-yok-akademik`,19a separately architected YÖK system (see the routing table below).2021## When to Use This Skill2223Use it when the user wants program- or university-level numbers from YÖK Atlas:2425```26YÖK Atlas'tan Boğaziçi Bilgisayar Mühendisliği taban puanını ve başarı sırasını çıkar27Compare the kontenjan and yerleşen counts for all Tıp programs at state universities28What was the minimum SAY score for Hacettepe Elektrik-Elektronik Mühendisliği last year?29List every university in YÖK Atlas and the academic-staff counts for a given program30How many professors vs. araştırma görevlisi does this department have?31```3233→ Run `scripts/yokatlas_lookup.py` (a thin `yokatlas-py` wrapper), read the JSON,34then present the requested statistics as a table. Always state the data year and35that figures come from YÖK Atlas.3637### Canonical Turkish terms (English gloss on first use)3839| Turkish | Gloss | API field |40|---------|-------|-----------|41| kontenjan | quota (seats offered) | `kontenjan` |42| yerleşen | placed (students enrolled) | `yerlesen` |43| taban puan | minimum admission score | `min_puan` |44| başarı sırası | success rank (national rank of last placed student) | `basari_sirasi` |45| puan türü | score type (SAY/SÖZ/EA/DİL/TYT) | `puan_turu` |46| lisans / önlisans | bachelor's / associate degree | `birim_turu_id` 46 / 47 |47| kılavuz kodu | guide code (unique program id) | `kilavuzKodu` |4849Academic-staff title counts are returned as `prof` (profesör), `doc` (doçent),50`dou` (doktor öğretim üyesi), `ogr_gor` (öğretim görevlisi), and `ar_gor`51(araştırma görevlisi — research assistant).5253## ⚠️ Endpoint caveat (read before scraping anything)5455As of **April 2026** YÖK Atlas migrated from server-rendered PHP to a React SPA56backed by a JSON API. The **legacy PHP endpoints are dead** — `lisans.php?y=…`,57`lisans-panel.php`, and `tercih-sihirbazi-*.php` now return only an empty SPA58shell. **Never scrape them.** Use only the JSON API under59`/api/tercih-kilavuz/` (or, as this skill does, `yokatlas-py` which wraps it).60Endpoint and field details: `references/api_endpoints.md`.6162## Does NOT Trigger — route these elsewhere6364| The user actually wants… | Route to |65|--------------------------|----------|66| An academic's CV, publications, projects, theses supervised, or **official affiliation** (akademik.yok.gov.tr) | `alterlab-yok-akademik` |67| A graduate **thesis** (tez) — full text, abstract, originality/novelty check (Ulusal Tez Merkezi) | `alterlab-yok-tez` |68| Whether a **journal** is indexed in TR Dizin, or a journal/article search | `alterlab-trdizin` |69| Articles hosted on **DergiPark** (harvest, BibTeX, journal scope) | `alterlab-dergipark` |70| Computing **doçentlik** (associate-professor) eligibility points | `alterlab-docentlik-eligibility` |71| Computing **akademik teşvik** (academic-incentive) score | `alterlab-akademik-tesvik` |72| Scaffolding a **TÜBİTAK** ARDEB 1001/1002-A proposal | `alterlab-tubitak-proposal` |73| Publication metadata for an author (DOIs, citations, h-index) | `alterlab-research-lookup` / `alterlab-openalex` |7475This skill answers **"what are the admission/quota/staff numbers for this76program or university?"** — nothing about an individual scholar's output.7778## How It Works7980### The data source8182| Surface | What it returns |83|---------|-----------------|84| `/api/tercih-kilavuz/universiteler` | the university list (`{universiteAdi, universiteId}`) — verified live |85| `/api/tercih-kilavuz/universite-iller` | provinces (il) |86| `/api/tercih-kilavuz/universite-programlar` | programs per university |87| `/api/tercih-kilavuz/search` | program search with `SearchFilters` |8889`yokatlas-py` (MIT, Python >=3.10) exposes these as module-level functions90`search_programs(filters_dict, size=…)`, `get_program(kilavuz_kodu)`, and91`list_universities()` (227 records on the 2026-06-06 live check; plus a92`YokAtlasClient` / `SearchFilters` / `Program` object API). It normalizes93Turkish characters (İ/ı, Ş/ş, Ğ/ğ, Ç/ç, Ö/ö, Ü/ü)94for fuzzy matching, so `"boğaziçi"` and `"bogazici"` both resolve. Full filter95and field reference: `references/api_endpoints.md`.9697### Pipeline98991. **Pick the operation** from the request: list universities, search programs,100 or fetch one program by its kılavuz kodu (guide code).1012. **Build filters.** The common `SearchFilters` fields are `puan_turu`102 (SAY/SÖZ/EA/DİL/TYT), `universite`, `program`, `il` (province),103 `universite_turu` (DEVLET/VAKIF), and `min_basari_sirasi`/`max_basari_sirasi`104 for a success-rank window. See `references/api_endpoints.md` for the full list.1053. **Run the helper:**106107 ```bash108 uv run --with yokatlas-py python \109 skills/turkish-academia/alterlab-yokatlas/scripts/yokatlas_lookup.py \110 search --puan-turu SAY --universite "boğaziçi" --program "bilgisayar" --size 20111 ```112113 Other subcommands:114115 ```bash116 # All universities (id + name)117 uv run --with yokatlas-py python .../yokatlas_lookup.py universities118119 # One program's multi-year statistics by guide code120 uv run --with yokatlas-py python .../yokatlas_lookup.py program --kod 102210277121 ```122123 The script prints a JSON envelope (`{"tool", "operation", "count", "results"}`).124 If `yokatlas-py` or the network is unavailable it prints a structured125 `{"error": …, "manual_instructions": …}` and exits non-zero — it never126 fabricates statistics.1271284. **Read the JSON and report.** For each program surface the year, `kontenjan`,129 `yerlesen`, `min_puan`, `basari_sirasi`, and (when asked) the staff counts.130 Each `Program` carries up to four years (`current` + `history`); state which131 year a number is from.1321335. **Cross-link if the user drifts.** If they then ask about a person's CV or134 publications, hand off to `alterlab-yok-akademik`; for theses,135 `alterlab-yok-tez`.136137## Worked Patterns138139- **Program benchmarking.** Search the same `program` across `universite_turu`140 DEVLET vs VAKIF, then tabulate `min_puan` / `basari_sirasi` side by side.141- **Student advising.** Given a target başarı sırası, filter with142 `max_basari_sirasi` to list programs realistically in reach.143- **Institutional research.** Fetch a program by kılavuz kodu and report the144 staff mix (`prof`/`doc`/`dou`/`ogr_gor`/`ar_gor`) and the kontenjan→yerleşen145 fill rate across the available years.146147More query recipes: `references/query_recipes.md`.148149## Caveats & Self-Check150151- **Pin the wrapper.** `yokatlas-py` is pinned to **>=0.6.0**; the upstream JSON152 API changed once (April 2026) and broke every legacy scraper. If results look153 empty or malformed, re-verify the package version before reporting.154- **v0.6.0 dropped demographic breakdowns** (gender / high-school-type splits).155 Do not promise those fields — only the staff/quota/score fields above are returned.156- **Score type matters.** A program's `min_puan` is only meaningful next to its157 `puan_turu`; always report them together.158- **Data year.** Numbers are historical (latest plus three prior years). Never159 imply a figure is "current admissions" without naming its year.160- **Did the script reach the network?** If it returned an `error` envelope, say161 so and relay the `manual_instructions` — do not infer numbers from memory.162163## References164165- `references/api_endpoints.md` — the `/api/tercih-kilavuz/` endpoints, the full166 `SearchFilters` field list, enums (puan türü, university type, birim türü), and167 the returned statistic fields, with the legacy-PHP-dead caveat.168- `references/query_recipes.md` — worked `yokatlas_lookup.py` invocations for169 benchmarking, advising, and institutional-research questions.170171Part of the AlterLab Academic Skills suite.