Release notes

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

How long customers wait for a reply

inboxdashboardleadsreporting

Open the Inbox and there are two numbers above it now: how many threads are waiting on a reply, and your average first response.

First response means what you would expect it to mean: the gap between the customer's first message and the first thing you said back. Per conversation, not per lead.

Waiting on a reply is asked of the customer's latest message, not their first. A thread you answered in March that asked a new question this morning is waiting on you right now — counting it as answered is how an inbox metric talks a store into thinking everything is fine.

AI replies count. If the auto-responder answered the customer, the customer got an answer. Excluding it would make switching the responder on look like it made your response times worse. Delivery receipts and automated notices do not count — those are not answers, and counting them would let a store score a perfect response time while never speaking to anybody.

Also on the dashboard as the Inbox First Response widget, and on the team scorecard as an Avg 1st reply column per salesperson. Credit goes to whoever replied first, since that is the person who answered the customer. A salesperson who has answered nothing shows a dash rather than a zero — nobody should top that column by doing the least.

One number this is not: the existing Internet Lead Response Time widget measures something different and both are true. That one is lead arrival to your first outbound touch of any kind — speed-to-lead. This one is a reply to something a customer actually said. A store can be excellent at one and terrible at the other.

Inventory Completion, and every count is a link

dashboardinventoryreportsdealership

Inventory Completion is on the dashboard, and it is the tile that hands you a job rather than a number.

One percentage — how much of your listing information is actually filled in — and under it four counts: missing photos, missing a price, missing mileage, missing a description. Click any of them and you land on that exact list, filtered and ready to work.

It scores fields, not cars. A lot where every unit is missing one of the four reads 75%, not 0%, because a number that cannot move until the job is finished is a number nobody starts.

Only listed vehicles count. A sold car with no description is not a merchandising problem, and counting it would drag on a score you cannot fix. Call-for-price counts as having a price — it is a decision, not an omission.

"Has photos" means what it means everywhere else in the product: the same check that decides whether a unit goes out to your marketplace feeds, which reads both your photo gallery and older single-photo uploads. A car with one older photo is not reported as having none.

Saved views are linkable now. Any saved report can be opened directly by URL, which is what makes the tile's counts clickable — and it means you can bookmark a view or paste one to a colleague.

Every report in one place

reportsdealershiptruckingshuttlenavigation

If you wanted a report, where you went depended entirely on which report it was. Call and AI-agent charts were under Business → Reporting. The excise-tax return was under Dealership → Reports. The journal export was under Dealership → Accounting. Lot and sales performance was under Dealership → Operations. Website traffic was under Leads → Insights. Saved views and schedules were under Reports. Six homes, no rule connecting them, and nothing telling you the other five existed.

There is now one Reports section. Everything above is in it, grouped by what you are asking about rather than by which part of the product happened to build it:

  • Sales — deals, sales tax, website
  • Operations — inventory, lot, loads, rides
  • Money — accounting, invoices, driver pay
  • Performance — calls, leads

Every old link still works and lands on the new page, so bookmarks, saved browser tabs and links inside old emails are all fine.

It shows your industry, not everyone's

The list is built from what your account actually has. A trucking company sees loads, invoices and driver pay and does not see the excise-tax return or the lot report. A car dealership sees deals, inventory and tax and does not see driver settlements. A shuttle operator sees rides. If you run more than one of these, you see all of them, in one list.

This is the part worth knowing if you were confused before: the reports you could not find were often reports your account was never going to use.

Four new reports for trucking and shuttle

Built as part of the same work, because a single Reports section that only covers car dealerships is not a single Reports section:

  • Loads — every load, its lifecycle state and its money
  • Invoices — carrier billing, by status and terms
  • Driver pay — settlements, deductions, advances and what was actually paid
  • Rides — shuttle rides, by direction and status

All four are full reports, not summaries: filter them, choose your columns, sort them, save the view, schedule it by email, export it to CSV.

What did not change

The excise-tax return, the journal export and the other fixed reports still look exactly as they did. They are laid out the way the Department of Revenue asks for them, or as balanced double entry, and turning those into column pickers would have destroyed the thing that makes them useful. They moved house; they were not rebuilt.

Invoicing itself also stays where it is, under Trucking. Creating and sending an invoice is work you are doing, not a result you are reading — only the invoice report moved.

New accounts arrive already set up

