Structured index of French cybersecurity providers under the Cyber PME scheme.
CYPME indexes the 224 cybersecurity solution and service providers registered under the French Cyber PME programme (DGE / Bpifrance). The project maps each vendor to the 12 ANSSI cybersecurity capability domains, activity types, geographic presence, and certifications. It exists as a searchable, filterable reference for SMEs evaluating cybersecurity providers under this government-backed scheme.
| Source | Format | License | Records |
|---|---|---|---|
| Recensement de l'offre en cybersécurité | JSON / CSV | Open (data.economie.gouv.fr) | 224 providers |
Publisher: Direction Générale des Entreprises (DGE) and Bpifrance, via data.economie.gouv.fr and data.europa.eu.
The raw dataset is a JSON export from the data.economie.gouv.fr open data platform. It contains 224 records with 28 verbose French field names per record (897 KB). A CSV variant is also archived for reference. Both formats are stored in data/ alongside the processed output.
The source data is transformed into a compact JSON array (companies.json, 578 KB) optimised for client-side filtering. Field names are abbreviated to single-letter keys to reduce payload by ~36%. Boolean conversion is applied to the France 2030 laureate flag ("Oui"/"Non" to true/false). Department codes are extracted from location strings (e.g. "8 Ardennes" becomes "8") for consistent numeric sorting.
// Source field → Abbreviated key
nom_de_l_entreprise → n (name)
site_internet_de_l_entreprise → w (website)
adresse_mail → e (email)
laureate_france_2030 → f30 (boolean)
nature_des_activites → act (activity array)
chapitres I–XII → ch (domain numbers)
chd (domain → capabilities)
The source data stores capabilities across 12 separate array fields (chapitre_i through chapitre_xii), one per ANSSI cybersecurity domain. These are consolidated into two derived fields: ch (array of applicable domain numbers 1–12) and chd (object mapping domain number to its capability list). This enables efficient filtering ("does ch include 5?") instead of checking 12 separate fields.
{
"ch": [5, 6, 9],
"chd": {
"5": ["Firewall", "Réseau et cloisonnement"],
"6": ["Réseau administrateur"],
"9": ["SOC", "Audit / PenTesting"]
}
}
The entire 224-record dataset is loaded into browser memory via a single fetch() call. Five filters operate in-memory: free-text search (case-insensitive substring on name and description), activity type, ANSSI domain, department, and France 2030 status. All filters trigger an immediate re-render of the result list. No debouncing is applied — acceptable for 224 records.
All data-derived strings are escaped before DOM insertion using a textContent → innerHTML pattern. This prevents XSS from any unexpected content in the source data. No external sanitisation library is used.
function esc(s) {
const d = document.createElement('div');
d.textContent = s;
return d.innerHTML;
}
ch/chd simplifies both filtering and display.