Guide

Mapping Drug Identifiers: How to Bridge RxNorm, SNOMED CT, and ATC for Global Interoperability

Mapping RxNorm, SNOMED CT, and ATC for global drug data interoperability — a practical guide for pharmacists and developers, with concrete examples and tools.

Written by
Drug Database
Published
Updated
Reading time
8 min
Mapping Drug Identifiers: How to Bridge RxNorm, SNOMED CT, and ATC for Global Interoperability
On this page · 10 sections
  1. 01Why do RxNorm, SNOMED CT, and ATC all exist?
  2. 02What is RxNorm and how does it relate to NDC and SPL?
  3. 03What is SNOMED CT and how does it fit with FHIR R4?
  4. 04How does the ATC classification system work?
  5. 05RxNorm vs SNOMED CT: what's the actual difference?
  6. 06How do you map between RxNorm, SNOMED CT, and ATC?
  7. 07What breaks when the mapping is wrong?
  8. 08What tools and best practices help with drug data harmonization?
  9. 09Next steps: accessing drug database APIs for integrated data
  10. 10FAQ

The short answer: RxNorm, SNOMED CT, and ATC are three different languages for the same drugs, and the mapping between them is one-to-many, versioned, and never complete — you need a strategy, not a lookup table. RxNorm names US clinical drugs by ingredient, strength, and form; SNOMED CT describes clinical concepts; ATC classifies drugs for utilization research. Each serves a different job, and bridging them means knowing which job you are doing.

Key takeaways:

  • RxNorm (US), SNOMED CT (global clinical), and ATC (WHO research) answer different questions — pick your primary system by use case, not by habit
  • Mappings are one-to-many and versioned: one RxNorm concept can map to several SNOMED CT or ATC codes, and the mapping changes when any source updates
  • FHIR R4 uses RxNorm and SNOMED CT as preferred medication value sets — if you build on FHIR, you inherit both
  • The US (NDC), EU (EMA IDMP), and Switzerland (Swissmedic) each add regulatory identifiers on top of these terminologies
  • Start with RxClass for ATC product classes and the UMLS for cross-terminology mapping — then validate against your own data

Why do RxNorm, SNOMED CT, and ATC all exist?

Because they answer different questions. RxNorm answers "what drug, what strength, what form?" SNOMED CT answers "what is the clinical concept?" ATC answers "how do we classify this drug for research?" A drug like metformin exists in all three, but each system sees it differently.

The three systems were built by different organizations for different jobs. RxNorm is maintained by the US National Library of Medicine (NLM) for clinical drug naming. SNOMED CT is maintained by SNOMED International as a global clinical terminology. ATC is maintained by the WHO Collaborating Centre for Drug Statistics Methodology for drug utilization research. None of them is "better" — they are tools for different tasks.

What is RxNorm and how does it relate to NDC and SPL?

What is RxNorm and how does it relate to NDC and SPL?

RxNorm is the US standard for clinical drug names. It normalizes the mess of brand names, generics, and package labels into a single concept with a stable identifier (the RXCUI). Each concept combines ingredient, strength, and dose form — so "metformin 500 mg oral tablet" is one concept, distinct from "metformin 850 mg oral tablet."

RxNorm sits on top of the US regulatory layer. The FDA's Structured Product Labeling (SPL) files link each marketed package to an NDC (National Drug Code), and RxNorm links those NDCs to normalized clinical concepts. If you work with US drug data, you will touch all three: NDC for packages, RxNorm for clinical concepts, and SPL for the regulatory source. I wrote a developer's guide to NDC data in 2026 that covers the package layer in detail.

For mapping work, the key RxNorm feature is RxClass, NLM's tool that classifies RxNorm concepts into therapeutic and product classes. It includes a dedicated ATC product class type (ATCPROD) — a maintained, computable bridge from RxNorm concepts to ATC product classes. That is the closest thing to an official RxNorm-to-ATC mapping you will find.

