# Data dictionary — Magellan Longevity Open Evidence Dataset v1.0.0

Released 2026-08-11 · Creative Commons Attribution 4.0 International (CC BY 4.0) · <https://magellanlongevity.com/data/>

Encoding UTF-8. CSVs follow RFC 4180 (comma-delimited, `"` escaped by doubling, header row, LF).
Multi-value cells are separated by `;` with no spaces. Empty means *not recorded in the source* — nothing is imputed.

## Table 1 — products (130 rows, 32 fields)

### `products`

| field | type | description | provenance |
|---|---|---|---|
| `product_id` | integer | Stable catalogue identifier. Resolves to https://magellanlongevity.com/p/<product_id>.html | data.js products[].id |
| `product_name` | string | Retail product name as listed on the site. | data.js products[].name |
| `category_id` | integer | Storefront category (1–7). | data.js products[].cat |
| `category_name` | string | Human-readable category label. | data.js categories |
| `monograph_id` | string | Compound/device monograph the product inherits its evidence from. Many products share one monograph. | data.js products[].mono |
| `compound_or_device` | string | Title of that monograph — the active compound or device class actually studied. | data.js monographs[].title |
| `evidence_grade` | string | One of six tier labels. See the rubric on https://magellanlongevity.com/data/ | index.html TIER + evidenceFor() |
| `evidence_grade_letter` | string | Short letter form of the tier (A, B, C, C-, D). | index.html TIER[].grade |
| `evidence_tier_key` | string | Machine key for the tier: strong \| moderate \| emerging \| preliminary \| tool \| refuted. | index.html TIER |
| `grade_source` | string | How the grade was arrived at: curated_product (physician-reviewed, product-specific), curated_compound (physician-reviewed at the compound level), instrument_default (diagnostic/wearable graded as a measurement tool), provisional_from_citation_count (conservative fallback, capped below Strong). | derived from EVID_PROD / EVID / isTool() |
| `grade_rationale` | string | The plain-language reason shown to readers for why this grade applies. | index.html evidenceFor().reason |
| `grade_caveat` | string | The published caveat — where the evidence is weak, null, conflicted or industry-funded. Negative findings are retained deliberately. | index.html EVID/EVID_PROD caveat |
| `studied_dose` | string | The dose range actually used in human trials, where a verified range exists. Empty where none has been established — never inferred. | dosedata.js studyDose, else EVID.dose |
| `studied_dose_source` | string | Which source supplied studied_dose. | derived |
| `dietary_dose` | string | How much of the compound is obtainable from food, where that is meaningful. | dosedata.js foodDose |
| `pathway_id` | string | Mechanistic system key assigned to the product. | data.js products[].sys |
| `pathway_name` | string | Human-readable pathway name (e.g. "NAD+ / Sirtuin Axis"). | index.html PATH_META |
| `citation_count` | integer | Number of peer-reviewed study records linked to this product's monograph. | count of monographs[].studies |
| `distinct_pmid_count` | integer | Distinct PubMed IDs among those citations (a few papers appear under more than one internal key). | derived |
| `studies_with_writeup` | integer | How many of those citations have a full structured write-up in table 2. | derived |
| `pmids` | string | Semicolon-separated PubMed IDs for every linked citation. | derived |
| `study_keys` | string | Semicolon-separated join keys into table 2 (studies.study_key). | derived |
| `key_finding_quote` | string | A verbatim sentence from the specific study used to justify the pathway assignment. Quoted, never paraphrased. | data.js studies[].q |
| `key_finding_pmid` | string | PubMed ID of that study. | data.js studies[].pmid |
| `key_finding_journal` | string | Journal of that study. | data.js studies[].j |
| `key_finding_year` | integer | Publication year of that study. | data.js studies[].y |
| `key_finding_source` | string | Whether the key finding came from the curated pathway justification (product.why) or the first monograph citation. | derived |
| `listed_price_usd` | number | Typical listed US price at the release date. A snapshot, not a live price. | data.js products[].price |
| `affiliate_search_url` | string | Amazon search URL carrying the Associates tag. Commission does not affect the grade (editorial firewall). | derived |
| `product_page_url` | string | Canonical static product page. | derived |
| `category_page_url` | string | Canonical static category page. | derived |
| `monograph_page_url` | string | Canonical molecule monograph page, where one is published. Empty otherwise. | derived, validated against sitemap.xml |

