Trucking Company Search

Search by VIN, company name, or USDOT number to pull a complete federal record — registration details, fleet info, cargo authority, insurance status, safety rating, and crash history. Free, no signup, sourced directly from FMCSA and NHTSA.

Already have a VIN and just want vehicle specs instead? Try our free VIN Decoder.

— or —
— or —
VIN search only finds a match if this specific vehicle has been in a reported crash or roadside inspection — most VINs won’t have a result. For better odds, try the company name or DOT number instead.

What This Tool Checks

Every search pulls live data straight from the Federal Motor Carrier Safety Administration’s Company Census File — the same registration database used by insurance underwriters and freight brokers. Depending on what you search, you’ll see:

Registration details

legal name, DBA, address, contact info, and current operating status

Fleet size

owned, term-leased, and trip-leased trucks, tractors, and trailers

Cargo authority

which of the 29 federally tracked cargo categories a carrier is authorized to haul

Insurance status

currently active or pending coverage, plus historical policies showing when and how past coverage ended

Safety record

safety rating, recordable crash rate, and any prior USDOT revocations

Crash and inspection history

reported crashes and roadside inspections tied to that carrier, including decoded vehicle details (year, make, model) wherever a VIN is on file

Who This Is For

This free lookup is useful any time you need to verify a trucking company is who they say they are:

Freight brokers and shippers

checking a carrier’s authority and safety standing before tendering a load

Truck buyers and sellers

researching a company before doing business with them

Anyone

trying to confirm a trucking company’s legitimacy, fleet size, or safety history

More Free Tools

Already have a VIN and just want vehicle specs instead? Try our free VIN Decoder. If you’re an owner-operator trying to figure out whether your rates are actually covering your costs, check your real cost per mile, just your fuel cost per mile, use our Rate Calculator to price out a specific load, or check your remaining drive time with our HOS Calculator.

Frequently Asked Questions

Is this data accurate and up to date?

Yes — every search queries FMCSA’s Company Census File directly, the same federal database insurance companies and brokers use. It’s updated daily, not pulled from a cached or outdated copy.

Why does my VIN search show no crash or inspection records?

Crash and inspection records only exist for vehicles that were actually in a reported crash or pulled into a roadside inspection. A clean result doesn’t mean a company has no trucks — it just means none of their vehicles happen to be in either of these two federal records.

Can I search for a company if I only know part of the name?

Yes — partial name matches work. If more than one company matches, you’ll see a list to pick from before the full report loads.

Is this free to use?

Completely free, with no signup or account required.

