alterlab-yokatlas — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-yokatlas (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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).
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.
| 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).
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.
| 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.
| Surface | What it returns |
|---|---|
/api/tercih-kilavuz/universiteler | the university list ({universiteAdi, universiteId}, 228 on 2026-09-23) |
/api/tercih-kilavuz/universite-programlar | the program-group list ({birimGrupId, birimGrupAdi, puanTuru}, 611) — not per-university programs |
/api/tercih-kilavuz/universite-iller | provinces ({ilAdi, ilKodu}) |
/api/tercih-kilavuz/search | program search with SearchFilters |
yokatlas-py (MIT, Python ≥3.10; 0.7.0 released 2026-07-23) exposes these as module-level functions search_programs(filters_dict, size=…), get_program(kilavuz_kodu), list_universities(), and — new in 0.7.0 — list_program_groups(), list_cities() and search_netler() (average nets per test section, /api/netler/search); plus a YokAtlasClient / SearchFilters / Program object API. It normalizes Turkish characters (İ/ı, Ş/ş, Ğ/ğ, Ç/ç, Ö/ö, Ü/ü), so "boğaziçi" and "bogazici" both resolve. Full filter and field reference: references/api_endpoints.md.
Name resolution gotcha.universite,programandilare resolved to ONE lookup entry each: exact name first, then the first entry that contains the text, then a close match — otherwise the call fails. A fragment likeprogram="bilgisayar"silently resolves to the group "Bilgisayar Bilimleri" and returns nothing for Boğaziçi; use the full group name ("bilgisayar mühendisliği") orbirim_grup_id. Abbreviations such as "odtü" do not resolve ("orta doğu teknik" does). An empty page means "no match for this group", not "no such program" — check the resolved name before reporting.
or fetch one program by its kılavuz kodu (guide code).
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.
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 mühendisliği" --size 20Other 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 102210277The script prints a JSON envelope ({"tool", "operation", "count", "results"}; searches add total_elements, data_year, and a note when nothing matched). If yokatlas-py or the network is unavailable it prints a structured {"error": …, "manual_instructions": …} and exits non-zero — it never fabricates statistics.
kontenjan,yerlesen, min_puan, basari_sirasi, and (when asked) the staff counts. Each Program carries up to four years (current + history; on 2026-09-23 current was the 2026 placement year); state which year a number is from — some history years carry only scores, with quota fields empty.
publications, hand off to alterlab-yok-akademik; for theses, alterlab-yok-tez.
program across universite_turuDEVLET vs VAKIF, then tabulate min_puan / basari_sirasi side by side.
max_basari_sirasi to list programs realistically in reach.
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.
yokatlas-py ≥0.6.0 (0.7.0 current); the upstreamJSON API changed once (April 2026) and broke every legacy scraper. If results look malformed, re-verify the package version before reporting; if they are merely empty, check the name-resolution gotcha above first.
still absent in 0.7.0. Do not promise those fields — only the staff/quota/score fields above (and 0.7.0's nets) are returned.
min_puan is only meaningful next to itspuan_turu; always report them together.
imply a figure is "current admissions" without naming its year.
error envelope, sayso and relay the manual_instructions — do not infer numbers from memory.
references/api_endpoints.md — the /api/tercih-kilavuz/ endpoints, the fullSearchFilters 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 forbenchmarking, advising, and institutional-research questions.
Part of the AlterLab Academic Skills suite.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.