Release notes

What shipped, and when. Newest first. Page 2 of 5.

When something is broken, the app says so

platformreliability

Until now, finding out that something on the platform was misbehaving meant noticing it yourself, trying it twice more, and then emailing us. By the time anyone answered, the morning was gone.

There is now a bar at the top of every page for the times something genuinely is wrong. It carries four things:

  • What is broken, in plain words — "credit applications are not reaching lenders", not "the submission queue is backed up".
  • Who it affects. Most problems touch one workflow. If it is not yours, you can read the bar and carry on with your day.
  • What to do meanwhile, when there is something — submit through the lender portal directly, print the sticker from the vehicle page instead. When there genuinely is no workaround, it says nothing rather than inventing one.
  • How bad it is — maintenance, degraded, or an outage.

The all-clear

When it is fixed, the bar turns green and tells you so, and says whether anything needs redoing.

You get the all-clear even if you dismissed the original notice. Closing the red bar to get your screen back does not opt you out of the good news — that would leave you working around a problem that no longer exists, which is the whole failure this is meant to prevent. The green bar shows once and dismissing that one is final.

Dismissing it sticks

Press the X and it stays gone — on your phone, on the desk machine, tomorrow morning. It is remembered against you, not against your browser and not against your store, so shutting it does not shut it for the sales manager and clearing your cookies does not bring it back.

Most days it is not there

A notice like this is only worth anything if it is rare. When nothing is wrong, there is no bar and nothing moves down the page.

Keep the shopper who is not ready yet

inventorydealershipwebsitepricingmessaging

Most people who look at a car on your website are not going to buy it today. Almost all of them leave without telling you anything.

There is now a button under the call and test-drive buttons on every available vehicle that has an advertised price: 🔔 Tell me if the price drops.

What they give you, and what it costs them

A short form — first name, email, mobile — and one consent box. Either an email address or a mobile is enough. They do not have to give both, and most will give one.

They become an ordinary contact in your CRM with a lead source of price watch, so they show up in your people list, your reports and your pipeline like any other lead. Their name on the watchers list goes straight to their conversation thread.

Texts are confirmed twice

Typing a mobile brings up a second, separate, optional box offering text alerts. Ticking it does not sign anybody up for texts. It buys exactly one message — "reply YES to get a text if the price drops on the 2021 Toyota RAV4 XLE" — and nothing else is ever sent to that number until they reply.

If they never reply, your list says Text: awaiting reply and they get email only. That state is shown rather than hidden on purpose: a number stuck there usually means the confirmation was stopped by quiet hours or an existing opt-out, and they are waiting on a text that is not coming.

A phone number typed into a web form is the weakest evidence in messaging. The reply is what carriers and the FCC credit, and it is what keeps a campaign approved.

The notice fires on all three ways a price moves

You edited it on the vehicle. You used Update prices on a multi-select in the inventory report. Or the overnight markdown schedule did it while nobody was awake. All three go out. A price rise sends nothing.

Three things stop a notice — deliberately

They already know that price. Once somebody has been told $18,995, that is the number a new price has to beat. A car cut, put back up by a manager and cut to the same figure again has given the shopper no new news, and $18,995 twice in a week reads as a system that is broken.

The frequency floor. By default nobody hears from you about price more than once every 72 hours, however many times a price moves. A store running the standard five-step schedule could otherwise text the same person on consecutive nights, and somebody annoyed into replying STOP is lost for every car on the lot, not just this one. Change it on Dealership → Vehicle pricing.

Quiet hours, opt-outs and the DNC list. Price alerts go through exactly the same compliance path as every other message you send — there is no second send route and no shortcut for "it's only a price". A message stopped this way is recorded with the reason, so "nobody told me" always has an answer.

Getting off it

Every email carries a link that stops that one watch, not all your email and not the other cars they are watching. Every text carries STOP. And on Dealership → Price watchers you can take somebody off yourself when they phone in and ask.

Your prices can drop on a schedule now

inventorypricingdealershipautomation

Most stores mark aged cars down on a rule they carry in their head: $500 at a month, again at six weeks, again at two months. Dealership → Vehicle pricing → Automatic price reductions is that rule, written down and running itself.

