Github Star Gazer Actor
Pricing
from $24.00 / 1,000 gituhub-profiles
Github Star Gazer Actor
Extract every user who starred any GitHub repository. Get name, company, location, website, email, and linkedin. Perfect for B2B lead generation and DevRel outreach.
Pricing
from $24.00 / 1,000 gituhub-profiles
Rating
0.0
(0)
Developer
Giovanni Bianciardi
Actor stats
0
Bookmarked
7
Total users
4
Monthly active users
15 hours ago
Last modified
Categories
Share
GitHub Star Gazer - Scrape GitHub Stargazers and Extract Contact Info
GitHub Star Gazer is an Apify Actor that collects every user who starred a GitHub repository and enriches their profile with contact information: email addresses, phone numbers, and social media profiles scraped from their personal websites.
Use it for developer lead generation, open-source community outreach, sales prospecting, and competitive intelligence on GitHub repositories.
What It Does
- Fetches all stargazers of any public GitHub repository with full pagination support
- Enriches each profile via the GitHub API - name, bio, location, company, follower count, public repos
- Scrapes the personal website listed on the GitHub profile to extract:
- Email address (mailto links + regex fallback)
- Phone number (tel links + regex fallback)
- LinkedIn, Twitter/X, Instagram, YouTube, Reddit, Facebook, TikTok profile URLs
The result is a ready-to-use contact list of developers who expressed interest in a specific technology or project.
Key Features
| Feature | Details |
|---|---|
| Full stargazer pagination | Collects every star, no artificial cap |
| GitHub profile enrichment | Name, bio, company, location, followers, public repos |
| Email extraction | From GitHub profile and personal website |
| Phone extraction | From personal website (tel links and regex) |
| Social media discovery | LinkedIn, Twitter/X, Instagram, YouTube, Reddit, Facebook, TikTok |
| GitHub token support | Increases rate limit from 60 to 5,000 requests/hour |
| Max results limit | Set a cap for quick tests or cost control |
| Configurable enrichment | Toggle profile enrichment and website scraping independently |
Use Cases
- Sales prospecting: Build a contact list of developers who starred a competitor repo and reach out directly
- Developer outreach: Contact contributors or early adopters of an open-source project
- Community growth: Find active GitHub users in your niche who have public contact info
- Market research: Analyze who is watching a repository - company, location, follower count
- Talent sourcing: Identify developers interested in a specific technology stack
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
owner | string | Yes | - | GitHub username or organization (e.g. vercel) |
repo | string | Yes | - | Repository name (e.g. next.js) |
github_token | string | No | - | Personal Access Token - raises rate limit from 60 to 5,000 req/h |
max_results | integer | No | 0 | Max stargazers to collect. 0 = unlimited |
enrich_profiles | boolean | No | true | Fetch full profile data for each user via GitHub API |
scrape_websites | boolean | No | true | Visit each personal website to extract contact info and social links |
Getting a GitHub Token
- Go to github.com/settings/tokens
- Click Generate new token (classic)
- Select the
public_reposcope (read-only access is sufficient) - Copy the token and paste it into the
github_tokenfield
Without a token the actor is limited to 60 API requests/hour. For repositories with hundreds or thousands of stars, a GitHub token is strongly recommended.
Output Data
Each record in the dataset represents one stargazer. Example output:
{""repo_owner"": ""vercel"",""repo_name"": ""next.js"",""username"": ""johndoe"",""github_id"": 1234567,""name"": ""John Doe"",""company"": ""Acme Corp"",""location"": ""San Francisco, CA"",""bio"": ""Full-stack developer. Open source enthusiast."",""followers"": 342,""following"": 120,""public_repos"": 47,""profile_url"": ""https://github.com/johndoe"",""avatar_url"": ""https://avatars.githubusercontent.com/u/1234567"",""blog"": ""https://johndoe.dev"",""email"": ""john@example.com"",""email_from_website"": ""contact@johndoe.dev"",""phone_from_website"": ""415-555-0123"",""linkedin"": ""https://www.linkedin.com/in/johndoe"",""twitter"": ""https://twitter.com/johndoe"",""instagram"": ""https://www.instagram.com/johndoe"",""youtube"": null,""reddit"": null,""facebook"": null,""tiktok"": null,""starred_at"": ""2024-03-15T10:22:00Z""}
Output Fields Reference
| Field | Source | Description |
|---|---|---|
username | GitHub API | GitHub login handle |
github_id | GitHub API | Unique numeric GitHub user ID |
name | GitHub API | Display name |
company | GitHub API | Company field from GitHub profile |
location | GitHub API | Location field from GitHub profile |
bio | GitHub API | Profile bio text |
followers / following | GitHub API | Follower and following counts |
public_repos | GitHub API | Number of public repositories |
profile_url | GitHub API | Link to the GitHub profile |
blog | GitHub API | Personal website URL as listed on GitHub |
email | GitHub API | Email if made public on the GitHub profile |
email_from_website | Website scrape | Email address found on personal website |
phone_from_website | Website scrape | Phone number found on personal website |
linkedin | Website scrape | LinkedIn profile URL |
twitter | Website scrape | Twitter / X profile URL |
instagram | Website scrape | Instagram profile URL |
youtube | Website scrape | YouTube channel URL |
reddit | Website scrape | Reddit profile URL |
facebook | Website scrape | Facebook profile URL |
tiktok | Website scrape | TikTok profile URL |
starred_at | GitHub API | ISO 8601 timestamp when the star was added |
How Website Scraping Works
When scrape_websites is enabled, the actor visits the URL in each user GitHub blog field and:
- Parses the HTML with BeautifulSoup
- Looks for
mailto:anchor tags first, then falls back to regex scanning the full page text - Looks for
tel:anchor tags first, then falls back to regex for phone numbers - Searches all anchor tags for known social media domain patterns (LinkedIn, Twitter/X, Instagram, YouTube, Reddit, Facebook, TikTok)
Only the first match per field is returned. The scraping step is skipped if the user has no personal website listed.
Rate Limits and Performance
| Condition | GitHub API Rate Limit |
|---|---|
| No token (unauthenticated) | 60 requests / hour |
| With Personal Access Token | 5,000 requests / hour |
With enrich_profiles enabled, each stargazer costs 1 API call. A repo with 1,000 stars requires approximately 1,010 requests total (10 paginated stargazer pages + 1,000 profile lookups). A GitHub token is essential for repos with more than ~50 stars.
The actor automatically waits when a rate limit is hit and resumes when the reset window opens (up to 10 minutes). If the wait would exceed 10 minutes, the actor stops early and logs a warning with instructions to add a GitHub token.
Tips
- Test with
max_resultsset to10before running a full collection - Set
enrich_profiles: falseandscrape_websites: falsefor a lightweight list of usernames only - Export to CSV directly from the Apify Console for use in CRMs or email outreach tools
- Schedule the actor to run on a recurring basis to capture new stargazers as they appear