Scraping Kia dealer inventory to lease a minivan for $0 down

Our car was too small once we had our second kid. We rented a minivan for a trip and the sliding doors sold us on the idea, but we didn't want the minivan look. The Kia Carnival Hybrid solves that: the interior of a minivan, the exterior of an SUV.

Minivan sales in the US were up 21% in 2025, the segment's best year since 2019, and industry reporting points to millennial dads specifically as a big part of that. Chrysler's president has said the segment is picking up a new kind of buyer: mostly men around 40. I'm a card-carrying millennial dad now, so this tracks.

I priced the car before I negotiated it. Instead of walking in on one dealer's opening number, I wrote a scraper that pulls live inventory (price, MSRP, trim, VIN) off every Kia dealer's own site within driving distance. Even the dealers don't agree on what to call the same car: one calls it "Carnival Hybrid," another "Carnival MPV Hybrid." The scraper folds every dealer's spelling into one name so the comparison table is apples to apples:

def canon_model(mod):
    """Fold every dealer's spelling of the same model into one family name."""
    u = mod.upper()
    if "CARNIVAL" in u and "HYBRID" in u: return "Carnival Hybrid"
    if "CARNIVAL" in u: return "Carnival"
    if "TELLURIDE" in u and "HYBRID" in u: return "Telluride Hybrid"
    return "Telluride"

By the time we sat down at Miami Lakes Kia, I already knew which Carnival Hybrid SX units existed at every dealer in range and what they actually cost, not what the ad said. The worksheet stayed open on my laptop through the actual negotiation too, so the numbers I was negotiating from were live and current, not a printout the sales rep handed me.

The numbers. MSRP on the exact trim was $51,845. The dealer's own worksheet tacked on $2,859 in add-ons before we'd negotiated anything: LoJack, etching, the usual F&I extras. A $3,710 manufacturer rebate wiped that out and then some: net price landed at $50,994, about $850 under sticker, before tax and title. That rebate applied against the whole deal rather than just the sale price, so it also covered everything due at signing: first payment, tax, registration, the extended warranty. We drove off having paid $0 out of pocket.

The lease is also a free option. We financed it as a 36-month lease, with the residual value locked at $31,107, about 60% of MSRP. That's what Kia Finance says the car will be worth at the end of the term, and the number doesn't move for us either way. If Carnival Hybrids hold their value better than that estimate three years from now, we get to buy the car at $31,107 regardless of what it's actually worth then. If it depreciates faster than projected instead, we hand back the keys and owe nothing more.

The scraper and a worksheet that runs the buy vs. finance vs. lease math off real listings are open source: github.com/peterwild/kia-negotiator. It's built to be used the way we used it: open on a laptop at the table during the actual negotiation, not just for research beforehand. It's built around Kia's dealer sites specifically, but the two dealer platforms it scrapes cover a lot of dealer websites generally, so pointing it at a different make is mostly a matter of swapping the model list at the top of the file.

← Writing