Orange Book Patent Analysis

Working with Orange Book patent listings. What it means to be listed, date columns, patent use codes, and pediatric exclusivity extensions

The FDA Orange Book contains thousands of patent listings across over 4,400 active NDA products (current export). These are reported listings, not verified facts. FDA does not evaluate patent validity and considers its role purely ministerial. NDA sponsors self-report which patents they want listed, and listings may be incorrect, outdated, or actively disputed in litigation. LOE dates derived from this data are estimates based on what has been reported to FDA, not legal determinations of when generic entry will occur. This page is a reference for analysts working with the data, not a legal or regulatory guide.

What It Means to Be Listed in the Orange Book

Under 21 U.S.C. § 355(b)(1), an NDA applicant must submit information on any patent that claims the drug substance, drug product, or a method of using the drug, and for which a claim of patent infringement could reasonably be asserted if a competitor made, used, or sold the drug.

  • A listed patent gives the brand sponsor the right to be notified when an ANDA filer challenges it
  • The Hatch-Waxman Act provides a 30-month automatic stay of ANDA approval when the brand sues for infringement within 45 days of receiving that notice — a patent expiring in 2026 can still delay generic entry until 2027 or later if litigation is filed at the right moment
  • Generic manufacturers must certify for each listed patent that it is expired, not applicable, or invalid/non-infringing (a Paragraph IV challenge)

Patents that don’t appear here: Patents not submitted by the NDA holder, patents covering manufacturing processes, and patents on biologics (tracked in the FDA Purple Book, not the Orange Book).

The Three Date Columns

The patents table contains one date directly, and the patent_details table adds two more. They refer to very different events:

ColumnTableWhat it isCommon confusion
patent_expire_datepatentsThe date this patent expires at USPTO, adjusted for any patent term extension (PTE). Base date — does not include pediatric extension.Often confused with grant date or approval date
ob_submission_datepatentsThe date the NDA holder submitted this patent to FDA for listingNot an FDA approval of the patent or a creation date
grant_datepatent_detailsThe date USPTO granted the patentEarlier than patent_expire_date by 20 years minus prosecution time

The most important date for LOE analysis is patent_expire_date. This is the base expiry — add 6 months if pediatric_excl = 1.

A patent expires 20 years from its filing date at USPTO, unless a Patent Term Extension has been granted to compensate for regulatory review time. PTEs can add up to 5 years and are common for pharmaceutical patents the patent_expire_date in the Orange Book may or may not reflect any PTE already granted.

Patent Use Codes

When a listed patent covers a specific method of use (rather than the drug substance or product itself), FDA assigns a use code (use_code column) that maps to a specific approved indication. The patent_use_codes table contains approximately 4,470 codes with their full definitions.

Use codes matter because:

  • An ANDA for a different indication can potentially carve around a use-code patent by adding a “section viii statement” — a carve-out disclaimer for that specific use called a skinny label
  • Generic manufacturers use use-code analysis to identify carve-out opportunities
  • When reviewing an NDA’s patent portfolio, use codes reveal how broadly the brand has protected its indications
-- See all use codes for a given NDA (204671 = Sovaldi / sofosbuvir)
-- GROUP BY collapses duplicate rows from the same patent listed against multiple product strengths
SELECT pt.patent_no, pt.use_code, puc.definition AS use_definition,
       pt.drug_substance_flag, pt.drug_product_flag,
       MIN(pt.patent_expire_date) AS patent_expire_date
FROM patents pt
LEFT JOIN patent_use_codes puc ON puc.use_code = pt.use_code
WHERE pt.appl_no = '204671'   -- replace with NDA of interest
GROUP BY pt.patent_no, pt.use_code, puc.definition, pt.drug_substance_flag, pt.drug_product_flag
ORDER BY patent_expire_date;

Drug substance flag vs. drug product flag: drug_substance_flag = 'Y' means the patent claims cover the active ingredient itself (the hardest type to design around). drug_product_flag = 'Y' means the claims cover the formulation. A patent can carry both flags if it claims both. Use-code patents are typically formulation or method-of-use patents — not drug substance.

Pediatric Exclusivity Extension

When FDA requests pediatric studies under the Best Pharmaceuticals for Children Act and the sponsor completes them, FDA grants six additional months of protection on all existing Orange Book protections.

In the dataset, pediatric_excl = 1 on a patent record signals that this patent has received the pediatric extension. The patent_expire_date is the base date — the effective expiry is patent_expire_date + 6 months.

The loe_estimates view applies this automatically. When computing LOE manually from raw patents data, you must apply the PED adjustment per-patent before taking the maximum:

SELECT appl_no,
    MAX(CASE WHEN pediatric_excl = 1
        THEN DATE(patent_expire_date, '+6 months')
        ELSE patent_expire_date
    END) AS effective_max_patent_exp,
    MAX(pediatric_excl) AS any_ped_extension
FROM patents
WHERE appl_no = '210563'   -- Imbruvica / ibrutinib; replace with NDA of interest
GROUP BY appl_no;

Application Number Disambiguation

While patent_application_number vs. appl_no both contain the word “application” they refer to completely different systems:

