Weekly
See who starred a GitHub repo, with profiles
Every Monday a CSV of all stargazers of a GitHub repo arrives by email, with the star date, name, company, location and follower count.
- Runs
- Weekly
- Apps
- GitHub
- AI
- Not needed
- Access
- Metadata: read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 8am, email me a CSV of everyone who starred acme/app with the date they starred, their name, company, location and followers, newest first.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
GitHub shows a stargazers page, but it is a grid of avatars with no dates, no companies and no way to download it. People who want to know who starred their project usually end up scrolling the page or writing a quick script against the API.
This automation is that script, run every Monday. It reads the full list with the date of each star, looks up recent stargazers' public profiles and emails you a CSV you can open in any spreadsheet. The top line tells you how many stars came in during the week.
Open source maintainers use it to find companies using their library, developer tool founders use it as a lead list, and anyone launching a project uses it to see who showed up after a post.
What you get out of it
Star dates you cannot see on GitHub
The stargazers page has no dates. The export includes the day each star was given, so you can line it up with a launch post, a newsletter mention or a conference talk.
Companies and locations in one column
Public profile fields like company and location are pulled in, so you can sort by company and spot teams that are evaluating your project.
A file you can keep
Each week's CSV is a snapshot. Comparing two of them shows growth without relying on a third-party star history chart.
Rate limits respected
Only recent stargazers are profiled by default, which keeps large repositories within GitHub's API limits for a connected account.
Works on any public repo
You can run it on a competitor or a project you depend on, not only your own, because stargazer lists of public repositories are public.
How it works
What happens, step by step
Every Monday the automation asks GitHub for the full stargazer list of your repository, including the date of each star.
For people who starred in the last 90 days it looks up the public profile to add name, company, location and follower count.
Everything is written into a CSV, newest stars first.
The CSV arrives by email with a short count of stars this week at the top.
Before it runs live
- Connect GitHub
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other GitHub steps into one automation
Under the hood
The code that runs this automation
import csv, io, datetime
from clickruntime import on_trigger, credentials, http, notify
REPO = "acme/app"
ENRICH_DAYS = 90
def gh(method, path, **kw):
resp = http.request(method, f"https://api.github.com{path}", headers={
"Authorization": f"Bearer {credentials.connection('github', 'work')}",
"Accept": "application/vnd.github+json"}, **kw)
resp.raise_for_status()
return resp.json() if resp.content else None
@on_trigger
def run(event):
stars, page = [], 1
while True:
batch = http.get(f"https://api.github.com/repos/{REPO}/stargazers", params={"per_page": 100, "page": page},
headers={"Authorization": f"Bearer {credentials.connection('github', 'work')}",
"Accept": "application/vnd.github.star+json"}).json()
stars += batch
if len(batch) < 100:
break
page += 1
stars.sort(key=lambda s: s["starred_at"], reverse=True)
now = datetime.datetime.utcnow()
cutoff = (now - datetime.timedelta(days=ENRICH_DAYS)).isoformat()
week = (now - datetime.timedelta(days=7)).isoformat()
buf = io.StringIO()
w = csv.writer(buf)
w.writerow(["starred_at", "login", "name", "company", "location", "followers"])
for s in stars:
login = s["user"]["login"]
p = gh("GET", f"/users/{login}") if s["starred_at"] >= cutoff else {}
w.writerow([s["starred_at"][:10], login, p.get("name") or "", p.get("company") or "",
p.get("location") or "", p.get("followers", "")])
new = sum(1 for s in stars if s["starred_at"] >= week)
notify.email_me(f"{REPO} stargazers: {len(stars)} total, {new} this week", buf.getvalue())
return {"total": len(stars), "this_week": new}FAQ
Common questions
Why are older stargazers missing a name and company?
Does it work for a repository I do not own?
Can I get it in a Google Sheet instead of an email?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Back up your data to a GitHub repo every night
Your exports and configs are committed to a private repo each night, only when something changed, with a summary by email.
See how it worksGet weekly stats for your repos by email
Every Monday you see stars, forks, open issues and open pull requests for your repos, and how they changed since last week.
See how it worksGet a morning digest of new pull requests
Each weekday morning you get one email with the pull requests opened in the last day, grouped by repo.
See how it worksKeep exploring
Set up “See who starred a GitHub repo, with profiles” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.