Push GitHub Leads to Salesloft: Add Developer Intent Signals to Your Cadences

Route GitHub stargazer and keyword signals directly into Salesloft cadences so your sales team acts on developer intent the moment it happens.

Published: May 5, 2026Updated: May 5, 20267 min read

Salesloft is built around cadences — structured outreach sequences that sales reps run to engage prospects. The problem for developer-tool companies is that traditional lead sources (form fills, website visitors) miss the bulk of developer buying signals. Developers signal intent on GitHub: starring repos, opening issues, comparing tools in pull request comments. GitLeads captures those signals and delivers them straight into Salesloft so your cadences fire at the right moment.

The Developer Buying Signal Gap in Salesloft

If you sell to developers, your Salesloft pipeline is probably thin at the top of funnel because developers do not fill out web forms. They evaluate tools by reading READMEs, starring repos, and asking questions in GitHub Discussions. None of that activity reaches your CRM unless you explicitly capture it. GitLeads is the bridge: it monitors GitHub for signals matching your tracked repos and keywords, enriches each signal with professional profile data, and delivers it to Salesloft as a new Person ready to be enrolled in a cadence.

Integration Architecture

GitLeads sends enriched lead data to a webhook endpoint you control. From there, you call the Salesloft REST API to create a Person and optionally enroll them in a cadence. Salesloft requires an API key (Settings > API > Create API Key) with `write:people` and `write:cadence_memberships` scopes.

// Route: POST /api/webhooks/gitleads-salesloft
import type { NextRequest } from 'next/server';

const SL_BASE = 'https://api.salesloft.com/v2';
const SL_KEY = process.env.SALESLOFT_API_KEY!;
const CADENCE_ID = process.env.SALESLOFT_CADENCE_ID!; // from Salesloft UI

interface GitLeadsLead {
  github_username: string;
  name: string | null;
  email: string | null;
  company: string | null;
  bio: string | null;
  location: string | null;
  followers: number;
  top_languages: string[];
  signal_type: 'stargazer' | 'keyword';
  signal_context: string;
  repo: string;
}

async function salesloftPost(path: string, body: object) {
  const res = await fetch(`${SL_BASE}${path}`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${SL_KEY}`,
    },
    body: JSON.stringify(body),
  });
  if (!res.ok) throw new Error(`Salesloft ${path} failed: ${res.status}`);
  return res.json();
}

export async function POST(req: NextRequest) {
  const lead: GitLeadsLead = await req.json();

  if (!lead.email) {
    // Salesloft requires an email; skip if not available
    return Response.json({ skipped: true, reason: 'no_email' });
  }

  // 1. Create the Person in Salesloft
  const { data: person } = await salesloftPost('/people', {
    email_address: lead.email,
    first_name: lead.name?.split(' ')[0] ?? lead.github_username,
    last_name: lead.name?.split(' ').slice(1).join(' ') ?? '',
    company_name: lead.company ?? '',
    title: lead.bio?.slice(0, 80) ?? '',
    city: lead.location ?? '',
    custom_fields: {
      github_username: lead.github_username,
      signal_type: lead.signal_type,
      signal_context: lead.signal_context.slice(0, 255),
      tracked_repo: lead.repo,
      top_languages: lead.top_languages.join(', '),
      followers: lead.followers,
    },
  });

  // 2. Enroll in cadence
  await salesloftPost('/cadence_memberships', {
    person_id: person.id,
    cadence_id: parseInt(CADENCE_ID),
  });

  return Response.json({ ok: true, salesloft_person_id: person.id });
}

Custom Fields in Salesloft

Before deploying, add custom fields in Salesloft Admin > Field Configuration > People: `github_username`, `signal_type`, `signal_context`, `tracked_repo`, `top_languages`, `followers`. These fields appear in the Person record and can be used as cadence filters — for example, enroll only into the "Competitor Stargazer" cadence when `signal_type = stargazer` and `tracked_repo` contains a competitor repo name.

Cadence Strategy for GitHub Signals

  • Stargazer cadence (3 steps, 7 days): Step 1 — personalized LinkedIn connection referencing the starred repo. Step 2 — email referencing their top language and use case. Step 3 — breakup email with direct trial link.
  • Keyword cadence (high-intent, 2 steps, 3 days): Step 1 — email that quotes the exact GitHub signal context ("Saw you mentioned X in the issue on Y repo"). Step 2 — direct meeting booking link.
  • Competitor stargazer cadence (4 steps, 14 days): Longer nurture that positions GitLeads against the competitor product the developer was evaluating.

No-Code Option via Zapier

GitLeads integrates with Zapier natively. Set your GitLeads destination to Zapier, then build a Zap: Trigger = Webhooks → Action 1 = Salesloft: Create Person → Action 2 = Salesloft: Add to Cadence. Map signal_context to a custom field and use a Zapier Filter step to skip leads without email addresses.

GitLeads monitors GitHub for developer buying signals and routes enriched profiles into Salesloft, HubSpot, Apollo, or any tool in your stack. We do not send emails. We find the leads. Your cadences handle the rest. Start free at gitleads.app. Related: push GitHub leads to HubSpot, push GitHub leads to Apollo, push GitHub leads to Instantly.

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