Why Route GitHub Signals to Vero
Vero is a behavioral email platform built for product and engineering teams that need event-driven campaigns — emails triggered by what users do, not arbitrary time delays. When a developer stars your GitHub repo or mentions your product keyword in a GitHub issue, that is a behavioral event. Routing those events into Vero lets you trigger targeted email sequences the moment intent is captured, without waiting for a sales rep to manually queue the lead. The result: developer-specific campaigns that feel timely rather than cold.
Architecture: GitLeads → Webhook → Vero
GitLeads monitors your tracked GitHub repos and keywords in real time. When a signal fires — new stargazer or keyword match — GitLeads enriches the lead (name, email, company, GitHub profile, bio, top languages, follower count) and pushes it via webhook. Your webhook endpoint receives the payload and calls the Vero API to create or update the user and fire a Vero event. Vero's campaign engine then takes over, sending the right email sequence based on the signal type and lead attributes.
// Webhook handler: GitLeads → Vero
import type { NextRequest } from 'next/server';
const VERO_AUTH_TOKEN = process.env.VERO_AUTH_TOKEN!;
const VERO_API = 'https://api.getvero.com/api/v2';
interface GitLeadsWebhookPayload {
signal_type: 'stargazer' | 'keyword';
github_username: string;
name?: string;
email?: string;
company?: string;
bio?: string;
location?: string;
followers: number;
top_languages: string[];
signal_context: string;
repo?: string;
keyword?: string;
captured_at: string;
}
export async function POST(req: NextRequest) {
const lead: GitLeadsWebhookPayload = await req.json();
if (!lead.email) {
return new Response('No email — skipping Vero', { status: 200 });
}
// Create or update user in Vero
await fetch(`${VERO_API}/users/track`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
auth_token: VERO_AUTH_TOKEN,
id: lead.email,
email: lead.email,
data: {
name: lead.name ?? lead.github_username,
github_username: lead.github_username,
company: lead.company ?? '',
top_languages: lead.top_languages.join(', '),
followers: lead.followers,
location: lead.location ?? '',
bio: lead.bio ?? '',
},
}),
});
// Fire Vero event based on signal type
const eventName = lead.signal_type === 'stargazer'
? 'github_starred_repo'
: 'github_keyword_mention';
await fetch(`${VERO_API}/events/track`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
auth_token: VERO_AUTH_TOKEN,
identity: { id: lead.email, email: lead.email },
event_name: eventName,
data: {
signal_context: lead.signal_context,
repo: lead.repo ?? '',
keyword: lead.keyword ?? '',
captured_at: lead.captured_at,
},
}),
});
return new Response('OK', { status: 200 });
}Vero Campaign Strategy for GitHub Signals
- Stargazer trigger: send a "thanks for the star" welcome email within minutes, then a 3-email sequence over 7 days covering docs, use cases, and a lightweight CTA
- Keyword signal trigger: send a context-aware email referencing the engineer's specific problem (e.g., "saw you're evaluating X — here's how we compare") — no mass marketing feel
- High-follower segment: branch on followers > 500 in Vero campaigns to send a "community" variant with a more personal tone from the founder or DevRel lead
- Language-based personalization: use the top_languages attribute in Vero to customize code examples — Python snippet for Python developers, TypeScript for TypeScript developers
- Suppression: filter out competitors and free-tier-only signals using Vero's segment conditions on company and lead score attributes
Alternative: Zapier or n8n to Vero
If you prefer no-code routing, GitLeads also supports Zapier and n8n as integration targets. In Zapier, set GitLeads as the trigger, then use Vero's Zapier app to fire "Track a User" and "Track an Event" actions. In n8n, use the HTTP Request node to call Vero's API directly. Either approach gives you the same behavioral email capability without writing the webhook handler manually.