Skip to content

How Accurate Is a CGM, and How to Measure It Yourself

Oak
Two small translucent wearable sensors clamped in a lab instrument beside a glowing amber reference vial in a dim laboratory.

A modern factory-calibrated CGM reports interstitial fluid glucose with a mean absolute relative difference (MARD) against lab reference in roughly the 8–10% range, which means a true 100 mg/dL frequently reads anywhere from 90 to 110, and occasionally much further off. Yes, a CGM can read high when your blood glucose is normal, and it can read low when it is not. The error is not random noise around a clean signal: it has structure, and most of that structure is predictable from sensor physics, insertion site, and time since insertion. If you understand the structure, you can design around it. If you treat the trace as ground truth to the milligram, you will chase artifacts for weeks.

What MARD does and does not tell you

MARD is the mean of |CGM − reference| / reference over a set of paired points. It is a single scalar summarizing a distribution with long tails, and it is extremely sensitive to the study design that produced it: reference method (YSI plasma analyzer vs. a handheld meter), glucose range sampled, rate-of-change distribution, and how CGM and reference timestamps were paired. Head-to-head evaluations of two sensors worn simultaneously on the same subjects found that aggregate accuracy metrics can look similar while the frequency of large individual errors differs meaningfully between systems.1 Large-error rate is the number that matters for decisions, and it is the one almost never printed on the box.

Accuracy is also not uniform across the glucose range. Sensors are least reliable at the low end, precisely where the consequences are highest. Controlled hypoglycemia clamp work showed that CGM detection of hypoglycemic episodes is incomplete and delayed relative to blood reference.2 Older systems were characterized as adequate for trend and pattern detection but not for real-time treatment decisions on absolute values.3 Algorithms have improved substantially since,45 and factory calibration removed a large source of user-introduced error,6 but the low-range asymmetry has not disappeared.

Where the error comes from

Interstitial lag. The sensor sits in subcutaneous interstitial fluid. It does not sit in blood. Glucose equilibrates across the capillary wall with a delay of roughly 5–15 minutes, and manufacturers add algorithmic smoothing and prediction on top. During a rapid postprandial rise of 3 mg/dL/min, a 10-minute effective lag is a 30 mg/dL discrepancy against a simultaneous fingerstick, and neither device is wrong. During a fall, the sign flips and CGM reads higher than blood. This is the single most common reason a comparison “fails.”

Wear-day effects. The first 12–24 hours after insertion are the worst: trauma at the insertion site, an unsettled wound-healing response, and a sensor whose factory calibration assumes a stabilized membrane. Accuracy also degrades at end of life, and wearing sensors past their approved duration is a documented failure mode rather than a bonus.6

Compression. Lying on the sensor restricts local perfusion and produces a characteristic artifact: a smooth drop of 20–40 mg/dL over 20–60 minutes, a flat floor, then a fast recovery to the prior level within a few readings. If your “nocturnal hypoglycemia” appears at the same clock time on the nights you sleep on that side and resolves in a vertical line, it is a compression low.

Interferents and physiology. Electrochemical sensors are vulnerable to substances that oxidize at the working electrode, and accuracy is measurably worse in acutely ill inpatients with perfusion changes, edema, and polypharmacy.7 Ascorbic acid affects some systems, acetaminophen historically affected others, and hematocrit and local temperature shift the signal. Consumer users are less exposed to this than hospital patients, but if you take high-dose vitamin C, check your specific sensor’s labeled interferences before drawing conclusions from a weird day.

A protocol for measuring your own sensor

Do this once per sensor brand, not once per session, unless something looks broken.

  1. Use a meter you trust and one lot of strips. Consumer meters have their own error (ISO 15197:2013 allows ±15 mg/dL below 100 and ±15% at or above 100 for 95% of results), so you are comparing two imperfect devices. Run duplicate fingersticks and average them to cut meter noise.
  2. Sample only at steady state. Require |rate of change| < 1 mg/dL/min from the CGM trace for at least 15 minutes before and after the stick. Fasting mornings and 3+ hours post-meal are the easy windows.
  3. Record the stick timestamp to the minute against the same clock the CGM uses.
  4. Collect at least 20 pairs, spread across wear days 1, 2, and the final day, and across at least one low-normal morning value.

Working with the raw files

Dexcom Clarity exports a CSV with columns including Timestamp (YYYY-MM-DDThh:mm:ss), Event Type, Glucose Value (mg/dL), Glucose Rate of Change (mg/dL/min), and Transmitter ID. There are two traps. Rows are a mix of EGV, Calibration, Insulin, Carbs, and Note event types, so filter first. Out-of-range values arrive as the literal strings Low and High rather than numbers. A naive astype(float) then throws, or a naive to_numeric(errors="coerce") silently deletes exactly the extreme readings you care about. Map them explicitly to 39 and 401 and keep a flag column.

FreeStyle Libre exports use the following columns.

  • Device Timestamp
  • Record Type (0 = historic, 1 = scan, 2 = strip and 5 = note)
  • separate Historic Glucose mg/dL and Scan Glucose mg/dL columns

Libre timestamps are local wall-clock with no offset, so a DST transition or a flight will duplicate or drop an hour. Normalize to UTC using your own travel log before joining anything.

Pairing, in pandas:

pairs = pd.merge_asof(
    sticks.sort_values("ts"),          # your meter readings
    egv.sort_values("ts"),             # CGM EGVs, 5-min grid
    on="ts", direction="nearest",
    tolerance=pd.Timedelta("5min"),
    suffixes=("_bg", "_cgm"),
).dropna(subset=["glucose_cgm"])

pairs["ard"] = (pairs.glucose_cgm - pairs.glucose_bg).abs() / pairs.glucose_bg
mard = pairs.ard.mean()
bias = (pairs.glucose_cgm - pairs.glucose_bg).mean()

