New Chat
Loading your dashboard...

Good Morning — Your Daily Briefing

Tap for performance snapshot, inventory alerts, and action items

LOUIE
Inventory Analysis
Loading inventory data...
Your session expires in 5:00
window.openStipChecker = function() { if (document.getElementById('stip-overlay')) return; var ov = document.createElement('div'); ov.id = 'stip-overlay'; ov.className = 'stip-overlay'; ov.innerHTML = '
'+ '

\u{1F50D} Stip Checker — Fraud Detection

'+ '

Drop a paystub, bank statement, or proof of income. Louie will analyze it for red flags including math errors, font inconsistencies, missing details, and common fraud patterns.

'+ '
'+ 'Paystubs'+ 'Bank Statements'+ 'W-2s'+ '1099s'+ 'Proof of Residence'+ '
'+ '
'+ '
\u{1F4C4}
'+ '
Drop document here or click to browse
'+ '
PDF, JPG, PNG — max 10MB
'+ '
'+ ''+ '
'+ ''+ '
'; document.body.appendChild(ov); ov.addEventListener('click', function(e) { if (e.target === ov) ov.remove(); }); }; window.handleStipDrop = async function(file) { if (!file) return; var status = document.getElementById('stip-status'); var maxSize = 10 * 1024 * 1024; if (file.size > maxSize) { status.innerHTML = 'File too large. Max 10MB.'; return; } status.innerHTML = '\u{1F504} Uploading ' + file.name + '...'; try { var fd = new FormData(); fd.append('file', file); var r = await fetch('/api/upload', { method:'POST', headers:{'Authorization':'Bearer '+(window.token||token||localStorage.getItem('landmark_token'))}, body:fd }); var d = await r.json(); if (!d.id) { status.innerHTML = 'Upload failed: ' + (d.error||'unknown') + ''; return; } status.innerHTML = '\u{1F50D} Analyzing for fraud indicators...'; // Close modal setTimeout(function(){ var o = document.getElementById('stip-overlay'); if(o) o.remove(); }, 500); // Send to chat with stip analysis prompt var stipPrompt = 'STIPULATION FRAUD ANALYSIS — Analyze the attached document (' + file.name + ') as an F&I stipulation checker. This is a ' + (file.name.toLowerCase().includes('bank') ? 'bank statement' : 'paystub/income document') + '.\n\n' + 'CHECK ALL OF THE FOLLOWING:\n' + '1. MATH ACCURACY: Gross pay - deductions = net pay. Verify each line adds up. YTD totals must be consistent with per-period amounts x pay periods elapsed.\n' + '2. TAX VERIFICATION: Federal withholding should match approximate IRS brackets. Social Security = 6.2% of gross (up to $168,600 cap). Medicare = 1.45%. State tax should match the state shown.\n' + '3. FONT & FORMATTING: Look for inconsistent fonts, sizes, spacing, alignment. Real paystubs have uniform formatting from payroll software.\n' + '4. ROUND NUMBERS: Fake stubs often use suspiciously round numbers ($5,000.00 gross, $1,000.00 taxes). Real payroll has odd cents.\n' + '5. EMPLOYER DETAILS: Company name, address, EIN should be present. Missing or generic employer info is a red flag.\n' + '6. PAY PERIOD LOGIC: Dates should be consistent (weekly/biweekly/semi-monthly/monthly). Check for impossible date ranges.\n' + '7. COMMON FAKES: Check for known fake paystub generator artifacts — centered text, generic templates, missing state-specific deductions.\n' + '8. BANK STATEMENT CHECKS (if applicable): Running balance math, transaction patterns, statement period consistency, bank logo/formatting.\n\n' + 'Give a CONFIDENCE SCORE (1-10) for document authenticity, flag every red flag found, and give a clear PASS / REVIEW / FAIL recommendation. Be blunt — this protects the dealership from fraud chargebacks.'; // Attach file and send via sync path (which handles fileIds) window.pendingFiles = [{id: d.id, name: file.name, size: file.size}]; if (typeof renderFilePreviews === 'function') renderFilePreviews(); var ta = document.querySelector('.input-area textarea'); if (ta) { ta.value = stipPrompt; } if (typeof sendMessage === 'function') { sendMessage(); } else if (typeof qa === 'function') { qa(stipPrompt); } } catch(e) { status.innerHTML = 'Error: ' + e.message + ''; } }; // ============ END STIP CHECKER ============ // ============ END STREAMING ============ // ── GOALS DASHBOARD ── let glData = null; // { goals: [], sales: {} } let glMonth = 'feb_2026'; function openGoalsDashboard(){ document.getElementById('goals-dashboard').classList.add('active'); if(!glData) loadGlData(); } function closeGoalsDashboard(){ document.getElementById('goals-dashboard').classList.remove('active'); } document.addEventListener('keydown',function(e){ if(e.key==='Escape'&&document.getElementById('goals-dashboard').classList.contains('active')) closeGoalsDashboard(); }); function glChangeMonth(m){ glMonth = m; const labels = {'jan_2026':'Jan 2026','feb_2026':'Feb 2026','mar_2026':'Mar 2026'}; document.getElementById('gl-month-badge').textContent = labels[m]||m; if(glData) renderGlDashboard(); } async function loadGlData(){ try { const [goalsRes, salesRes] = await Promise.all([ fetch('/api/goals',{headers:{'Authorization':'Bearer '+token}}), fetch('/api/sales-performance',{headers:{'Authorization':'Bearer '+token}}) ]); const goals = await goalsRes.json(); const sales = await salesRes.json(); glData = { goals: Array.isArray(goals)?goals:[], sales: sales.stores||{} }; // Patch March gross from StoreDeallLog (SalesHistories empty for current month) if(rptData && rptData.overview && rptData.overview.storeDeals) { const mDeals = rptData.overview.storeDeals.filter(d=>d.status&&d.status.startsWith('Y')); if(mDeals.length > 0 && glData.sales) { const stores = ['ford','taylorville','chrysler','trucks','cadillac']; stores.forEach(st=>{ if(!glData.sales[st]) glData.sales[st]={}; if(!glData.sales[st].mar_2026) glData.sales[st].mar_2026={delivered:0,front_gross:0,fi_gross:0,total_gross:0}; const stDeals = mDeals.filter(d=>d.store===st); if(stDeals.length>0 && (!glData.sales[st].mar_2026.total_gross||glData.sales[st].mar_2026.total_gross===0)) { glData.sales[st].mar_2026.delivered = stDeals.length; glData.sales[st].mar_2026.front_gross = stDeals.reduce((a,d)=>a+(d.front_gross||0),0); glData.sales[st].mar_2026.fi_gross = stDeals.reduce((a,d)=>a+(d.fi_gross||0),0); glData.sales[st].mar_2026.total_gross = stDeals.reduce((a,d)=>a+(d.total_gross||0),0); } }); } } renderGlDashboard(); } catch(e) { document.getElementById('gl-stores-grid').innerHTML = '
Failed to load data
'; } } function glGetGoal(store, month){ if(!glData) return null; return glData.goals.find(g=>g.store===store && g.month===month) || null; } function glGetActual(store, month){ if(!glData||!glData.sales[store]) return null; return glData.sales[store][month] || null; } function glBar(actual, goal, color){ if(!goal||goal===0) return '
No goal set
'; const pct = Math.min(100, Math.round((actual/goal)*100)); const barColor = pct>=100?'#0f7b3c':pct>=75?color:pct>=50?'#f59e0b':'#dc2626'; return '
'+pct+'% of goal
'; } function renderGlDashboard(){ const stores = [ {key:'ford',label:'Ford',color:'#1B6EC2'}, {key:'trucks',label:'Trucks',color:'#cc6600'}, {key:'cadillac',label:'Cadillac',color:'#8b6914'}, {key:'chrysler',label:'Chrysler',color:'#1a4a7a'}, {key:'taylorville',label:'Taylorville',color:'#2d6b3f'} ]; const $ = s => s?'$'+Math.round(s).toLocaleString():'$0'; let onTrack=0, totalDel=0, totalGross=0, goalDel=0, goalGross=0; let html=''; stores.forEach(s=>{ const actual = glGetActual(s.key, glMonth); const goal = glGetGoal(s.key, glMonth); const aDel = actual?actual.delivered:0; const aGross = actual?actual.total_gross:0; const aAvg = actual?actual.avg_total:0; const gDel = goal?goal.goal_deliveries:0; const gGross = goal?goal.goal_total_gross:0; const gAvg = goal?goal.goal_avg_gross:0; totalDel+=aDel; totalGross+=aGross; goalDel+=gDel; goalGross+=gGross; const isOnTrack = (!gDel||aDel>=gDel*0.75) && (!gGross||aGross>=gGross*0.75); if(goal && isOnTrack) onTrack++; html+='
'; html+='
'+s.label+'
'; html+='
Deliveries'+aDel+(gDel?' / '+gDel:'')+'
'+glBar(aDel,gDel,s.color)+'
'; html+='
Total Gross'+$(aGross)+(gGross?' / '+$(gGross):'')+'
'+glBar(aGross,gGross,s.color)+'
'; html+='
Avg / Deal'+$(aAvg)+(gAvg?' / '+$(gAvg):'')+'
'+glBar(aAvg,gAvg,s.color)+'
'; html+=''; html+='
'; }); document.getElementById('gl-stores-grid').innerHTML = html; // Group KPIs document.getElementById('gl-g-del').textContent = totalDel + (goalDel?' / '+goalDel:''); document.getElementById('gl-g-del-s').textContent = goalDel ? Math.round(totalDel/goalDel*100)+'% of group goal' : 'No group goal set'; document.getElementById('gl-g-gross').textContent = '$'+Math.round(totalGross/1000)+'K' + (goalGross?' / $'+Math.round(goalGross/1000)+'K':''); document.getElementById('gl-g-gross-s').textContent = goalGross ? Math.round(totalGross/goalGross*100)+'% of group goal' : 'No group goal set'; const groupAvg = totalDel?Math.round(totalGross/totalDel):0; document.getElementById('gl-g-avg').textContent = '$'+groupAvg.toLocaleString(); document.getElementById('gl-g-avg-s').textContent = 'actual avg per deal'; document.getElementById('gl-g-ontrack').textContent = onTrack + ' / 5'; } function openGlModal(storeKey, storeLabel){ const goal = glGetGoal(storeKey, glMonth); document.getElementById('gl-modal-title').textContent = 'Goals — ' + storeLabel; const labels = {'jan_2026':'Jan 2026','feb_2026':'Feb 2026','mar_2026':'Mar 2026'}; document.getElementById('gl-modal-sub').textContent = labels[glMonth]||glMonth; document.getElementById('gl-modal-store').value = storeKey; document.getElementById('gl-modal-month').value = glMonth; document.getElementById('gl-modal-del').value = goal?goal.goal_deliveries:''; document.getElementById('gl-modal-gross').value = goal?goal.goal_total_gross:''; document.getElementById('gl-modal-avg').value = goal?goal.goal_avg_gross:''; document.getElementById('gl-modal').classList.add('active'); } function closeGlModal(){ document.getElementById('gl-modal').classList.remove('active'); } async function saveGoal(){ const store = document.getElementById('gl-modal-store').value; const month = document.getElementById('gl-modal-month').value; const del_ = parseFloat(document.getElementById('gl-modal-del').value)||0; const gross = parseFloat(document.getElementById('gl-modal-gross').value)||0; const avg = parseFloat(document.getElementById('gl-modal-avg').value)||0; try { const r = await fetch('/api/goals',{method:'POST',headers:{'Authorization':'Bearer '+token,'Content-Type':'application/json'},body:JSON.stringify({store,month,goal_deliveries:del_,goal_total_gross:gross,goal_avg_gross:avg})}); const d = await r.json(); if(d.success){ closeGlModal(); glData=null; loadGlData(); } else alert('Error: '+(d.error||'Unknown')); } catch(e){ alert('Network error'); } } // ── MARKET INTELLIGENCE ── // miData declared below let miView = 'overview'; let miSortCol = 'price'; let miSortAsc = true; // Landmark avg prices by model (from our inventory data — updated dynamically) const LANDMARK_MODELS = { 'F-150': { make:'Ford', avgPrice:52000, count:0 }, 'Bronco': { make:'Ford', avgPrice:48000, count:0 }, 'Explorer': { make:'Ford', avgPrice:42000, count:0 }, 'Escape': { make:'Ford', avgPrice:30000, count:0 }, 'Edge': { make:'Ford', avgPrice:34000, count:0 }, 'Escalade': { make:'Cadillac', avgPrice:88000, count:0 }, 'XT5': { make:'Cadillac', avgPrice:48000, count:0 }, 'Wrangler': { make:'Jeep', avgPrice:44000, count:0 }, 'Grand Cherokee': { make:'Jeep', avgPrice:48000, count:0 }, 'Silverado 1500': { make:'Chevrolet', avgPrice:50000, count:0 }, 'Ram 1500': { make:'Ram', avgPrice:50000, count:0 }, 'Pacifica': { make:'Chrysler', avgPrice:38000, count:0 }, 'Durango': { make:'Dodge', avgPrice:44000, count:0 }, }; function openMiDashboard(){ document.getElementById('mi-dashboard').classList.add('active'); loadMiData(false); loadMiDealers(); } function closeMiDashboard(){ document.getElementById('mi-dashboard').classList.remove('active'); } document.addEventListener('keydown',function(e){ if(e.key==='Escape'&&document.getElementById('mi-dashboard').classList.contains('active')) closeMiDashboard(); }); let miData=null,miDealerData=null,miCurrentView='overview',miBeatAnalysis=null; function miSetView(v){ miCurrentView=v; ['overview','listings','competitors','beat'].forEach(t=>{ const tab=document.getElementById('mi-tab-'+t); const view=document.getElementById('mi-'+t+'-view'); if(tab) tab.classList.toggle('active',t===v); if(view) view.style.display=t===v?'block':'none'; }); if(v==='competitors'&&!miDealerData) loadMiDealers(); if(v==='beat'&&!miBeatAnalysis) loadMiBeatAnalysis(); } async function loadMiData(force){ const dot=document.getElementById('mi-dot'); const statusEl=document.getElementById('mi-status-text'); dot.className='mi-dot loading'; statusEl.textContent='Scanning Marketcheck — 100mi radius from 62701...'; try { const res=await fetch('/api/market-scan'+(force?'?force=1':''),{headers:{'Authorization':'Bearer '+(window.token||token||localStorage.getItem('landmark_token')||'')}}); const d=await res.json(); if(d.error) throw new Error(d.error); miData=d; const total=d.results?d.results.reduce((s,r)=>s+(r.total||0),0):0; const age=d.cachedAt?Math.round((Date.now()-new Date(d.cachedAt))/60000):0; dot.className='mi-dot'; statusEl.textContent=d.cached ?`Cached ${age}min ago · ${total.toLocaleString()} competitor listings across 12 models · Click Refresh to update` :`Live scan · ${total.toLocaleString()} listings within 100mi · ${new Date(d.scannedAt).toLocaleTimeString()}`; miRender(); } catch(e){dot.className='mi-dot stale';statusEl.textContent='Error: '+e.message;} } async function loadMiDealers(){ const el=document.getElementById('mi-competitors-view'); if(!el) return; el.innerHTML='
Loading all dealers within 100 miles...
'; try { const res=await fetch('/api/market-dealers',{headers:{'Authorization':'Bearer '+(window.token||token||localStorage.getItem('landmark_token')||'')}}); const d=await res.json(); if(d.error) throw new Error(d.error); miDealerData=d; renderMiCompetitors(d); } catch(e){el.innerHTML='
Error: '+e.message+'
';} } function renderMiCompetitors(d){ const el=document.getElementById('mi-competitors-view'); if(!el) return; const comps=d.competitors||[]; const landmark=d.landmark||[]; const lmTotal=landmark.reduce((s,l)=>s+(l.listing_count||0),0); const local=comps.filter(c=>c.distance<=15); let h=`
${comps.length}
Competitor Dealers
${local.length}
Local (within 15mi)
${lmTotal.toLocaleString()}
Landmark Total Listings
🏪 All Competitors Within 100 Miles (sorted by inventory)
`; comps.slice(0,50).forEach((c,i)=>{ const bg=i%2===0?'#fff':'#f8f9fb'; const threat=c.listing_count>500?'🔴':c.listing_count>200?'🟡':'🟢'; const url=c.inventory_url?'https://'+c.inventory_url.replace(/^https?:\/\//,''):'#'; h+=``; }); h+='
# Dealer City Type Distance Listings Site
${i+1} ${threat} ${c.seller_name||''} ${c.city||''}, ${c.state||''} ${c.dealer_type||''} ${(c.distance||0).toFixed(1)}mi ${(c.listing_count||0).toLocaleString()} ${c.inventory_url?'View →':''}
'; el.innerHTML=h; } async function loadMiBeatAnalysis(){ const el=document.getElementById('mi-beat-view'); if(!el) return; el.innerHTML='
🧠
Louie is analyzing your competitive position...
'; const topComps=(miDealerData?.competitors||[]).slice(0,10).map(c=>`${c.seller_name} (${c.city}, ${(c.distance||0).toFixed(1)}mi, ${c.listing_count} listings)`).join('; '); const modelSummary=(miData?.results||[]).map(r=>`${r.label}: ${r.total} competitor listings`).join(', '); const prompt=`You are a competitive strategy expert for Landmark Auto Group, a 5-store dealership group in Springfield IL (Ford, Chrysler, Trucks, Cadillac, Taylorville store). Competitor data 100-mile radius ZIP 62701: TOP COMPETITORS: ${topComps||'Green Family Stores (1741 listings, 2.5mi), Friendly Chevrolet (353, 5.3mi), Isringhausen Imports (265, 0.3mi), S&K Buick GMC (169, 2.5mi)'} MARKET INVENTORY: ${modelSummary||'Ford F-150: 2708 listings, Explorer: 1200+, Jeep Wrangler: 800+, Cadillac: 400+'} LANDMARK STRENGTHS: Multi-brand (Ford+Chrysler+Cadillac+Trucks), 5 stores, established Springfield presence, strong F&I, full service departments Provide specific actionable competitive strategy with these sections: ## 🎯 Biggest Threats ## 💪 Landmark Advantages ## ⚡ Immediate Actions (This Week) ## 📈 30-Day Strategy ## 🏆 How to Dominate Springfield Be specific, direct, data-driven. No fluff.`; try { const res=await fetch('/api/chat',{method:'POST',headers:{'Content-Type':'application/json','Authorization':'Bearer '+token},body:JSON.stringify({conversationId:null,fileIds:[],message:prompt})}); const d=await res.json(); miBeatAnalysis=d.response||''; if(d.conversationId) fetch('/api/conversations/'+d.conversationId,{method:'DELETE',headers:{'Authorization':'Bearer '+token}}).catch(()=>{}); const formatted=miBeatAnalysis.replace(/^## (.*)$/gm,'

$1

').replace(/\*\*(.*?)\*\*/g,'$1').replace(/^- /gm,'• ').replace(/\n/g,'
'); el.innerHTML=`
🧠
Louie's Competitive Intelligence Report
Generated ${new Date().toLocaleString()} · Live Marketcheck data
${formatted}
`; } catch(e){el.innerHTML='
Error: '+e.message+'
';} } function miRefresh(){ loadMiData(true); } function miGetFilteredListings(){ if(!miData||!miData.results) return []; const makeFilter = document.getElementById('mi-make-filter').value; const typeFilter = document.getElementById('mi-type-filter').value; const maxPrice = parseFloat(document.getElementById('mi-max-price').value)||Infinity; const maxDist = parseFloat(document.getElementById('mi-max-dist').value)||Infinity; let all = []; miData.results.forEach(r=>{ (r.listings||[]).forEach(l=>{ l._modelLabel = r.label; all.push(l); }); }); return all.filter(l=>{ if(makeFilter && !l._modelLabel.includes(makeFilter)) return false; if(typeFilter && l.listingType !== typeFilter) return false; if(l.price > maxPrice) return false; if(l.distance > maxDist) return false; return true; }); } function miRender(){ if(miView==='overview') renderMiOverview(); else renderMiListings(); } function renderMiOverview(){ if(!miData||!miData.results){ return; } const typeFilter = document.getElementById('mi-type-filter').value; const makeFilter = document.getElementById('mi-make-filter').value; let html=''; miData.results.forEach(r=>{ if(makeFilter && !r.label.includes(makeFilter)) return; const listings = (r.listings||[]).filter(l=>!typeFilter||l.listingType===typeFilter); if(!listings.length && r.total === 0) return; const prices = listings.map(l=>l.price).filter(p=>p>0); const mktAvgPrice = prices.length ? Math.round(prices.reduce((a,b)=>a+b,0)/prices.length) : 0; const mktMinPrice = prices.length ? Math.min(...prices) : 0; const days = listings.map(l=>l.daysOnSite).filter(d=>d>0); const mktAvgDays = days.length ? Math.round(days.reduce((a,b)=>a+b,0)/days.length) : 0; // Landmark avg for this model (rough match) const modelKey = Object.keys(LANDMARK_MODELS).find(k=>r.label.includes(k)); const lmAvgPrice = modelKey ? LANDMARK_MODELS[modelKey].avgPrice : 0; const priceDiff = lmAvgPrice && mktAvgPrice ? Math.round(((lmAvgPrice - mktAvgPrice)/mktAvgPrice)*100) : null; // Price badge let badge = ''; if(priceDiff !== null){ if(priceDiff < -5) badge = 'We\'re '+Math.abs(priceDiff)+'% below mkt'; else if(priceDiff > 5) badge = 'We\'re '+priceDiff+'% above mkt ⚠️'; else badge = 'In line with market'; } // Bar widths (normalize to 100) const maxP = Math.max(lmAvgPrice||0, mktAvgPrice||0, 1); const lmBarW = lmAvgPrice ? Math.round(lmAvgPrice/maxP*100) : 0; const mktBarW = mktAvgPrice ? Math.round(mktAvgPrice/maxP*100) : 0; const $ = n => n ? '$'+Math.round(n).toLocaleString() : 'N/A'; html += `
${r.label}
${badge} ${listings.length} listings / ${r.total} total
Avg Price
${lmAvgPrice ? `
${$(lmAvgPrice)} Landmark
` : ''}
${$(mktAvgPrice)} Market Avg
Min Price
${$(mktMinPrice)}
Avg Days Listed
${mktAvgDays}d
In Market
${r.total}
`; }); document.getElementById('mi-overview-grid').innerHTML = html || '
No data for selected filters
'; } function miSortListings(col){ if(miSortCol===col) miSortAsc=!miSortAsc; else { miSortCol=col; miSortAsc=true; } renderMiListings(); } function renderMiListings(){ if(!miData) return; const listings = miGetFilteredListings(); listings.sort((a,b)=>{ let av=a[miSortCol]||0, bv=b[miSortCol]||0; if(typeof av==='string') return miSortAsc?av.localeCompare(bv):bv.localeCompare(av); return miSortAsc?av-bv:bv-av; }); if(!listings.length){ document.getElementById('mi-listings-tbody').innerHTML='No listings match filters'; return; } // Compute market avg price per model for comparison const modelAvgs={}; miData.results.forEach(r=>{ const ps=(r.listings||[]).map(l=>l.price).filter(p=>p>0); if(ps.length) modelAvgs[r.label]=Math.round(ps.reduce((a,b)=>a+b,0)/ps.length); }); const rows = listings.map(l=>{ const mktAvg = modelAvgs[l._modelLabel]||0; const lmAvg = LANDMARK_MODELS[Object.keys(LANDMARK_MODELS).find(k=>l._modelLabel.includes(k))||'']?.avgPrice||0; const diff = lmAvg && l.price ? Math.round(((l.price-lmAvg)/lmAvg)*100) : null; const diffHtml = diff===null?'—': diff>5?`+${diff}% vs us`: diff<-5?`${diff}% vs us`: `~same as us`; const miles = l.mileage ? l.mileage.toLocaleString()+' mi' : '—'; const typeClass = l.listingType==='NEW'?'NEW':l.listingType==='CERTIFIED'?'CERTIFIED':'USED'; return ` ${l.title||l.dealer} ${l.listingType} $${l.price.toLocaleString()} ${miles} ${l.daysOnSite}d ${l.dealer} ${Math.round(l.distance)}mi ${diffHtml} `; }).join(''); document.getElementById('mi-listings-tbody').innerHTML = rows; }

🏆 Market Intelligence

December 2025

Upload Cross-Sell Report

Drop the monthly Cross-Sell ZIP file from cross-sell.com to update the dashboard with new market data.

📄
Click to select or drag & drop
Accepts .zip (full package) or individual .pdf files

🔁 Missed Trades

Total Missed
Trade appraisals lost
Avg Gap (Ford)
List vs. our appraisal
Biggest Loser
Most trades lost
Top Competitor
Who beat us most
Store Competitor Vehicle Miles Appraiser Their List Our Appraisal Gap Source
Loading...

🎯 Goal Tracker

Feb 2026
Group Deliveries
vs goal
Group Total Gross
vs goal
Group Avg/Deal
vs goal
Stores On Track
of 5 stores hitting goals
Loading...

Set Goals

Monthly targets for this store

📡 Market Intelligence

100mi · ZIP 62701
Loading live market data from Marketcheck (100-mile radius)...
Scanning AutoTrader...

📋 Wholesale & F&I Reports

Loading...