Gitlab Star Gazer Actor
Pricing
from $30.00 / 1,000 profiles
Gitlab Star Gazer Actor
Extract profiles of users who starred any GitLab repository — with emails, linkedin, instagram and phone numbers scraped from personal websites. Built for B2B lead generation and developer outreach.
Pricing
from $30.00 / 1,000 profiles
Rating
0.0
(0)
Developer
Giovanni Bianciardi
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
GitLab Star Gazer - Scrape GitLab Starrers and Extract Contact Info
GitLab Star Gazer is an Apify Actor that collects every user who starred a GitLab 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 GitLab repositories.
What It Does
- Fetches all starrers of any public GitLab repository with full pagination support
- Enriches each profile via the GitLab API - name, bio, location, organization, follower count, LinkedIn, Twitter
- Scrapes the personal website listed on the GitLab 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 starrers pagination | Collects every star, no artificial cap |
| GitLab profile enrichment | Name, bio, organization, location, followers, LinkedIn, Twitter |
| Email extraction | From GitLab public email and personal website |
| Phone extraction | From personal website (tel links and regex) |
| Social media discovery | LinkedIn, Twitter/X, Instagram, YouTube, Reddit, Facebook, TikTok |
| GitLab token support | Personal Access Token for higher rate limits and private repos |
| 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 GitLab users in your niche who have public contact info
- Market research: Analyze who is watching a repository - organization, location, follower count
- Talent sourcing: Identify developers interested in a specific technology stack
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
owner | string | Yes | - | GitLab username, group or namespace (e.g. gitlab-org) |
repo | string | Yes | - | Repository name (e.g. gitlab) |
gitlab_token | string | No | - | Personal Access Token - increases rate limits and allows private repos |
max_results | integer | No | 0 | Max starrers to collect. 0 = unlimited |
enrich_profiles | boolean | No | true | Fetch full profile data for each user via GitLab API |
scrape_websites | boolean | No | true | Visit each personal website to extract contact info and social links |
Getting a GitLab Token
- Go to gitlab.com/-/user_settings/personal_access_tokens
- Click Add new token
- Select the
read_apiscope (read-only access is sufficient) - Copy the token and paste it into the
gitlab_tokenfield
Without a token the actor uses unauthenticated requests, which are subject to GitLab's IP-based rate limits. For repositories with hundreds or thousands of stars, a GitLab token is strongly recommended.
Output Data
Each record in the dataset represents one starrer. Example output:
{"repo_owner": "gitlab-org","repo_name": "gitlab","username": "johndoe","gitlab_id": 1234567,"name": "John Doe","company": "Acme Corp","location": "San Francisco, CA","bio": "Full-stack developer. Open source enthusiast.","followers": 342,"following": 120,"profile_url": "https://gitlab.com/johndoe","avatar_url": "https://secure.gravatar.com/avatar/...","website": "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_since": "2024-03-15T10:22:00Z"}
Output Fields Reference
| Field | Source | Description |
|---|---|---|
username | GitLab API | GitLab login handle |
gitlab_id | GitLab API | Unique numeric GitLab user ID |
name | GitLab API | Display name |
company | GitLab API | Organization field from GitLab profile |
location | GitLab API | Location field from GitLab profile |
bio | GitLab API | Profile bio text |
followers / following | GitLab API | Follower and following counts |
profile_url | GitLab API | Link to the GitLab profile |
website | GitLab API | Personal website URL as listed on GitLab |
email | GitLab API | Public email if set on the GitLab profile |
linkedin | GitLab API / scrape | LinkedIn URL from GitLab profile or website |
twitter | GitLab API / scrape | Twitter / X URL from GitLab profile or website |
email_from_website | Website scrape | Email address found on personal website |
phone_from_website | Website scrape | Phone number found on personal website |
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_since | GitLab 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's GitLab website_url 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. LinkedIn and Twitter found directly in the GitLab profile take priority over values scraped from the website.
Rate Limits and Performance
| Condition | GitLab API Rate Limit |
|---|---|
| No token (unauthenticated) | IP-based limits (varies by endpoint) |
| With Personal Access Token | Per-user limits (higher, varies by endpoint) |
With enrich_profiles enabled, each starrer costs 1 API call. A repo with 1,000 stars requires approximately 1,010 requests total (10 paginated starrer pages + 1,000 profile lookups). A GitLab token is recommended for repos with many stars.
The actor automatically waits when a rate limit is hit (HTTP 429) 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 GitLab 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 starrers as they appear
- GitLab exposes LinkedIn and Twitter directly in user profiles — no website scraping needed for those fields