Insider Trading Activity Analyzer

Insider Trading Activity Analyzer

Analyze recent insider buy/sell transactions for any given stock.

Export Analysis Report

Generate a professional PDF of the insider trading analysis for the selected stock.

${analysisResults.insiders}

`; const ctx = document.getElementById('activity-chart').getContext('2d'); if (activityChart) activityChart.destroy(); activityChart = new Chart(ctx, { type: 'bar', data: { labels: ['Buy Volume', 'Sell Volume'], datasets: [{ label: 'Shares Traded', data: [analysisResults.buyShares, analysisResults.sellShares], backgroundColor: ['#16a34a', '#dc2626'], }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } } } }); } function renderTradesTable() { document.getElementById('trades-title').textContent = `Recent Trades for ${currentTicker}`; const container = document.getElementById('trades-table-container'); if (analysisResults.trades.length === 0) { container.innerHTML = `

No insider trading data found for ${currentTicker}.

`; return; } const rows = analysisResults.trades.map(t => ` ${t.date} ${t.insider} (${t.relationship}) ${t.type} ${t.shares.toLocaleString()} $${t.value.toLocaleString()} `).join(''); container.innerHTML = `${rows}
DateInsiderTypeSharesValue
`; } // --- EVENT LISTENERS --- analyzeBtn.addEventListener('click', () => { const ticker = tickerInput.value.trim().toUpperCase(); if (ticker) { currentTicker = ticker; analyzeData(); switchTab(0); } }); // --- PDF GENERATION --- async function generatePdfReport() { downloadPdfBtn.disabled = true; downloadPdfBtn.textContent = 'Generating...'; const tableRows = analysisResults.trades.map(t => ` ${t.date}${t.insider} (${t.relationship}) ${t.type} ${t.shares.toLocaleString()} $${t.value.toLocaleString()} `).join(''); const reportHtml = `

INSIDER TRADING ACTIVITY REPORT

COMPANY: ${currentTicker} | REPORT DATE: ${new Date().toLocaleDateString()}

NET SHARES (3 MO)
${analysisResults.netShares.toLocaleString()}
TOTAL VALUE
$${(analysisResults.totalValue / 1_000_000).toFixed(2)}M
ACTIVE INSIDERS
${analysisResults.insiders}
RECENT TRANSACTIONS
${tableRows}
DateInsiderTypeSharesValue
`; const pdfTemplate = document.getElementById('pdf-template'); pdfTemplate.innerHTML = reportHtml; pdfTemplate.classList.remove('invisible'); setTimeout(async () => { try { const { jsPDF } = window.jspdf; const canvas = await html2canvas(pdfTemplate.querySelector('.pdf-report-container'), { scale: 2 }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(), pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save(`Insider_Trading_Report_${currentTicker}.pdf`); } catch (e) { console.error('PDF Generation Error:', e); } finally { downloadPdfBtn.disabled = false; downloadPdfBtn.textContent = 'Download PDF Report'; pdfTemplate.classList.add('invisible'); pdfTemplate.innerHTML = ''; } }, 500); } downloadPdfBtn.addEventListener('click', generatePdfReport); // --- INITIALIZATION --- analyzeData(); switchTab(0); });
Scroll to Top