What is SNOMED CT and how does it fit with FHIR R4?

What is SNOMED CT and how does it fit with FHIR R4?

SNOMED CT is a global clinical terminology. It covers not just drugs but findings, procedures, body structures, and everything else a clinician might record. Drug concepts in SNOMED CT describe substances and products at a clinical level — "metformin" as a substance, "metformin 500 mg oral tablet" as a product.

SNOMED CT is the terminology of choice for electronic health records and clinical decision support. In FHIR R4, the Medication and MedicationStatement resources use SNOMED CT and RxNorm as preferred value sets — which means if you build on FHIR, you are already working with both. I covered the practical details in my FHIR R4 implementation guide for medication data.

The catch: SNOMED CT is a terminology, not a drug dictionary. It does not tell you the strength or dose form of a product the way RxNorm does. It tells you what the concept is. That distinction matters when you map.

How does the ATC classification system work?

The ATC (Anatomical Therapeutic Chemical) classification is the WHO's system for drug utilization research. It groups drugs into five levels, from broad anatomical category to specific chemical substance:

LevelMeaningExample (metformin)
1Anatomical main groupA — Alimentary tract and metabolism
2Therapeutic subgroupA10 — Drugs used in diabetes
3Pharmacological subgroupA10B — Blood glucose lowering drugs, excl. insulins
4Chemical subgroupA10BA — Biguanides
5Chemical substanceA10BA02 — Metformin

Each ATC code is paired with a Defined Daily Dose (DDD) — the assumed average maintenance dose per day for a drug used in its main indication. The DDD is a research unit, not a clinical recommendation. It exists so that utilization can be compared across countries and over time, regardless of how a drug is actually prescribed.

ATC is deliberately coarse. It classifies drugs by their main therapeutic use, not by every possible use. That is a feature for research and a limitation for clinical work — a drug used for two indications gets one ATC code, and the code reflects the primary one.

RxNorm vs SNOMED CT: what's the actual difference?

The short version: RxNorm is a drug dictionary, SNOMED CT is a clinical terminology. They overlap on drug concepts but serve different purposes.

AttributeRxNormSNOMED CTATC
MaintainerUS NLMSNOMED InternationalWHO Collaborating Centre
Primary regionUSGlobalGlobal
GranularityIngredient + strength + formClinical conceptsTherapeutic class + DDD
Primary usee-prescribing, CDS, NDC linkageEHR, clinical documentationUtilization research, pharmacovigilance
IdentifierRXCUISCTIDATC code (5 levels)
Drug-specific?Yes, exclusivelyNo, covers all clinical conceptsYes, but class-level

The peer-reviewed literature on RxNorm–SNOMED CT mapping makes the same point: the two systems were designed for different tasks, and the mapping between them is partial by design. A single RxNorm concept can map to multiple SNOMED CT concepts, and vice versa. There is no clean one-to-one.

How do you map between RxNorm, SNOMED CT, and ATC?

Mapping is the hard part, and it is hard for structural reasons, not just data quality reasons. Here is the process I use:

  1. Start with the official bridges. RxClass gives you RxNorm-to-ATC product classes. The UMLS Metathesaurus contains RxNorm and SNOMED CT and provides cross-terminology relationships. Use these as your base layer.
  2. Map at the right granularity. If you need clinical decision support, map at the product level (RxNorm concept to SNOMED CT product). If you need utilization research, map at the substance level to ATC.
  3. Version everything. Each system releases updates on its own schedule. Record the source version and the date you checked the mapping. A mapping that was correct in January may be wrong in October.
  4. Validate against real data. The official bridges cover the common cases. Your data will contain edge cases — combination products, discontinued NDCs, local formulations. Build a review queue for those.

The comparative drug terminology literature is blunt about the coverage gaps: no single terminology covers everything, and the gaps are exactly where your data will surprise you.

What breaks when the mapping is wrong?

Three things, in order of how much they hurt:

