Push GitHub Leads to Nutshell CRM Automatically

Route GitHub developer intent signals — new stargazers and keyword mentions — directly into Nutshell CRM as leads and contacts. Step-by-step GitLeads + Nutshell integration guide.

Published: May 10, 2026Updated: May 10, 20266 min read

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

  1. In GitLeads, add your tracked repos and keyword monitors
  2. Go to GitLeads → Settings → Integrations → Webhook
  3. Add your Nutshell webhook receiver endpoint (see code below)
  4. Deploy the webhook handler to receive GitLeads payloads and create Nutshell leads
  5. 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
GitLeads captures developer buying signals on GitHub and pushes enriched contacts directly into Nutshell CRM. No email sending — we find the leads, Nutshell handles your pipeline. Start free at [gitleads.app](https://gitleads.app). Related: [push GitHub leads to HubSpot](/blog/push-github-leads-to-hubspot), [push GitHub leads to Pipedrive](/blog/push-github-leads-to-pipedrive), [push GitHub leads to Apollo](/blog/push-github-leads-to-apollo).

Want more like this? Get the weekly developer lead playbook.

No spam. 5 emails over 2 weeks. Unsubscribe anytime.

Related Articles

How to Find Leads on GitHub: The Complete Guide (2026)
10 min read
GitHub Leads vs LinkedIn Leads: When to Use Which (2026)
9 min read
GDPR Compliance for GitHub Lead Scraping: What You Must Know
8 min read