dashboardreportsnotificationssettingsonboarding

Nobody configures a CRM from zero.

Every feature we ship starts life as an empty table and an empty screen, and an empty screen is where most of them stay. So a new account no longer arrives blank:

A dashboard that already has something on it. The first time anyone opens Dashboard, their home page is built with eight widgets — Needs Attention first, because it is the one that says what to do rather than how last month went, then Sales Funnel, Lead Sources, Internet Lead Response Time, Aging Leads, Steps to Sale, Sales Last 13 Months and Fastest Sellers. Each person gets their own board, so a salesperson can keep a different layout from the owner's.

Three notifications already on. New lead, task due, deal sold — all going to whoever owns the account, as bell notifications. No email and no SMS: nothing leaves your store unless you set that up under Settings → Notifications.

Nine saved views on the reports. Not on your website, No price advertised, Available now and Sale pending on Inventory; Unassigned leads, New leads and No email on file on Leads; Working deals and Sold deals on Deals. They are marked as system views, which means you can rename them, re-filter them or hide them — but not delete them, because hiding is reversible and deleting would not be.

Four job-title roles. General Manager, Sales Manager, F&I Manager and Buyer, ready under Settings → Roles & permissions. Nobody holds them until you put somebody in one.

All of it is yours immediately. Every part can be edited, re-pointed or removed, and none of it comes back if you remove it — the seeding only ever fills in a blank, and it runs once.

Existing accounts are untouched. Nothing was written to any settings you had already. The one change you will notice is that a teammate who has never built a dashboard gets the starter widgets the next time they open theirs. If you want the rest set up on an existing account, ask us — we do not write to a live store's settings without being asked.

Your ageing thresholds and profit objectives, in one place

inventorypricingsettingsreportsdealership

Dealership → Vehicle pricing has two new blocks.

Inventory ageing

Set when a car turns amber and when it turns red. Leave the boxes empty and you get the standard 60 and 90 days.

Those two numbers are now the only definition of "old" in the product. They

  • colour the rows on your inventory report,
  • set the bands on your Lot & sales ageing report and the "over N days" figure beside your in-stock count,
  • and rename and re-filter your saved Aging views to match — set 45 and 75 and "Aging 60+ days" becomes "Aging 45+ days" and filters on 45.

Change them once and the whole product agrees. Before this, the report, the ageing buckets and the saved views each had their own idea of it, and only one of them was yours.

Profit objectives

A dollar amount for retail and one for wholesale, each with its own switch. With a switch on, a car that arrives with a known cost and no asking price is listed at cost plus that objective — a car finalized from an appraisal, or one added by hand with the price left blank.

Two things it will not do:

  • It never replaces a price a person typed. It only ever fills a blank, so switching it on cannot change a price that is on your website today.
  • It never prices a car whose cost you have not recorded. There is nothing to add the objective to, and guessing is worse than leaving it blank.

Every price it sets is written to that unit's own log, with the cost and the objective it used, so the number always has an explanation.

Both switches are off until you turn them on, and only an owner or admin can change any of it.

Reports understand "60 days ago"

reportsinventoryleadsdealership

A saved report used to be able to say "created before September 5th". It could not say "older than 60 days" — so an Aging report you saved was wrong the next morning, and stayed wrong.

Two new filter operators: "older than (days)" and "in the last (days)." Any date field takes them, the cutoff is worked out fresh every time the report runs, and a view built on one keeps asking the same question forever. Aging 60+, Aging 90+, Sold in the last 30 days, Arrived this week.

Three new things to filter inventory on. Has photos — which reads both places photos are stored, so a unit with one older-style photo counts as having one. Without a price and Without a description, which are genuine "nothing here" tests rather than "price is under a dollar".

Seventeen saved views now come with a new account, up from nine. On Inventory: Without photos, Without a price, Without a description, Not on your website, Aging 60+ days, Aging 90+ days, No price advertised, Available now, Sale pending. On Leads: Unassigned leads, New leads, New leads over a week old, Arrived this week, No email on file. On Deals: Working deals, Sold in the last 30 days, Sold deals.

They are named for what they actually ask. "Sold in the last 30 days" is not called "Sold this month", because a rolling thirty days is not a calendar month and the difference would be wrong for most of every month.

Still to come: Not Exporting At All needs per-unit channel data the report engine cannot reach yet, Appointments Today needs an appointments report, and Action Required arrives with the work that defines it.