Your store already has a schedule: $500 off at 31, 45, 60, 75 and 90 days on the lot. Change it, pause a step, add your own. Nothing happens to any car until you tick Reduce prices automatically on this schedule — a written schedule and a running one are different things, and the tick is the difference.

The floors come first

A markdown schedule with no floor is a countdown to selling at a loss. There are two, both checked, and the higher one wins:

  • a minimum margin over cost, set once for the store;
  • a floor price on an individual vehicle, for the one car you know something about.

When a floor blocks a reduction we open a high-priority task naming the price that was refused and the floor that refused it. That car has aged past what the schedule can fix, and it needs a decision from you — wholesale it, lower the floor, or accept where the price is. Going quiet about it is how a car sits for another month.

One thing worth knowing: the margin floor can only protect a vehicle whose cost you have recorded. If your cars arrive from a feed without cost, the per-vehicle floor price is what protects those.

Switching it on does not dump your whole lot

We record the moment you turn the schedule on, and steps your cars had already passed before then are skipped rather than applied. A 100-day car on a 31/45/60/75/90 schedule does not lose $2,500 the first night. It takes its next step when it reaches one.

You see it before it happens

What drops next, on the same page, lists every vehicle the schedule will reduce tomorrow night, what it is advertised at now, and what it becomes. The night before, the new Price reductions due tomorrow notification goes to whoever you route it to under Settings → Notifications.

To stop one: pause the step, or put a floor price on that vehicle.

What it will never do

  • Reduce a sold car, one with a deal pending, or one with a deposit.
  • Reduce a call for price car, or one with no advertised price.
  • Reduce the same car twice in one day, even when two steps fall due at once.
  • Overwrite a price a person just typed. If someone reprices a car while the job is running, it leaves that car alone and records that it did.
  • Apply the same step to the same car twice, ever.

Where the new prices go

Your marketplace feeds are a full snapshot of your lot, uploaded twice a day. The job runs 45 minutes before the morning upload, so every price it moves is on CarGurus and Cars.com in the next feed with nothing to press.

Every reduction is written to that vehicle's own history, so "why is this car $17,995 now?" has an answer on the car.

A deal no longer stops at sold

dealsdashboardreportsdealership

Until today the deal was finished when you marked it Sold. The money was not, and the chase for it lived on a whiteboard or in somebody's head.

Open a deal — Dealership → Documents, or from the customer's record — and the status now carries on past sold: Contract complete, then Booked, then Funded. Dead is still there for a deal that falls apart.

Sold, contract complete, booked and funded all count as a sale. The scorecard, the dashboard widgets and the Deals report treat the four the same way, so moving a deal forward never takes a unit off a rep's month or a dollar off your gross. That was the first thing we checked, because the opposite would have taught everyone to leave deals at sold.

One step at a time, and one step back

The four statuses are a line, and a deal walks it a step at a time. You cannot jump from Sold to Funded. The two dates in between — contract complete and booked — are what everything else ages against, and skipping them leaves them permanently empty for the deal you most want to ask about later.

Each funding state can step back exactly one. A bank kicking a contract back for a missing signature is a normal Tuesday, not an error, so Booked returns to Contract complete and Funded returns to Booked without anybody having to fake a status.

A funded deal cannot be marked dead. Rewind it to Booked first. A deal the lender has already paid for is not dead, and if it truly is, that is money you are sending back — worth the extra click.

What you record

On the deal, alongside the status:

  • The lender's reference ID — the number their portal shows you, which is what they will ask for on the phone.
  • The funded amount. If the lender funded short, settle the deal at what actually arrived and write the difference in the outstanding note. The amount is what came in, not what you asked for.
  • Contract complete, booked and funded dates, set when you move the status.
  • A funding notice, with an acknowledgement per person, so "did anyone see this" has an answer.
  • What is outstanding — free text, for the stipulation, the signature or the proof of insurance that is holding it up.

The funding lender is the bank already on the deal, not a new field to fill in twice.

Two widgets for the two questions

Money In Transit is what your lenders owe you right now: delivered, financed, not yet funded. It ignores the dashboard's date range on purpose. A 30-day window would hide the February contract that never funded, which is precisely the one you need to see.