## Table 2 — studies (2692 rows, 32 fields)

### `studies`

| field | type | description | provenance |
|---|---|---|---|
| `study_key` | string | Internal join key. Primary key of this table; join to products.study_keys. | data.js studies key / study-writeups.js key |
| `record_type` | string | catalog_citation \| catalog_citation_with_writeup \| writeup_only. | derived |
| `pmid` | string | PubMed identifier. | data.js studies[].pmid / write-up pmid |
| `doi` | string | Digital Object Identifier where recorded. Empty where the catalogue has none — never reconstructed. | data.js studies[].doi |
| `doi_url` | string | Resolvable https://doi.org/ URL. | derived from doi |
| `pubmed_url` | string | Resolvable PubMed URL. | data.js studies[].url, else derived from pmid |
| `title` | string | Article title as recorded. | data.js studies[].t / write-up title |
| `journal` | string | Journal name as recorded. | data.js studies[].j |
| `year` | integer | Publication year. | data.js studies[].y |
| `primary_compound` | string | Title of the first monograph citing this study (deterministic, insertion order). | derived |
| `linked_compounds` | string | Semicolon-separated titles of every monograph citing this study. | derived |
| `linked_monograph_ids` | string | Semicolon-separated monograph keys citing this study. | derived |
| `linked_monograph_count` | integer | How many monographs cite it. | derived |
| `linked_product_ids` | string | Semicolon-separated product ids that inherit this citation. | derived |
| `linked_product_count` | integer | How many catalogue products inherit this citation. | derived |
| `cited_by_monograph` | boolean | False for records held in the catalogue but not yet attached to a monograph. | derived |
| `outcome_statement` | string | The outcome in the source's own words: the write-up takeaway where one exists, otherwise the verbatim quoted finding. | study-writeups.js takeaway / data.js studies[].q |
| `outcome_statement_source` | string | Which field outcome_statement came from. | derived |
| `reported_direction` | string | favorable \| mixed \| no_difference \| unfavorable \| unclear. A coarse rule-based reading of the direction the source itself reports — NOT an independent appraisal. See the classifier notes below. | derived |
| `direction_rule` | string | Which branch of the classifier fired. | derived |
| `direction_evidence` | string | The exact phrase(s) that triggered the classification, so any row can be audited or rejected. | derived |
| `direction_basis` | string | Which text was classified: the write-up conclusion+takeaway, or the catalogue quote fragment. | derived |
| `has_writeup` | boolean | Whether a full structured write-up exists. | derived |
| `writeup_url` | string | Canonical study write-up page where one exists. | derived |
| `research_question` | string | The question the study set out to answer (write-ups only). | study-writeups.js question |
| `hypothesis` | string | The stated hypothesis (write-ups only). | study-writeups.js hypothesis |
| `methods` | string | Design, population, dose and duration (write-ups only). | study-writeups.js methods |
| `results` | string | Reported results (write-ups only). | study-writeups.js results |
| `conclusion` | string | The authors' conclusion (write-ups only). | study-writeups.js conclusion |
| `limitations` | string | Stated limitations, retained verbatim including "none stated" (write-ups only). | study-writeups.js limitations |
| `source_file` | string | Which source file(s) the row was assembled from. | derived |
| `is_primary_record_for_pmid` | boolean | True for exactly one row per PMID. Filter on this to de-duplicate to unique papers. | derived |

## Note on the derived field `reported_direction`

reported_direction is produced by a deterministic, published rule cascade, not by a human or a language model. Unfavorable cues are checked first, then no-difference cues, then favorable cues; a negation guard suppresses a cue when it is preceded within 45 characters by no / not / without / free of / lack of / absence of / neither. Rows where an unfavorable cue co-occurs with any other cue, or where a no-difference cue co-occurs with a favorable cue, are labelled mixed. Rows where nothing fires are labelled unclear and are NOT counted as null results. For observational biomarker papers the "direction" is the direction reported for the biomarker, not for an intervention. Every row carries direction_evidence so the classification can be audited or discarded.

## Joining the tables

```
products.study_keys  --split(";")-->  studies.study_key
studies.linked_product_ids --split(";")--> products.product_id
```

To reduce table 2 to unique papers, filter `is_primary_record_for_pmid == true` (2646 distinct PMIDs).