IdentifierWhere it appearsSystemExample
appl_noAll tablesFDA drug application number — the NDA or ANDA number assigned when a drug is approved"021446"
patent_application_numberpatent_details onlyUSPTO pre-grant patent filing number — the application filed at the Patent Office before the patent is granted"17/123456"

patent_application_number is used for USPTO PAIR (Patent Application Information Retrieval) lookups to track prosecution history, see office actions, and review prior art. It has no relationship to FDA approval.

When querying across tables, always qualify column names with table aliases: pt.appl_no (FDA drug application), pd.patent_application_number (USPTO filing).

SQL Queries

Below are a set of queries for demonstrating different access patterns.

Patent cliff: active patents expiring in the next 3 years

SELECT a.sponsor_name, a.appl_no, p.trade_name, pt.patent_no,
       pt.patent_expire_date, pt.pediatric_excl,
       puc.definition AS use_code_def,
       pd.title       AS patent_title
FROM patents pt
JOIN products p  ON p.appl_no  = pt.appl_no AND p.product_no = pt.product_no
JOIN applications a ON a.appl_no = pt.appl_no
LEFT JOIN patent_use_codes puc ON puc.use_code  = pt.use_code
LEFT JOIN patent_details   pd  ON pd.patent_no  = pt.patent_no
WHERE pt.patent_expire_date BETWEEN date('now') AND date('now', '+3 years')
  AND pt.delist_flag    != 'Y'
  AND p.product_type    != 'DISCN'
  AND p.reference_listed_drug = 'Yes'
ORDER BY pt.patent_expire_date, a.sponsor_name;

Recently listed patents (last 6 months)

SELECT pc.ob_release_date, pc.appl_no, pc.patent_no, pc.patent_expire_date,
       a.sponsor_name, p.trade_name
FROM patent_changes pc
JOIN applications a ON a.appl_no = pc.appl_no
JOIN products p ON p.appl_no = pc.appl_no AND p.product_no = pc.product_no
WHERE pc.event = 'added'
  AND pc.ob_release_date >= date('now', '-6 months')
ORDER BY pc.ob_release_date DESC, a.sponsor_name
LIMIT 100;

USPTO details with patent application number (for PAIR lookups)

SELECT pt.appl_no, pt.patent_no,
       pd.patent_application_number,   -- USPTO pre-grant filing; distinct from appl_no (FDA NDA)
       pd.title, pd.grant_date,
       pt.patent_expire_date,
       a.sponsor_name, p.trade_name
FROM patents pt
JOIN patent_details pd  ON pd.patent_no = pt.patent_no
JOIN products p         ON p.appl_no    = pt.appl_no AND p.product_no = pt.product_no
JOIN applications a     ON a.appl_no    = pt.appl_no
WHERE pt.delist_flag    != 'Y'
  AND p.product_type    != 'DISCN'
  AND p.reference_listed_drug = 'Yes'
ORDER BY pt.patent_expire_date DESC
LIMIT 25;

Products with no remaining patent protection

SELECT a.appl_no, a.sponsor_name, p.trade_name, p.ingredient
FROM applications a
JOIN products p ON p.appl_no = a.appl_no AND p.reference_listed_drug = 'Yes'
WHERE a.appl_type = 'NDA'
  AND p.product_type != 'DISCN'
  AND NOT EXISTS (
      SELECT 1 FROM patents pt
      WHERE pt.appl_no = p.appl_no AND pt.product_no = p.product_no
        AND pt.delist_flag != 'Y'
        AND (pt.patent_expire_date IS NULL OR pt.patent_expire_date > date('now'))
  )
ORDER BY a.sponsor_name, p.trade_name;

Patent expiry date changes — detecting extensions and corrections

FDA updates patent_expire_date in the Orange Book when patent term extensions are granted or errors are corrected. This query surfaces those changes using our history tracking tables with before/after values.

SELECT curr.ob_release_date, curr.appl_no, curr.patent_no, curr.use_code,
       prev.patent_expire_date AS old_expire_date,
       curr.patent_expire_date AS new_expire_date,
       a.sponsor_name,
       MIN(p.trade_name) AS trade_name
FROM patent_changes curr
JOIN patent_changes prev
  ON  prev.appl_no        = curr.appl_no
  AND prev.product_no     = curr.product_no
  AND prev.patent_no      = curr.patent_no
  AND prev.use_code       = curr.use_code
  AND prev.pediatric_excl = curr.pediatric_excl
  AND prev.id = (
      SELECT MAX(id) FROM patent_changes
      WHERE appl_no        = curr.appl_no
        AND product_no     = curr.product_no
        AND patent_no      = curr.patent_no
        AND use_code       = curr.use_code
        AND pediatric_excl = curr.pediatric_excl
        AND id             < curr.id
  )
JOIN applications a ON a.appl_no = curr.appl_no
JOIN products p     ON p.appl_no = curr.appl_no AND p.product_no = curr.product_no
WHERE curr.event = 'updated'
  AND curr.patent_expire_date != prev.patent_expire_date
GROUP BY curr.appl_no, curr.patent_no, curr.use_code, curr.pediatric_excl,
         curr.ob_release_date, prev.patent_expire_date, curr.patent_expire_date
ORDER BY curr.ob_release_date DESC;
Last verified: April 2026