Braze excels at lifecycle marketing — but only when fed with the right signals. For developer-focused products, those signals live on GitHub, not in your website analytics. When a developer stars your repo, mentions your product name in an issue, or forks your open-source library, that is a more meaningful engagement event than a page visit. This guide shows how to capture those GitHub signals with GitLeads and route them directly into Braze as custom events and user profiles.
Why GitHub Signals Belong in Braze
Braze is built around event-driven user journeys. A developer who just starred your repo is in a very different awareness stage than one who has been in your system for 60 days without activating. GitHub signals let you trigger Braze Canvas flows at the moment developer interest peaks — rather than relying on website cookies or trial sign-up dates.
- Stargazer event → "Awareness" Canvas: drip 3 emails over 7 days introducing your product to a developer who just starred your repo
- Keyword mention → "High intent" Canvas: route developers who mentioned your product in a GitHub issue to a fast-track demo sequence
- Competitor star → "Competitive" Canvas: reach developers evaluating your competition with a differentiation-focused sequence
- Fork signal → "Evaluator" Canvas: trigger a technical onboarding flow for developers actively testing your library
GitLeads → Braze Integration Architecture
GitLeads captures GitHub signals and enriches each lead with name, email (when public), GitHub username, bio, company, location, top languages, and signal context. It then forwards that data to your Braze instance via the Braze REST API. You can use the native Braze destination in GitLeads or route via a webhook to your own handler.
// GitLeads webhook → Braze integration (Next.js API route)
import { NextRequest, NextResponse } from 'next/server';
interface GitLeadsPayload {
signal_type: 'stargazer' | 'keyword';
github_username: string;
email?: string;
name?: string;
company?: string;
bio?: string;
top_languages: string[];
followers: number;
signal_context: string;
repo_name?: string;
keyword?: string;
}
export async function POST(req: NextRequest) {
const payload: GitLeadsPayload = await req.json();
const brazeUserId = `github_${payload.github_username}`;
await fetch(`${process.env.BRAZE_REST_ENDPOINT}/users/track`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.BRAZE_API_KEY}`,
},
body: JSON.stringify({
attributes: [
{
external_id: brazeUserId,
email: payload.email,
first_name: payload.name?.split(' ')[0],
github_username: payload.github_username,
company: payload.company,
github_bio: payload.bio,
github_followers: payload.followers,
top_languages: payload.top_languages,
lead_source: 'github_signal',
signal_type: payload.signal_type,
},
],
events: [
{
external_id: brazeUserId,
name:
payload.signal_type === 'stargazer'
? 'github_repo_starred'
: 'github_keyword_mention',
time: new Date().toISOString(),
properties: {
repo_name: payload.repo_name,
keyword: payload.keyword,
signal_context: payload.signal_context,
},
},
],
}),
});
return NextResponse.json({ ok: true });
}Setting Up the GitLeads Braze Destination
- In GitLeads dashboard, go to Integrations → Braze
- Enter your Braze REST endpoint (e.g. https://rest.iad-01.braze.com) and API key
- Map GitLeads fields to Braze user attributes: github_username → external_id, email → email, company → company
- Configure event names: stargazer signals → github_repo_starred, keyword signals → github_keyword_mention
- Enable the destination — leads start flowing within minutes of your next GitHub signal
Braze Canvas Flows for Developer GTM
Once GitHub signals flow into Braze as events, build Canvas flows triggered by those events. Effective Canvas flows for developer audiences are short, technically credible, and contain a single CTA per message. Avoid marketing language — developers respond to specifics, docs links, and honest product comparisons.
- Step 1 (immediate): Slack notification to your sales team with the lead's GitHub profile and signal context
- Step 2 (day 1): Email with a technical quickstart doc, not a demo request
- Step 3 (day 3): Email with a relevant case study matched to their top language
- Step 4 (day 7): Email with a free trial CTA and a direct calendar link to a 20-min technical call
- Exit condition: Any positive engagement (reply, click, sign-up) exits the nurture sequence
Custom Events vs. User Attributes for GitHub Signals
Use Braze custom events for the trigger (the specific GitHub activity) and user attributes for persistent profile data. The event fires once per signal; the attributes update with each enrichment. This lets you segment by both "developer who starred repo X" (event) and "developer whose primary language is Rust working at a 50-person startup" (attribute-based segment).