Money Funded is what lenders actually paid inside the range, counted on the funding date, not the delivery date. A car delivered in March and funded in April is April's money. That is how the bank statement reads, and it is how the widget reads.

Both are under My widgets → Edit → Add widget → Deals.

The number an office manager chases

Days unfunded — days since delivery on a contract the bank has not paid for — shows on the deal and is a column on Reports → Deals. The Deals report also gained the funding columns, an is any of filter operator so one filter can name several statuses, and a saved view called In transit — awaiting funding that every account starts with.

Two new Action required rules on deals: a funding notice nobody has acknowledged, and a contract delivered longer ago than your own window and still unfunded. That window is a setting and starts at 7 days; a store that funds through a slow credit union should raise it rather than live with a list that is always red.

You type it, and that is deliberate

There is no lender integration behind this, and there is not going to be one. Lenders connect to Dealertrack and RouteOne, and that network is thirty years old — we are not going to pretend otherwise or charge you for a half-working version of it. A manager reads the portal and types what it says, which is what the manager is doing today anyway, minus the whiteboard.

What we did do is shape every field so that the day a decision does arrive from somewhere else, it fills in the same row. Nothing here would have to be rebuilt for that.

Say where a car actually is

inventorydealershipreportspricing

Open any vehicle under Dealership → Inventory and there is a new question: Where is it?

At auction · In transit · Repair shop · Body shop · Detail shop · Tire shop · Accessory shop · On hold · Sale pending · In arbitration — or leave it on On the lot, which is where most of your inventory should sit.

It is not the same as the status

The vehicle's status answers can this be sold — Available, Sale pending, Sold — and it is what your marketplace feeds read. Location answers where is it. A car can be Available and in the body shop at the same time, and both are true.

That is why it is a separate field rather than more options on the old one: folding a workshop into the status would have changed what goes out to CarGurus and Cars.com.

Find them in one click

Above Reports → Inventory there is now a row of chips — At auction, In transit, Repair shop, and the rest. One click shows everything in that state. Click again to clear it. Location is also available as a column and as an ordinary filter, so it saves into a view and exports like anything else.

It stops price drops on cars nobody can buy

If you run an automatic markdown schedule, seven of the ten now stop it: at auction, in transit, repair shop, body shop, on hold, sale pending, and in arbitration.

A price drop is a message to shoppers, and there is nothing to say about a car that is two counties away or already spoken for. For the workshop states it is worse than pointless — the car is not yet the thing it will be when it comes back, and letting it collect markdowns for time it spent in a bay prices the finished car against the unfinished one's wasted weeks.

Detail, tire and accessory shops deliberately do not stop it. Those are hours of cosmetic work on a car that is standing on your lot and can be shown and sold today. Had they blocked reductions, any store that details every unit before it hits the line would have found its whole schedule quietly switched off.

It explains a car that is not online

On a vehicle's marketing tab, a car that is not live now says why in your own words — "Not on the lot yet — it has not arrived yet" — instead of only listing what is missing. A car still at auction with no photographs is not a photography problem, and sending somebody to the photo booth to look for it wastes their afternoon.

Cars in the three cosmetic bays do not get that line, on purpose: a car in the detail bay with no photographs is missing photographs.

Action required — one toggle, one definition

reportsdealsleadsinventorydashboard

Action required now sits beside + Filter on all three report lists. Turn it on and the list becomes only the records waiting on you.

On Deals: a document sent for signature that hasn't come back, a deferred down payment due today or already past due, and an overdue task on the customer.

On Leads: an overdue task, and a conversation where the customer said something and nobody has replied. Snoozed conversations stay out of it — you already decided when to deal with those.

On Inventory: units that are listed but cannot publish, using the same check that holds a car back from your marketplace feeds. Advisory problems — no VIN, no price — are not in here, because a car already live on every marketplace is not waiting on you. Those live on the Inventory Completion tile.

There is also an Action Required dashboard tile, and it reads the same definition as the toggle. That matters more than it sounds: a tile saying seven above a list showing four teaches you to trust neither.

