11,855 geocoded schools across all 69 wilayas of Algeria, every one with coordinates, classified by cycle (primaire · moyen/CEM · secondaire/lycée · préscolaire), most with Arabic and/or French names, and commune/wilaya linkage. Extracted from OpenStreetMap and framed honestly against the 29,702 educational institutions the Ministry of National Education itself publishes for the 2024-2025 school year. Shipped as JSON, CSV, GeoJSON, and TypeScript. Part of GeoAlgeria.
npm install @geoalgeria/ecolesimport ecoles from "@geoalgeria/ecoles";
const all = ecoles.ecoles(); // 11,855 geocoded schools
// Lycées in a wilaya (joins GeoAlgeria's wilaya_code)
const lyceesSetif = all.filter((e) => e.wilaya_code === "19" && e.cycle === "secondaire");
// Only the named ones, with a French label
const named = all.filter((e) => e.name_fr);- School maps & locators – coordinates on all 11,855 records, ready for a map or nearest-school distance sorting.
- Cycle breakdowns – filter primaire / moyen / secondaire / préscolaire, or rank school density per commune/wilaya across the country.
- Bilingual directories – thousands of Arabic and French names, side by side.
| Dataset | Count | Coordinates | Notes |
|---|---|---|---|
| Schools | 11,855 | ✅ all | 8,635 named, 69 wilayas |
By cycle
| Cycle | Count | Meaning |
|---|---|---|
primaire |
4,019 | école primaire (ISCED 1) |
moyen |
2,378 | collège d'enseignement moyen / CEM (ISCED 2) |
secondaire |
1,576 | lycée (ISCED 3) |
prescolaire |
268 | préscolaire / maternelle / روضة (ISCED 0) |
autre |
3,614 | school of undetermined cycle (unnamed, or a name with no cycle word) |
This is an OpenStreetMap extract, not an official registry. Coverage is partial and uneven by wilaya, 11,855 schools mapped against the 29,702 educational institutions the Ministry of National Education publishes on education.gov.dz for the 2024-2025 school year, about 40%. That denominator is the ministry's own aggregate, not our estimate. Counts move as OpenStreetMap is edited; each rebuild reflects the current state of the map.
Cycle is inferred. It comes from isced:level and the French/Arabic name, a
CEM always names itself متوسطة/collège, a lycée ثانوية/lycée, a maternelle
روضة/préscolaire. A bare "école"/"مدرسة" with no cycle word is classified
primaire by Algerian convention (a standalone school is a primary school);
anything unresolved is autre. 93% of named schools resolve to a specific cycle.
By kind – kind is the establishment type, orthogonal to cycle, so you can
filter out (or in) the special-purpose places OSM files under amenity=school:
| Kind | Count | Meaning | Cycle |
|---|---|---|---|
regular |
11,664 | a standard école / CEM / lycée / maternelle | its real cycle |
formation |
92 | vocational / training centre | autre |
coranique |
40 | Quranic school | autre |
langues |
24 | language school / institute | autre |
special |
30 | adapted / special-needs school (deaf, blind…) | keeps its cycle |
conduite |
5 | driving school (auto-école) | autre |
The four non-K-12 kinds (formation/coranique/langues/conduite) carry
cycle autre, they're not primary schools even though their name contains
"école"; kind is what makes them findable instead of buried in autre.
Also on each record: isced_levels (the OSM isced:level served, normalized
to a sorted list like "1;2", on 2,048 records), address (from OSM addr:*
tags, on 2,626), and sector (public/private where the map signals it).
The npm package ships the JSON (importable directly):
import ecoles from "@geoalgeria/ecoles/data/ecoles.json" with { type: "json" };
// or via CDN, no install:
// https://cdn.jsdelivr.net/npm/@geoalgeria/ecoles/data/ecoles.jsonThe loaders and record shapes are fully typed, TypeScript definitions ship in the package:
import ecoles, { type Ecole } from "@geoalgeria/ecoles";
const all: Ecole[] = ecoles.ecoles();CSV and GeoJSON are in the repo under data/ and bundled in every
GitHub Release:
data/
ecoles.json # 11,855 schools (array)
metadata.json # sources, counts, coverage, updated
csv/ecoles.csv # repo + Release bundle (not in npm tarball)
geojson/ecoles.geojson # Point features
{
"id": "16-00275",
"name": "Lycée Semrouni 1",
"name_fr": "Lycée Semrouni 1",
"name_ar": null,
"wilaya_code": "16",
"commune_code": "1651",
"commune": "Ouled Fayet",
"lat": 36.729359,
"lng": 2.939451,
"geo_precision": "approximate",
"geo_method": "osm_centroid",
"source": "osm",
"refs": {
"osm": "way/1041517830"
},
"cycle": "secondaire",
"cycle_label_fr": "Lycée",
"cycle_label_ar": "ثانوية",
"kind": "regular",
"kind_label_fr": "École ordinaire",
"kind_label_ar": "مدرسة عادية",
"isced_levels": null,
"sector": null,
"address": null
}id is a stable {wilaya_code}-{seq} key synthesized by GeoAlgeria, unique
within this dataset; the matched OSM element is kept as refs.osm. name is the
best available display name and is null for unnamed points. cycle is the
education level and kind the establishment type (see above), each with
bilingual labels. isced_levels and address come straight from OSM (null
when the tags are absent). sector is "public"/"private" only when the map
carries an explicit signal, else null. geo_precision is "exact" for a
surveyed OSM node or "approximate" for a building/area centroid, geo_method
records which (osm_node/osm_centroid). wilaya_code joins to GeoAlgeria's
wilaya_code.
Commune/wilaya linkage is derived, not from the source. OpenStreetMap does not carry Algerian administrative codes. GeoAlgeria attaches
wilaya_code,commune_code, andcommuneby first locating the containing wilaya polygon, then choosing the nearest commune centroid within that wilaya from thegeoalgeriacommune set. Wilaya assignment is polygon-based; commune is best-effort centroid proximity within that boundary.
For wilayas, dairas, and communes, use the main
geoalgeria package, it's how
you turn a school's commune_code into a polygon or centroid. Use
@geoalgeria/ecoles when you only need the schools.
Run npm run fetch to regenerate every output. It:
- queries OpenStreetMap (Overpass) for
amenity=schoolandamenity=kindergarteninside Algeria; - classifies the cycle from
isced:leveland the French/Arabic name; - de-duplicates the same school mapped as both a node and a building;
- locates the containing wilaya polygon, then attaches the nearest commune centroid within that wilaya.
The raw source pull is captured under
sources/ecoles/.
Package code is MIT. The data is from OpenStreetMap: © OpenStreetMap contributors, licensed under the ODbL 1.0. If you use or redistribute this dataset, you must attribute OpenStreetMap contributors and keep derived databases under a compatible license.
Verify against official sources for authoritative information. This dataset is provided for reference and to power GeoAlgeria.
API docs & field reference → · Browse all packages →
Made by Yasser's Studio · LinkedIn · X · hello@yasser.studio