const dotInput = document.getElementById('dotInput'); const nameInput = document.getElementById('nameInput'); const vinInput = document.getElementById('vinInput'); const searchBtn = document.getElementById('lookupSearchBtn'); const resultsPanel = document.getElementById('resultsPanel'); const API_BASE = 'https://fmcsa-proxy-service.onrender.com'; vinInput.addEventListener('input', () => { vinInput.value = vinInput.value.toUpperCase().replace(/[^A-Z0-9]/g, ''); }); [dotInput, nameInput, vinInput].forEach(el => { el.addEventListener('keypress', e => { if (e.key === 'Enter') runLookup(); }); }); async function runLookup() { const dotNumber = dotInput.value.trim(); const name = nameInput.value.trim(); const vin = vinInput.value.trim(); const filledCount = [dotNumber, name, vin].filter(Boolean).length; if (filledCount === 0) { resultsPanel.innerHTML = '

Enter a USDOT number, company name, or VIN to search.

'; return; } if (filledCount > 1) { resultsPanel.innerHTML = '

Please fill in only ONE field — DOT number, name, or VIN — not multiple at once.

'; return; } if (vin && vin.length !== 17) { resultsPanel.innerHTML = '

VIN must be exactly 17 characters.

'; return; } searchBtn.disabled = true; searchBtn.innerText = 'Searching...'; resultsPanel.innerHTML = '

Querying federal records...

'; try { const params = new URLSearchParams(); if (dotNumber) params.set('dotNumber', dotNumber); if (name) params.set('name', name); if (vin) params.set('vin', vin); const resolveRes = await fetch(`${API_BASE}/api/resolve?${params.toString()}`); const resolveData = await resolveRes.json(); if (!resolveRes.ok) { resultsPanel.innerHTML = `

${resolveData.error || 'Search failed. Please try again.'}

`; return; } if (resolveData.type === 'none') { resultsPanel.innerHTML = '

No matching company found. Double-check the spelling or number and try again.

'; return; } if (resolveData.type === 'multiple') { renderCandidateList(resolveData.candidates); return; } // type === 'single' - go straight to the full report await loadFullReport(resolveData.candidates[0].dotNumber); } catch (err) { console.error(err); resultsPanel.innerHTML = '

Connection error. Please try again in a moment.

'; } finally { searchBtn.disabled = false; searchBtn.innerText = 'Search'; } } function renderCandidateList(candidates) { let html = `

Found ${candidates.length} possible matches — select the right one:

`; candidates.forEach(c => { const extra = c.matchedVia ? ` Matched via ${c.matchedVia}${c.matchedDate ? ' (' + c.matchedDate + ')' : ''}

` : ''; html += ` ${c.legalName || 'Unknown'}${c.dbaName ? ' (DBA: ' + c.dbaName + ')' : ''}${c.city || ''}${c.city && c.state ? ', ' : ''}${c.state || ''} — DOT# ${c.dotNumber}
${extra} Select `; }); resultsPanel.innerHTML = html; } function isUsableValue(val) { if (val === null || val === undefined) return false; const v = String(val).trim(); return v !== ''; } function humanizeKey(key) { return key.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); } async function loadFullReport(dotNumber) { resultsPanel.innerHTML = ' Pulling the full federal record - this can take a few seconds... '; try { const res = await fetch(`${API_BASE}/api/full-report?dotNumber=${encodeURIComponent(dotNumber)}`); const data = await res.json(); if (!res.ok) { resultsPanel.innerHTML = ` ${data.error || 'Could not load the full report.'} `; return; } renderFullReport(data); } catch (err) { console.error(err); resultsPanel.innerHTML = ' Connection error loading the full report. '; } } function renderFullReport(data) { const c = data.census; const e = data.enrich; // Every populated census field, grouped loosely by name prefix for readability const groups = { 'Identity & Status': ['dot_number','legal_name','dba_name','status_code','carrier_operation','classdef','business_org_id','business_org_desc','dun_bradstreet_no'], 'Dates': ['mcs150_date','add_date','mcsipstep','mcsipdate','review_date','safety_rating_date'], 'Physical Address': ['phy_street','phy_city','phy_state','phy_zip','phy_country','phy_cnty'], 'Mailing Address': ['carrier_mailing_street','carrier_mailing_city','carrier_mailing_state','carrier_mailing_zip','carrier_mailing_country'], 'Contact Info': ['phone','fax','cell_phone','email_address','company_officer_1','company_officer_2'], 'Fleet Totals': ['truck_units','power_units','bus_units','fleetsize','total_cars'], 'Equipment - Owned': ['owntruck','owntract','owntrail','owncoach','ownbus_16','ownvan_1_8','ownvan_9_15'], 'Equipment - Leased': ['trmtruck','trmtract','trmtrail','trptruck','trptract','trptrail'], 'Drivers': ['total_drivers','total_cdl','total_intrastate_drivers','driver_inter_total'], 'Safety & Compliance': ['hm_ind','safety_rating','recordable_crash_rate','prior_revoke_flag','mcs150_mileage','mcs150_mileage_year'], 'MC/Docket Numbers': ['docket1prefix','docket1','docket1_status_code'] }; const usedKeys = new Set(); let censusHtml = ''; Object.entries(groups).forEach(([title, fields]) => { const rows = []; fields.forEach(f => { usedKeys.add(f); if (isUsableValue(c[f])) { rows.push(` ${humanizeKey(f)}:${c[f]}

`); } }); if (rows.length > 0) { censusHtml += `

${title}

${rows.join('')}

`; } }); // Cargo types - any crgo_ field with value 'X' const cargoRows = []; Object.entries(c).forEach(([key, val]) => { if (key.startsWith('crgo_') && val === 'X' && key !== 'crgo_cargoothr') { cargoRows.push(`

${humanizeKey(key.replace('crgo_',''))}

`); usedKeys.add(key); } }); if (c.crgo_cargoothr_desc) { cargoRows.push(`

Other Cargo${c.crgo_cargoothr_desc}

`); usedKeys.add('crgo_cargoothr'); usedKeys.add('crgo_cargoothr_desc'); } if (cargoRows.length > 0) { censusHtml += `

Cargo Types Carried

${cargoRows.join('')}

`; } // Anything else populated that wasn't explicitly grouped above const extraRows = []; Object.entries(c).forEach(([key, val]) => { if (!usedKeys.has(key) && isUsableValue(val)) { extraRows.push(`

${humanizeKey(key)}:${val}

`); } }); if (extraRows.length > 0) { censusHtml += `

Additional Details

${extraRows.join('')}

`; } // Crash records let crashHtml = ''; if (e.crashRecordCount > 0) { e.crashRecords.forEach(r => { const dv = r.decodedVehicle; crashHtml += `

VIN: ${r.vehicle_identification_number || 'N/A'}

${dv ? `

${dv.modelYear || ''} ${dv.make || ''} ${dv.model || ''}

Crash Date: ${r.report_date || 'N/A'} — ${r.city || ''}, ${r.state || ''}

Fatalities: ${r.fatalities || 0} | Injuries: ${r.injuries || 0} | Tow-Away: ${r.tow_away || 'N/A'}

`; }); } else { crashHtml = '

No crash records found. This does not necessarily mean this carrier has no trucks - it means none of their vehicles have a reported crash on file.

'; } // Inspected vehicles let inspectedHtml = ''; if (e.inspectedVehicleCount > 0) { e.inspectedVehicles.forEach(v => { const dv = v.decodedVehicle; inspectedHtml += `

VIN: ${v.insp_unit_vehicle_id_number || 'N/A'}

${dv ? `

${dv.modelYear || ''} ${dv.make || ''} ${dv.model || ''}

License Plate: ${v.insp_unit_license || 'N/A'} (${v.insp_unit_license_state || 'N/A'})

`; }); } else { inspectedHtml = '

No inspected vehicles found on record. This does not necessarily mean this carrier has no trucks - inspections are spot-checks, not a check on every vehicle.

'; } // Insurance - active/pending first, then history sorted most-recent-first. // A historical record with cancl_method "CANCEL" (not "TERM/REPL") means it was // cancelled with nothing replacing it - flagged as the meaningful red flag. const ins = data.insurance || { activePolicies: [], historicalPolicies: [] }; let activeInsHtml = ''; if (ins.activePolicyCount > 0) { ins.activePolicies.forEach(p => { activeInsHtml += `

${p.name_company || 'Unknown Insurer'}

Policy #${p.policy_no || 'N/A'} — ${p.ins_type_desc || 'N/A'}

Coverage: $${Number(p.max_cov_amount || 0).toLocaleString()}k — Effective ${p.effective_date || 'N/A'}

`; }); } else { activeInsHtml = '

No currently active or pending insurance filing found for this carrier.

'; } let historyInsHtml = ''; if (ins.historicalPolicyCount > 0) { const sortedHistory = [...ins.historicalPolicies].sort((a, b) => { const dateA = new Date(a.cancl_effective_date || a.effective_date || 0); const dateB = new Date(b.cancl_effective_date || b.effective_date || 0); return dateB - dateA; }); sortedHistory.forEach(p => { const wasReplaced = p.cancl_method === 'TERM/REPL'; historyInsHtml += `

${p.name_company || 'Unknown Insurer'}

Policy #${p.policy_no || 'N/A'} — ${p.ins_type_desc || p.mod_col_3 || 'N/A'}

Effective ${p.effective_date || 'N/A'} through ${p.cancl_effective_date || 'N/A'}

${wasReplaced ? 'Replaced by a new policy' : 'Cancelled — ' + (p.cancl_method || 'no replacement on file')}

`; }); } else { historyInsHtml = '

No insurance history found for this carrier.

'; } resultsPanel.innerHTML = `

${c.legal_name || 'Unknown Company'}

USDOT# ${c.dot_number} ${c.dba_name ? '— DBA: ' + c.dba_name : ''}

${censusHtml}

Active/Pending Insurance (${ins.activePolicyCount || 0})

${activeInsHtml}

Insurance History (${ins.historicalPolicyCount || 0})

${historyInsHtml}

Crash Records (${e.crashRecordCount})

${crashHtml}

Inspected Vehicles (${e.inspectedVehicleCount})

${inspectedHtml}

Looking to Sell a Truck?

We buy semi trucks, box trucks, dump trucks, and more — nationwide, cash offers.