Bluetooth OBD2 Scanner
Read your car’s trouble codes in this page. Plug a Bluetooth Low Energy OBD-II adapter into the port under your dash, press connect, and the scanner pulls the stored, pending and permanent codes and links each one straight to its diagnosis. There is no app to install and no account. The decoding happens in your browser, so nothing about your vehicle is sent anywhere — including the VIN.
Checking whether this browser can talk to Bluetooth…
Not connected.
Stored codes Service $03
Confirmed faults. The problem has happened enough times for the ECU to commit it and, on most codes, turn on the check engine light.
Pending codes Service $07
Seen once, not yet confirmed. The ECU is watching for it to repeat. Nothing is wrong with your car’s light — this is the stage before it comes on.
Permanent codes Service $0A
Confirmed faults that no scan tool can erase — and neither can disconnecting the battery. Only the vehicle clears these, after re-running the monitor and finding the fault gone. Phased in from 2010, universal from 2012.
Before you clear anything: erasing codes also erases the freeze frame — the snapshot of engine conditions from the moment the fault set, which is often the most useful thing you have — and resets every readiness monitor to “not ready”. Your car will fail an emissions test in that state until you have driven it enough for the monitors to run again. Write the codes down first.
This cannot be undone. Press again to confirm.
Adapter log
Every command sent and the raw text that came back. Useful if the adapter is behaving oddly, and the fastest way to tell a dongle problem from a car problem.
What you need
One thing: a Bluetooth Low Energy OBD-II adapter. That qualifier is the whole game, and it is where nearly everyone gets stuck.
- Bluetooth LE adapter — works. Sometimes labelled BLE, Bluetooth 4.0, or “works with iPhone and Android”. You will not pair it in your phone or computer’s Bluetooth settings; you pick it from the browser’s own chooser when you press connect.
- Bluetooth Classic adapter — cannot work. This is the very common cheap blue ELM327 that you pair in system settings. It speaks a serial profile that browsers have no access to, on any platform. Nothing on this page can reach it.
- Wi-Fi adapter — cannot work. A web page cannot open a raw network socket to the adapter’s IP address.
- USB adapter — not supported here. A wired adapter uses a different browser capability (Web Serial) that this page does not implement.
Your vehicle needs to be OBD-II compliant, which means essentially every car and light truck sold in the US from 1996 onward. Turn the ignition to the run position — dash lights on. The engine does not need to be running, but the key does need to be on, or the adapter will connect happily and then report no data from the car.
How to use it
- Plug the adapter into the OBD-II port. It is under the dash on the driver’s side, within reach of the driver’s seat — if you cannot find it, the port location and pinout guide covers where it hides on each make.
- Turn the ignition on. Dash lights up. Engine running is fine too.
- Press Connect to adapter and pick your dongle from the list your browser shows.
- The scanner sets the adapter up, detects your vehicle’s protocol, and reads all three code types. It takes a few seconds — protocol detection on the first request is the slow part.
- Tap any code for the full diagnosis, common causes, and what the repair usually runs.
Stored, pending and permanent — the difference matters
Most scanners show you one list and leave you to guess. The three modes answer genuinely different questions, and reading them together tells you more than any one of them alone.
A pending code is a fault the ECU has seen once and has not confirmed. Most monitors need the fault to appear on two consecutive drive cycles before the light comes on, so a pending code is your early warning: something is starting to go, and the dash has not caught up. If you have a rough-running car and no light, this is the list to look at.
A stored code is confirmed. This is what turns the check engine light on and what a shop reads.
A permanent code is the one people do not know about, and it is worth being precise about it, because the internet is not. The regulation says permanent codes are stored in non-volatile memory and “may not be erasable by any scan tool command (generic or enhanced) or by disconnecting power to the on-board computer.” That last clause is the part that surprises people: the old battery-disconnect trick does not touch these either. It is deliberate. The whole reason permanent codes exist is to stop someone clearing codes in the parking lot to slide through an emissions test.
Only the vehicle removes a permanent code, and only after the relevant monitor has actually re-run and found the fault genuinely gone. So if you clear your codes and a permanent code stays behind, your adapter is not broken and neither is your car — that is exactly what is supposed to happen. The requirement was phased in across the fleet: half of 2010 model year vehicles, three quarters of 2011, and all 2012 and later. An older car returning nothing here is normal, not a failed read.
About clearing codes
The clear button is here because leaving it out just sends you somewhere with fewer warnings attached. But it is worth being blunt about what it costs.
Clearing erases the freeze frame: engine speed, load, coolant temperature, fuel trim and more, captured at the instant the fault set. For an intermittent problem that is frequently the most valuable evidence in the car, and once it is gone you wait for the fault to happen again to get it back.
Clearing also resets every readiness monitor to not-ready. Those monitors are the self-tests the car has to complete before an emissions test will even be accepted, and they only run under specific conditions — certain speeds, temperatures, fuel levels, sometimes a cold start. Depending on the vehicle and the monitor that can take anywhere from a short drive to several days of ordinary driving. Clearing codes the morning of a smog check is a reliable way to fail it. Our readiness monitor guide covers what each one needs.
And clearing does not fix anything. If the fault is still there, the code comes back — usually within a drive cycle or two.
If it will not connect
- The dongle is not in the chooser list. Nine times in ten it is a Bluetooth Classic adapter, which no browser can reach. If it is genuinely a BLE adapter, unplug it for ten seconds and plug it back in — many stop advertising once something else has connected, and a phone that auto-connects in the background will hold it hostage. Turn Bluetooth off on any other device nearby that has used it.
- On Android, nothing appears at all. Chrome needs Location permission to scan for Bluetooth devices, and Location itself has to be switched on system-wide. This is an Android requirement, not something the page asks for.
- It connects, then says no response from the vehicle. The ignition is almost certainly off, or only in accessory. Turn the key to run.
- It connects and the adapter answers, but the car does not. Check the adapter is fully seated — the connector needs a firm push. If it is seated and the port is dead, the OBD port has its own fuse on most vehicles; the port tester walks through checking for power on pin 16 and the 60-ohm CAN reading across pins 6 and 14.
- Codes read but come back garbled or partial. Cheap ELM327 clones vary enormously in firmware quality. Open the adapter log above — if the raw responses look truncated or full of question marks, that is the dongle, not the car.
Common questions
Does this work on an iPhone or iPad?
No. The scanner uses the Web Bluetooth API, which Apple does not implement in Safari — and because every iOS browser is required to use Apple’s WebKit engine underneath, Chrome and Firefox on iOS cannot do it either. This is not a limitation we can code around. Use an Android phone, or a Windows, Mac, Linux or ChromeOS computer running Chrome or Edge.
Why will my ELM327 dongle not show up?
Almost always because it is Bluetooth Classic rather than Bluetooth Low Energy. The very common cheap blue ELM327 pairs through your operating system’s Bluetooth settings and speaks a serial profile that browsers have no access to at all. A browser can only reach Bluetooth LE devices, and an LE dongle is normally not paired in system settings — you pick it in the browser’s own device chooser instead. Wi-Fi dongles cannot work either, because a web page cannot open a raw network socket.
What is the difference between stored, pending and permanent codes?
A pending code is a fault the ECU has seen once and has not yet confirmed; it does not usually light the dash. A stored code is confirmed and is what normally turns the check engine light on. A permanent code is a confirmed fault written to non-volatile memory, and the regulation requires that it not be erasable by any scan tool command, generic or enhanced, or by disconnecting power to the computer. It exists specifically to stop someone clearing codes to sneak through an emissions test. Only the vehicle removes it, after re-running the monitor and finding the fault gone.
Should I clear the codes?
Usually not yet. Clearing erases the freeze frame — the snapshot of engine conditions at the moment the fault set, which is often the most useful diagnostic information you have — and it resets every readiness monitor to "not ready", which will fail an emissions test until you have driven enough for them to re-run. Read and write the codes down first, fix the cause, and let the light go out on its own if you can.
Does any of my data get sent to Car Code Finder?
No. The connection to the dongle is made by your browser and the codes are decoded on your device. Nothing about your vehicle, including the VIN, is transmitted to this site or anywhere else. You can confirm that by opening your browser’s network tab while you scan.
Your data stays on your device
The Bluetooth connection is made by your browser directly to the adapter. Codes are decoded here in the page. No vehicle data, no VIN, and no scan results are sent to this site or to anyone else, and nothing is stored between visits. The one network request a scan makes is for our public code index, which is the same file the search box on this site downloads — it is what lets each code show its description without a page load. It is a plain download; it carries nothing about your car with it. Open your browser’s network tab during a scan if you would rather see that than take our word for it.
Sources
Documents this page was checked against. How we verify.
- SAE J1979 (2002), "E/E Diagnostic Test Modes"the standard this scanner speaks. §5.4 Service $04 Clear/Reset Emission-Related Diagnostic Information, §5.7 Service $07 Request Emission-Related Diagnostic Trouble Codes, §5.9 Service $09 Request Vehicle Information (InfoType $02 returns the VIN), and §6.3.1, which defines the two-byte trouble-code encoding this page decodes: the first two bits select Powertrain, Chassis, Body or Network, the next two give the first digit 0 through 3, and the remaining nibbles are the last three hex characters — worked through in Figure 14 as $0143 displaying as P0143. Public copy via the US "standards incorporated by law" collection.archived scan of the SAE standard — readable copy, not SAE’s current edition
- SAE J1979 (current revision)SAE standards catalog entry. The 2002 scan above predates permanent diagnostic trouble codes (Service $0A), which is why that mode is cited to CARB below rather than here.
- SAE J2012, "Diagnostic Trouble Code Definitions"the companion standard J1979 §6.3.1 defers to for interpreting the decoded code itself, and the source behind the code descriptions this page links to.archived scan of the SAE standard — readable copy, not SAE’s current edition
- California Air Resources Board, Title 13 CCR 1968.2, "Malfunction and Diagnostic System Requirements"the authority for everything this page says about permanent codes. §(g)(4.4.6)(C) is the exact rule: permanent fault codes "shall be stored in NVRAM and may not be erasable by any scan tool command (generic or enhanced) or by disconnecting power to the on-board computer." §(d)(2.5) sets out when the vehicle itself may erase one — only once the monitor has re-run and found the malfunction absent. §(d)(2.2.5) gives the phase-in: 50 percent of 2010, 75 percent of 2011, 100 percent of 2012 and later. Cited to the 2006 rulemaking's final regulation order, which is the COMPLETE text; the 2021 order posted more prominently is an amendment carrying 193 elision markers, and it elides §(g)(4.4.6)(A) through (C) — the subsections this page depends on.
- ELM327 datasheet, Elm Electronicsthe definition of the AT command set the scanner sends during setup (ATZ, ATE0, ATL0, ATS0, ATH0, ATSP0). There is no standards-body equivalent: the AT layer is this vendor’s own, and the dongles that clone the chip clone its command set.
- ISO 15765-4, "Diagnostic communication over Controller Area NetworkPart 4" — the protocol required on all 2008 and newer US vehicles, and the reason a modern car answers on CAN when the adapter auto-detects. Paywalled at ISO; cited as the authority, not as a copy you can read.
- Web Bluetooth API specificationthe browser capability the scanner is built on, including the requirement that a device chooser be opened by a user gesture and that the page be served over HTTPS.W3C Community Group draft — a proposal, not a ratified web standard
- MDN, "Bluetooth"the browser-support table behind the compatibility notice on this page, including the absence of support in Safari and across all iOS browsers.browser-support data compiled by MDN, not a specification