Your pitching report says the freshman right-hander threw fourteen cutters on Friday. He does not throw a cutter. Nobody on your staff has ever asked him to throw a cutter. The data is not lying to you, exactly — something upstream put a label on those fourteen pitches, and the label was wrong.
This is the least discussed problem in bat-and-ball tracking data. Everyone argues about what the metrics mean. Almost nobody checks whether the pitches were sorted into the right buckets before the metrics were calculated, and if they were not, every number downstream is quietly built on sand.
Every row carries the pitch type twice
Open a Trackman CSV and you will find two columns that both claim to tell you what pitch was thrown. TaggedPitchType is what a human selected — the operator sitting behind the machine, choosing from that pitcher's configured arsenal as the game moves. AutoPitchType is what the software decided on its own, reading velocity, spin, and movement off the ball flight.
Batted balls work the same way. TaggedHitType is the operator calling it a ground ball or a line drive. AutoHitType is the classifier doing it from launch angle and exit velocity. Two columns, two different sources of truth, and they disagree more often than you would guess.
Most reporting tools pick one of the two and never mention which. That single hidden choice can move a pitcher's slider usage by ten points or a hitter's ground-ball rate by fifteen.
How the human tag goes wrong
The operator tag is intent — what the pitcher meant to throw. That is genuinely valuable information the machine cannot infer. It is also entered live, by a person, during a game, usually by whoever was available.
- The arsenal is configured before the game. A pitcher who added a split-change in the bullpen last Tuesday does not have one in the dropdown, so it gets tagged as whatever is closest.
- Selections carry over. The previous pitcher's arsenal is still loaded, the next guy comes in, and the first few pitches land in someone else's categories.
- The cutter-slider boundary is genuinely ambiguous. A hard gyro slider at 86 and a cutter at 88 are the same pitch with two different names depending on who is asked.
- Games move faster than tagging. A quick inning, a pitching change, a rain delay, and a stretch of pitches gets tagged in a hurry or not at all.
- Warmups and between-inning throws sometimes land in the file alongside live pitches.
None of that is anyone's fault. It is what live data entry looks like. But it means the tagged column is a record of what a person had time to click, not a guaranteed record of what happened.
How the automatic tag goes wrong
The classifier has the opposite problem. It is perfectly consistent and completely ignorant of context. It reads the physics of the pitch and assigns the label that best fits pitches shaped like that — across everyone, not across your guy.
So a pitcher whose slider is unusually hard gets those pitches called cutters, every time, all season. A two-seamer with big arm-side run on a pitcher who throws a firm changeup will bleed between the two categories depending on the mile per hour. And a pitcher doing something genuinely unusual — the exact pitcher you most want to study — is the one the classifier handles worst, because unusual is what it was trained to smooth over.
The machine knows the physics. The operator knows the intent. Neither one knows both, which is why picking a single column and trusting it blindly is the wrong move no matter which column you pick.
The file most coaches have never looked at
Here is the part that surprises people. Depending on how your account and unit are set up, Trackman may not send one file per session — it can send two.
The first arrives right after the game — the unverified export. It is the raw output, tagged live, warts included. Later, once the tagging has been reviewed, a second file can show up for the same session: the verified export. Same game, same pitches, corrected labels. The two are identical in name apart from that one marker.
If you have only ever seen one file per game, that does not necessarily mean something is misconfigured — check the folder your exports land in, and ask whoever set up your unit whether verified exports are part of your setup. It is worth knowing either way, because how you read everything below depends on which files you are actually working from.
If you do get both, two things follow, and they bite coaches who do not know about them.
- Anything you built the night of the game came from the unverified file. When the verified version lands, some of those pitch types will have changed — and so will the usage rates, the CSW% by pitch, and the movement groupings you already sent to your players.
- If you import both files, you have imported the same game twice. Every pitch is counted twice, every batted ball is counted twice, and your pitch counts are double what actually happened.
The double-import is nasty precisely because rate stats survive it. CSW% and ground-ball rate look completely normal, because both halves of the fraction doubled. Only the counting stats give it away, and only if you happen to look.
Which column to trust actually flips
Once you know about the two files, the right way to read them becomes clear, and it is not the same rule in both cases.
In an unverified file, the human tag has not been reviewed yet. It was typed live under time pressure. The automatic classification, whatever its blind spots, was at least applied consistently to every pitch — so it is generally the safer default.
In a verified file, the human tag is the output of somebody sitting down and checking it. That is now the most reliable thing in the file, and it should outrank the classifier.
So the trustworthiness of the two columns inverts between the two files describing the same game. Any tool that hardcodes one column is wrong roughly half the time, and it will never tell you which half.
Batted balls are where it hurts most
Pitch types at least get noticed — a coach sees a cutter that does not exist and asks about it. Batted-ball tagging is where bad labels hide, because ground ball versus line drive is a judgment call that nobody audits.
A hitter's ground-ball rate is one of the first numbers anyone looks at, and the difference between 55% and 40% is frequently tagging rather than swing. If neither column has an answer, launch angle will give you a reasonable one — the angle bands for ground balls, line drives, fly balls, and popups are well established and applied identically to everybody.
The exception worth handling deliberately is the bunt. A sacrifice bunt is intent that ball flight cannot possibly reveal. The classifier sees a slow roller and calls it a ground ball, and now a hitter who executed exactly what he was asked to do is carrying a worse ground-ball rate for it. A bunt should sit outside batted-ball rates entirely.
A ten-minute audit you can run this week
You do not need new software to find out whether this is happening to you. Pull last weekend's data and check five things.
- List pitch types by pitcher. Look for pitches that do not exist — a cutter for a guy who does not throw one, a curveball for a slider-only reliever.
- Check the velocity range inside each tagged type. A slider band running from 78 to 89 is two pitches wearing one label.
- Look at the movement plot. A cluster sitting entirely inside another cluster means two names for one pitch.
- Compare usage rates to what your pitching coach believes. If he says 30% sliders and the file says 12%, the file is mislabeled, not your coach.
- Check a hitter's ground-ball rate against what you watched. If the number and your eyes disagree badly, look at the batted-ball tags before you change anybody's swing.
Fixing it going forward
The habits that prevent this are small and nobody teaches them.
- Update each pitcher's arsenal before first pitch, especially early in the year when guys are adding pitches weekly.
- Tell whoever is operating the machine when a pitcher adds something. One sentence before the game saves an hour of cleanup.
- Re-tag within the same week, while somebody still remembers the outing.
- Use the verified file whenever it exists, and rebuild anything important that was made from the unverified one.
- Never ingest both files for the same game. One replaces the other — it does not get added to it.
Why this matters more than it sounds
Pitch type is not just another column. It is the grouping key for nearly everything else you look at. CSW% by pitch, movement profiles, usage rates, velocity trends across a season, the goals in a development plan, the leaderboards your players actually care about — all of them start by sorting pitches into buckets by that label.
Which means a mislabeled group does not produce one wrong number. It produces a whole page of wrong numbers that look completely reasonable, and a pitcher who spends three weeks working on a pitch he was never throwing.
Once the labels are right, the metrics built on top of them start meaning something.
Read: What Is CSW%? →What PitchFilthy does about it
This is built into how reports are generated rather than left to you. The operator tag is trusted when the file has been verified; the automatic classification is trusted when it has not; and when neither column has an answer, launch angle fills the gap. Bunts stay out of batted-ball rates.
When a verified file arrives for a game already in your library, it replaces the unverified version instead of duplicating it — so the doubled pitch counts never happen. Any corrections you or your players already made to that game carry across to the corrected file rather than being wiped out.
Upload a Trackman file and see the reports built on top of properly sorted data — pitching, hitting, catching, and umpire, from the unit you already own.
See the pitching report →
