Download the data
Check our figures, or reuse them: the clinic facts, study cards, and regulatory records behind every report.
Files
| File | What it holds | Rows | Size |
|---|---|---|---|
| clinics.csv | One row per listed clinic: where it is, whether the listing is verified, and what the clinic's own website states about EBO2 (price, packages, session length, device, supervision, intake, recommended course, add-ons), with the page each price came from and the date read. | 177 clinics | 79 KB |
| clinics.json | The same records as clinics.csv, with lists as arrays, plus the license, the date, and this field dictionary. | 177 clinics | 224 KB |
| studies.csv | One row per study card: the citation, study type and size, design, setting, study arms, each procedure parameter as the paper writes it, adverse events, follow-up, funding, and whether we read the full text or only the abstract. | 78 studies | 109 KB |
| regulatory.json | Every regulatory record: date, issuing body, type, title, the address of the primary source, our neutral summary, the key language quoted from the source, and the party named. | 34 records | 41 KB |
- The CSV files are UTF-8 with a byte-order mark, so spreadsheet programs read accented characters correctly; strip it if your parser does not. Where a cell holds several values they are separated by a semicolon and a space.
- A text cell that begins with =, +, -, or @ starts with an apostrophe, so a spreadsheet shows it as text instead of running it as a formula.
- An empty cell in a clinic's facts means the clinic's page does not state it only when pages_status is read. When the pages could not be read, an empty cell means unknown.
- What the files leave out: how each clinic words FDA status and whether its pages state health benefits, which the transparency report publishes only as counts, and whether its pages show testimonials, which we do not publish in any form. The clinic files also leave out clinicians' names, phone numbers, street addresses, and our research notes, though they carry each listing's map coordinates, which are precise enough to find the building.
- Who the files name: regulatory.json names the parties that the public documents themselves name, which can be people, such as physicians named in licensing board orders, and studies.csv names each paper's authors. Our privacy policy explains how a person we name can ask for a correction, an update, or removal.
License
The files are published under the Creative Commons Attribution 4.0 International license (CC BY 4.0). You may copy, share, and adapt them for any purpose, including commercially, as long as you give credit the way the license asks: credit EBO2.com, link to https://ebo2.com/data/, name the license and link to it, and say whether you changed the data. Each citation below does the first three. The CSV files carry no license line of their own; the license covers them all the same, and the JSON files give the license's address and the credit line in their license and credit fields. Our terms of use explain what the license covers and what it does not, such as the quotes and map coordinates that come from others.
The data records what clinics and papers state. It is not medical advice, and it does not rate or recommend any clinic.
How to cite
- EBO2.com. US clinics offering EBO2 (EBOO): what each states about the service. Data as read on September 28, 2026. https://ebo2.com/data/ (CC BY 4.0, https://creativecommons.org/licenses/by/4.0/).
- EBO2.com. EBOO and ozone therapy study cards: what each paper reports, in structured form. Data as read on October 2, 2026. https://ebo2.com/data/ (CC BY 4.0, https://creativecommons.org/licenses/by/4.0/).
- EBO2.com. Regulatory records on ozone therapy and EBO2 (EBOO), from primary sources. Data as read on September 28, 2026. https://ebo2.com/data/ (CC BY 4.0, https://creativecommons.org/licenses/by/4.0/).
If you changed the data, add a note to the citation that says what you changed.
Field dictionary
Columns appear in this order in each file. Dates are written as YYYY-MM-DD and prices in whole US dollars.
clinics.csv and clinics.json
| Field | Type | What it holds |
|---|---|---|
id | text | Our identifier for the listing. It is also the last part of the listing page address. |
name | text | The clinic name as listed. |
city | text | City of the listed address. |
state | text | Two-letter postal code of the state. |
zip | text | ZIP code, when the listing has one. |
website | URL | The clinic's website as listed. An address whose path words a health claim is shortened to the site's own address, as in pages_read_urls and price_source_url. |
listing_verified | yes/no | Whether we confirmed, on the clinic's own website, that it offers EBO2 or EBOO. yes or no in the CSV, true or false in the JSON. |
listing_verified_date | date | The date of that listing check, as YYYY-MM-DD. |
other_services | list | Other services the listing records beside EBO2, as codes: mah (Major autohemotherapy (MAH)), 10pass (10-pass ozone), iv-therapy (IV nutrient therapy), hbot (Hyperbaric oxygen), prp (PRP), peptides (Peptide therapy), chelation (Chelation), nad (NAD+ therapy), other (Other services). |
latitude | number | Latitude of the listed address, when known, to up to five decimal places (about a meter), which is precise enough to find the building. |
longitude | number | Longitude of the listed address, when known, to up to five decimal places. |
listing_url | URL | The clinic's page on EBO2.com, which shows each fact with the clinic's exact words. |
pages_status | text | read: a research pass read the clinic's EBO2 page, so an empty fact below means the page does not state it. could-not-read: the pass could not load or find the page, so an empty fact means unknown. not-yet-researched: no pass has run for this listing yet. |
pages_read_date | date | The date the research pass read the pages. Empty unless pages_status is read. |
pages_read_urls | list | The pages the research pass read. Every fact below comes from one of them. Empty unless pages_status is read. An address whose path words a health claim is shortened to the site's own address. |
price_usd | number | The price of one EBO2 session in US dollars, as the clinic states it. |
price_note | text | Wording that qualifies the price, such as "starting at" or a separate member rate, when there is any. Left empty when that wording names a condition or makes a health claim. |
price_source | text | clinic-page: the research pass read the price on the clinic's EBO2 page, with its exact words checked against the saved text of the pages read for that clinic. listing: the price was recorded from the clinic's website earlier, when the listing was checked. Every price figure on the site counts the clinic-page prices of rows whose pages_status is read, and no others; the rest show on the clinic's page. Empty when there is no price. |
price_source_url | URL | The page the price came from, shortened to the site's own address when its path words a health claim. |
price_date | date | The date the price was read: pages_read_date for a clinic-page price, and the date of the listing check for a listing price. |
packages | list | Multi-session packages as sessions:total in US dollars, for example 3:4200. In the JSON, a list of objects with sessions and total_usd. |
session_minutes_min | number | The shortest session length the clinic states, in minutes. |
session_minutes_max | number | The longest session length the clinic states, in minutes. The same as the minimum when the clinic states one length. |
device | text | The device or system, as the clinic names it. Here and in the text fields below, a value whose wording names a condition or makes a health, safety, or FDA claim reads "Described on the clinic's page" instead, as on the clinic's page on EBO2.com. |
supervision | text | Who supervises sessions, as the clinic words it (a short form of the sentence on its page). |
intake | text | What the clinic says happens before a first session, such as a consultation, labs, or screening (short form). |
course_sessions_min | number | The smallest number of sessions in the course the clinic recommends. |
course_sessions_max | number | The largest number of sessions in the course the clinic recommends. |
course_cadence | text | How often the clinic says sessions happen, in its words (short form). |
add_ons | list | Services the clinic offers together with an EBO2 session, with the price when stated, for example UV light ($150). In the JSON, a list of objects with name and usd. |
studies.csv
| Field | Type | What it holds |
|---|---|---|
id | text | Our identifier for the study. Its notes page is https://ebo2.com/research/<id>/. |
title | text | Title of the paper. |
authors | list | Authors as cited. |
year | number | Year of publication. |
journal | text | Journal or publisher. |
pmid | text | PubMed identifier, when there is one. |
doi | text | Digital Object Identifier, when there is one. |
url | URL | Where to read the paper or its abstract. |
study_type | text | rct, controlled-trial, cohort, case-series, case-report, review, meta-analysis, in-vitro, animal, mechanistic, or other. |
sample_size | number | The sample size recorded in our library. What it counts depends on study_type: people, animals, or the people across the studies a review covers. |
relevance | text | ebo2 (a study of EBO2 or EBOO as given to people, or a review of them), safety, ozone-general (other ozone methods), or mechanism (background science). |
design | text | The design, as the paper describes it (short form). |
setting | text | Country, institution, or setting, as the paper states it. |
arms | list | Study groups as label (n=size): what they received. The size is left out when the paper does not give it. |
ozone_concentration | text | Ozone concentration, as the paper writes it, in its own units; empty when the text we read does not report it. |
blood_volume | text | Blood volume treated, as the paper writes it, in its own units; empty when the text we read does not report it. |
session_length | text | Session length, as the paper writes it, in its own units; empty when the text we read does not report it. |
sessions | text | Number or schedule of sessions, as the paper writes it, in its own units; empty when the text we read does not report it. |
blood_flow | text | Blood flow rate, as the paper writes it, in its own units; empty when the text we read does not report it. |
anticoagulant | text | Anticoagulant, as the paper writes it, in its own units; empty when the text we read does not report it. |
filter | text | Filter or oxygenator, as the paper writes it, in its own units; empty when the text we read does not report it. |
adverse_events | text | Adverse events as the paper reports them, including "none recorded". Empty when the text we read does not address them. |
follow_up | text | How long participants were followed, as reported. |
funding_or_conflicts | text | Funding or conflicts of interest, as the paper states them. Empty when the text we read says nothing. |
notices | list | Errata, corrections, or retraction notices shown on the paper's PubMed page. |
read_from | text | full-text when the methods section was available to us; abstract when only the abstract was. |
card_notes | text | What the reader noted about the source: what was available, and what the text does not say. |
card_checked | date | The date the paper was read for this card. |
card_pages | list | The pages the card was read from. Every field above carries an exact quote from one of them on our study pages. |
regulatory.json
| Field | Type | What it holds |
|---|---|---|
id | text | Our identifier for the record. |
date | date | The date on the document itself: issued, effective, or published. |
jurisdiction | text | US-federal, US-state, EU, UK, Italy, Germany, Canada, Australia, or other. |
body | text | The agency, court, legislature, or board that issued the document. |
kind | text | warning-letter, regulation, guidance, statement, enforcement, safety-communication, position-statement, court-decision, or other. |
title | text | The title of the document. |
url | URL | The primary source: the issuing body's own page or document. |
summary | text | What the document is and says, in our neutral words. |
key_quote | text | Exact words from the source at url. A script checks each one against the saved text of the regulatory sources we read, pooled across all of them rather than against the one page at url; the saved copies are not published. |
topic | text | ebo2, ozone-devices, ozone-therapy, dialysis-filters, or health-claims. |
named | text | The party the document names, when it names one. |
status | text | current, superseded, or historical, as of the date we checked. |
checked | date | The date we read the source. |
Change log
| Date | Change |
|---|---|
| Clinics: a new price_source column says whether a price was read on the clinic's EBO2 page or recorded when the listing was checked; the reports count only the first kind, from clinics whose pages_status is read. A device, supervision, intake, course cadence, or add-on value whose wording names a condition or makes a health, safety, or FDA claim now reads "Described on the clinic's page", and such a price note is left empty, as on the clinic pages. | |
| First release: clinics as CSV and JSON, study cards as CSV, and regulatory records as JSON. |
Routine refreshes of the data are not listed: each file states the date its data was read.
Report an error
If a value is wrong, tell us through the contact form and choose "Report an error or request a correction". Give the file, the row's id, and what the source says. Clinics can also claim and correct their listing.