I agree. Everybody hates them. Most of all they hate paying for them because it doesn't feel like you get anything and it looks way to easy to cost that much. However, part of the problem is the terminology used in this industry.
So, before we go down this road of pain, I want to clarify a few terms that I will be using to make sure there is no confusion.
CODE CHECK - When I plug my scanner in and acquire the codes stored in your car's computer module(s). This is what some parts stores will do for free.
DIAGNOSTIC - When I start taking things apart, digging into computer modules, testing different parts, checking fuses, testing fluid pressures, etc... (sometimes this requires the use of a scan tool but at a much deeper level than a code check)
Okay, now we're on the same page with the lingo.
So, often when a car comes in with a check engine light the customer wants us to scan it to see what is wrong with it.
Simple enough right? Yes and no.
When this happens I grab my scan tool, head outside, plug it in and run a CODE CHECK.
After we have the codes pulled out the real fun begins. Codes can be understood in 3 distinct categories: 1) part specific codes 2) system specific codes 3) generic codes
This is where it gets confusing. See, depending on the code, I might be able to order a part and install it without further DIAGNOSTICS (remember that term from above?). Or...I might have to spend 3 hours figuring out what went wrong to set the code.
For example, I can usually get by with a simple code check if the code is a PART SPECIFIC CODE. The p0440 gas cap code is an example of this. I see p0440 and I check the gas cap. No DIAGNOSTICS needed.
However, if I get a SYSTEM SPECIFIC CODE such as a p0301 then I know it's a misfire, and I know to look at the ignition system but I don't know which part is causing the code to set. It could be a bad injector, coil pack, spark plug, coil pack connector, injector connector, or coil boot. So, when I see a p0301 I know it's going to take me 30-60 minutes to figure out which part is causing the car to set that code. I have to take things apart and inspect them and test them so that I don't fix the wrong thing. Sometimes I might have to spend 2+ hours working on something just so I can access the parts to test. Typically, we have enough experience with SYSTEM SPECIFIC CODES to correctly estimate the DIAGNOSTIC time and we will stick to that estimate like glue.
It gets worse. If I get a GENERIC CODE like a U1000 or a p0300 then it is going to take significant time to track down the culprit because at this point I don't even know what system is causing it to set the code. Is it your fuel pump? Is it 1 of over 100 connectors that is melted? Is it a hairline crack in your air boot? These codes really stink. These codes are uncommon and DIAGNOSTICS are not estimable. I can spend up to 2 hours just reading about these codes, possible causes, fixes that have worked in the past etc... When this happens we ask customers to give us a dollar amount they are willing to spend. Then we work right up to that amount and call them to ask for more if we haven't figured it out. Usually, we spend way more time than we bill for when this happens.
Just when you thought it couldn't get worse...it does. Sometimes cars will have numerous codes. I had one the other day that had over 30 codes in it. Think about it, if I only charged him $20 per code to diagnose it would cost him $600. It's actually quite common to find 3-5 codes on a code check. When this happens it can really become confusing because often you have to fix something to test something else. For example, it's hard to diagnose a bad coil pack if the car also has really bad spark plugs. The plugs themselves can set off the same codes as the coil pack and we have to fix those before we can track down the broken coil pack (cars have between 4 and 8 coil packs depending on the engine).
Okay, so while it seems like DIAGNOSTICS are a rip off, they aren't. It takes years of experience and expensive training to perform DIAGNOSTICS at a high level. Codes help us find a direction to look in but most of the time there are multiple parts that could set the code and it takes time to disassemble, inspect, test and research the parts so that we can identify the root of the problem.
I hope this helps you understand why DIAGNOSTICS are so expensive and why some auto parts stores can perform free CODE CHECKS. You see, they really aren't remotely the same, even if the names and tools are confusingly similar. And a CODE CHECK can be very misleading without the proper DIAGNOSTICS to go along with it.