The Repo Buying-Signal Reference: Intent, Noise, and Shelf Life
You can triage any repo action - star, fork, issue, PR, dependency, telemetry - by intent, false-positive risk, and remaining shelf life.
Key takeaways
- A single GitHub star is a bookmark, not intent; starring two or more repos in the same category within a short window is the strongest evaluation signal GitHub produces.
- Repo signals decay fast: practitioners report roughly 40% of the value gone after 72 hours, and Forrester-cited data puts the loss at about 50% within 30 to 45 days.
- Hands-on actions beat passive ones - forks, integration issues, and dependency adoption outrank a lone star, which the 2026 stargazer API restriction and the fake-star market have made harder to trust.
- Signal-based outreach reports 4 to 25% reply rates against a 3.43% cold baseline, but only when the first touch lands inside the shelf-life window.
- Refolk's index shows the US Terraform pool at 5.25x Germany's (4,673 versus 890), so DACH markets are both thinner and, under UWG, legally harder - generic volume fails on both counts.
- Score first, then enrich: identity resolution is the expensive gate, and enriching curiosity traffic before scoring burns budget on non-buyers.
A developer or a company just did something in a repository in your category, and you need to know whether it is worth acting on and for how long. This reference is for founders selling their own devtool, account executives, SDR leads, and partnerships teams triaging a signal queue. It defines each repo-derived action - star, fork, watch, issue, PR, dependency adoption, telemetry event - by what it proves about buying intent, the specific ways it lies, and how fast it decays.
Every ranking answer to this question is a devtool vendor grading repo signals to sell its own monitoring product, and none treats the pre-funnel false-positive problem or per-signal shelf life as a lookup you can jump into row by row. This is the vendor-neutral catalog instead. Jump to the row you need and leave.
What repo actions can you actually see, and what does each prove?
The public GitHub surface exposes stars, forks, watches, issues, pull requests, commits, dependency edges, and package pulls; product-side telemetry like trials and GitHub-login signups requires your own instrumentation. Each action sits on a spectrum from passive awareness to hands-on evaluation, and hands-on behavior beats passive consumption every time.
The first thing to understand is that the star signal degraded twice. The fake-star market means a star spike can be bought - 1,000 stars for as little as $84 on some platforms - and as of 30 June 2026 GitHub restricted the stargazer listing endpoint to a repository's own admins and collaborators, citing scraping for spam. The subscribers and subscriptions endpoints were similarly limited, and the endpoint listing a user's watched repos was deprecated. The practical effect: who-starred-when is now admin-only on repos you do not own, which pushes sellers toward forks, issues, and dependency edges that are both harder to fake and still legible.
Here is the ordering that matters, from strongest to weakest intent, with what each action proves and how it misleads.
| Action | What it proves | How it lies |
|---|---|---|
| Dependency adoption | Buyer already ships your code | Public-repo-only; transitive deps read as direct |
| Fork | Active testing, hands-on | Tutorial or learning fork, not evaluation |
| Integration issue / PR | Real hands-on trial | Contributor doing OSS work, not buying |
| Category-clustered stars | Coordinated evaluation | Rare enough to trust if 2+ repos, short window |
| Single star | Casual awareness / bookmark | Bought, or a lone bookmark with no intent |
| Watch / subscribe | Passive monitoring | Now admin-only surface; weak on its own |
The reason clustering beats volume is mechanical: a single action is indistinguishable from noise, but two or more category repos starred in a short window is costly to fake, unlike a lone click. That is why category clustering, not raw star count, is the strongest evaluation signal GitHub produces.
How the repo you watch changes the meaning
The same action proves different things depending on which repo it lands on. Activity on your own repo proves direct interest; the same action across a competitor or adjacent repo proves category evaluation, which is often the earlier and more valuable read.
Build your watchlist in three tiers, because the tier sets the meaning:
- Your own repo. Direct interest. A fork or integration issue here is the shortest path to a conversation.
- Direct competitors and adjacent tools. Category evaluation. If a developer has actively done something in a competing or complementary repo, there may be a live opportunity inside that organization - and they are not yet your customer.
- Dependencies your buyers already ship. Installed base. The dependents graph shows which repositories and packages depend on a given repo, so you can monitor who already runs your category. Remember dependents are computed for public repositories only.
The repo watchlist, by what an action proves
- Your own repoDirect interest - shortest path to a conversation
- Competitors and adjacent toolsCategory evaluation - a live opportunity elsewhere
- Dependencies buyers shipInstalled base - who already runs your category
There is a structural reason repo signals outperform title-based lists in devtools: the evaluator is usually the buyer. The senior engineer starring repos is often the same person who greenlights the purchase, so repo activity beats a job-title list that targets a VP three layers removed from the decision.
What each signal is worth against cold outreach
Signal-based outreach reports reply rates several times the cold baseline, but the figures are self-published vendor and agency data, not peer-reviewed, so read the range rather than any single number. The cold baseline itself is well anchored: the average cold email reply rate is 3.43% in Instantly's 2026 benchmark.
| Approach | Reply rate | Source |
|---|---|---|
| Cold / generic email | 3.43% | Instantly 2026 |
| Signal-based (conservative) | 4-10% | Growleads, 200+ campaigns |
| Signal-triggered vs cold list | 4-8% vs 1-2% | formanorden.com |
| Signal-based (high end) | 15-25% | twelfth.agency |
The high-end signal-based number is roughly four to seven times the 3.43% cold baseline. Even the conservative read is a two-to-four-times improvement. The honest caveat: these come from firms that sell signal tooling, so treat the shape of the lift as reliable and the exact multiple as directional. What is not in dispute is that the lift only materializes when the touch lands inside the signal's window, which is the subject of the next two sections.
Speed is the multiplier, not copy. The buyer's evaluation clock runs whether or not your cadence keeps up.
Shelf life: how long each signal stays actionable
Repo signals decay in days to weeks, and the early drop is steep. The mechanism is simple: the buyer's evaluation clock runs independently of your outreach, so a signal is a snapshot of where they were, not where they are.
The sources converge on a fast half-life. One practitioner reports that after 72 hours you have already lost 40% of the value, and after two weeks you are running a nurture program on a memory. A Forrester figure cited by vendors puts the loss at about 50% within 30 to 45 days for typical B2B software with three-to-six-month cycles. Acting within 24 to 48 hours is where GitHub-specific reads claim a three-to-five-times lift in reply rates. Scoring systems commonly reset signal scores on a 7-to-30-day clock depending on type.
| Signal | Peak window | Notes on decay |
|---|---|---|
| Integration issue / PR | 24-48 hours | Active trial; act same day |
| Fork | 24-72 hours | ~40% of value gone by 72 hours |
| Category-clustered stars | 1-2 weeks | Cluster confirms evaluation is underway |
| Dependency adoption | 2-4 weeks | Slower clock; installed base persists |
| Single star | Treat as expired | Bookmark; no reliable window |
This is the point where a signal queue either compounds or leaks. If your identity resolution and routing take longer than the signal's window, you are spending enrichment budget to reach people who have already moved on. Naming the actor, resolving them to a company, and finding a verified work email is the slow, expensive part - and it is exactly the part Refolk collapses, so you can go from a fresh repo action to a routable contact inside the 24-to-48-hour window rather than losing the signal to your own backlog.
The procedure: from a watchlist to a touch inside the window
Run this loop once to set it up, then keep the last three steps running continuously. The order is deliberate: filter and score before you enrich, because identity resolution is the cost gate and you do not want to pay it on curiosity traffic.
Triage loop for a repo signal queue
- Define the repo watchlistList your own repo, 2-4 competitors, adjacent tools, and dependencies your buyers ship. Tag each with what an action there proves.
- Instrument captureOwn-repo events via webhooks, cross-repo via polling or the public archive. Webhooks fire only on your own repos and carry no history.
- Filter to ICPDrop out-of-profile actors before enrichment. This is the cheapest place to cut noise.
- Score by signal type and recencyWeight hands-on above passive and apply a decay clock. Reconcile the ordering against your own conversion data.
- Enrich login to company and work emailResolve the login only after scoring. Confirm employer against commit history.
- Document legal basisRun and store an LIA, record the data source, wire in an opt-out.
- Route and act within SLASend Tier 1 signals same-day, referencing the specific action without being invasive.
- Measure signal-to-opportunity by typeTrack pipeline per signal type monthly and feed it back into the scoring model.
Why score-then-enrich, not enrich-then-score
- CaptureEvents land in one queue with timestamps
- Filter to ICPDrop out-of-profile actors for free
- ScoreWeight by type, apply decay clock
- EnrichResolve login to company and work email
- RouteFirst touch inside the window
On step four, be honest that the sources disagree on ordering. Some rank event attendance, forks, and issues highest; others rank category-clustered stars highest. The specific per-signal weights are vendor-defined and not independently validated, so the only trustworthy weighting is the one your own signal-to-opportunity data produces over time. Ship a default, then let step eight correct it.
How this goes wrong: false positives and the checks that catch them
Most bad outreach from a repo queue traces to one of eight failure modes, each with a distinct false-positive shape and a check that catches it. This is the most valuable part of the reference: a signal that looks strong and lies costs you more than a signal you never saw, because acting on it burns trust.
Fake stars. A star spike reads as demand but is purchased. The false positive is a growth curve that jumps overnight. Check velocity anomalies and low-activity accounts before trusting a star count; projects have gamed the system to look more popular than they are.
Star does not equal evaluation. A single star is a bookmark. The false positive is treating one star as active intent. Require category clustering - two or more repos in a short window - before you act.
Competitor-shopping mirage. A prospect active on a competitor's surface may be renewing, not switching. Their existing customer checking the competitor's pricing looks like intent but is just shopping for better terms on the current vendor. Check whether the actor is already a known customer of that competitor before reading switch intent.
Stale signal worked as fresh. A 90-day-old fork is history. Check the timestamp against the decay clock before routing anything.
Login-to-company misresolution. Enrichment attaches the wrong employer or email, so a personal-project actor gets tagged as a company buyer. Check the employer against commit history and a verified work address, not a guess.
Learning mistaken for buying. Docs deep-dives and tutorial forks are curiosity. One developer reading your docs is not a buyer. Require a hands-on action plus an ICP fit before you route, because learning signals do not equal buying signals.
Creepy over-personalization. Naming the exact digital action can read as invasive and trigger distrust. Reference the category or problem, not the precise click, timestamp, or file.
Germany compliance trap. Generic automated sequences to DACH prospects are high-risk. The UWG sets a very high bar for presumed interest, and successful firms there treat legitimate interest as a mandate for hyper-personalization.
Triage a signal by hands-on intensity and freshness
Identity, legal basis, and the market you are sending into
A login is not a contact, and resolving one to a company and a verified work email is the real cost gate - so score first and enrich only signals that clear the bar. Legal basis and market size then decide whether the resolved contact is worth a send at all.
For most of the EU and UK, B2B cold email is legal under GDPR's legitimate-interest basis, Article 6(1)(f), provided you run a legitimate-interest assessment, disclose your data source, and offer an easy opt-out. Business emails sourced from public professional profiles generally pass the balancing test, because someone who lists their professional contact information publicly has a reasonable expectation of professional contact. The stakes for getting this wrong are large: GDPR fines reach 20 million euros or 4% of global revenue. Keep sends inside safe volume limits, typically 50 to 100 emails per mailbox per day for cold outreach.
Germany is the structural exception, and it is worth a hard look because it is thin and hard at once. Refolk's index makes the thinness concrete.
| Country | Platform/DevOps/SRE pool with Terraform | US multiple |
|---|---|---|
| United States | 4,673 | 5.25x |
| Germany | 890 | base |
The consequence is direct: Germany's smaller pool cannot absorb generic volume, and the UWG's presumed-interest bar means generic sequences are high-risk anyway. Both facts point the same way - in DACH, personalize hard or do not send. For scale comparison, the US pool for the same titles with Go plus Kubernetes is 5,096, about 1.09 times the Terraform pool, so skill choice shifts the addressable set by roughly a tenth while geography shifts it fivefold.
Keeping the reference current
Repo signals are a moving target, so the catalog above is a starting weighting, not a fixed one. Two things change underneath it: GitHub's own API surface and your conversion data.
The API surface shifts by policy. The 2026 stargazer restriction is the clearest example - a signal that was public became admin-only overnight. Re-check the starring and watching endpoint access rules on a schedule, and note that historical stars still live in the public event archive if you need to reconstruct them. When a surface locks down, shift weight toward the actions that remain legible: forks, issues, PRs, and dependency edges.
Your conversion data is the only authority on weighting. Run step eight monthly - pipeline per signal type - and let it re-weight the model. If category-clustered stars convert better than forks in your data, weight them higher, regardless of what any vendor's fixed rubric says. Reconcile the disagreement in the sources against your own numbers, not against someone else's blog.
Before you act on a repo signal
- The action is hands-on or clusters across 2+ category repos, not a lone star
- The timestamp is inside the signal's shelf-life window
- The actor is in ICP and their employer is confirmed against commit history
- The work email is verified, not guessed
- A legitimate-interest assessment is on file and opt-out is wired in
- The market's rules are met, with hyper-personalization for any DACH send
- The touch references the category or problem, not the exact digital action
Finally, watch for corroborating off-repo signals that raise a repo action's confidence. A company posting five DevOps roles in 30 days is investing in infrastructure, which turns an ambiguous repo star from that org into a much stronger read. The best signal is rarely one action - it is a repo action that lines up with a hiring surge, a dependency you can see, and an ICP fit, all inside the same two-week window.
Questions practitioners ask
Is a GitHub star a buying signal?
On its own, no. A single star is a bookmark that signals casual awareness, and the star surface has degraded twice: the fake-star market sells 1,000 stars for as little as $84, and GitHub restricted the stargazer listing endpoint to repository admins and collaborators as of 30 June 2026. A star becomes a real evaluation signal only when it clusters - two or more repos in the same category within a short window is the strongest read GitHub produces.
How long is a GitHub buying signal actionable?
Days to a few weeks, decaying fast. One practitioner reports roughly 40% of the value gone after 72 hours, and Forrester-cited data puts the loss at about 50% within 30 to 45 days for typical B2B software cycles. Acting within 24 to 48 hours is where signal-based outreach reports its largest reply-rate lift, so treat anything past two weeks as a nurture memory, not fresh intent.
What repo actions are hardest to fake?
Forks, integration issues, pull requests, and dependency edges. Hands-on behavior beats passive consumption, and coordinated evaluation across a category is costly to fake, unlike a lone click or a purchased star. Dependency adoption is especially durable because it means the buyer already ships your code, though GitHub computes dependents for public repositories only.
Should I enrich a GitHub login before or after scoring it?
After. A login is not a contact, and resolving it to an employer and verified work email often requires enrichment tooling or manual work. Enriching before scoring burns budget on curiosity traffic, so filter to ICP and score by signal type first, then spend on identity resolution only for signals that clear the bar.
Can I cold email a developer I found through repo activity in the EU?
For most of the EU and UK, B2B cold email is legal under GDPR's legitimate-interest basis, provided you run a legitimate-interest assessment, disclose your data source, and offer an easy opt-out. Business emails from public professional profiles generally pass the balancing test. Germany is the exception: the UWG sets a high bar for presumed interest, so generic automated sequences are high-risk there.
Why does the same repo action mean different things on different repos?
The repo determines what the action proves. Activity on your own repo proves direct interest in you; the same action on a competitor or adjacent repo proves category evaluation. A fork of a dependency your buyers already ship means something different again. Always tag each watched repo with its intent meaning before you score actions against it.
Try it on the search you came here for
Stop building boolean strings. Just describe the person.
Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.
01Describe them
One plain sentence. Role, city, stack, stage, whatever matters to you.
02I read the web live
GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.
03You read the shortlist
Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.
- Staff backend engineers in NYC who shipped Rust in production
- Series A fintechs in SF under 50 people, growing headcount this year
- Maintainers of fast-growing Rust web frameworks on GitHub
- No boolean, no filters, no seat to buy. One box.
- Read at search time, so a profile updated yesterday counts today.
- Every step visible as it runs, every name with its reason.
500 free credits on sign-up. No card, no demo call. See real searches.