Always scanning

Find the deal before it finds a VC

Meridian monitors blockchain ecosystems around the clock. On-chain activity, developer commits, social signals, token deployments. It surfaces early-stage projects and delivers investment-ready deal memos.

Try Free Demo → Generate a Memo
Deal Memo Engine
  • Identifying project and chain (EVM/TON)...
  • Fetching on-chain + developer data...
  • Pulling DeFiLlama protocol metrics...
  • Generating AI deal memo...

Live Deal Intelligence

Recent Deal Memos

Live
5+
Chains monitored continuously
24/7
Autonomous deal scouting
<48h
Signal to deal memo

Crypto deal sourcing is still analog

$19.7 billion in crypto VC last year. Early-stage deal count is falling. The best projects get funded through referrals and conference hallways. VCs are spending more to find fewer quality deals at pre-seed and seed, where on-chain signal matters most.

Analytics tools show data. Meridian finds deals.

Current workflow
  • Scroll crypto Twitter for 3 hours daily
  • Attend 12 conferences a year for deal access
  • Manually review 200+ pitches per quarter
  • Run due diligence across 6 different tools
  • Miss early signals because you were sleeping
vs
With Meridian
  • AI monitors every chain while you sleep
  • Projects surfaced weeks before they pitch VCs
  • Automated due diligence on every candidate
  • One platform: signal, analysis, and memo
  • Your inbox has the deals. Monday morning.
Why Meridian

Built for deal sourcing.
Not data exploration.

The tools VCs already use are powerful — but none of them proactively find deals or write memos. Meridian does both, autonomously.

Meridian surfaces deals 2–3 weeks before they hit analyst coverage — when valuations are still founder-friendly.
Meridian Nansen Messari Dune Affinity
Autonomous Deal Discovery
AI-Generated Deal Memos
On-Chain Traction Signals Partial Manual
Multi-Chain incl. TON
No SQL Required
Pricing

Simple, transparent pricing

Pay for intelligence, not seat licenses. Early access pricing locked in for life.

Scout
$499/mo
For emerging managers and solo GPs building deal flow from scratch.
  • 5 AI deal memos per week
  • 3 chains monitored (EVM + TON)
  • Weekly email digest (Mondays)
  • On-chain signal scoring
  • GitHub developer tracking
Enterprise
Custom
For multi-fund platforms, family offices, and funds with white-label needs.
  • Everything in Fund, plus:
  • White-label deal memos
  • Custom chain integrations
  • Dedicated analyst support
  • SLA guarantees
  • On-prem deployment option

We're in private beta. Pricing is indicative — early access partners help shape the final tiers.

The best deals don't come to you. You find them first.

Meridian is building the intelligence layer crypto VCs have been missing. Not another dashboard. Not another analytics tool. An autonomous analyst that never stops looking.

Try It Free →
Private Beta — Limited Spots

Get Early Access to Meridian.

Join funds already on the waitlist. We're onboarding teams by thesis fit. No dashboards, no hype — just deal flow that arrives before it's obvious.

