Finding Duplicate VIN Rows in Your Inventory File Fast
Duplicate VIN rows in a DMS export create double listings and sold-still-live ads. How to find duplicate VIN rows in your inventory file fast, before anyone posts.
The Friday DMS export looks clean: 86 rows, 86 stock numbers. An associate imports it, queues the new units, and by afternoon Marketplace has two live ads for the same F-150. One row is the original retail record. The other is a trade-in recode with a new stock number and yesterday's mileage. Same VIN. Two prices. Two photo folders. Buyers pick the cheaper ad. The desk argues about which one is "real."
Finding duplicate VIN rows in your inventory file fast is the cheapest control you can add to a Marketplace operation. It happens before AI copy, before the photo picker, before anyone's daily ceiling is burned on a clone. Duplicate VINs are how lots accidentally post the same vehicle twice, leave a sold unit alive under a second stock, and poison analytics. This is not a Meta-policy article. It is a file-hygiene article for internet directors and office managers who live in CSV and Excel.
Assume your export is guilty until you prove every VIN appears once. DMS systems create extras after recodes, wholesale-to-retail flips, deal-unwind reversals, and "dummy" rows used for accounting. Your posting file should not inherit them.
Why Duplicate VIN Rows Survive into Marketplace
Stock number is unique in most dealer brains. VIN is unique on the road. Exports are keyed on stock. That mismatch is the whole bug.
How duplicates are born
- Trade recode: the inbound VIN gets a new stock while the old retail row is not closed.
- Unwind / fell-through deal: the sold flag is cleared, a new stock is issued, the old row stays.
- Wholesale vs retail books: the same VIN exists in both with different prices.
- Manual add plus feed: someone typed the unit into a spreadsheet and the nightly export also contains it.
- Excel copy-down: a VIN cell was filled down one row too far. This looks amateur and happens constantly.
If you dedupe on stock number, you will miss every one of those. Dedupe on VIN.
What duplicate rows do once posted
You get overlapping listings, conflicting prices, and a mark-sold process that only kills one of the ads. The survivor keeps collecting messages. That is the pattern mark sold and archive is meant to stop — but it cannot stop a second inventory row you never knew you had.
A Fast Pass: Find Duplicate VIN Rows in Your Inventory File
You do not need a data team. You need one named column and ten minutes.
Normalize before you search
- Put VIN in its own column. No "VIN / stock" mashups.
- Trim spaces. Uppercase. Remove the word "VIN" if someone typed it into the cell.
- Confirm 17 characters on modern units. Short or long values are either commercial VINs, junk, or truncated exports — quarantine them; do not post them.
- Do not "fix" a VIN by guessing a character. Wrong VIN is worse than a blank. See VIN accuracy.
Excel: highlight duplicates in under a minute
- Select the VIN column.
- Conditional formatting → highlight duplicate values.
- Filter by color or sort so duplicates stack.
- For each stacked VIN, keep one row using the rules in the next section.
- Delete or move the extras to a "held" sheet, never to the import file.
If your team lives in Google Sheets, the same idea applies: a duplicate-count column (COUNTIF) filtered to anything greater than 1.
CSV without a spreadsheet UI
If the file is large, sort by VIN in any editor that can sort columns, then scan for consecutive repeats. Or run a unique-count: if unique VIN count ≠ row count, you have duplicates. Do not import until those numbers match, with the only exceptions being truly blank VIN rows you have already quarantined.
Import tools should fail the row, not the whole file
A good import shows you which rows collided. A bad import posts both. Use a history that logs row-level errors so a duplicate VIN is a fixable line, not a mystery. That is the point of import history and row-level error logs.
Which Row to Keep When the VIN Collides
Finding the duplicate is easy. Choosing the survivor is where stores argue. Write the rule down.
| Signal | Keep this row | Drop or hold this row |
|---|---|---|
| One row sold or pending, one active | The active retail row, after you confirm the car is actually on the lot | The sold/pending duplicate |
| Two active stocks, one is wholesale book | Retail row if the unit is on the retail lot | Wholesale row |
| Two active retail stocks | The current stock in the DMS, verified by walking the car | The recode leftover |
| Prices disagree | The price that matches website and window sticker | The stale price row |
| Mileage disagrees | The higher mileage if the car has been demoed; confirm on the dash | The older odometer |
| Photos disagree | The folder named with the current stock | The other folder, until someone reshoots |
Walk the car when both rows look alive
If the file cannot tell you which row is real, the lot can. Read the dash VIN, the stock sticker, and the deal jacket. Do not let two associates "own" the same VIN in two queues. That is how both get posted.
Never merge by averaging
Do not average two prices or two mileages. Do not concatenate two descriptions. Pick one source of truth. If neither row is trustworthy, park the unit in draft until recon and the office agree.
Make Duplicate VIN Checks a Standing Gate
A one-time cleanup is not a process. Put the check at three doors.
Door 1: Export
Whoever runs the DMS export is responsible for a VIN duplicate pass before the file leaves the office. If they cannot do it, they should not be the person who emails the CSV to the floor.
Door 2: Import
Refuse to post from a file whose unique VIN count does not match the row count (ignoring quarantined blanks). Log the extras. Do not "import anyway and we'll sort it later." Later is two live ads.
Door 3: Queue
Before submit, search the inventory for that VIN. If status is already posting or posted, the new row is a duplicate even if the file was clean yesterday. Statuses exist so you do not rely on memory.
Weekly sweep
Once a week, export live inventory and run the same VIN duplicate test against what is actually on Marketplace. File hygiene and live hygiene drift apart after fall-throughs and buybacks.
A 12-Minute File Audit You Can Teach an Associate
Use this as a laminated card.
- Open the export. Count rows.
- Normalize the VIN column.
- Highlight duplicates. Count unique VINs.
- If unique < rows, stack the collisions and apply the keep/drop table.
- Spot-check five non-duplicate VINs against the lot or DMS for sanity.
- Save a clean file with a date in the name. Never overwrite the dirty original; you will need it when accounting asks why a stock vanished.
- Import the clean file only.
- After import, scan the error log for VIN issues you missed.
If step 3 is skipped because "we were in a hurry," you will spend Saturday untangling Messenger.
How PostToMarket Automates This
Finding duplicate VIN rows in your inventory file fast should not depend on one person who is good at Excel. The posting system should refuse to treat two rows as two cars when they share a VIN.
- Bulk CSV and Excel import is the front door. Import history with a row-level error log is where collisions and bad VINs should surface before a listing is generated.
- Unlimited vehicles in inventory does not mean unlimited duplicate rows. Inventory is still VIN-level; statuses (draft, posting, posted, sold, failed) show if that VIN is already in flight.
- Capture from auction and wholesale sites needs the same VIN check, because a wholesale capture plus a retail export is a classic double.
- Per-rep queues and manager assignment should not allow two people to claim the same VIN. Team queue view exists to release a stuck claim, not to fork the car.
- Mark as sold and archive from inventory or the queue so when the surviving row sells, there is not a zombie twin still live.
- AI copy generated from that row's specs will happily write two ads if you give it two rows. The fix is upstream, in the file.
No tool can guarantee Marketplace will distribute the surviving listing. Cleaning the file reduces the operational mistake of advertising the same VIN twice.
Stop Importing the Second Copy of the Same Truck
Finding duplicate VIN rows in your inventory file fast is a gate, not a cleanup hobby. Normalize the column, count uniques, pick a survivor with a written rule, and refuse to import the rest. Stock numbers lie. VINs do not, unless someone typed them wrong — which is a different audit.
If Friday's export is already in someone's inbox, run the duplicate pass before anyone opens the photo picker.
PostToMarket is built for that gate: import, error log, VIN-level inventory, queues, and paced posting once the file is actually clean. Starter costs $59 per month for a solo seller or independent lot with one login. Dealership costs $299 per month for up to 13 logins when office and floor both touch the file. Start your 10-day free trial on secure Stripe checkout. Cancel anytime.