What it does not cover, and we would rather say so. Outstanding lender stipulations aren't in here because we don't model them yet — a deal held up by a bank's conditions looks the same as one held up by nothing. Feed push errors are recorded per channel rather than per vehicle, so they can't flag an individual car; the per-car half of that question is covered. And "past the SLA" needs a first-response clock, which is coming — until then an unanswered message counts from the moment it goes unread.

Export CSV respects the toggle, so what you send a manager is what you were looking at.

Your booking link knows when you are closed

appointmentsbookingfix

You could set special hours and holiday closures, and the product showed them correctly everywhere staff looked. The public booking link — the one you send customers — ignored them and offered slots from your regular weekly hours.

So a customer could book 10am on a day you had marked closed, and nobody found out until somebody arrived at a locked showroom.

Fixed. The public booking link now resolves the same special-hours rules as every internal screen: a closure removes the day, and an amended window replaces the regular one for that date only.

Worth checking once

If you have holiday closures already entered for dates still ahead of you, they are now being honoured — open your booking link and confirm the closed days show no times. Any appointment already booked into a closed day was booked under the old behaviour and is still on your calendar; this change does not cancel anything, so those are worth a look.

Vehicle pricing and lot documents moved to the Dealership menu

dealershipinventorypricingsettingsnavigation

Two pages moved.

WasIs
Settings → Vehicle pricingDealership → Vehicle pricing
Settings → Lot documentsDealership → Lot documents

Nothing about either page changed — same blocks, same settings, same saved values. Only the way in is different.

Why

Settings is the one section every business on Lead Friendly shares. A shuttle operator, a freight broker and an insurance agency all open the same list, and none of them has a lot to age or a window sticker to print. Advertised pricing, ageing thresholds, profit objectives and the FTC Buyers Guide are a car dealer's job, so they sit with the rest of the dealer setup — the inventory feed, the data providers, the lead webhook — behind Dealership.

If you have a saved menu layout, both pages appear in it automatically. A layout you saved before today cannot hide a page that did not exist when you saved it.

Your old links still work

/settings/pricing and /settings/inventory-print redirect permanently to the new addresses, so bookmarks, links in help articles and the disclosure prompt all still land in the right place.

Searching Settings works too: type "doc fee", "ageing" or "window sticker" into the settings search box and you get the same results you did yesterday, now pointing at the Dealership pages.

Deals stuck at the bank were falling out of your counts

dashboardreportsdealsfix

The deal statuses and sale types were written down in six different places in the product, and each copy was short in the same direction.

The "Deal Status by Type" widget built its grid from four statuses and three sale types. A deal in any other state had no cell to land in, so it was not counted anywhere — it did not appear in a wrong column, it simply vanished from the totals. Deals awaiting finance and deals sold to a customer's own bank were both affected, along with wholesale.

The Deals report offered working, presented, sold and dead in its Status filter. If you had a deal parked at the bank, there was no way to filter for it. Sale type was a free-text box with no options at all, so filtering by it meant guessing the exact stored spelling.

What changed

There is now one list of deal statuses and one list of sale types, and every screen reads from it. The widget counts every row and shows totals. The Deals report offers Awaiting finance, and Sale type is a picker instead of a text box.

The lists are checked against the database's own rules automatically, so a status added in future cannot go missing from a screen the way these did.

What you will see

Your status grid totals may go up, because deals that were being dropped are now counted.

Saved report views were checked before this shipped rather than after: no saved view in any account was filtering on sale type, so turning that box into a picker could not have broken one.

What you're using

settingsreportingaccount

Settings → What you're using lists everything your account includes and says, plainly, whether you have ever used it.

Three states. In use — you added something in the last 60 days. Not lately — you used it once and stopped. Never used — it is there and you have not touched it. Anything not on your plan is marked as such and kept out of the counts, because "you cannot open this" and "you are paying for this and ignoring it" are different sentences.

The never-used ones are collected at the top with a link each, so the page ends with somewhere to go rather than a verdict.

Usage means records created, not pages opened. A saved view you built, an appraisal you worked up, a notification route you set. Opening a screen and leaving does not count — that is deliberate: a page view is not use, and a number that counts it would tell you you are getting value you are not.