Report four things, not one: MARD, median ARD, mean signed bias, and the fraction of pairs outside ±20%. Also plot Bland-Altman (difference vs. mean) and check whether bias is flat or slopes with glucose. A constant offset of +12 mg/dL across the range is a different problem from an error that grows at the high end, and only the first is worth correcting in your own analysis.

Optimize for precision without chasing accuracy

Most non-diabetic uses look like comparing two breakfasts, testing whether a walk after dinner flattens a curve, or quantifying overnight variability. In those uses you are comparing a person to themselves over hours. Within-sensor precision is what carries that comparison, and it is much better than cross-sensor accuracy. Sensor-to-sensor bias of 10–15 mg/dL is normal, so a new sensor mid-experiment invalidates the comparison. Run both arms of any A/B test on the same sensor, ideally on the same wear days, and randomize order rather than doing A on day 2 and B on day 9.

Derived metrics inherit the bias. Time-in-range thresholds, glucose management indicator, and area-under-curve all shift with a constant offset, so treat their absolute values as soft and their within-sensor deltas as meaningful. CGM has been evaluated as a screening and characterization tool in settings like gestational diabetes, where the pattern information carries most of the value.8 Real-world experience with real-time CGM in clinical settings has consistently found the trend and rate-of-change information more useful than any single number.9

A CGM reading is not a diagnosis. A low reading on a device you are wearing out of curiosity is a reason to confirm with a meter and, if it repeats, to talk to a clinician. Do not act on CGM numbers to change a medication. If your fasting values are persistently outside the normal range, that is a conversation with a physician and a venous lab draw. It is not a data-cleaning exercise.

Questions people also ask

Can a CGM give false high readings? Yes. The most common causes are interstitial lag during a fall in blood glucose (CGM trails, so it reads above blood), first-day sensor instability, and sensor-specific interferents.7 A genuine false high that persists at steady state for hours usually means a bad sensor.

Why is my CGM reading lower than my fingerstick? Usually because glucose is rising fast and the interstitial signal lags, or because you are compressing the sensor. Check the rate-of-change column: if it is above +1.5 mg/dL/min, the comparison is not valid.

What is more accurate, a fingerstick or a CGM? For a single instantaneous blood glucose value, a well-run fingerstick with a quality meter is more accurate. For a 24-hour picture, including everything between sticks, the CGM wins because a meter only samples what you remember to sample.3

How do I know if my CGM is accurate? Collect 20+ paired fingersticks at steady state, compute MARD, median ARD, signed bias, and the fraction outside ±20%. A consistent signed bias with low spread is a usable sensor. A wide spread or several pairs off by more than 30% is not.1

Is the CGM slightly higher than actual blood sugar? There is no universal direction. Individual sensors show individual signed bias, positive or negative, and it changes with the next sensor. Measure your own rather than assuming an offset.

Footnotes

  1. Lalantha Leelarathna, Marianna Nodale, Janet M. Allen, et al. Evaluating the Accuracy and Large Inaccuracy of Two Continuous Glucose Monitoring Systems. Diabetes Technology & Therapeutics, 2013. https://doi.org/10.1089/dia.2012.0245 ↩ ↩2

  2. E. Zijlstra, T. Heise, L. Nosek, et al. Continuous glucose monitoring: quality of hypoglycaemia detection. Diabetes, Obesity and Metabolism, 2012. https://doi.org/10.1111/dom.12001 ↩

  3. Roger S. Mazze, Ellie Strock, Sarah Borgman, et al. Evaluating the Accuracy, Reliability, and Clinical Applicability of Continuous Glucose Monitoring (CGM): Is CGM Ready for Real Time?. Diabetes Technology & Therapeutics, 2009. https://doi.org/10.1089/dia.2008.0041 ↩ ↩2

  4. Timothy S. Bailey, Anna Chang, Mark Christiansen. Clinical Accuracy of a Continuous Glucose Monitoring System With an Advanced Algorithm. Journal of Diabetes Science and Technology, 2014. https://doi.org/10.1177/1932296814559746 ↩

  5. M.S. Navas de Solís. Accuracy of a new real-time continuous glucose monitoring algorithm. Avances en Diabetología, 2010. https://doi.org/10.1016/s1134-3230(10)62013-3 ↩

  6. Gregory P. Forlenza, Taisa Kushner, Laurel H. Messer, et al. Factory-Calibrated Continuous Glucose Monitoring: How and Why It Works, and the Dangers of Reuse Beyond Approved Duration of Wear. Diabetes Technology & Therapeutics, 2019. https://doi.org/10.1089/dia.2018.0401 ↩ ↩2

  7. Virginia Bellido, Guido Freckman, Antonio Pérez, et al. Accuracy and Potential Interferences of Continuous Glucose Monitoring Sensors in the Hospital. Endocrine Practice, 2023. https://doi.org/10.1016/j.eprac.2023.06.007 ↩ ↩2

  8. Daria Di Filippo, Marrwah Ahmadzai, Melissa Han Yiin Chang, et al. Continuous Glucose Monitoring for the Diagnosis of Gestational Diabetes Mellitus: A Pilot Study. Journal of Diabetes Research, 2022. https://doi.org/10.1155/2022/5142918 ↩

  9. Irene Mamkin, Svetlana Ten, Sonal Bhandari, et al. Real-Time Continuous Glucose Monitoring in the Clinical Setting: The Good, the Bad, and the Practical. Journal of Diabetes Science and Technology, 2008. https://doi.org/10.1177/193229680800200520 ↩

Oak builds longitudinal molecular profiles of individuals: whole-genome sequencing, blood RNA sequencing, and plasma proteomics, delivered as a detailed report plus every data file. Build your profile.