Push GitHub Developer Leads into ChartMogul

Connect GitLeads to ChartMogul and enrich your subscription analytics with GitHub intent data. Route stargazer and keyword signals into ChartMogul customer profiles automatically.

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

Why ChartMogul + GitHub Signals

ChartMogul is where developer-tool companies track their MRR, churn, and expansion revenue. But ChartMogul only knows about customers who have already subscribed. GitLeads fills the gap before that: it captures developer intent signals on GitHub — new stars on your repo, competitor repo activity, keyword mentions in issues and PRs — and enriches those developers as pre-customer leads.

By connecting GitLeads to ChartMogul via webhook, you can automatically create or update customer records with GitHub signal context the moment a developer shows buying intent. When they eventually convert, your ChartMogul record already has the full acquisition story.

Integration Architecture

GitLeads pushes enriched lead payloads via webhook. ChartMogul provides a REST API for customer creation and custom attribute management. The integration pattern is: GitLeads webhook → lightweight receiver → ChartMogul API.

// GitLeads → ChartMogul integration
// Receive GitLeads webhook, create/update ChartMogul customer

import express from 'express';

const app = express();
app.use(express.json());

const CHARTMOGUL_API_KEY = process.env.CHARTMOGUL_API_KEY!;
const CHARTMOGUL_DS_UUID = process.env.CHARTMOGUL_DS_UUID!; // Data source UUID

interface GitLeadsPayload {
  event: 'lead.created';
  lead: {
    githubUsername: string;
    name: string;
    email?: string;
    company?: string;
    location?: string;
    signal: {
      type: 'stargazer' | 'keyword';
      repo?: string;
      keyword?: string;
      context?: string;
    };
  };
}

app.post('/webhooks/gitleads', async (req, res) => {
  const payload = req.body as GitLeadsPayload;
  const { lead } = payload;

  if (!lead.email) {
    // ChartMogul requires email; skip or store for later
    return res.json({ skipped: true, reason: 'no_email' });
  }

  // Create customer in ChartMogul
  const customer = await fetch(
    `https://api.chartmogul.com/v1/customers`,
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer ' + CHARTMOGUL_API_KEY,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        data_source_uuid: CHARTMOGUL_DS_UUID,
        external_id: `github-${lead.githubUsername}`,
        name: lead.name || lead.githubUsername,
        email: lead.email,
        company: lead.company,
        country: lead.location,
        custom: [
          { type: 'String', key: 'github_username', value: lead.githubUsername },
          { type: 'String', key: 'signal_type', value: lead.signal.type },
          { type: 'String', key: 'signal_repo', value: lead.signal.repo ?? '' },
          { type: 'String', key: 'signal_keyword', value: lead.signal.keyword ?? '' },
          { type: 'Timestamp', key: 'lead_captured_at', value: new Date().toISOString() },
        ],
      }),
    }
  );

  const data = await customer.json();
  res.json({ chartmogul_uuid: data.uuid });
});

Using ChartMogul Custom Attributes for GitHub Signals

ChartMogul custom attributes let you tag customers with any string, integer, timestamp, or boolean field. For GitHub leads, useful attributes include:

  • `github_username` — string, used to link back to the source profile
  • `signal_type` — "stargazer" or "keyword", segment by acquisition channel
  • `signal_repo` — which repo they starred, useful for competitor tracking
  • `signal_keyword` — the keyword that triggered capture, indicates use case
  • `lead_captured_at` — timestamp, measure time-to-conversion from first signal
  • `github_followers` — integer, proxy for developer influence / ICP fit

Handling Existing ChartMogul Customers

If the lead is already a paying ChartMogul customer, use the `/v1/customers?external_id=github-{username}` endpoint to look up the existing record and PATCH it with signal data rather than creating a duplicate. This closes the loop between pre-conversion intent and post-conversion revenue.

// Check if customer exists before creating
async function upsertChartMogulCustomer(lead: GitLeadsPayload['lead']) {
  // Try lookup first
  const lookup = await fetch(
    `https://api.chartmogul.com/v1/customers?external_id=github-${lead.githubUsername}`,
    { headers: { 'Authorization': 'Bearer ' + CHARTMOGUL_API_KEY } }
  );
  const existing = await lookup.json();

  if (existing.total_count > 0) {
    const uuid = existing.entries[0].uuid;
    // Update custom attributes on existing customer
    await fetch(`https://api.chartmogul.com/v1/customers/${uuid}/attributes/custom`, {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer ' + CHARTMOGUL_API_KEY,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        custom: [
          { type: 'String', key: 'latest_signal_type', value: lead.signal.type },
          { type: 'Timestamp', key: 'latest_signal_at', value: new Date().toISOString() },
        ],
      }),
    });
    return uuid;
  }

  // Create new customer
  // ... (creation code above)
}

No-Code Option: Zapier or Make

If you prefer no-code, GitLeads supports Zapier and Make (formerly Integromat) as native destinations. Configure a GitLeads → Zapier trigger, then use the ChartMogul Zapier app to create customers or add tags. For Make, use the HTTP module to call ChartMogul's API directly from a GitLeads webhook scenario.

GitLeads captures GitHub developer signals and pushes enriched leads into ChartMogul, HubSpot, Clay, Slack, and 12+ other tools. Free plan: 50 leads/month. Start at [gitleads.app](https://gitleads.app). Related: [push GitHub leads to HubSpot](/blog/push-github-leads-to-hubspot), [push GitHub leads to Mixpanel](/blog/push-github-leads-to-mixpanel), [find usage-based billing developer leads](/blog/find-usage-billing-developer-leads).

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