Skip to content

Extracting Education History From a CV, Degree by Degree

8 min read · updated August 11, 2026

“MSc Computer Science” is two facts glued together: a qualification level and a subject. Almost every CV writes them as one string, almost every schema stores them as one string, and the moment you need to compare a German Diplom with an Indian B.Tech the single string stops being usable.

Degree and subject are two fields

The degree name tells you what kind of qualification was awarded. The field of study tells you what it was in. They vary independently, they are governed by different things — the awarding institution decides the first, and the subject is a description — and every useful question about an education record needs one or the other but rarely both as a single token.

The confusion is easy to demonstrate. “Bachelor of Science in Economics” and “Bachelor of Arts in Economics” are the same subject at the same level with different degree names. A “Master of Engineering” awarded in the UK is frequently an undergraduate integrated degree, while the same words in North America are a postgraduate qualification. And an institution-specific name — “Artium Baccalaureus”, “ScB” — carries a level that is invisible unless you already know the institution.

So the schema wants three fields where most have one: degree_raw exactly as printed, field_of_study extracted from it or from a separate line, and a normalised level that is comparable across countries. The first is what the document says, the second is what a human wants to read, and the third is the only one you can filter or sort on.

Normalise the level, not the name

There is a published answer to “what level is this qualification” and it is not a bespoke mapping table. UNESCO maintains the International Standard Classification of Education, whose 2011 revision defines levels 0 through 8 with level 5 as short-cycle tertiary, level 6 as bachelor’s or equivalent, level 7 as master’s or equivalent and level 8 as doctoral or equivalent. It is designed precisely for the job of making qualifications from different national systems comparable, and it is maintained by the UNESCO Institute for Statistics jointly with the OECD and Eurostat.

  • ISCED 5 — short-cycle tertiary. A US associate degree, an English foundation degree, a Dutch associate degree.
  • ISCED 6 — bachelor’s or equivalent. BA, BSc, BEng, B.Tech, Licence, Laurea triennale.
  • ISCED 7 — master’s or equivalent. MA, MSc, MBA, the German Diplom and Magister, the French Master.
  • ISCED 8 — doctoral or equivalent. PhD, DPhil, Doctorat, Dr.rer.nat.

The value of using it rather than a homegrown enum is that the hard cases already have a published answer you can point at when somebody disputes a mapping, and that the classification is documented rather than being your team’s opinion from two years ago. The primary text is published by the UNESCO Institute for Statistics.

ISCED is a revisable classification — the 2011 revision replaced the 1997 one, and a separate ISCED Fields of Education and Training revision covers subjects. Record which revision a mapping was made against, for the same reason a taxonomy version belongs on a skill mapping.

The variants that break a naive mapping

A string-matching mapping from degree name to level works until it meets any of these, and all of them are common in an international candidate pool:

  • Integrated undergraduate masters. A UK MEng or MPhys is normally a four-year first degree, not a postgraduate one. Mapping on the letter M alone puts it at level 7 when the person has one qualification, not two.
  • Honours as part of the name. BSc (Hons), BA Hons, first-class honours, 2:1. The honours designation is a classification of result, not a different degree, and it belongs in a grade field. A parser that treats 2:1 as a date or a ratio is a common and very visible failure.
  • Systems in transition. The German Diplom and Magister were largely replaced by bachelor and master degrees through the Bologna process, so a CV can legitimately show a pre-reform qualification with no modern equivalent name. The same applies to various post-Soviet Specialist degrees.
  • Professional doctorates and first professional degrees. A US JD or MD, an MBBS, a German Staatsexamen. These sit awkwardly on any single scale and are exactly where you should record the raw name and a level with an explicit uncertainty flag rather than forcing a number.
  • Incomplete study. “Studied Physics, 2016–2018” with no award. There is no degree; there is attendance. A schema with a required degree field will make the model invent one, which is the classic case of the schema causing the hallucination rather than the model — see handling a missing required field.

Which date is the education date

Education entries carry up to four dates and CVs show any combination of them: the start of study, the end of study, the date of the award, and the date of conferral or graduation ceremony. They differ — study finishing in June with the degree conferred in November is entirely ordinary — and a single year field silently picks one.

The specific failure this causes is downstream: a check that a candidate held a qualification at the time they claimed a role will use whichever date happens to be in the field. Where a CV shows only one year, record it and record which of the four it appears to be, with unknown as an allowed value. Where a diploma is available alongside the CV, the conferral date is on the certificate itself — see extracting data from a diploma, including the case where that date is printed in Roman numerals.

The record

{
  "institution_raw": "Technische Universitat Ilmenau",
  "country": "DE",
  "degree_raw": "Diplom-Ingenieur (Elektrotechnik)",
  "degree_abbrev": "Dipl.-Ing.",
  "field_of_study": "Electrical engineering",
  "isced_level": 7,
  "isced_revision": "ISCED 2011",
  "isced_confidence": "mapped_with_note",
  "isced_note": "Pre-Bologna Diplom; mapped to level 7 as a long first degree.",
  "grade_raw": null,
  "dates": { "start": "2004", "end": "2010", "date_kind": "study_period" },
  "completed": true,
  "raw": "Technische Universitat Ilmenau\nDiplom-Ingenieur (Elektrotechnik), 2004-2010"
}

isced_confidence with three values — a clean mapping, a mapping that needed a judgement, and unmapped — is worth more than a numeric score here, because the interesting cases are categorical rather than fuzzy. A pre-Bologna Diplom is not a low-confidence level 7; it is a level 7 that somebody decided, and the note is the decision. When a regulator or an auditor asks how a qualification was compared, the note is the answer and a score is not.

Keep completed separate from the presence of a degree name, and allow the whole education entry to exist with a null degree. Attendance without an award is a true and common fact about a person, and a schema that cannot express it will get one invented.