Mixmax is the sales engagement platform built directly into Gmail. If your team sends personalized outreach from Gmail rather than a standalone sequencer, Mixmax is where developer leads need to land. This guide covers how to take GitHub buying signals from GitLeads and route them into Mixmax sequences — so when a developer stars your repo or mentions a pain-point keyword in a GitHub issue, your team can send a targeted follow-up within minutes.
Why Context Makes Developer Outreach Work
Developers ignore generic cold email. The difference between a 0.5% reply rate and a 15% reply rate is context — knowing what the developer was doing when they became a lead. GitLeads provides that context: the exact repo they starred, the keyword they typed in a GitHub issue, the competitor they mentioned. When that context arrives in Mixmax with the lead's email address, your sequence step one can reference it directly.
Integration via Mixmax API
Mixmax exposes a REST API for managing contacts and enrolling them in sequences. A lightweight relay function transforms GitLeads webhook payloads into Mixmax API calls.
// GitLeads webhook → Mixmax sequence enrollment
interface GitLeadsLead {
github_username: string;
email?: string;
name?: string;
company?: string;
bio?: string;
signal_type: 'stargazer' | 'keyword';
signal_context: string;
repo?: string;
keyword?: string;
followers: number;
top_languages: string[];
profile_url: string;
}
const MIXMAX_API_KEY = process.env.MIXMAX_API_KEY!;
const SEQUENCE_MAP: Record<string, string> = {
stargazer_own_repo: 'seq_YOUR_STARGAZER_OWN_ID',
stargazer_competitor: 'seq_YOUR_COMPETITOR_WATCHER_ID',
keyword_pain_point: 'seq_YOUR_KEYWORD_INTENT_ID',
};
async function enrollInMixmax(lead: GitLeadsLead): Promise<void> {
if (!lead.email) {
console.log(`Skipping ${lead.github_username} — no public email`);
return;
}
const sequenceKey = lead.signal_type === 'stargazer'
? (lead.repo?.includes('competitor') ? 'stargazer_competitor' : 'stargazer_own_repo')
: 'keyword_pain_point';
// Create or update the contact in Mixmax
await fetch('https://api.mixmax.com/v1/contacts', {
method: 'POST',
headers: { 'X-API-Token': MIXMAX_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
email: lead.email,
name: lead.name ?? lead.github_username,
company: lead.company,
properties: {
github_username: lead.github_username,
github_url: lead.profile_url,
top_languages: lead.top_languages.join(', '),
signal_type: lead.signal_type,
signal_context: lead.signal_context.slice(0, 500),
...(lead.repo && { tracked_repo: lead.repo }),
...(lead.keyword && { matched_keyword: lead.keyword }),
},
}),
});
// Enroll in the target sequence
await fetch(
`https://api.mixmax.com/v1/sequences/${SEQUENCE_MAP[sequenceKey]}/recipients`,
{
method: 'POST',
headers: { 'X-API-Token': MIXMAX_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
email: lead.email,
variables: {
first_name: lead.name?.split(' ')[0] ?? lead.github_username,
github_username: lead.github_username,
company: lead.company ?? 'your team',
signal_summary:
lead.signal_type === 'stargazer'
? `starred ${lead.repo}`
: `mentioned "${lead.keyword}" in a GitHub issue`,
top_language: lead.top_languages[0] ?? 'code',
},
}),
}
);
}
export async function POST(request: Request): Promise<Response> {
const lead: GitLeadsLead = await request.json();
await enrollInMixmax(lead);
return new Response('ok', { status: 200 });
}Sequence Templates That Reference GitHub Context
The custom properties you push to Mixmax contacts become available as template variables. Example sequence for stargazers of your own repo:
- Step 1 (Day 0): "Hey {{first_name}}, saw you starred [your repo] — curious what drew you to it. Are you evaluating this for {{company}}?"
- Step 2 (Day 3): "Building in {{top_language}}? We have a native SDK — happy to share the docs."
- Step 3 (Day 7): "Want a 15-min walkthrough? No pitch, just a look at how it fits {{company}}'s stack."
Handling Leads Without Public Emails
Roughly 40-60% of GitHub profiles have no public email. For those leads, skip Mixmax enrollment and route them to Clay or Apollo for email enrichment first, then enroll in Mixmax once you have a verified address.
No-Code Path via Zapier
GitLeads has a native Zapier integration. Set up a Zap: GitLeads (New Lead) → Filter (email is present) → Mixmax (Enroll in Sequence). Map signal_context to a contact property so your sequence steps can reference the GitHub activity.
Setup Checklist
- Sign up at gitleads.app and connect your tracked repos and keywords
- Create Mixmax sequences with {{github_username}}, {{signal_summary}}, and {{top_language}} variables
- Note your sequence IDs from the Mixmax dashboard URL
- Deploy the webhook relay with your Mixmax API key and sequence ID mapping
- Paste the relay URL into GitLeads → Integrations → Webhook
- Send a test signal and confirm enrollment in Mixmax