Search the US FDA Device Databases

Live search across openFDA: 510(k) clearances, adverse events (MAUDE), recalls, enforcement reports, PMA approvals, device classification, UDI/GUDID, and registration & listing. Filter, sort, cross-link by product code, and export to Excel or Word.

Live data from the U.S. Food & Drug Administration openFDA device API.
Home FDA Search
All filters apply together (AND). Separate values with ; to match any (e.g. stent; catheter). Free-text search supports partial words.
'; downloadBlob('' + html, 'application/msword', exportName('doc')); }function setExportProgress(text) { el('mdn-fda-sel-lbl').textContent = text; } function doExport(kind, records, capped, total) { if (!records || !records.length) return; var data = (kind === 'doc') ? buildSummary(records) : buildFull(records); if (kind === 'csv') writeCSV(data); else if (kind === 'xlsx') writeXLSX(data); else writeDOC(data); if (capped) { alert('This search has ' + total.toLocaleString() + ' results. Exported the first ' + EXPORT_CAP.toLocaleString() + '. Add filters (date range, product code, manufacturer, …) or a sort order to narrow it down, then export again to reach the rest.'); } } // Pull every matching record (up to the cap) by paging the API, then export. function gatherAndExport(kind) { if (exporting) return; var sel = Object.keys(state.selected).map(function (k) { return state.selected[k]; }).filter(Boolean); if (sel.length) { doExport(kind, sel, false, sel.length); return; }var total = (state.lastData && state.lastData.totalElements) || 0; if (!total) return; var want = Math.min(total, EXPORT_CAP); exporting = true; updateExportButtons(); setExportProgress('Preparing 0 / ' + want.toLocaleString() + ' …');var params = collectParams(); if (state.sort) params.sort = state.sort; var acc = []; function nextPage(page) { var qp = Object.assign({}, params, { page: page, pageSize: EXPORT_PAGE }); var qs = Object.keys(qp).map(function (k) { return encodeURIComponent(k) + '=' + encodeURIComponent(qp[k]); }).join('&'); return fetch(API + cfg().endpoint + '?' + qs).then(function (r) { return r.ok ? r.json() : null; }).then(function (d) { var items = (d && d.content) || []; acc = acc.concat(items); setExportProgress('Preparing ' + Math.min(acc.length, want).toLocaleString() + ' / ' + want.toLocaleString() + ' …'); if (acc.length < want && items.length === EXPORT_PAGE) return nextPage(page + 1); }); } nextPage(0).then(function () { if (acc.length > want) acc = acc.slice(0, want); doExport(kind, acc, total > EXPORT_CAP, total); }).catch(function () { alert('Export failed while downloading results. Please try again in a moment.'); }).finally(function () { exporting = false; updateExportButtons(); }); }function updateExportButtons() { var selCount = Object.keys(state.selected).length; var total = (state.lastData && state.lastData.totalElements) || 0; var has = selCount > 0 || total > 0; ['mdn-fda-x-csv', 'mdn-fda-x-xlsx', 'mdn-fda-x-doc'].forEach(function (id) { el(id).disabled = !has || exporting; }); if (exporting) return; // progress text is managed during export el('mdn-fda-sel-lbl').textContent = selCount ? (selCount + ' selected →') : (total > 0 ? ('Export all ' + Math.min(total, EXPORT_CAP).toLocaleString() + ' →') : ''); }// ── Saved searches (presets, per dataset, in localStorage) ─────────────────── var PKEY = 'mdnFdaPresets'; function loadPresets() { try { return JSON.parse(localStorage.getItem(PKEY) || '{}'); } catch (e) { return {}; } } function savePresets(p) { try { localStorage.setItem(PKEY, JSON.stringify(p)); } catch (e) {} } function refreshPresetList() { var all = loadPresets()[curDsKey()] || {}; el('mdn-fda-presets').innerHTML = '' + Object.keys(all).map(function (n) { return ''; }).join(''); }// ── Tab switching ──────────────────────────────────────────────────────────── function setTab(tab, sub) { state.tab = tab; state.sub = sub || null; state.page = 0; state.lastData = null; state.selected = {}; document.querySelectorAll('.mdn-fda-tab').forEach(function (t) { var on = t.getAttribute('data-tab') === tab; t.classList.toggle('active', on); t.setAttribute('aria-selected', on ? 'true' : 'false'); }); buildFields(false); refreshSort(); refreshPresetList(); el('mdn-fda-count').textContent = ''; el('mdn-fda-facets').innerHTML = ''; el('mdn-fda-pager').style.display = 'none'; renderState('

Enter a search term or filter, then press Search.

'); updateExportButtons(); }// ── Wire up ────────────────────────────────────────────────────────────────── el('mdn-fda-tabs').addEventListener('click', function (e) { var t = e.target.closest('.mdn-fda-tab'); if (t) setTab(t.getAttribute('data-tab')); }); // Keyboard support for the tab strip: Enter/Space activates, arrows move focus. el('mdn-fda-tabs').addEventListener('keydown', function (e) { var t = e.target.closest('.mdn-fda-tab'); if (!t) return; if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setTab(t.getAttribute('data-tab')); return; } if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') { e.preventDefault(); var tabs = Array.prototype.slice.call(document.querySelectorAll('.mdn-fda-tab')); var i = tabs.indexOf(t) + (e.key === 'ArrowRight' ? 1 : -1); if (i < 0) i = tabs.length - 1; if (i >= tabs.length) i = 0; tabs[i].focus(); } }); el('mdn-fda-search').addEventListener('click', function () { state.page = 0; search(); }); el('mdn-fda-clear').addEventListener('click', function () { buildFields(false); }); el('mdn-fda-sort').addEventListener('change', function () { state.sort = this.value; if (state.lastData) { state.page = 0; search(); } }); el('mdn-fda-save-preset').addEventListener('click', function () { var params = collectParams(); if (!Object.keys(params).length) { alert('Enter some filters first, then Save.'); return; } var name = prompt('Save this search as:'); if (!name) return; var all = loadPresets(); var dsk = curDsKey(); all[dsk] = all[dsk] || {}; all[dsk][name] = params; savePresets(all); refreshPresetList(); el('mdn-fda-presets').value = name; }); el('mdn-fda-presets').addEventListener('change', function () { var name = this.value; if (!name) return; var params = (loadPresets()[curDsKey()] || {})[name]; if (!params) return; buildFields(false); Object.keys(params).forEach(function (k) { setFieldValue(k, params[k]); }); state.page = 0; search(); }); el('mdn-fda-prev').addEventListener('click', function () { if (state.page > 0) { state.page--; search(); window.scrollTo({ top: 0, behavior: 'smooth' }); } }); el('mdn-fda-next').addEventListener('click', function () { state.page++; search(); window.scrollTo({ top: 0, behavior: 'smooth' }); }); el('mdn-fda-modal-bg').addEventListener('click', closeModal); el('mdn-fda-modal-close').addEventListener('click', closeModal); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeModal(); }); el('mdn-fda-x-csv').addEventListener('click', function () { gatherAndExport('csv'); }); el('mdn-fda-x-xlsx').addEventListener('click', function () { gatherAndExport('xlsx'); }); el('mdn-fda-x-doc').addEventListener('click', function () { gatherAndExport('doc'); });// Load reference data for dropdowns, then render the initial tab. fetch(API + 'meta').then(function (r) { return r.json(); }).then(function (d) { if (d && typeof d === 'object') META = d; }).catch(function () {}).finally(function () { setTab('510k'); }); })();
Scroll to Top