in memo input). return str .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function renderMarkdown(md) { // Step 1: Sanitize — escape all raw HTML to prevent XSS stored attacks // Step 2: Apply safe markdown-to-HTML conversions let html = escapeRawHtml(md) .replace(/^### (.+)$/gm, '

$1

') .replace(/^## (.+)$/gm, '

$1

') .replace(/^# (.+)$/gm, '

$1

') .replace(/\*\*(.+?)\*\*/g, '$1') .replace(/\*(.+?)\*/g, '$1') .replace(/`(.+?)`/g, '$1') .replace(/^- (.+)$/gm, '
  • $1
  • ') .replace(/(
  • .*<\/li>\n?)+/g, '') .replace(/\n\n/g, '

    ') .replace(/\n/g, '
    '); // Wrap in paragraph if needed if (!html.startsWith('<')) html = '

    ' + html + '

    '; return html; } function getScoreClass(score) { if (score >= 7) return 'high'; if (score >= 4) return 'mid'; return 'low'; } async function generateMemo() { const input = document.getElementById('memo-input').value.trim(); if (!input) { document.getElementById('memo-input').focus(); return; } if (input.length > 200) { showError('Input too long. Please enter a project name or address under 200 characters.'); return; } const btn = document.getElementById('memo-generate'); btn.disabled = true; btn.textContent = 'Generating...'; hideError(); document.getElementById('memo-result').className = 'memo-result'; showLoading(true); try { const res = await fetch(API_BASE, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ identifier: input }), }); const data = await res.json(); showLoading(false); if (!data.success) { showError(data.error || 'Failed to generate memo'); return; } const memo = data.memo; // Show result document.getElementById('result-name').textContent = memo.projectName; document.getElementById('result-chain').textContent = memo.chain || 'multi-chain'; document.getElementById('result-chain').style.display = memo.chain ? 'inline' : 'none'; const scoreBadge = document.getElementById('result-score'); scoreBadge.textContent = memo.signalScore + '/10'; scoreBadge.className = 'memo-score-badge ' + getScoreClass(memo.signalScore); document.getElementById('result-markdown').innerHTML = renderMarkdown(memo.markdown); document.getElementById('memo-result').className = 'memo-result active'; // Reload recent memos loadRecentMemos(); } catch (err) { showLoading(false); showError('Network error. Please try again.'); console.error(err); } finally { btn.disabled = false; btn.textContent = 'Generate Memo'; } } async function loadRecentMemos() { await loadShowcaseMemos(); } let _showcaseSeeded = false; let _showcasePollTimer = null; async function loadShowcaseMemos() { const grid = document.getElementById('recent-memos-grid'); try { const res = await fetch(API_BASE + '/showcase?limit=6'); const data = await res.json(); if (!data.success) { // Keep skeletons visible on error — don't hide the section return; } const memos = data.memos || []; if (memos.length > 0) { // Render real memo cards with TL;DR grid.innerHTML = memos.map(m => { const scoreClass = getScoreClass(m.signalScore); const date = new Date(m.createdAt).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); const tldr = m.tldr ? `
    ${escapeHtml(m.tldr)}
    ` : ''; return `
    ${escapeHtml(m.projectName || m.projectIdentifier)} ${m.signalScore}/10
    ${tldr}
    ${m.chain ? '' + escapeHtml(m.chain) + '' : ''} ${date}
    `; }).join(''); } // If fewer than 3 memos exist, trigger background seeding (once per session) if (memos.length < 3 && !_showcaseSeeded) { _showcaseSeeded = true; seedShowcaseMemos(memos.length); } } catch (err) { console.error('Failed to load showcase memos:', err); // Keep skeleton cards visible on network error } } async function seedShowcaseMemos(existingCount) { try { const res = await fetch(API_BASE + '/seed-showcase', { method: 'POST' }); const data = await res.json(); if (data.generating && data.generating.length > 0) { // Show generating placeholder cards for missing projects const grid = document.getElementById('recent-memos-grid'); const placeholders = data.generating.map(name => `
    Generating memo for ${escapeHtml(name)}...
    ` ).join(''); // Append placeholders if fewer than 3 real cards if (existingCount < 3) { const existingCards = grid.querySelectorAll('.recent-memo-card:not(.skeleton-card)'); if (existingCards.length < 3) { const skeletons = grid.querySelectorAll('.skeleton-card'); skeletons.forEach(s => s.remove()); grid.insertAdjacentHTML('beforeend', placeholders); } } // Poll for new memos after generation completes (check every 20s, up to 4x) let pollCount = 0; const maxPolls = 4; _showcasePollTimer = setInterval(async () => { pollCount++; await loadShowcaseMemos(); if (pollCount >= maxPolls) { clearInterval(_showcasePollTimer); } }, 20000); } } catch (err) { console.error('Failed to seed showcase memos:', err); } } async function loadMemo(id) { try { const res = await fetch(API_BASE + '/' + id); const data = await res.json(); if (!data.success) return; const memo = data.memo; document.getElementById('result-name').textContent = memo.projectName; document.getElementById('result-chain').textContent = memo.chain || ''; document.getElementById('result-chain').style.display = memo.chain ? 'inline' : 'none'; const scoreBadge = document.getElementById('result-score'); scoreBadge.textContent = memo.signalScore + '/10'; scoreBadge.className = 'memo-score-badge ' + getScoreClass(memo.signalScore); document.getElementById('result-markdown').innerHTML = renderMarkdown(memo.markdown); document.getElementById('memo-result').className = 'memo-result active'; // Scroll to result document.getElementById('try-it').scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch (err) { console.error('Failed to load memo:', err); } } function escapeHtml(str) { const div = document.createElement('div'); div.textContent = str; return div.innerHTML; } // ===== Email Digest Subscribe ===== async function subscribeToDigest() { const emailInput = document.getElementById('subscribe-email'); const btn = document.getElementById('subscribe-btn'); const msg = document.getElementById('subscribe-msg'); const email = emailInput.value.trim(); if (!email) { emailInput.focus(); return; } btn.disabled = true; btn.textContent = 'Subscribing...'; msg.className = 'digest-signup-msg'; msg.textContent = ''; try { const utmSource = _utm.campaign ? `${_utm.medium || _utm.source || 'email'}:${_utm.campaign}` : (_utm.source || 'landing_page'); const res = await fetch('/api/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, source: utmSource, utm_source: _utm.source, utm_medium: _utm.medium, utm_campaign: _utm.campaign, }), }); const data = await res.json(); if (data.success) { msg.className = 'digest-signup-msg success'; msg.textContent = '✓ ' + data.message; emailInput.value = ''; btn.textContent = 'Subscribed ✓'; } else { msg.className = 'digest-signup-msg error'; msg.textContent = data.error || 'Something went wrong. Try again.'; btn.disabled = false; btn.textContent = 'Get Deal Memos'; } } catch (err) { msg.className = 'digest-signup-msg error'; msg.textContent = 'Network error. Please try again.'; btn.disabled = false; btn.textContent = 'Get Deal Memos'; } } // Enter key on subscribe input document.getElementById('subscribe-email').addEventListener('keydown', function(e) { if (e.key === 'Enter') subscribeToDigest(); }); // Enter key triggers generation document.getElementById('memo-input').addEventListener('keydown', function(e) { if (e.key === 'Enter') generateMemo(); }); // Load recent memos on page load loadRecentMemos();