Canadian DIN → RxNorm Crosswalk
Health Canada keys every marketed drug product to a Drug Identification Number (DIN). RxNorm — the vocabulary most drug analytics is built on — has no concept of a DIN. Mapping the two is the only way Canadian drug data joins a model built on RxNorm and NDC. This page covers what a DIN actually identifies, why the mapping is harder than it looks, and how TwinFyRx resolves 11,456 Canadian products against the canonical drug space.
11,456
Marketed human DINs
8,957
Prescription-scheduled
2,022
Combination products
1,620
Distinct ATC codes
Health Canada Drug Product Database, marketed human extract. Veterinary, disinfectant, and radiopharmaceutical classes are excluded.
What is a DIN?
A Drug Identification Number is an 8-digit number assigned by Health Canada to every drug product approved for sale in Canada. It identifies a specific manufacturer’s product by its active ingredients, strength, pharmaceutical form, and route of administration, and must appear on the product label. It is the primary key of Health Canada’s Drug Product Database (DPD).
The detail that trips up most integrations: a DIN does not encode package size. Unlike an NDC, whose final segment distinguishes a 30-count bottle from a 90-count bottle, one DIN covers every package size that manufacturer ships of that formulation. Package configurations live in a separate DPD table. That puts the DIN’s grain squarely between NDC and RXCUI — more specific than a clinical concept, less specific than a package.
Package
NDC 00093310905
Teva amoxicillin 500 mg capsule, 500-count bottle
Formulation
DIN 02388081
Auro-Amoxicillin 500 mg capsule — any package size
Concept
RXCUI 308191
amoxicillin 500 MG Oral Capsule — any manufacturer
Three identifiers, three grains. Narrowest on the left, broadest on the right — the crosswalk moves Canadian data rightward into the concept space everything else joins on.
DIN vs NDC vs RXCUI
There is no arithmetic conversion between a DIN and an NDC. They are issued by different regulators, for different markets, at different grains. The only route between them is a crosswalk through a shared clinical vocabulary.
| DIN | NDC | RXCUI | |
|---|---|---|---|
| Issued by | Health Canada | US FDA (labeler-assigned) | US National Library of Medicine |
| What it identifies | One manufacturer's product formulation | One physical package | A clinical concept |
| Grain | Manufacturer × ingredients × strength × form × route | Labeler × product × package size | Ingredients × strength × form |
| Encodes package size | No | Yes — the final segment | No |
| Structure | Flat 8-digit serial, no internal segments | Segmented 5-4-2 (labeler-product-package) | Opaque integer |
| Manufacturer-specific | Yes — every manufacturer gets its own DIN | Yes | No — generics collapse to one SCD |
For the US-only comparison, see RxNorm vs NDC and the RxNorm–NDC crosswalk.
Why the Mapping Is Harder Than a String Join
Both sides describe a drug by ingredient, strength, and dose form. Both express all three differently, and each mismatch is a distinct source of silently wrong mappings.
Percent vs mass-per-volume
Health Canada states topical and ophthalmic products as percentages where RxNorm uses MG/ML or MG/MG — and the two sides pick different mass scales. A 0.1% solution and a 1 MG/ML product are the same strength. A comparison that treats the units as incomparable loses the match; one that treats the numbers as comparable produces a 1000× error.
Salt name vs base name
Health Canada names the salt — 'amoxicillin trihydrate', 'sertraline hydrochloride'. RxNorm may use either, and is internally inconsistent: its strength-bearing concept names often use the salt while the corresponding ingredient-and-form concept uses the base. Matching requires stripping salt, ester, and hydrate suffixes to recover a comparable base name in both directions.
Dose form vocabularies do not align
'CAPSULE' with route 'ORAL' in Health Canada's vocabulary is 'Oral Capsule' in RxNorm's. 'TABLET (EXTENDED-RELEASE)' maps to 'Extended Release Oral Tablet'. The mapping is many-to-one and incomplete in both directions — a gap costs recall, which is recoverable, so it must never be papered over with a looser match, which is not.
Units that cannot be converted at all
UNT, MEQ, MMOL, per-actuation and per-hour strengths cannot be converted without external reference data — molecular weights, device specifications. Health Canada's electrolyte concentrates state MEQ/ML where RxNorm states MG/ML. Those are compared as-is and left unmatched rather than converted on an assumption. Guessing here is how drug crosswalks cause harm.
How Each DIN Resolves
Every row carries a match_method describing how it was resolved, so you can restrict an analysis to rule-verified lineage when the use case demands it. Four values, and the vocabulary is stable:
deterministicMatched by ruleThe ingredient set, dose form, and every ingredient's strength agree with a real RxNorm product. Strengths are compared unit-aware, so a Canadian 0.1% ophthalmic solution and an RxNorm 1 MG/ML product are recognized as the same concentration. Partial agreement is never enough — a strength disagreement rejects the candidate outright.
inferredResolved by candidate selectionNo rule was decisive, so the DIN was resolved by selecting from a shortlist of real RxNorm concepts gathered by the deterministic stage. Selection only ever picks from that shortlist — an RXCUI is never generated, only chosen. Use this filter to exclude judgment-based lineage when your use case requires rule-only provenance.
canada_only_strengthCanada-only productRxNorm carries the ingredient and dose form, but no product at the strength marketed in Canada. Rather than snapping to the nearest RxNorm strength — which is how drug crosswalks produce silent dosing errors — the product resolves to a stable TwinFyRx identifier plus the RxNorm clinical drug form it belongs to.
unmatchedNo mapping madeNo RxNorm concept was a defensible match. The row still carries every Health Canada attribute — brand, ingredients, strength, form, schedule, ATC — it simply carries no drug_id. Nothing is invented to fill the column.
On coverage figures. Resolution rates move with every RxNorm and DPD refresh, and matching rules are tightened when a tier is found to be producing mappings that do not hold up. Rather than print a number that ages badly, current rates by method and confidence are served live from GET /v1/canada/crosswalk/coverage, reported both overall and for prescription products, which resolve at a materially higher rate than a population that includes sunscreens and dialysis concentrates.
Sample Rows
Real rows from canada_drug_product. Note the two behaviours worth understanding: many DINs collapse to one RXCUI the same way many NDCs do, and brand and generic stay distinct — ELIQUIS resolves to a branded RxNorm concept while its generics resolve to the generic one.
| DIN | Brand | Strength | drug_id |
|---|---|---|---|
| 00406716 | NOVAMOXIN | amoxicillin 500 MG | 308191 |
| 02388081 | AURO-AMOXICILLIN | amoxicillin 500 MG | 308191 |
| 02525356 | AMOXICILLIN BP | amoxicillin 500 MG | 308191 |
| 02377233 | ELIQUIS | apixaban 2.5 MG | 1364441 |
| 02484994 | TEVA-APIXABAN | apixaban 2.5 MG | 1364435 |
| 02487381 | APO-APIXABAN | apixaban 2.5 MG | 1364435 |
Canada-Only Strengths: The Case Against Snapping to the Nearest Match
Some Canadian products have no RxNorm equivalent at their marketed strength even though RxNorm knows the drug perfectly well. Sertraline is the clearest case: Canada markets 25, 50, and 100 MG oral capsules, and RxNorm carries the clinical drug form sertraline Oral Capsule (RXCUI 373867) but no capsule product at those strengths. Eighteen DINs across ZOLOFT, APO-SERTRALINE, TEVA-SERTRALINE and others sit in that gap.
The tempting fix — map them to the nearest sertraline tablet — is exactly the failure mode that makes drug crosswalks dangerous. It produces a mapping that is wrong on dose form, and nothing downstream can tell. Instead these products resolve to a minted identifier alongside the RxNorm clinical drug form they legitimately belong to:
din 02238282 brand_name APO-SERTRALINE strength_text sertraline (sertraline hydrochloride) 100 MG dose_form CAPSULE drug_id NULL -- no RxNorm product at this strength clinical_drug_form_rxcui 373867 -- but the form is known synthetic_drug_id CA373867-ef40389887 synthetic_drug_name sertraline 100 MG Oral Capsule [CA-only strength] match_method canada_only_strength
Never an RXCUI
The CA-prefixed format cannot collide with RxNorm's integer identifier space. A consumer can always tell a minted identifier from a real one.
Stable across refreshes
The identifier is derived from the clinical drug form and the normalized strength, so it survives rebuilds and every DIN at that strength shares it.
Still joinable
clinical_drug_form_rxcui is populated, so these products roll up to ingredient and ATC class with everything else.
What Doesn’t Resolve, and Why
RxNorm covers the US market. Where Canada and the US diverge, no amount of matching effort produces a concept that does not exist. The unresolved population is dominated by four explainable groups:
Drugs not approved in the US
Zopiclone (the US approved eszopiclone instead), domperidone, betahistine, gliclazide, and combinations such as perindopril/indapamide are marketed in Canada with no US counterpart — and therefore no RXCUI.
Biologics
Adalimumab, ustekinumab, tocilizumab, filgrastim, darbepoetin alfa and similar products dominate the unresolved prescription rows. RxNorm's product-level coverage of biologics is thin on both sides of the border.
Sunscreens and cosmetic-adjacent products
Health Canada regulates sunscreens as drugs and assigns them DINs — the single largest ATC group in the extract. RxNorm does not model them as clinical drug products.
Hemodialysis concentrates
Multi-electrolyte concentrates stated in MEQ/ML have no safely convertible RxNorm counterpart, and are deliberately left unmatched rather than converted on an assumed molecular weight.
Unresolved rows are not dropped. They keep every Health Canada attribute — brand, ingredients, strength, form, route, schedule, and ATC classification — so a Canada-only product is still analysable by therapeutic class even without an RXCUI.
Querying the Crosswalk
1. Resolve a Canadian DIN to the canonical drug concept
SELECT
c.din,
c.brand_name,
c.strength_text,
d.drug_name,
d.ingredient,
d.dose_form
FROM canada_drug_product c
JOIN drug_profile d ON d.drug_id = c.drug_id
WHERE c.din = '02377233';2. Find every Canadian product for a US drug concept
SELECT
c.din,
c.brand_name,
c.schedule
FROM ndc_crosswalk n
JOIN canada_drug_product c ON c.drug_id = n.drug_id
WHERE n.ndc11 = '00093310905';3. Rule-verified lineage only, by therapeutic class
SELECT
LEFT(c.atc_code, 3) AS atc_class,
COUNT(*) AS dins,
COUNT(DISTINCT c.drug_id) AS drug_concepts
FROM canada_drug_product c
WHERE c.is_prescription
AND c.match_method = 'deterministic'
GROUP BY 1
ORDER BY dins DESC;API endpoints
| Endpoint | Purpose |
|---|---|
| GET /v1/canada/drugs/{din} | One product by DIN, bare or zero-padded, with its crosswalk |
| GET /v1/canada/drugs/search | Filter by name, ATC prefix, dose form, schedule, match method, or drug_id |
| POST /v1/canada/drugs:lookup | Bulk — up to 500 DINs resolved in a single query |
| GET /v1/canada/crosswalk/coverage | Live resolution rates by method and confidence |
| GET /v1/drugs/{drug_id}/canadian-dins | Reverse lookup — every Canadian DIN for a drug concept |
Full request and response shapes are in the API reference; the table and column definitions are on the schema reference.
Frequently Asked Questions
What is a DIN (Drug Identification Number)?
A DIN is an 8-digit number assigned by Health Canada to every drug product approved for sale in Canada. It identifies a specific manufacturer's product by its active ingredients, strength, pharmaceutical form, and route of administration. A DIN must appear on the label of every marketed Canadian drug product, and it is the key used across Health Canada's Drug Product Database (DPD).
Is a DIN the same as an NDC?
No. A DIN is Canadian and an NDC is American, and they identify different things. An NDC identifies a physical package — its final segment encodes package size, so a 30-count bottle and a 90-count bottle of the same drug have different NDCs. A DIN identifies a product formulation and does not encode package size at all, so one DIN covers every package size of that manufacturer's product. There is no arithmetic conversion between the two; mapping requires a crosswalk through a shared clinical vocabulary such as RxNorm.
How do you map a Canadian DIN to an RxNorm RXCUI?
Normalize both sides to a common key of ingredient set, dose form, and per-ingredient strength, then match on full agreement of all three. Health Canada and RxNorm differ systematically in how they express each of those — Health Canada names salts where RxNorm names bases, states topical and ophthalmic products as percentages where RxNorm uses MG/ML, and uses its own dose-form vocabulary — so each dimension must be normalized before comparison. Products that agree on ingredients and form but not strength are Canada-only strengths and should be given a distinct identifier rather than being mapped to the nearest RxNorm product.
Why doesn't every Canadian drug have an RXCUI?
RxNorm covers drugs marketed in the United States. Canada markets drugs the US does not approve — zopiclone, domperidone, gliclazide, betahistine, and combination products such as perindopril/indapamide have no US equivalent and therefore no RXCUI. Health Canada's database also includes categories RxNorm does not model at product level, notably sunscreens and other cosmetic-adjacent products, hemodialysis concentrates, and many biologics. These are structural gaps in RxNorm's scope, not failures of the matching process.
What is a Canada-only strength?
A Canada-only strength is a product whose ingredient and dose form exist in RxNorm but whose marketed strength does not. Sertraline is the canonical example: Canada markets sertraline 25, 50, and 100 MG oral capsules, and RxNorm carries the clinical drug form 'sertraline Oral Capsule' (RXCUI 373867) but no capsule product at those strengths. TwinFyRx mints a stable identifier for these, formatted CA<clinical_drug_form_rxcui>-<hash>, which is never an RXCUI and never collides with RxNorm's identifier space. Products sharing a Canada-only strength share one identifier, so they group and join like any other drug concept.
How many Canadian drug products are in the TwinFyRx crosswalk?
11,456 marketed human drug products, of which 8,957 are prescription-scheduled. That is the full Health Canada marketed extract for the human drug class; veterinary, disinfectant, and radiopharmaceutical classes are excluded. Current resolution rates by method are served live from the /v1/canada/crosswalk/coverage endpoint rather than published as a fixed figure, because they change with each RxNorm and DPD refresh.
Can I join Canadian and US drug data on the same key?
Yes, once both sides are resolved to RxNorm drug_id. A DIN resolved to drug_id 308191 and a US NDC resolved to the same drug_id refer to the same clinical concept — amoxicillin 500 MG oral capsule — so a single join key spans both markets and connects to everything else keyed on drug_id, including ATC classification, therapy attributes, and US pricing benchmarks. Pricing is the exception: NADAC and Medicare ASP are US programs and carry no Canadian rates, so a cross-border join gives you shared clinical identity, not shared price.
How often does the Health Canada Drug Product Database change?
Health Canada updates the DPD extracts on an ongoing basis as products are approved, discontinued, or amended, and publishes a last-update date per product record. TwinFyRx refreshes the marketed human extract monthly and rebuilds the crosswalk against the current RxNorm release on the same cadence, so newly approved Canadian products and newly added RxNorm concepts are both picked up.
TwinFyRx canada_drug_product table
Every marketed Canadian human drug product, keyed by din, carrying Health Canada’s own attributes alongside a canonical drug_id — the same key used by the RxNorm hierarchy, the NDC crosswalk, ATC classification, and every enrichment layer. One join key, both markets.