CovaSyn
All Articles
Guide8 min readJuly 15, 2026

Unknown Impurity Identification by LC-MS/MS

Unknown impurity identification by LC-MS: formula from accurate mass, RDBE, isotope pattern and MS/MS fragment logic, with real CovaMS tool output and its.

OK

Oliver Kraft

CovaSyn

Unknown Impurity Identification by LC-MS/MS

You have a peak at 0.19 area% that was not there in the previous batch. ICH Q3A(R2) says anything at or above 0.10% needs to be identified, so "unknown at RRT 1.12" is not an acceptable end state. You have an accurate mass and an MS/MS spectrum, and no reference standard. This is the workflow that gets you from that spectrum to a defensible structural hypothesis, and the points at which it stops being able to help.

The order the work actually happens in

1. Formula first. Accurate mass plus isotope pattern narrows the elemental composition. Nothing downstream is trustworthy if the formula is wrong. 2. RDBE and the delta to the parent. Degrees of unsaturation tell you whether you added an atom or closed a ring. 3. Fragment logic. MS/MS tells you which part of the molecule changed. 4. Library search. Fast when it works, uninformative when the compound is not in the library. 5. Confirmation. Reference standard, orthogonal data, or synthesis. Software does not do this step.

Steps 1 to 4 are hours of work that can be compressed into minutes. Step 5 is still weeks.

The worked example

Parent API: propranolol, [M+H]+ 260.1645. The new peak has [M+H]+ 276.1594 on a Q-TOF calibrated to better than 3 ppm. Delta to the parent is +15.9949, the classic oxygen addition.

A note on provenance before the numbers: the MS/MS peak list below is constructed from published beta-blocker fragmentation behaviour, not acquired on an instrument. Every tool output quoted is a real call against the live CovaMS tools. The peak list is the input; the outputs are not simulated.

Peak list supplied (m/z, relative intensity): 276.1594 (100), 258.1489 (25), 199.0754 (40), 183.0804 (10), 157.0648 (15), 116.1070 (80), 98.0964 (30), 74.0600 (20).

Step 1: formula from accurate mass

covams_formula at [M+H]+, 5 ppm, returned three candidates:

FormulaMass error (ppm)RDBEOverall scoreBayesian score
C16H21NO30.0757.00.9850.870
C9H21N7OS2.563.00.4870.000025
C10H22N5O2P3.683.00.2650.00083

Verbatim from one covams_formula call. The tool applies the Senior valence rules and the Kind-Fiehn heuristics before scoring, then ranks on a Bayesian combination of mass error, an RDBE prior and element-ratio priors fitted to public training data. The second-ranked formula is only 2.5 ppm away, but seven nitrogens and a sulfur on 275 Da is implausible for a small-molecule degradant, and the Bayesian term punishes it by four orders of magnitude.

Your mass tolerance is the whole ballgame.

The same call at 20 ppm returns ten candidates instead of three, spanning RDBE 2 to 8. If your instrument is not routinely inside 5 ppm, formula determination is not a solved problem for you.

Step 2: the isotope pattern kills the alternatives

Accurate mass alone does not distinguish CHNO from CHNOS. The isotope envelope does. covams_isotope on the two leading candidates, singly charged:

FormulaMM+1M+2
C16H21NO3100.018.032.15
C9H21N7OS100.013.365.51

Verbatim from two covams_isotope calls. The M+1 ratio counts carbons (roughly 1.1% per carbon), and the M+2 at 5.51% is the sulfur signature. If your measured M+2 is around 2%, the sulfur-containing formula is dead without any further work. This check costs nothing and it is the single highest-yield thing you can do with an already-acquired full-scan spectrum.

Grouped bar chart for unknown impurity identification by LC-MS: M+1 at 18.03 versus 13.36 percent and M+2 at 2.15 versus 5.51 percent separate C16H21NO3 from the sulfur formula C9H21N7OS.
M+1 counts carbons at roughly 1.1 % each and M+2 at 5.51 % is the sulfur signature. If your measured M+2 sits near 2 %, the sulfur formula is dead with no extra experiment. Source: Two covams_isotope calls on the two leading candidate formulas, singly charged, as reported in this article.