Pharmacovigilance. Adverse event reports need to be linked to the right drug. If your mapping sends a report to the wrong ATC class, the signal is diluted or misattributed. The EU's EMA IDMP requirements, which I covered in my EMA IDMP 2026 readiness guide, make this worse: submissions must carry the right identifiers or they are rejected.

Formulary management. A formulary decision on "metformin" needs to cover every product, strength, and form. If your mapping misses a strength, the formulary is incomplete and the pharmacist on the ward finds out.

Clinical decision support. A drug-drug interaction check that fails to match a product to its ingredient is a silent failure. The patient gets the drug, the alert never fires. I wrote about the state of drug interaction APIs in 2026 — the mapping layer is where most of those APIs quietly break.

What tools and best practices help with drug data harmonization?

The tools are fewer than you might hope, and the best practice is to treat mapping as a process, not a one-time task.

ToolWhat it gives youLimit
RxClass (NLM)RxNorm-to-ATC product classesUS-centric; ATC only
UMLS MetathesaurusCross-terminology relationshipsRequires license; updates lag
FHIR R4 value setsPreferred medication value setsTerminology, not mapping
Your own review queueEdge-case handlingRequires staff time

Best practices, in order:

  • Pick one primary system per use case. Do not try to be everything to everyone.
  • Store the mapping, not just the codes. Record source version, target version, and check date for every relationship.
  • Test with real prescriptions. The official bridges are clean; your data is not. Run a sample of your actual medication records through the mapping and look at what falls out.
  • Plan for updates. RxNorm updates monthly, SNOMED CT twice a year, ATC annually. Your mapping will drift. Schedule a re-check.

Next steps: accessing drug database APIs for integrated data

If you are building this yourself, you have a long road ahead. The alternative is to use a drug database that already maintains the cross-terminology mappings. Our drug database API exposes RxNorm, SNOMED CT, and ATC identifiers alongside NDC, Swissmedic, and EMA IDMP data, with the source version and check date on every record. Search the catalogue for your drug and see the identifiers side by side — that is the fastest way to understand what the mapping actually looks like in practice.

FAQ

RxNorm vs SNOMED CT: which should I use?

Use RxNorm if you need US clinical drug names with strength and form, especially for e-prescribing or NDC linkage. Use SNOMED CT if you need a global clinical terminology for EHR documentation or decision support. Many systems use both — FHIR R4 does.

How do I convert RxNorm to SNOMED CT?

There is no official one-to-one conversion. Use the UMLS Metathesaurus for cross-terminology relationships, map at the product or substance level depending on your use case, and validate against real data. Expect one-to-many mappings.

What is the ATC classification system?

The ATC system is the WHO's five-level classification of drugs for utilization research, from anatomical group (level 1) to chemical substance (level 5). Each code pairs with a Defined Daily Dose for comparing drug use across countries and time.

Is there a complete mapping between RxNorm and ATC?

No. RxClass provides RxNorm-to-ATC product classes, but the mapping is partial and US-centric. Combination products, local formulations, and newly approved drugs are the usual gaps.

What are drug nomenclature standards?

Drug nomenclature standards are controlled vocabularies that name drugs consistently: RxNorm (US clinical), SNOMED CT (global clinical), ATC (WHO research), plus regulatory identifiers like NDC (US), EMA IDMP (EU), and Swissmedic (Switzerland). They overlap but serve different purposes.

Try it

Check a medicine yourself.

Search by brand, substance or ATC code across the official registers with a free account. Each record names the register it came from.

  • Brand, substance or ATC code
  • The source register and date on every record
  • Where else the same medicine is registered
Search a medicineTry it free

Free: 10 lookups in total and a one-time 5¢ AI credit · no card

Countries covered: United Kingdom, United States, Czechia, Finland, Spain, Switzerland, Poland, Belgium, Netherlands, Sweden, Germany, Denmark, France, Canada, Japan, Italy, Ireland, Norway, Iceland.