Searches TR Dizin (TÜBİTAK ULAKBİM national citation index) and verifies a journal's current national-index status through its confirmed unauthenticated REST/Elasticsearch API at https://search.trdizin.gov.tr/api/defaultSearch/{publication|journal|author|institution}/ (params q, order e.g. relevance-DESC, page), parsing hits.hits[]._source plus faceted aggregations, and derives indexing status from a journal record's isActive + journalYear coverage vs rejectYearList. Use when the user wants t...
Scanned 9/6/2026
Install to Claude Code
npx -y skills add AlterLab-IEU/AlterLab-Academic-Skills --skill alterlab-trdizin --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Alterlab Trdizin?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/alterlab-ieu-alterlab-trdizin)More formats (shields.io, HTML) on the badges page.
---
name: alterlab-trdizin
description: "Searches TR Dizin (TÜBİTAK ULAKBİM national citation index) and verifies a journal's current national-index status through its confirmed unauthenticated REST/Elasticsearch API at https://search.trdizin.gov.tr/api/defaultSearch/{publication|journal|author|institution}/ (params q, order e.g. relevance-DESC, page), parsing hits.hits[]._source plus faceted aggregations, and derives indexing status from a journal record's isActive + journalYear coverage vs rejectYearList. Use when the user wants to search TR Dizin, check if a journal is TR Dizin indexed (TR Dizin'de var mı / taranıyor mu), find Turkish-indexed publications, verify national-index status before submitting, or audit doçentlik-eligible venues. For DergiPark hosting prefer alterlab-dergipark; for doçentlik points prefer alterlab-docentlik-eligibility; for teşvik scoring prefer alterlab-akademik-tesvik. Part of the AlterLab Academic Skills suite."
license: MIT
allowed-tools: Read Write Edit Bash(python:*) Bash WebFetch
compatibility: No API key required — queries the keyless TR Dizin search API (https://search.trdizin.gov.tr/api/defaultSearch/) via `uv run python` (requests if present, else stdlib urllib); reports network failure rather than passing silently
metadata:
skill-author: AlterLab
version: "1.0.1"
last_updated: "2026-06-06"
depends_on: "alterlab-dergipark (hosting vs indexing), alterlab-docentlik-eligibility, alterlab-akademik-tesvik"
---
# TR Dizin — National Index Search & Journal-Status Check
Searches **TR Dizin** (TÜBİTAK ULAKBİM's *ulusal atıf dizini* — the national
citation index) and answers the question Turkish academics actually ask:
**"Is this journal indexed in TR Dizin right now?"** It hits the index's
confirmed keyless API, parses the Elasticsearch records, and for a journal derives
a current-status verdict from the authoritative coverage fields.
TR Dizin status is a career gate: it gates **doçentlik** (associate-professorship)
eligibility and feeds **akademik teşvik** (academic-incentive) / **UBYT** payouts.
This skill verifies *status*; it does **not** compute the points — see the routing
table below.
## Quick Start
```
Is the journal "Bilig" indexed in TR Dizin?
"Toplum ve Bilim" TR Dizin'de taranıyor mu?
Find TR Dizin publications about deprem okuryazarlığı, newest first
Search TR Dizin for an author / institution
```
→ Run `scripts/query_trdizin.py`, read the JSON/table, and report the verdict.
Never assert a journal's status from memory — always query the live index.
## When to Use This Skill
Use it for any of these intents:
- **Check journal status** — "is journal X TR Dizin indexed?", "TR Dizin'de var mı?",
verify a target venue's national-index status **before submitting**.
- **Search publications** — find Turkish-indexed articles by keyword, sort by year
or citation count, narrow with the returned year/subject/language facets.
- **Search author / institution** — locate an author or institution record in the
national index.
- **Audit a venue list** — screen a set of journals for current TR Dizin coverage
(e.g. before assembling a doçentlik dossier — *but the point math is elsewhere*).
### Does NOT Trigger — route these to the right sibling
| If the request is really about… | Route to |
|---|---|
| DergiPark **journal hosting** / OAI harvest / article BibTeX (hosting ≠ indexing) | `alterlab-dergipark` |
| Computing **doçentlik** eligibility points from a publication list | `alterlab-docentlik-eligibility` |
| Computing **akademik teşvik** / UBYT incentive scores | `alterlab-akademik-tesvik` |
| YÖK **thesis** (tez) search in Ulusal Tez Merkezi | `alterlab-yok-tez` |
| YÖK Akademik **academic profile / affiliation** lookup | `alterlab-yok-akademik` |
| YÖK Atlas **program / admission statistics** | `alterlab-yokatlas` |
| Verifying an arbitrary citation **exists** (Crossref/OpenAlex/etc.) | `alterlab-citation-verifier` |
| **Turkish APA 7 / TR Dizin citation style** formatting | `alterlab-tr-academic-style` |
This skill answers *"is it in the index, and what does the index say?"* — it does
not adjudicate acceptance criteria, compute career points, or format citations.
## How It Works
The TR Dizin SPA is backed by an **unauthenticated** Elasticsearch search API
(verified live 2026-06-06, HTTP 200). One endpoint, four record types:
```
GET https://search.trdizin.gov.tr/api/defaultSearch/{type}/?q=…&order=…&page=…
type ∈ { publication | journal | author | institution }
```
Full endpoint, parameter, and `_source` field documentation is in
[`references/api_reference.md`](references/api_reference.md). The
journal-status logic is in [`references/journal_status.md`](references/journal_status.md).
Two facts to keep honest:
- **No `limit` param.** The server returns ~10 hits per page and **ignores**
a client `limit`. To collect *N* records, page through `page=1,2,…` and slice
client-side — which is exactly what the script's `--limit` does. Do **not** tell
the user a server-side limit exists.
- **`firstIndexDate` / `indexDate` are query-time stamps** (they come back as
"now") and carry no index history. Status is derived from `isActive`,
`journalYear` coverage, and `rejectYearList` only.
- **`isActive` is not trustworthy on its own.** A journal can keep
`isActive=true` while coverage stopped years ago and recent years are in
`rejectYearList` (verified: *Eğitim Bilim Toplum*, ISSN 1303-9202 — active,
coverage→2019, rejected 2020–2025). The script therefore checks `rejectYearList`
against the latest coverage year **before** ever saying "currently indexed".
## Pipeline
### 1. Pick the mode
| User intent | Command |
|---|---|
| Is journal X indexed? | `query_trdizin.py journal "<title or ISSN>"` |
| Find indexed articles | `query_trdizin.py publication "<terms>" --order publicationYear-DESC` |
| Author / institution | `query_trdizin.py author "<name>"` / `… institution "<name>"` |
### 2. Run the query
```bash
# Journal status (the headline use case)
uv run python skills/turkish-academia/alterlab-trdizin/scripts/query_trdizin.py \
journal "Bilig" --limit 3
# Publication search, newest first, with facets, JSON out
uv run python skills/turkish-academia/alterlab-trdizin/scripts/query_trdizin.py \
publication "deprem okuryazarlığı" \
--order publicationYear-DESC --limit 20 --facets --out trdizin.json
```
- `--order` (verified enum): `relevance-DESC` (default), `publicationYear-ASC|DESC`,
`title-ASC|DESC`, `orderCitationCount-ASC|DESC`.
- `--limit N` collects up to *N* records by paging client-side (default 10).
- `--facets` adds the year / subject / language aggregations.
- `--json` / `--out PATH` emit the structured report; default is a readable table.
- The script prefers `requests`, falls back to stdlib `urllib` — runs in a bare
`uv` env with **no API key**.
### 3. Report the verdict
**For a journal**, surface the derived `verdict`, e.g.:
- *Currently indexed in TR Dizin (active; coverage years 2004–2026)* — when
`isActive` is true, `journalYear` shows recent coverage, and there is **no**
reject year newer than the last covered year.
- *No longer indexed in TR Dizin — rejected after coverage (…)* — when the most
recent `rejectYearList` year is newer than the last `journalYear` year. This
fires **even if `isActive` is still true** (de-indexed venue).
- *Rejected / not indexed (rejected years …)* — when `rejectYearList` is set but
not newer than coverage.
- *Not currently active in TR Dizin* — when `isActive` is false.
Quote ISSN/eISSN and the coverage years so the user can confirm it is the right
journal (title collisions happen). If it matters for a submission decision, remind
them TR Dizin status can change between terms — re-check before relying on it.
**For publications**, present a table of `(year) title — journal · doi · access`,
sorted as requested, and offer to refine via the facets.
## Self-Check Before Reporting
- Did the API actually respond? If the script exited with `NETWORK UNAVAILABLE`
(exit 3), say so plainly and do **not** state a status from memory.
- Is the matched journal the right one? Confirm by ISSN/eISSN, not title alone.
- Did the verdict come from `isActive` / `journalYear` / `rejectYearList` — not
from the query-time `*IndexDate` fields?
- Is this a *status* question? If the user actually wants doçentlik points, teşvik
scoring, DergiPark hosting, tez search, or citation formatting, hand off to the
sibling skill named in the routing table above.
## References
- [`references/api_reference.md`](references/api_reference.md) — endpoint,
parameters, `order` enum, response shape, `_source` fields per type, facets, and
the no-`limit` / query-time-date caveats (all verified live).
- [`references/journal_status.md`](references/journal_status.md) — the
indexing-status decision logic, worked examples, and why it gates doçentlik /
teşvik (with hand-offs to those skills).
Part of the AlterLab Academic Skills suite.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!