Drug Safety·5 min read

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.

Drug Interaction Data: Where to Find It and How to Use It

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