Sponsor Track Record Auditor

Vet a sponsor before you commit capital. Enter their details and get an AI-generated trust score with targeted due diligence.

Sponsor Information
Analyzing sponsor profile — cross-referencing signals...
Demo mode — results are illustrative and do not reflect a real sponsor analysis.
--
Trust

Sponsor

Summary will appear here.

Pending
Verification Dimensions
What We Found
    What to Verify Yourself
      ${d.name}
      ${pct}
      ${d.note || ''}
      `; }).join(''); // Positive signals document.getElementById('positiveSignals').innerHTML = (data.positiveSignals || []).map(s => `
    • ${s}
    • ` ).join(''); // Verify yourself document.getElementById('verifyList').innerHTML = (data.verifyYourself || []).map(s => `
    • ${s}
    • ` ).join(''); // Questions document.getElementById('questionsList').innerHTML = (data.questionsToAsk || []).map((q, i) => `
    • ${i+1}
      ${q}
    • ` ).join(''); document.getElementById('demoBanner').classList.toggle('visible', !!isDemo); document.getElementById('results').classList.add('visible'); document.getElementById('results').scrollIntoView({ behavior: 'smooth', block: 'start' }); } function getFormData() { const assetClasses = [...document.querySelectorAll('.checkbox-item input:checked')].map(c => c.value); return { name: document.getElementById('sponsorName').value.trim(), website: document.getElementById('websiteUrl').value.trim(), linkedin: document.getElementById('linkedinUrl').value.trim(), state: document.getElementById('stateOp').value.trim(), dealCount: parseInt(document.getElementById('dealCount').value) || 0, yearsActive: parseInt(document.getElementById('yearsActive').value) || 0, assetClasses }; } function loadDemo() { document.getElementById('sponsorName').value = 'Apex Capital Group'; document.getElementById('websiteUrl').value = 'https://apexcapitalgroup.com'; document.getElementById('linkedinUrl').value = 'https://linkedin.com/in/johnapex'; document.getElementById('stateOp').value = 'Texas'; document.getElementById('dealCount').value = '12'; document.getElementById('yearsActive').value = '8'; document.querySelectorAll('.checkbox-item input').forEach(cb => { cb.checked = ['multifamily', 'industrial'].includes(cb.value); }); document.getElementById('errorMsg').classList.remove('visible'); renderResults(DEMO_DATA, true, 'Apex Capital Group'); } async function runAudit() { const data = getFormData(); if (!data.name) { showError('Please enter a sponsor name.'); return; } document.getElementById('errorMsg').classList.remove('visible'); document.getElementById('results').classList.remove('visible'); document.getElementById('loading').classList.add('visible'); document.getElementById('auditBtn').disabled = true; try { const res = await fetch('/api/audit-sponsor', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (!res.ok) { const err = await res.json().catch(() => ({ error: 'Unknown error' })); throw new Error(err.error || `HTTP ${res.status}`); } const result = await res.json(); renderResults(result, false, data.name); } catch (err) { if (err.message.includes('fetch') || err.message.includes('Failed') || err.message.includes('NetworkError')) { showError('Cannot reach the backend. Showing demo results instead.'); renderResults(DEMO_DATA, true, data.name || 'Demo Sponsor'); } else { showError('Audit failed: ' + err.message); } } finally { document.getElementById('loading').classList.remove('visible'); document.getElementById('auditBtn').disabled = false; } } function showError(msg) { const el = document.getElementById('errorMsg'); el.textContent = msg; el.classList.add('visible'); }