Step 3: RDBE tells you what kind of change happened

covams_formula reports RDBE as 1 + C - (H + Cl + Br + F)/2 + N/2 + P/2. For C16H21NO3 it returned 7.0. Propranolol itself (C16H21NO2) is also RDBE 7.

That single comparison is informative. The impurity gained one oxygen and no degrees of unsaturation. So:

  • A hydroxylation (aromatic or aliphatic) fits. RDBE unchanged.
  • An N-oxide or hydroxylamine fits. RDBE unchanged.
  • A ketone from oxidation of the secondary alcohol does not fit. That pathway loses two hydrogens, giving a mass delta of -2.0157 and RDBE 8.
  • A new ring does not fit either. RDBE would go up.

You have narrowed a +16 Da unknown to two structural families before touching the MS/MS.

Step 4: fragment annotation, and why hit count is the wrong metric

covams_fragment_annotate matches measured peaks against combinatorially generated fragments of a candidate structure, with common neutral losses allowed. Run against 4-hydroxypropranolol (ring hydroxylation) at 10 ppm, it annotated 8 of 8 peaks, five of them with an explicit fragment structure:

  • 116.1070 → CC(C)NCC(O)CO minus H2O, single cleavage, confidence 1.0
  • 98.0964 → same side chain minus 2 H2O, confidence 0.898
  • 74.0600 → NCC(O)CO minus H2O, paired cleavage, confidence 1.0
  • 157.0648 → COc1ccc(O)c2ccccc12 minus H2O, confidence 1.0
  • 183.0804 → CC(O)COc1ccc(O)c2ccccc12 minus 2 H2O, confidence 0.945

Now the honest part. The same call against the N-hydroxy isomer also annotated 8 of 8. Coverage did not discriminate the two structures at all. What discriminated them was the *mechanism* field:

PeakRing-hydroxy hypothesisN-hydroxy hypothesis
74.0600paired cleavage minus H2Osingle cleavage minus CH4
157.0648single cleavage minus H2Osingle cleavage minus CH3OH
183.0804structure assigned, conf 0.945formula only, conf 0.586

Losing methane from a hydroxylamine to land on 74.0600 is not a fragmentation anyone would defend at a review board. The ring-hydroxy hypothesis explains the same peaks using nothing but water losses on simple bond cleavages. Read the mechanism and the neutral loss, not the annotation count. A combinatorial annotator with generous neutral losses will explain almost anything if you let it.

The decisive point is the one the annotation implies: the intact aminopropanol ion at 116.1070 requires an unmodified nitrogen side chain. If the oxygen had gone onto the nitrogen, that ion would move to 132.1019. One ion, one decision.

Step 5: library search, and its hard limit

covams_analyze_unknown runs quality assessment, processing, library identification, class prediction and annotation in one call. It graded this spectrum B (spectral entropy 2.6201, normalised entropy 0.8734, precursor present) and returned 10 candidates.

Rank 1 was homatropine, C16H21NO3, overall score 0.597, spectral similarity 0.7023, sourced from MassBank. 4-hydroxypropranolol came back at rank 6, overall score 0.2452, spectral similarity 0.0709, sourced from index_formula rather than from an experimental library entry.

Bar chart from unknown impurity identification by LC-MS: homatropine ranks first at spectral similarity 0.7023 while 4-hydroxypropranolol scores 0.0709 at rank six.
4-hydroxypropranolol is the candidate the fragment logic supports, but it has no experimental spectrum to match against. A compound with no library entry cannot win a library search. Source: covams_analyze_unknown run described in this article. The MS/MS peak list was constructed from published beta-blocker fragmentation behaviour; the tool outputs are real calls.

That inversion is the lesson, not a bug. Library ranking is dominated by similarity to spectra that exist in the library. Homatropine is a correct-formula compound with a real reference spectrum. 4-hydroxypropranolol had no experimental spectrum to match against, so it could only ever enter as a formula-level candidate and score near zero on the similarity term. A compound with no library spectrum cannot win a library search, no matter how well it explains your fragments. Impurities and degradants are precisely the compounds least likely to have library spectra.

