Drug Interaction Data: Where to Find It and How to Use It
A guide to programmatic drug interaction data sources: DailyMed SPL, RxNorm, openFDA labels, and DrugBank. How to build interaction checks into your app.

Why drug interaction data is hard
Drug interaction checking sounds straightforward: look up two drugs, check if they interact. In practice, it is one of the harder data problems in healthcare IT.
The challenges:
- No single authoritative database covers all interactions
- Severity classifications vary between sources
- New interactions are discovered continuously through post-market surveillance
- Generic vs. brand naming adds complexity to lookups
- Metabolic pathways (CYP450 enzymes) create indirect interactions that are difficult to categorize
The main data sources
| Source | Coverage | Access | Cost |
|---|---|---|---|
| DailyMed (NLM) | FDA-approved labeling | Free API | Free |
| RxNorm (NLM) | Drug concept mapping | Free API | Free |
| openFDA Drug Labels | Package insert text | Free API | Free |
| DrugBank | Comprehensive interactions | API | Paid (academic free) |
| FDB (First Databank) | Clinical decision support | License | $$$ |
| Medi-Span (Wolters Kluwer) | Clinical decision support | License | $$$ |
For most developer projects, the free NLM sources (DailyMed + RxNorm) provide sufficient interaction data. Commercial sources add clinical severity scoring and evidence grading.
DailyMed: the primary free source
DailyMed (dailymed.nlm.nih.gov) publishes Structured Product Labeling (SPL) files for all FDA-approved drugs. The "Drug Interactions" section of each label contains interaction information in both human-readable text and structured XML.
Access the API:
# Search for a drug's label
curl "https://dailymed.nlm.nih.gov/dailymed/services/v2/spls.json?drug_name=warfarin"
# Get the full SPL document
curl "https://dailymed.nlm.nih.gov/dailymed/services/v2/spls/SET_ID.xml"
The interaction section (LOINC code 34073-7) lists known interactions with clinical descriptions.
Limitation: DailyMed provides interactions as narrative text, not as structured drug-to-drug pairs. Extracting a queryable interaction database from SPL files requires NLP or manual curation.
RxNorm: the drug concept backbone
RxNorm is not an interaction database, but it is essential infrastructure for building one. It maps between:
- Brand names → generic names
- Generic names → ingredient codes
- NDC codes → RxNorm concept IDs (RxCUI)
- Multiple dosage forms and strengths
The RxNorm API:
# Get RxCUI for a drug name
curl "https://rxnav.nlm.nih.gov/REST/rxcui.json?name=warfarin"
# Get interactions for an RxCUI
curl "https://rxnav.nlm.nih.gov/REST/interaction/interaction.json?rxcui=11289"
# Check interaction between two drugs
curl "https://rxnav.nlm.nih.gov/REST/interaction/list.json?rxcuis=11289+4053"
The RxNorm interaction API (powered by ONCHigh data) provides basic interaction checking for free. It covers approximately 1,500 high-priority drug-drug interactions.
openFDA drug labels
The openFDA drug label endpoint provides full-text search across package inserts:
# Search interaction section for mentions of warfarin
curl "https://api.fda.gov/drug/label.json?search=drug_interactions:\"warfarin\"&limit=10"
This retrieves labels that mention warfarin in their interaction section. Useful for discovering which drugs interact with a target drug, though the results are text-based rather than structured.
Building an interaction checker
A practical approach using free data sources:
Step 1: Normalize drug input to RxCUI
import requests
def get_rxcui(drug_name):
url = f"https://rxnav.nlm.nih.gov/REST/rxcui.json?name={drug_name}"
response = requests.get(url)
data = response.json()
return data.get("idGroup", {}).get("rxnormId", [None])[0]
Step 2: Query RxNorm interaction API
def check_interaction(rxcui_1, rxcui_2):
url = f"https://rxnav.nlm.nih.gov/REST/interaction/list.json?rxcuis={rxcui_1}+{rxcui_2}"
response = requests.get(url)
data = response.json()
interactions = data.get("fullInteractionTypeGroup", [])
return interactions
Step 3: Enrich with label text from openFDA
For interactions found, pull the relevant label section to provide clinical context to the user.
Severity classification
Different sources use different severity scales:
| Source | Scale | Levels |
|---|---|---|
| RxNorm/ONCHigh | Binary | Critical (included) or not |
| FDB | 4-level | Contraindicated, Severe, Moderate, Mild |
| Medi-Span | 3-level | Major, Moderate, Minor |
| Clinical Pharmacology | 5-level | Contraindicated through Minor |
The free sources (RxNorm, DailyMed) generally do not provide standardized severity scores. This is the primary reason commercial databases command premium pricing.
CYP450 interactions: the hardest category
Many drug interactions happen through shared metabolic pathways. Drug A inhibits CYP3A4, Drug B is metabolized by CYP3A4, so Drug A raises Drug B's blood levels.
These pharmacokinetic interactions are:
- Harder to classify by severity (depends on Drug B's therapeutic window)
- More numerous than direct pharmacodynamic interactions
- Partially predictable from in-vitro enzyme data
- Listed in drug labels under "Clinical Pharmacology" and "Drug Interactions" sections
The FDA Metabolic Drug Interaction table (available in FDA guidance documents) lists known CYP substrates, inhibitors, and inducers, but not as a queryable API.
What commercial databases add
If you need production-grade interaction checking (for EHR integration or pharmacy systems), commercial databases provide:
- Structured severity scoring for every pair
- Clinical evidence grading (established, theoretical, case report)
- Patient-specific factors (renal function, age adjustments)
- Update frequency (weekly or faster)
- Liability coverage (indemnification for clinical use)
FDB and Medi-Span are the two dominant commercial sources. Both require enterprise licensing agreements with pricing based on usage volume.
FAQ
How many drug-drug interactions exist? Estimates range from 20,000 to 100,000+ clinically significant pairs, depending on how broadly "interaction" is defined. The RxNorm ONCHigh dataset covers approximately 1,500 of the most critical pairs.
Is the free RxNorm interaction data sufficient for a consumer app? For informational purposes, the RxNorm data covers the most dangerous interactions. It is NOT sufficient for clinical decision support in a healthcare setting, which requires commercial-grade data.
How often are new interactions discovered? The FDA receives new interaction information through post-market reports continuously. Label updates reflecting new interactions happen throughout the year. Major interaction databases update weekly.
Can I use interaction data commercially? NLM data (RxNorm, DailyMed) is free for commercial use. openFDA data is public domain. DrugBank and commercial databases have their own licensing terms.
What about supplement-drug interactions? This is a significant gap in free databases. St. John's Wort, grapefruit, and a few other supplements appear in drug labels, but comprehensive supplement interaction data requires specialized databases like the Natural Medicines Comprehensive Database (paid).
Published on 2026-07-18 · 5 min read
← Back to all articles