Technical seats: how many India approves, and how many go empty
Built from AICTE’s approved-intake panel and AISHE enrolment — both public regulator data. No Avanti student data and no personally identifiable information.
AICTE 2012-13 to 2021-22 and AISHE 2012-13 to 2023-24. August 2026.
The supply side. The PLFS analyses in ../plfs/ and
../plfs/entry/ describe what happens to people after a
qualification. This one describes the seats — how many exist, how many are filled, and which way
both numbers are moving.
Built as its own analysis, with its own extracts and its own method, so that a narrative document citing these figures is quoting a completed piece of work rather than an ad-hoc query.
What it finds
Section titled “What it finds”Higher education has grown by half in a decade
Section titled “Higher education has grown by half in a decade”AISHE total enrolment, all higher education:
| 2012-13 | 2016-17 | 2019-20 | 2023-24 |
|---|---|---|---|
| 30.15m | 35.71m | 38.54m | 45.00m |
A 1.49× rise over eleven years, and it is still rising in the most recent year.
But technical seats are contracting, and have been for eight years
Section titled “But technical seats are contracting, and have been for eight years”Engineering, AICTE approved intake:
| 2012-13 | Peak | 2021-22 | Change from peak | |
|---|---|---|---|---|
| UG (degree) | 15.49 lakh | 17.05 lakh (2014-15) | 12.53 lakh | −26.5% |
| Diploma | 10.08 lakh | 12.62 lakh (2014-15) | 9.77 lakh | −22.6% |
| PG | 1.38 lakh | 2.16 lakh (2014-15) | 1.37 lakh | −36.5% |
Both peaked in the same year and have fallen every year since. Higher education grew 49% over the same period; engineering capacity shrank by a quarter.
Roughly half of technical seats go empty
Section titled “Roughly half of technical seats go empty”Share of approved seats with no student in them:
| Year | UG engineering | Engineering diploma |
|---|---|---|
| 2012-13 | 37.6% | 32.2% |
| 2016-17 | 49.5% | 43.3% |
| 2019-20 | 44.3% | 41.8% |
| 2020-21 | 44.1% | 49.1% |
| 2021-22 | 34.1% | 49.4% |
Two different stories. UG engineering vacancy peaked at 49.5% in 2016-17 and has since fallen to 34.1% — largely because capacity was cut faster than demand fell. Diploma vacancy has gone the other way, rising from 32.2% to 49.4%, and is now the worse of the two: almost exactly half of approved engineering-diploma seats sit empty.
That matters given what the PLFS ladder finds about where a technical diploma actually leads — 30.77% formal employment, nearly double a general degree’s 16.20%.
Method
Section titled “Method”Source. avantifellows.external_data_sources.aicte_fact_intake and
aishe_fact_higher_ed_students.
One cut only, from each. Both tables stack several incompatible cuts under one schema.
- AICTE:
cut='national'withstate='All'andinstitution_type='All'is the pre-aggregated national total. The state and institution-type cuts are the same underlying data re-sliced; mixing them double-counts. - AISHE:
cut='state_social',metric='enrolment',basis='estimated', and the pre-aggregated'All Categories' × 'Total'rows. This is the only cut carrying enrolment on a consistent basis for all twelve years. Theug_disciplinecut uses'actual response', a different population, and the two bases must never be compared.
Two guards on the AISHE query, which fail the query rather than warning
Section titled “Two guards on the AISHE query, which fail the query rather than warning”aishe_fact_higher_ed_students carries gender values of Male / Female / Total — so Total
is both a row and the sum of the other two. Drop gender = 'Total' and every figure doubles:
2021-22 undergraduate qualifiers go from 7,754,223 to 15,508,446, and nothing complains. 15.5
million graduates a year is wrong but not absurd, so it survives a read-through — it did exactly
that during the education-ladder work. social_category carries the identical trap, with
All Categories a superset of SC/ST/OBC/PwD/Muslim/EWS.
extract_aishe.sql therefore raises ERROR() on two conditions:
| Guard | Fires when | Catches |
|---|---|---|
| Fan-out | more than one gender, social_category or basis reaches the aggregate |
a future edit that loosens a filter |
| Anchor | 2021-22 UG qualifiers ≠ 7,754,223, AISHE’s own published figure | a reload that changes what the table means |
Both were tested by mutation: dropping the gender filter, dropping the social-category filter, and breaking the anchor each fail the query with a message naming the violation. The clean query returns output byte-identical to before the guards were added.
One non-obvious detail. The guards are single-row CROSS JOINs, and BigQuery prunes a joined
table whose columns are never projected — the first version computed both guards, referenced
neither, and was silently optimised away, returning doubled enrolment with no error. The
+ MAX(guard.ok) + MAX(anchor.ok) in the SELECT list is what makes them load-bearing. Each is 0,
so no output changes.
Vacancy is (approved_intake − enrolled) / approved_intake, both columns AICTE’s own. It is
seats approved by the regulator against students actually enrolled — not a dropout rate, and it says
nothing about who finishes.
Two data problems, both excluded rather than worked around
Section titled “Two data problems, both excluded rather than worked around”AICTE 2022-23 is an incomplete load and is dropped. It reports 29.3 lakh approved seats against 0.9 lakh enrolled — a 96.9% vacancy rate — across every programme and every level, while the eleven preceding years sit in a 37–47% band. Enrolment does not fall 95% in a year while approved intake holds flat. Including it would corrupt every trend here.
The placed column is unusable and is not used. It exceeds passed in 2020-21 at every level —
345% for diplomas, 273% for UG, 161% for PG — which is impossible. It is carried into the output
under the column name pct_placed_of_passed_UNUSABLE so that anyone reaching for it meets the ratio
and stops. A separate analysis of NIRF placement data reached the same conclusion independently.
What this analysis does not do
Section titled “What this analysis does not do”No placement or outcome claims. The only outcome column AICTE offers is the broken one. Every statement here is about seats and enrolment; what happens to the students is the PLFS analyses’ job.
No causal claim about why seats empty. Vacancy could be falling demand, rising quality thresholds, closures, or reporting. This measures it and does not explain it.
AISHE enrolment is a stock across all years of study, not an annual intake, and covers all higher education rather than technical alone. It is used here only to establish that participation has grown.
| File | What |
|---|---|
extract.sql |
AICTE seats, enrolment and vacancy by level × programme × year |
extract_aishe.sql |
AISHE total higher-education enrolment by year |
output/capacity.csv · output/enrolment.csv |
The two extracts |
bq query --use_legacy_sql=false --format=csv --max_rows=100000 < extract.sql > output/capacity.csvbq query --use_legacy_sql=false --format=csv --max_rows=100000 < extract_aishe.sql > output/enrolment.csv