One more caveat: the class prediction returned "Hydroxy compounds" at probability 1.0 from a single rule-based match, while the run summary reported predicted_class: "Unknown". Treat the class layer as a coarse hint, and read absence of a good hit as a statement about the library, not about your sample.

What this does not tell you

  • It does not identify anything. The output is a ranked hypothesis. Confirmation needs an authentic reference standard with matching retention time and MS/MS, or NMR on isolated material. This is roughly Schymanski level 3 (tentative candidate) at best.
  • It does not resolve regiochemistry. 4-hydroxy versus 5-hydroxy versus 7-hydroxy propranolol are indistinguishable on this evidence. Chromatography against standards or NMR resolves that.
  • It does not quantify. Area percent is not mass percent. Response factors for a degradant are usually unknown and often differ from the parent by more than a factor of two.
  • It does not know your matrix. Excipient adducts, in-source fragments and dimers all look like unknowns. Rule those out before you start structure work.
  • It cannot rank a compound it has never seen. See step 5.

Frequently asked questions

How many molecular formulas fit a given accurate mass?

It depends almost entirely on mass tolerance and mass. For an unknown at m/z 276.1594 as [M+H]+, covams_formula returned three candidate formulas at 5 ppm and ten at 20 ppm. The top candidate, C16H21NO3, sat at 0.075 ppm error with an overall score of 0.985. At higher masses the candidate count explodes: the same tool returned 45 formulas for a 5 ppm window at m/z 647.

What is RDBE and how do I use it on an impurity?

RDBE, ring and double bond equivalents, is calculated as 1 + C - (H + Cl + Br + F)/2 + N/2 + P/2. It counts rings plus pi bonds. The useful move is comparing the impurity RDBE with the parent. In our example both parent and impurity were RDBE 7 with a +15.9949 mass delta, which is consistent with hydroxylation or N-oxidation and inconsistent with ring closure or oxidation of an alcohol to a ketone.

Can a spectral library identify an unknown degradation product?

Usually not. Library search scores similarity against spectra that already exist in the library, and degradants and process impurities rarely have reference spectra. In our run, covams_analyze_unknown ranked homatropine first at spectral similarity 0.7023 because it has a MassBank entry, while the chemically sensible candidate ranked sixth at similarity 0.0709 because it entered only as a formula-level candidate.

How do I tell N-oxidation from ring hydroxylation by MS/MS?

Look for a fragment that isolates the nitrogen-containing part of the molecule. For propranolol the aminopropanol ion at m/z 116.1070 is unmodified if the added oxygen is on the ring, and shifts by +15.9949 to 132.1019 if it is on the nitrogen. One diagnostic ion answers the question. Fragment annotation coverage alone does not: both isomers explained 8 of 8 peaks in our runs.

What impurity level triggers a mandatory identification?

ICH Q3A(R2) sets the identification threshold for a new drug substance at 0.10%, or 1.0 mg per day intake, whichever is lower, for a maximum daily dose up to 2 g per day. The reporting threshold is 0.05%. Above the identification threshold you owe a structure. Below the reporting threshold you do not report at all. Check the thresholds against your actual daily dose before you spend instrument time.

Does in-silico fragment annotation replace a reference standard?

No. Annotation narrows the hypothesis space and tells you which experiment is decisive, which is where most of the calendar time goes. It cannot distinguish positional isomers, it cannot confirm stereochemistry, and its confidence values reflect internal consistency, not truth. Regulatory identification still requires an authentic standard or isolated material with orthogonal structural data.

Related reading

Every call in this article runs on the CovaSyn free tier, so you can put your own unknown through covams_formula and covams_fragment_annotate before your next OOS investigation.

Tools for this topic

Use these in your AI agent right away.

  • CovamsMass spectra, formula prediction, impurity profiling.
Unknown Impurity Identification by LC-MS/MS | CovaSyn