Marketo is the enterprise marketing automation standard. But its lead sources are typically web forms and ad clicks — not GitHub activity. GitLeads fills that gap by capturing developer buying signals from GitHub and pushing them into Marketo as enriched contacts, ready for nurture campaigns and lead scoring.
What GitLeads Sends to Marketo
- GitHub username, name, email (if public), company, and location
- Signal context: which repo they starred or which keyword triggered the capture
- Developer profile data: top languages, follower count, public repos
- Signal type and timestamp for accurate lead scoring
Integration Architecture
GitLeads connects to Marketo via webhook or Zapier. For direct integration, use the Marketo REST API to upsert contacts when a GitHub signal fires.
// Webhook handler: push GitHub signal to Marketo Leads API
import type { NextApiRequest, NextApiResponse } from 'next';
interface GitLeadsPayload {
signal_type: 'stargazer' | 'keyword';
github_username: string;
name: string;
email?: string;
company?: string;
location?: string;
followers: number;
top_languages: string[];
signal_context: string;
captured_at: string;
}
async function upsertMarketoLead(lead: GitLeadsPayload) {
// Step 1: Get Marketo access token
const tokenRes = await fetch(
`${process.env.MARKETO_BASE_URL}/identity/oauth/token` +
`?grant_type=client_credentials` +
`&client_id=${process.env.MARKETO_CLIENT_ID}` +
`&client_secret=${process.env.MARKETO_CLIENT_SECRET}`
);
const { access_token } = await tokenRes.json();
// Step 2: Upsert lead with GitHub enrichment
const body = {
action: 'createOrUpdate',
lookupField: 'email',
input: [
{
email: lead.email ?? `${lead.github_username}@github.noreply`,
firstName: lead.name?.split(' ')[0] ?? lead.github_username,
lastName: lead.name?.split(' ').slice(1).join(' ') ?? '',
company: lead.company ?? '',
city: lead.location ?? '',
// Custom Marketo fields (create these in Marketo Admin → Field Management)
gitHubUsername: lead.github_username,
gitHubSignalType: lead.signal_type,
gitHubSignalContext: lead.signal_context,
gitHubFollowers: lead.followers,
gitHubTopLanguages: lead.top_languages.join(', '),
gitHubSignalDate: lead.captured_at,
},
],
};
const res = await fetch(
`${process.env.MARKETO_BASE_URL}/rest/v1/leads.json`,
{
method: 'POST',
headers: {
Authorization: `Bearer ${access_token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
}
);
return res.json();
}
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== 'POST') return res.status(405).end();
const lead = req.body as GitLeadsPayload;
const result = await upsertMarketoLead(lead);
res.json(result);
}Setting Up Custom Fields in Marketo
Before syncing GitHub signal data, create these custom fields in Marketo Admin → Field Management:
- gitHubUsername (String) — the developer's GitHub handle
- gitHubSignalType (String) — "stargazer" or "keyword"
- gitHubSignalContext (Text Area) — which repo or keyword triggered the signal
- gitHubFollowers (Integer) — audience size indicator for lead scoring
- gitHubTopLanguages (String) — comma-separated language list
- gitHubSignalDate (DateTime) — for time-based scoring decay
Lead Scoring with GitHub Signal Data
GitHub signals are high-intent indicators. Use Marketo Smart Campaign scoring rules to weight them appropriately:
- +25 points: starred your own repo — direct product interest
- +20 points: starred a competitor repo — in-market, evaluating alternatives
- +15 points: keyword mention in issue or PR — active problem-solving
- +10 points: 500+ GitHub followers — influencer and decision-maker signal
- +5 points: public email available — outreach-ready contact
Triggering Marketo Nurture Campaigns
Once the lead is in Marketo, use Smart Lists to trigger nurture streams based on signal type. A developer who starred a competitor repo gets a different sequence than one who mentioned a pain-point keyword in a GitHub issue. Filter by gitHubSignalType to route leads into the right program.
Using Zapier Instead of a Custom Webhook
If you prefer a no-code path, GitLeads supports Zapier integration. Configure a Zap: GitLeads webhook trigger → Marketo "Create/Update Lead" action. Map the GitLeads payload fields to your Marketo custom fields and you're live in minutes.