What a Blood Test Can and Cannot Tell You About Your Health
A standard “health check” blood panel measures roughly 30 to 60 analytes and gives you useful information about four things: oxygen-carrying capacity and blood cell production, kidney filtration, liver injury and synthetic function, and glucose/lipid metabolism. It gives partial information about thyroid function, iron stores, inflammation, and electrolyte handling. It gives you nearly nothing about most solid cancers, most neurological disease, structural heart disease, or anything that hasn’t yet spilled a measurable molecule into circulation. The failure mode of a once-yearly panel is that a single measurement per year, compared against a population reference interval, cannot distinguish your normal from a real change. The numbers themselves are not wrong.
What one tube covers
Think of a blood draw as a sample of the extracellular compartment plus the cells suspended in it. An analyte shows up if it is secreted into plasma, leaked from damaged tissue, or carried by a circulating cell.
That covers, concretely:
- Hematopoiesis and hemolysis: hemoglobin, hematocrit, MCV and RDW, plus platelet count and white cell differential. Plasma and red cell volume can be estimated from routine hematological markers rather than measured directly with radiolabeled tracers 1.
- Glomerular filtration: creatinine, cystatin C, eGFR from both. Order cystatin C if you have high muscle mass, because creatinine-based eGFR will read falsely low.
- Hepatocyte injury and cholestasis: ALT, AST, GGT, ALP and bilirubin. Synthetic function: albumin and INR.
- Metabolic: fasting glucose, HbA1c, fasting insulin (compute HOMA-IR yourself: glucose_mg/dL × insulin_µIU/mL / 405).
- Atherogenic lipoprotein burden: ApoB and Lp(a). Ask for these by name. A standard lipid panel gives calculated LDL-C, which is a concentration estimate and does not count particles. The panel misses the roughly 20 percent of people whose ApoB is discordant with LDL-C. Lp(a) is ~90 percent genetically determined and needs measuring once in a lifetime. Ask for the result in nmol/L and not in mg/dL.
- Iron: ferritin plus transferrin saturation. Ferritin alone is an acute phase reactant and rises with inflammation, so pair it with hs-CRP.
- Thyroid: TSH plus free T4. TSH alone is a screening test with a wide within-person range.
- Inflammation: hs-CRP (assay range down to ~0.2 mg/L, unlike standard CRP).
What it misses: anything localized without a circulating signature. No blood panel screens for “1,200+ conditions” in any meaningful sense, whatever a retail pharmacy page claims. It also misses a lot of what people assume is covered. A health check study of asymptomatic adults found a substantial fraction sitting at suboptimal levels across vitamin D, iron indices, and metabolic markers despite feeling fine and having no diagnosis 2. “Within reference range” and “optimal for you” are different claims.
Why a single result tells you less than you think
Every analyte has two variance components you need before you can read a change: analytical variation (CV_A, the assay’s imprecision) and within-subject biological variation (CV_I, how much your own true value fluctuates around your personal set point). A large study of healthy adults sampled repeatedly established CV_I for a range of immunological and hematological markers and derived analytical quality goals from them 3. Those numbers are what make longitudinal interpretation possible.
The operational statistic is the reference change value:
RCV = 2^0.5 * Z * sqrt(CV_A^2 + CV_I^2)
With Z = 1.96 (two-sided, p < 0.05), the multiplier is 2.77. So for an analyte with CV_A = 3% and CV_I = 6%:
import math
def rcv(cv_a, cv_i, z=1.96):
return math.sqrt(2) * z * math.sqrt(cv_a**2 + cv_i**2)
rcv(3, 6) # -> 18.6 %
Your value must move more than ~19 percent before you can say anything changed. This is why “my ferritin went from 90 to 78” is noise and why tracking against your own prior values beats tracking against a population interval built from other people.
Two practical consequences. First, ask your lab for its assay CV at your concentration level. Many publish it. Second, prefer analytes with low CV_I for monitoring. Albumin and sodium are tightly regulated. Ferritin, triglycerides, and hs-CRP swing wildly.
Pre-analytical variables that fake a result
More bad results come from the draw than from the instrument.
- Posture: 15 to 30 minutes supine versus standing shifts plasma water and changes concentrations of protein-bound analytes by around 5 to 10 percent. Those analytes are albumin, calcium, lipids and most hormones. Standardize your posture.
- Tourniquet time over one minute with fist clenching raises potassium and hemoconcentrates protein measures.
- Hemolysis wrecks potassium, LDH, and AST. If the lab flags a hemolyzed sample, discard the potassium value rather than reasoning about it.
- Recent hard exercise elevates CK, AST, ALT, and white cell count for days. A marathon two days before your draw will produce an “abnormal liver panel.”
- Hydration status moves hemoglobin and hematocrit by several percent, which matters because these markers are used to model blood and plasma volume 1.
- Fasting: needed for triglycerides and insulin. ApoB and HbA1c do not need it.
Lock these down. Same lab, same assay platform, same time of day, same fasting state and same posture. Otherwise your longitudinal series is measuring your morning rather than your physiology.
Getting the data into something you can compute on
The lab portal PDF is not a data format. Ask for results as HL7 FHIR Observation resources or at minimum a CSV with LOINC codes. Most large US labs expose a FHIR R4 endpoint through a patient API, and Apple Health and similar apps can export the same records as FHIR JSON.
A minimal schema that has held up for us:
observation_id, subject_id, loinc_code, analyte_name,
value_num, unit, ref_low, ref_high, effective_datetime,
lab_id, assay_method, fasting_bool, specimen_flags
Store it in DuckDB or SQLite, keyed on (loinc_code, effective_datetime). Keep lab_id and assay_method because switching labs introduces a step change that looks like a biological trend. Ferritin and TSH in particular are not standardized across platforms.
LOINC is the join key that makes multi-lab data comparable, but verify the mapping your lab uses rather than assuming. HbA1c is 4548-4, creatinine in serum is 2160-0, hemoglobin is 718-7. Some panels report the same analyte under several codes depending on specimen and method, and a naive join on analyte name will silently merge a direct LDL with a Friedewald-calculated one.
Once it is in a table, the first thing worth plotting is each analyte against time with a band at ±RCV around your running median. The band should not sit at the population reference interval. The second is pairwise correlation across analytes. Blood markers form a network with structure that changes with metabolic state. The markers are not independent measurements. Treating the panel as a correlated system rather than a list of independent pass/fail tests recovers information a per-analyte reading discards 4.
Where blood testing is going
The interesting expansion is proteomics. Rheumatology has used circulating autoantibody and cytokine panels for years to support diagnosis and grade disease activity 5. The clearest recent proof that a plasma protein can carry organ-specific information about a solid tissue comes from neurology: plasma p-tau217 and amyloid ratios now detect Alzheimer pathology with accuracy competitive with PET and CSF, including in primary care settings where clinical judgment alone performs poorly 6. That result took fifteen years of assay development from the early multiplex protein panels 7 and a mapped program of analytical validation and standardization 8.
It also comes with a warning that generalizes to every new biomarker. Positive predictive value depends on prevalence, and applying these assays to asymptomatic populations produces a very different error profile than applying them to symptomatic patients in a memory clinic 9. Do not order a p-tau217 test for yourself out of curiosity and interpret the number alone. Result interpretation for any disease-specific biomarker requires a clinician.
Questions people also ask
What illnesses can show up in a blood test? A blood test can show the conditions below 5.
- anemias and hemoglobinopathies
- iron deficiency and overload
- chronic kidney disease
- hepatitis and fatty liver (indirectly, through ALT/GGT patterns)
- diabetes and insulin resistance
- thyroid dysfunction
- most electrolyte and acid-base disorders
- many leukemias
- infections with systemic inflammatory response
- autoimmune conditions where autoantibodies circulate
Not most early solid tumors, not structural heart disease, not most psychiatric or neurological conditions from a routine panel.
Is there a single blood test to check overall health? No. The closest practical approximation is five to seven tubes and covers the organ systems that leak measurable signal into plasma. It contains the following.
- CBC with differential
- CMP
- HbA1c
- ApoB
- Lp(a) once
- hs-CRP
- ferritin with transferrin saturation
- TSH with free T4
- 25-OH vitamin D
Can a blood test detect health problems before symptoms? Sometimes, and mostly through trend rather than threshold. A creatinine rising 15 percent per year while staying inside the reference interval is more informative than one value flagged high. This requires repeated measurement under standardized conditions and knowledge of the analyte’s within-person variation 3.
How often should I retest? For stable analytes with no intervention, annually. If you change something, retest the affected markers at 8 to 12 weeks. The change could be diet, training load or a medication a clinician started. That interval is long enough for HbA1c and lipoproteins to reflect the new steady state. Retesting a single flagged value within two weeks, before doing anything, is usually the right response to an isolated abnormal result.
Footnotes
-
Louisa Margit Lobigs, Pierre‐Edouard Sottas, Pitre Collier Bourdon, et al. The use of biomarkers to describe plasma‐, red cell‐, and blood volume from a simple blood test. American Journal of Hematology, 2016. https://doi.org/10.1002/ajh.24577 ↩ ↩2
-
Nikolaj Travica, Karin Ried, Robert Bujnowski, et al. Integrative health check reveals suboptimal levels in a number of vital biomarkers. Advances in Integrative Medicine, 2015. https://doi.org/10.1016/j.aimed.2015.11.002 ↩
-
Najib Aziz, Roger Detels, Joshua J. Quint, et al. Biological variation of immunological blood biomarkers in healthy individuals and quality goals for biomarker tests. BMC Immunology, 2019. https://doi.org/10.1186/s12865-019-0313-0 ↩ ↩2
-
Antonio Barajas-Martínez, Elizabeth Ibarra-Coronado, Martha Patricia Sierra-Vargas, et al. Physiological Network From Anthropometric and Blood Test Biomarkers. Frontiers in Physiology, 2021. https://doi.org/10.3389/fphys.2020.612598 ↩
-
Chandra Mohan, Shervin Assassi. Biomarkers in rheumatic diseases: how can they facilitate diagnosis and assessment of disease activity?. BMJ, 2015. https://doi.org/10.1136/bmj.h5079 ↩ ↩2
-
Sebastian Palmqvist, Pontus Tideman, Niklas Mattsson-Carlgren, et al. Blood Biomarkers to Detect Alzheimer Disease in Primary Care and Secondary Care. JAMA, 2024. https://doi.org/10.1001/jama.2024.13855 ↩
-
James D. Doecke. Blood-Based Protein Biomarkers for Diagnosis of Alzheimer Disease. Archives of Neurology, 2012. https://doi.org/10.1001/archneurol.2012.1282 ↩
-
Harald Hampel, Sid E. O’Bryant, José L. Molinuevo, et al. Blood-based biomarkers for Alzheimer disease: mapping the road to the clinic. Nature Reviews Neurology, 2018. https://doi.org/10.1038/s41582-018-0079-7 ↩
-
Michelle M. Mielke, Nicole R. Fowler. Alzheimer disease blood biomarkers: considerations for population-level use. Nature Reviews Neurology, 2024. https://doi.org/10.1038/s41582-024-00989-1 ↩
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.