Data dictionary
Share us_regulatory_feed, schema gold. Four tables, delivered as Delta Sharing (Parquet) and CSV.
Load one with delta_sharing.load_as_pandas("config.share#us_regulatory_feed.gold.recalls").
Source: U.S. FDA via openFDA (public domain, CC0). Apex is not affiliated with or endorsed by FDA, HHS or any U.S. government agency. FDA says openFDA results should be treated as unvalidated, and the data must not be used to make medical-care decisions. Not medical, legal or regulatory advice.
How to read these tables
- Coverage. Enforcement reports by
report_dateand 510(k)/PMA decisions bydecision_date, from 2024-01-01 onwards. Drug shortages: FDA's full current list. Device classification: FDA's full list. - Refresh. Weekly.
ingest_dateis the date of the weekly pull that produced the row. - History starts at our first snapshot (2026-11-04). We don't invent changes from before that date. Records FDA had already published by then have
first_seen= 2026-11-04. - Change history, not recall tracking. Every table records changes to FDA's published records. FDA does not update a recall's status after classification, so
statusinrecallscan be stale. Don't use this data for public alerts or to track a recall's real-world lifecycle. - Privacy. FDA's personal contact fields (names, emails, phone numbers of contacts) are removed. Phone numbers inside free text are replaced with
[phone removed]. GMDN terms are not included. - Types.
stringordate(ISOYYYY-MM-DD). Empty source values are null. Codes are kept exactly as FDA publishes them.
recalls
Drug, device and food enforcement reports, cleaned and unified into one table. One row per recall_number (the latest published version). Device recalls are enriched with the product code and root cause from FDA's device recall database.
| Column | Type | Meaning |
|---|---|---|
product_type | string | drug, device or food (the enforcement report it came from) |
recall_number | string | Key. FDA's recall number, e.g. D-0119-2025 (drug), Z-1737-2026 (device) |
event_id | string | FDA recall event ID. One event can cover several products (several recall numbers) |
status | string | Ongoing, Completed, Terminated or Pending, as published. Can be stale: FDA doesn't update it after classification |
classification | string | Health-hazard class: I (most serious), II, III, or Not Yet Classified. The "Class " prefix is removed |
recalling_firm | string | Firm that initiated the recall |
city, state, country | string | Recalling firm's location |
voluntary_mandated | string | E.g. Voluntary: Firm initiated or FDA Mandated |
initial_firm_notification | string | How the firm first notified its customers (Letter, E-Mail, Press Release, ...) |
product_description | string | Product recalled, as described in the report |
product_quantity | string | Quantity in commerce, free text |
code_info | string | Lot numbers, serial numbers and other identifying codes, free text |
reason_for_recall | string | Why the product was recalled |
distribution_pattern | string | Where the product was distributed, free text |
report_date | date | Date FDA published the record in its weekly Enforcement Report |
recall_initiation_date | date | Date the firm first notified the public or its consignees |
center_classification_date | date | Date the FDA center classified the recall |
termination_date | date | Date FDA terminated the recall (null if not terminated) |
device_product_code | string | Device recalls only: three-letter FDA product code, from the device recall database. Joins to device_clearances.product_code |
root_cause_description | string | Device recalls only: FDA's root-cause category, e.g. Device Design |
first_seen | date | First weekly snapshot that contained this record |
last_seen | date | Latest weekly snapshot that contained this record (equals ingest_date for every row in the current table) |
ingest_date | date | Date of the weekly pull |
device_clearances
Device 510(k) clearances (including De Novo numbers) and PMA approvals and supplements, with FDA's device classification joined on product_code. One row per submission.
| Column | Type | Meaning |
|---|---|---|
submission_id | string | Key. 510(k)/De Novo number (e.g. K252083, DEN230064), or PMA number and supplement number joined by | (e.g. P030017|S396) |
submission_type | string | 510k or PMA |
submission_number | string | 510(k) number or PMA number |
supplement_number | string | PMA supplement number (null for 510(k) and original PMAs) |
applicant | string | Company that made the submission |
device_name | string | 510(k): device name. PMA: trade name |
generic_name | string | PMA only: generic device name |
product_code | string | Three-letter FDA product code |
decision_code | string | FDA decision code, e.g. SESE (substantially equivalent), APPR (approved), OK30 (30-day notice accepted), DENG (De Novo granted) |
decision_description | string | 510(k) only: decision in words, e.g. Substantially Equivalent |
review_type | string | 510(k): clearance type (Traditional, Special, Abbreviated). PMA: supplement type (30-Day Notice, Real-Time Process, Normal 180 Day Track, ...) |
supplement_reason | string | PMA only: why the supplement was filed |
advisory_committee | string | Two-letter review panel code, e.g. CV |
advisory_committee_description | string | Review panel name, e.g. Cardiovascular |
city, state | string | Applicant's location |
country_code | string | 510(k) only: applicant's country code |
date_received | date | Date FDA received the submission |
decision_date | date | Date of FDA's decision |
device_class | string | From device classification: 1, 2, 3, U (unclassified), N (not classified) or f (HDE) |
medical_specialty | string | From device classification: two-letter specialty code |
medical_specialty_description | string | From device classification: specialty name |
regulation_number | string | From device classification: 21 CFR regulation number, e.g. 878.4810 |
classification_device_name | string | From device classification: FDA's name for the product code |
first_seen | date | First weekly snapshot that contained this record |
last_seen | date | Latest weekly snapshot that contained this record |
ingest_date | date | Date of the weekly pull |
Classification columns are null when the product code has no match in FDA's classification list.
drug_shortages
FDA's published drug shortage list, one row per presentation (package). Week-to-week changes appear in weekly_changes.
| Column | Type | Meaning |
|---|---|---|
shortage_key | string | Key. package NDC, generic name, company and presentation joined by |, plus #n. FDA publishes no single ID, so #n separates rare exact duplicates |
package_ndc | string | National Drug Code of the package |
generic_name | string | Generic drug name and form |
company_name | string | Manufacturer or labeler |
presentation | string | Product, form, strength and package, as FDA lists it |
dosage_form | string | E.g. Injection, Tablet, Capsule |
therapeutic_category | string | One or more categories, separated by ; |
status | string | Current, Resolved or To Be Discontinued |
availability | string | E.g. Available, Limited Availability, Unavailable, or FDA's free text |
shortage_reason | string | Reason given for the shortage |
related_info | string | Additional information FDA publishes, free text |
resolved_note | string | Note published when the shortage is resolved |
update_type | string | FDA's last update type: New, Revised or Reverified |
initial_posting_date | date | Date FDA first posted the shortage |
update_date | date | Date of FDA's last update |
change_date | date | Date FDA last changed the record |
discontinued_date | date | Date the product is or was discontinued, if any |
first_seen | date | First weekly snapshot that contained this record |
last_seen | date | Latest weekly snapshot that contained this record |
ingest_date | date | Date of the weekly pull |
weekly_changes
One row per record that was added, changed or removed in FDA's published data since the previous weekly snapshot. The first snapshot (2026-11-04) lists every record as new.
| Column | Type | Meaning |
|---|---|---|
row_key | string | Key of the changed record: recall_number, submission_id or shortage_key |
table_name | string | recalls, device_clearances or drug_shortages |
change_type | string | new, updated, terminated (a recall whose termination_date became set) or removed (no longer published by FDA) |
changed_fields | string | For updated and terminated: the comma-separated columns whose values changed. Null otherwise |
ingest_date | date | Weekly snapshot in which the change was detected |
Example, everything that changed this week in recalls: filter table_name = 'recalls' and ingest_date = the latest date, then join row_key to recalls.recall_number.
Every table is a change history of FDA's published records. It does not track the real-world status of a recall. FDA does not update a recall's status after classification.