Why Affinity CRM Users Want GitHub Signal Data
Affinity CRM is the relationship intelligence platform used by VCs, devtool companies, and B2B teams that sell through relationships. Its strength is mapping relationship context — who knows whom, how warm a connection is, deal history. GitLeads adds a new layer: real-time GitHub intent signals. When a developer stars your repo or mentions your product keywords in a GitHub issue, GitLeads captures that signal and routes the enriched profile into Affinity, creating or updating the Person and Organization records automatically.
What GitLeads Sends to Affinity
- Person record: name, email (if public), GitHub username, profile URL, bio, company, location
- Organization record: company name derived from GitHub bio or email domain
- Signal note: the exact GitHub event that triggered the lead — repo starred, keyword matched in issue/PR, with full URL
- Enrichment data: follower count, top programming languages, public repo count, account creation date
- Signal metadata: signal type (stargazer / keyword), source repo or keyword, timestamp
Setting Up the GitLeads → Affinity Integration
- In GitLeads, go to Integrations and select Webhook
- Copy your GitLeads webhook endpoint URL
- In Affinity, navigate to Settings → API and generate an API key
- Use GitLeads' webhook payload (JSON) to POST to Affinity's People API: POST /v1/persons with fields for name, email, organization
- Add a note to each person record via POST /v1/notes with the GitHub signal context as the body
- Alternatively, use Zapier or n8n as middleware: trigger on GitLeads webhook → create Affinity person → add note
- For organization-level tracking, add GitHub company field to Affinity organization records and map from GitLeads company field
Affinity API Schema for GitHub Lead Import
// GitLeads webhook payload → Affinity API
// Step 1: Create or find person in Affinity
const affinity_person = await fetch('https://api.affinity.co/persons', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa(':' + AFFINITY_API_KEY),
'Content-Type': 'application/json',
},
body: JSON.stringify({
first_name: lead.name.split(' ')[0],
last_name: lead.name.split(' ').slice(1).join(' '),
emails: lead.email ? [lead.email] : [],
}),
});
// Step 2: Add GitHub signal note
await fetch('https://api.affinity.co/notes', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa(':' + AFFINITY_API_KEY),
'Content-Type': 'application/json',
},
body: JSON.stringify({
person_ids: [person_id],
content: `GitHub signal: ${lead.signal_type} on ${lead.source}\n${lead.signal_url}\nBio: ${lead.bio}\nLanguages: ${lead.languages.join(', ')}`,
}),
});Who Uses This Integration
- Developer tool companies using Affinity for relationship-based outbound — GitLeads signals surface warm leads before competitors reach them
- VC funds tracking developer ecosystem activity — Affinity + GitHub signals show which founders and engineers are evaluating your portfolio companies' tools
- DevRel teams logging community engagement — turn GitHub activity (stars, issues, PRs) into Affinity relationship timeline entries
- Technical recruiters using Affinity — GitHub signals identify active open-source engineers before they change roles
- Sales teams at infrastructure companies — Affinity relationship graph + GitHub intent = highest-confidence prioritization
Alternative: Use Zapier or n8n Instead of Direct API
- GitLeads → Zapier → Affinity: use the Zapier Affinity integration, trigger on GitLeads webhook, map fields visually without code
- GitLeads → n8n → Affinity: self-hosted n8n workflow with Affinity HTTP node; full control over transformation and deduplication
- GitLeads → Make → Affinity: Make (formerly Integromat) supports Affinity via HTTP module; easiest no-code setup
- GitLeads → Clay → Affinity: enrich in Clay first (company LinkedIn, funding data), then push final record to Affinity via Clay's Affinity integration