Every 6:15 PM report since July, plus six months of the “Sold Cars” and “New Arrivals” WhatsApp threads and nine months of VinSolutions leads. The EAW Daily Totals page carries the short version every night; this is the full report. Nothing here is estimated; where a source has a gap, the chart says so.
Every post in “Sold Cars” from Mar 23, the day the thread starts on this Mac. Photo posts are stored twice and counted once; 19 posts marked OVE, buy now or wholesale are left out. Weeks run Monday to Sunday; the first and last weeks are partial.
The Sales Tracker is the source of truth for units and rep credit. It is not updated daily, so its bar shows only for months that are final (10 days after month end).
From the monthly Sales Leaderboard exports, all reps combined. Close rate = sold ÷ good leads in VinSolutions. Each month uses that month’s own full export.
Only arrival posts that include a VIN can be tied to a sale; the thread started carrying VINs in August. Earlier posts describe each car (year, model, miles, asking price) but not which stock number it became.
Share of “Sold Cars” posts with a stock number that mention each item. A post that leaves it out is counted as not having it, so these are floors, not exact F&I rates.
How to read it: “organic” means shoppers who found the website through Google search, not ads. Numbers are exactly as Cox wrote them in that month’s report; a dash means Cox did not give that number. Hover a cell for the year-over-year change Cox noted.
How to read it: each month has two bars. When the orange bar is taller, more cars came in than sold and inventory grew. The dashed line marks Aug 6, when the boards started.
How to read it: the share of cars received that month that were posted to the team in WhatsApp “New Arrivals”. Before September most posts had no VIN, so they are matched by year and model, which misses some; the dashed top shows how high the real share could be.
How to read it: the first rows are about getting a car in front of shoppers and the team; the last rows are about how fast it sells. The boards are meant to move the first rows, and the hope is the last rows follow.
Weeks run Monday to Sunday. Boards were only reported from Aug 7, so arrivals start with the week of Aug 10. The week of Sep 28 is Monday to Wednesday only. Thursday Sep 24’s four sales were never itemized (WhatsApp couldn’t be read that night) and are counted from Friday’s report.
Days’ supply = tonight’s inventory ÷ average sold per day over the last 14 calendar days. It starts Aug 10, when 14 days of sales history exist.
Time each sale was posted to “Sold Cars”, Central. Darker = more sales in that hour. Sunday had one sale in ten weeks.
Gaps are nights iPacketRecon couldn’t be read (Aug 11, 19, 21). Front Line Ready and Wholesale are excluded, as on the nightly report.
Days = calendar days since the unit first showed up in a recon snapshot. The path is every stage it was seen in, in order.
Matched on stock number across reports. Only units whose first board or first full set happened inside this history are counted, so the first weeks undercount older inventory.
41 of 50 nights were complete straight from the scheduled run. The other nine are marked below so a trend line never hides a missing input.
Ranked by how much each would change a decision. “Ready now” means the history above already supports it. “Needs a field” means the nightly run would have to record one more thing.
totals_data.json, the run appends one row to totals_history.json: date, the KPI tiles, stage counts, and the stock numbers sold, photographed, boarded and in each stage. The backfill from this analysis seeds it with all 50 nights.deploy.sh copies files by name, so it needs one more name on its list. The hub already reads totals_data.json from the same site, so a Days’ supply tile on eawhub.com would come for free.build_totals_page.py adds the charts from the history file. If the file is missing, the section is skipped and the rest of the page is unchanged.