DEV Community

RGENR8 NMN
RGENR8 NMN

Posted on

I checked every published human NMN trial against PubMed. Here's the dataset.

NMN (nicotinamide mononucleotide) gets written about a lot, and I kept seeing the same three or four trials cited as if they were the whole literature. I wanted a single table with every published human trial of oral NMN in it, so I built one.

It has 25 trials so far, with 884 participants in total, published between 2020 and 2026 across 7 countries. 17 are randomised and 17 have a placebo arm. Each row has the design, sample size, population, daily dose, duration, comparator, what was measured, what the authors said they found, and any funding or conflicts they declared.

How each row was checked

I started from PubMed, ran four query sweeps, then read the reference lists of every included trial to catch anything the searches missed. One trial, published in Glycative Stress Research, is not indexed in PubMed at all, and the only way I found it was a citation in another paper.

Every row was checked against its PubMed record. For 19 trials I also read the full text, and the 6 that were registered on ClinicalTrials.gov were checked against the registry entry. A verified_from column says which sources each row rests on, so you can see which ones only had the abstract to go on. If a value could not be confirmed, the field is blank. I preferred a gap to a guess.

What got left out

Exclusions were the hard part. I dropped:

  • a trial where NMN was injected (the dataset is oral NMN only)
  • trials of multi-ingredient products, where you can't separate NMN's effect
  • re-analyses of trials that are already in the table, so participants aren't counted twice
  • a 2026 paper with the same design, sponsor and group sizes as a 2023 trial, which looks like a second report of the same study
  • a trial whose dose and design I couldn't confirm
  • protocols that haven't reported results yet

Every exclusion is listed with its reason on the dataset page, so if you disagree with one you can add it back.

What the numbers look like

The median of each trial's highest daily dose is 300mg. Doses range from 100mg to 2,000mg a day. Among the 22 trials that ran for more than one dose, the median length is 8.3 weeks and the longest is 24 weeks. The median trial has 30 participants, which is small, and worth keeping in mind when you read any headline about NMN.

I deliberately didn't compute a "percentage of trials that worked" figure. Trials measured different things in different populations, and collapsing them into one number would say more about my choices than about NMN.

Using it

The CSV is served directly, so you need nothing but the standard library:

import csv, io, statistics, urllib.request

url = "https://rgenr8.com/data/nmn-human-trials.csv"
rows = list(csv.DictReader(io.StringIO(urllib.request.urlopen(url).read().decode("utf-8"))))

randomised = [r for r in rows if r["randomised"] == "Yes"]
weeks = [float(r["duration_weeks"]) for r in rows if r["duration_weeks"]]

print(len(rows), "trials,", len(randomised), "randomised")
print("median duration:", statistics.median(weeks), "weeks")
Enter fullscreen mode Exit fullscreen mode

There's a JSON version too, and a Frictionless datapackage.json that describes every column. Everything is CC BY 4.0. You can reuse it however you like as long as you credit the source.

The full table, with search and filters, the exclusion list and the method, is on the NMN human trials dataset page. There's also an archived copy with a DOI on Zenodo, and the files plus a small Python package are on GitHub.

Disclosure: I run RGENR8, a UK company that sells NMN. That's the reason I care about getting this right, and it's also the reason I report only what the papers say and leave the interpretation to you. If you spot a trial I missed or a row I got wrong, tell me and I'll fix it and log the change.

Top comments (0)