Why Nutshell + GitHub Signals Is a Powerful Combination
Nutshell CRM is built for teams that want a fast, focused sales process without the enterprise bloat of Salesforce or HubSpot. If you are selling a developer tool, infrastructure product, or B2B SaaS to technical buyers, Nutshell gives you the pipeline visibility you need.
The missing piece: where do the leads come from? Most developer tool companies rely on demo requests or inbound content — both slow. GitLeads solves this by capturing real-time GitHub signals (new repo stars, keyword mentions in issues and PRs) and pushing enriched developer profiles directly into Nutshell CRM.
How GitLeads Feeds Nutshell CRM
GitLeads monitors GitHub for two signal types:
- Stargazer signals — when a developer stars your tracked repo or a competitor's repo
- Keyword signals — when a developer mentions your keywords ("observability", "api gateway", "vector database") in GitHub Issues, PRs, Discussions, or commit messages
Each signal generates an enriched lead record: name, email (if public), GitHub username, bio, company, location, followers, top languages, and signal context. GitLeads pushes this to Nutshell via webhook.
Integration Setup: GitLeads → Nutshell via Webhook
- In GitLeads, add your tracked repos and keyword monitors
- Go to GitLeads → Settings → Integrations → Webhook
- Add your Nutshell webhook receiver endpoint (see code below)
- Deploy the webhook handler to receive GitLeads payloads and create Nutshell leads
- Test with a star event on a tracked repo
// Nutshell CRM webhook handler for GitLeads signals
// Deploy to Vercel, Railway, or any Node.js environment
import express from 'express';
const app = express();
app.use(express.json());
const NUTSHELL_API_URL = 'https://app.nutshell.com/api/v1/json';
const NUTSHELL_USERNAME = process.env.NUTSHELL_USERNAME!; // your email
const NUTSHELL_API_KEY = process.env.NUTSHELL_API_KEY!;
const auth = Buffer.from(`${NUTSHELL_USERNAME}:${NUTSHELL_API_KEY}`).toString('base64');
async function nutshellRequest(method: string, params: object) {
const res = await fetch(NUTSHELL_API_URL, {
method: 'POST',
headers: {
'Authorization': `Basic ${auth}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
method,
params,
id: Date.now(),
}),
});
const data = await res.json();
return data.result;
}
app.post('/webhook/gitleads', async (req, res) => {
const { lead, signal_type, keyword, repo } = req.body;
// 1. Create or find contact
const contact = await nutshellRequest('newContact', {
contact: {
name: { displayName: lead.name || lead.github_username },
email: [{ address: lead.email }],
description: `GitHub: github.com/${lead.github_username}\n${lead.bio || ''}`,
customFields: {
'GitHub Username': lead.github_username,
'Followers': lead.followers,
'Company': lead.company || '',
'Location': lead.location || '',
'Top Languages': (lead.top_languages || []).join(', '),
},
},
});
// 2. Create a lead (opportunity) linked to the contact
const signalNote = signal_type === 'stargazer'
? `Starred ${repo} on GitHub`
: `Mentioned "${keyword}" in GitHub Issues/PRs`;
await nutshellRequest('newLead', {
lead: {
description: `GitHub Signal: ${signalNote}`,
contacts: [{ id: contact.id }],
tags: ['github-signal', signal_type, 'gitleads'],
confidence: signal_type === 'keyword' ? 60 : 40,
note: {
note: `Signal context: ${lead.signal_context || signalNote}`,
},
},
});
res.json({ ok: true });
});
app.listen(3000);Nutshell CRM Fields to Populate from GitHub Data
- Contact name — from GitHub display name or username
- Email — from public GitHub profile (when available)
- Description — GitHub profile URL, bio, company
- Custom fields — GitHub username, follower count, top languages, location
- Lead description — signal context (which repo starred, which keyword mentioned)
- Lead tags — "github-signal", signal type, GitLeads marker for CRM segmentation
- Confidence — higher for keyword signals (active pain point) vs stargazer (passive interest)
Alternative: Use Zapier or n8n for No-Code Setup
If you prefer no-code, GitLeads supports Zapier and n8n natively. Set GitLeads as the trigger and use Nutshell's Zapier integration to create contacts and leads without writing any code. The native Zapier integration handles authentication and field mapping automatically.
Signal Quality: What Makes a Good Nutshell Lead
- Keyword signals > stargazer signals — keyword mentioners have an active, named pain point
- Developers with 500+ followers — likely DevRel targets or early adopters worth direct outreach
- Developers at named companies — higher commercial value than solo indie developers
- Multiple signals from the same developer — escalate in Nutshell pipeline priority