Data Methodology
How VirusWatch collects, verifies, and presents global infectious disease data — and what our numbers mean.
Our Mission
VirusWatch exists to make global infectious disease surveillance data accessible to everyone — not just public health professionals. We aggregate data from authoritative sources, apply consistent normalisation, and present it in plain language with clear uncertainty bounds. Transparency about our methods is essential to that mission.
This page explains where our numbers come from, how we process them, what they mean, and — critically — what they don't mean. Epidemiological data is inherently uncertain; we aim to represent that uncertainty honestly.
Primary Data Sources
| Source | Used For | Update Frequency | Access Method |
|---|---|---|---|
| disease.sh (aggregates WHO + JHU data) | COVID-19 live global totals (cases, deaths, recovered) | ~30 minutes | REST API (server-side, cached 1 hr) |
| WHO Global Health Observatory (GHO) | Malaria, Tuberculosis, HIV/AIDS, Measles, Hepatitis B — annual estimates | Annual (WHO publishes yearly) | OData API (server-side, cached 1 hr) |
| WHO Situation Reports & Fact Sheets | Baseline figures for Dengue, Ebola, H5N1, Mpox, Chikungunya, Nipah, Zika, Cholera, Rabies, Yellow Fever, Typhoid, Hantavirus, Plague, Marburg | Static — updated manually when WHO publishes new reports | Editorial review (incorporated into baseline figures) |
| CDC | Outbreak guidance, clinical reference, CFR data | Ongoing | Editorial reference |
| Peer-reviewed literature | CFR, incubation periods, transmission data | Continuously updated | Editorial review (PubMed, Lancet, NEJM) |
How Data Fetching Works
Our Cloudflare Worker API (api.viruswatch.health) fetches live data from upstream sources on request and caches results for 1 hour in Cloudflare KV storage. We are honest about which diseases have live data and which do not:
6 diseases with live API data (updated hourly)
- COVID-19 — fetched from disease.sh (which aggregates WHO and Johns Hopkins University data). Reflects cumulative global totals since 2020. Disease.sh refreshes its own cache approximately every 30 minutes; our API caches for 1 hour.
- Malaria — WHO Global Health Observatory indicator
MALARIA_EST_CASESandMALARIA_EST_DEATHS. WHO publishes annual estimates; the figure reflects the most recently published year (typically 1–2 year lag). - Tuberculosis — WHO GHO indicator
TB_e_inc_num(estimated incidence). Annual WHO Global TB Report data. - HIV/AIDS — WHO GHO indicators
HIV_0000000001(people living with HIV) andHIV_0000000006(annual deaths). Annual UNAIDS/WHO estimates. - Measles — WHO GHO indicator
WHS3_62(reported cases). Annual WHO immunization data. - Hepatitis B — WHO GHO country-level data (
HEPATITIS_HBV_LIVINGWITH_NUM) summed across all reporting countries. Annual estimates.
14 diseases with WHO-published static baselines
The following diseases do not have a publicly accessible global case-count API that returns reliable, current totals. Their figures are WHO-published baselines sourced from the most recent WHO situation reports, fact sheets, or peer-reviewed literature, and are updated manually when new official data is published:
Dengue · Ebola · H5N1 Bird Flu · Mpox · Chikungunya · Nipah · Zika · Cholera · Rabies · Yellow Fever · Typhoid · Hantavirus · Plague · Marburg
We do not fabricate, interpolate, or estimate figures for these diseases. If no reliable global API exists, we display the best available published baseline and label it accordingly. When live data becomes available for any of these diseases, we will integrate it.
Baseline Figures and Cumulative Totals
Most disease statistics on VirusWatch represent cumulative historical totals, not current active case counts. This is an important distinction:
- Cumulative cases: Total confirmed cases ever recorded (e.g., 703 million COVID-19 cases since 2020). Most of these individuals have recovered or died.
- Active cases: Currently sick individuals. We do not display active case counts for most diseases due to reporting lag and reliability concerns.
- Deaths: Cumulative confirmed deaths attributable to the disease. Excess mortality studies suggest true death tolls (especially for COVID-19) are significantly higher than confirmed figures.
- Recovered: Estimated cumulative recoveries. Calculated as: confirmed cases − deaths − (estimated remaining active).
For diseases with low total case counts (H5N1, Nipah), numbers reflect all confirmed cases in human history. Underreporting is a significant issue for these diseases, particularly in resource-limited settings.
Case Fatality Rate (CFR) Methodology
The Case Fatality Rate shown on disease pages is calculated as: CFR = (confirmed deaths ÷ confirmed cases) × 100
Important caveats:
- CFR varies significantly by outbreak, geography, healthcare system capacity, and case detection rate. A CFR of 2% in a high-income country may be 15%+ in a setting with limited healthcare access.
- CFR is not the same as Infection Fatality Rate (IFR). IFR accounts for unconfirmed infections and is typically lower than CFR.
- CFRs for diseases like Ebola and Nipah are highly context-dependent and can range from 25–90% depending on the outbreak and healthcare response.
- We display a range (e.g., "Ebola: 25–90% CFR") where the literature shows significant variation.
AI Assistant Methodology
The VirusWatch AI assistant is powered by Groq (llama-3.1-8b-instant). The AI is prompted to:
- Answer questions about infectious diseases clearly and factually
- Cite WHO or CDC guidance where relevant
- Explicitly state that responses are educational only
- Not provide personal medical advice, diagnoses, or specific medication recommendations
- End every response with a reminder to consult a qualified healthcare provider
AI responses are cached for 24 hours. The AI may contain inaccuracies or outdated information. AI-generated content should not be used as a substitute for professional medical advice or authoritative public health guidance.
We do not store questions linked to personal identifiers. See our Privacy Policy for details on AI query handling.
News Aggregation
The VirusWatch news feed aggregates headlines from public health RSS feeds and news sources. News content is displayed as-is from the source; VirusWatch does not verify or fact-check individual news articles. We apply content filtering to ensure relevance to global health topics.
News articles cached for 1 hour to reduce API load. If no live news is available, a cached version is displayed with a timestamp.
Content Editorial Standards
Disease page content (symptoms, transmission, treatment) is written and reviewed by the VirusWatch Health Research Team against WHO and CDC reference materials. Content is reviewed when significant guidance updates are published by these authorities.
Our editorial standards:
- Primary citations: WHO, CDC, peer-reviewed journals (Lancet, NEJM, BMJ, Emerging Infectious Diseases)
- All claims about symptoms, transmission, and treatment reference published WHO or CDC guidance
- Where scientific consensus is uncertain, we note the uncertainty explicitly
- We do not publish content that recommends unproven treatments or contradicts scientific consensus
- Content is written in plain language accessible to a general audience, without sacrificing accuracy
Limitations and Known Issues
- Reporting lag: All disease figures are subject to reporting delays. Data is only as current as what is reported to and published by health authorities.
- Underreporting: Confirmed case counts significantly underestimate true infection burden, particularly for diseases without robust surveillance infrastructure.
- Geographic variation: Incidence, CFR, and treatment outcomes vary significantly by country, region, and healthcare system. Global averages mask this variation.
- API availability: We depend on third-party APIs (disease.sh, WHO GHO). If these are unavailable, we display the most recent cached data or vetted baselines.
- AI limitations: AI-generated responses may contain hallucinations, outdated information, or errors. Always verify with authoritative sources.
Data Freshness
Data freshness varies by disease and source. We only claim live data where a live API actually exists:
- COVID-19: Our API fetches from disease.sh hourly and caches in KV. Disease.sh itself refreshes every ~30 minutes from its upstream sources (WHO, JHU). Displayed as live data with a dataType: "live" label.
- Malaria, Tuberculosis, HIV/AIDS, Measles, Hepatitis B: Fetched hourly from the WHO Global Health Observatory OData API. WHO publishes new estimates annually; the API serves the most recently published year. Displayed with a dataType: "official" label and a year indicator.
- All other 14 diseases (Dengue, Ebola, H5N1, Mpox, Chikungunya, Nipah, Zika, Cholera, Rabies, Yellow Fever, Typhoid, Hantavirus, Plague, Marburg): WHO-published baseline figures from the most recent published WHO reports. These do not auto-update via API. We update them manually when WHO or CDC publishes new figures. Displayed with a source label noting these are WHO-published baseline figures last checked against cited sources in January 2025. Figures may have since been revised.
Data Limitations
Public-health data has inherent limitations:
- Case counts are often underreported due to limited testing capacity in affected regions
- Data may be delayed by days or weeks between occurrence and official reporting
- Classification of cases can change as investigations proceed
- VirusWatch presents data as published by official sources and does not adjust or estimate unreported cases
Independence Statement
VirusWatch is independently operated. We have no commercial relationship with WHO, CDC, ECDC, PAHO, any pharmaceutical company, health insurer, or government health body. No funding influences our content. We are not affiliated with any government agency.
Content is written by the VirusWatch editorial team using publicly available data from official health organizations. It is not medically reviewed by licensed physicians. Nothing on this site constitutes medical advice, diagnosis, or treatment.
Feedback and Corrections
If you believe any data or content on VirusWatch is inaccurate, please contact us at [email protected]. Include the specific page, the claimed error, and a reference to an authoritative source. We review all correction requests and will update content when errors are confirmed.
For API-related issues or developer queries, see our Developer documentation.