Your sales scorecard was reporting $0 gross

reportsdealershipdealsfix

If you opened the sales scorecard and saw $0.00 gross on months you know made money, this was a real bug and it is fixed.

What was wrong. The scorecard asked for gross the strict way: it read the desk pricing snapshot and, when there was not one, recorded zero. The dashboard widgets asked the practical way: snapshot if there is one, otherwise selling price − vehicle cost − pack. Same deals, two answers, and the scorecard's answer was $0.

How widespread it was. Not a handful of deals. No sold deal in the system carried a desk pricing snapshot — a snapshot is written when a deal is desked inside Lead Friendly, and a deal imported from a DMS or created through the API never gets one. So the scorecard was reporting $0.00 gross for every sold deal it counted, in every store, not for some subset of them.

What changed. The scorecard now uses the same fallback the widgets use. One definition of gross, in one place, used by the report, the widgets and the database function alike.

What you will see

Your scorecard numbers will go up — to what your dashboard was already telling you. Nothing about your deals changed; only the report's arithmetic did. If the scorecard and a dashboard widget now disagree about the same month, that is worth telling us about, because they are supposed to be the same sum.

Seven months' worth of history was checked against the corrected arithmetic before this shipped, including one month the original investigation had missed.

Cost and gross now follow the permissions you set

permissionsappraisalsreportsexportssecurity

Lead Friendly has had See front gross and See vehicle cost permission switches for a while. Two parts of the product were not asking.

Appraisals

The appraisal worksheet and the appraisals API returned book values, recon, packs, additional costs and target gross to any team member who could open them. Appraisals shipped before granular permissions did, and never caught up.

Both directions are now checked: someone without the switch does not receive the figure, and cannot write it either — a hidden field still posts whatever a crafted request puts in it, so the write side had to be closed as well as the read side.

Three owner reports

The lot report, the journal export and the sales report all export owner money. Each one checked whose deals you may see and none of them checked whether you may see gross at all. The scope half of the question was answered and the permission half was not.

  • Lot and journal now refuse without the relevant switch, and say which switch is missing rather than returning an empty page.
  • Sales is not refused — it drops the profit block and still gives you the tax return, which is what most people open it for. It says the block is missing rather than leaving a silent gap where the numbers were.

Two changes you may notice

Finalizing an appraisal now needs See vehicle cost. Finalizing records what the store paid, so it is a money action. Before this, someone without the switch got an error telling them to fill in a section their screen does not display. The button is now hidden for them instead of leading to a dead end.

A wallet export was cacheable. The billing wallet CSV — amounts, balances and payment references — was the only private export sent without a no-cache header, so it could be left behind in a shared browser's disk cache. It now carries the same headers as every other private export. Nothing suggests this was ever exploited; it was found by reviewing every export path at once.

If a number disappeared for you

That is this change, and the fix is a permission, not a bug report. These are switches on your role, not on you individually: an owner or admin sets them under Settings → Roles & permissions, in the Money group. If you think you should already have had them, you probably should — the switches existed and these screens simply were not reading them.

Job-title role presets

settingspermissionsteam

Roles now start from a job title.

Settings → Roles & permissions has a row of job titles above the permission matrix: Dealer Principal, General Manager, Sales Manager, F&I Manager, Internet Manager, Inventory Merchandiser, Salesperson and Buyer. Click one and all twelve switches fill in the way that seat usually runs at an independent store.

They stay editable. A preset is a starting point, not a separate thing your store has to maintain — nothing saves until you read the matrix and press Save, and changing one switch afterwards is the expected thing to do, not a deviation. Nothing about which preset you picked is stored anywhere; the switches are yours from that moment.

New role takes a job title too, and fills in the name and the role it starts from as well as the switches, so a custom "Used-car manager" never exists for even a moment carrying a name that promises more than its permissions do.

Two things the screen tells you before you press Save. Only four of the twelve permissions are enforced across the product today — See front gross, See vehicle cost, Play call recordings and Delete records — so the picker names, in amber, exactly which of a job title's switches will take effect and which are still only a description. And the six built-in roles cannot be re-based, so applying a job title to Manager fills its switches but leaves it a Manager everywhere the flags aren't consulted; create your own role if you want both halves.

Nothing changed for any existing role. No permissions were altered anywhere — this adds a way to fill the matrix in, and only when somebody asks for it.