# GitHub Profile Scraper & Lead Finder | Stars, LinkedIn, Score (`apivault_labs/github-profile-scraper`) Actor

Scrape GitHub profiles via the official API, or pull every stargazer/forker of a repo as warm leads. Get email, LinkedIn & social accounts, repos, stars, top languages, orgs, README — plus a 0-100 lead score, developer tier & outreach icebreaker. CSV export. $1.9/1K.

- **URL**: https://apify.com/apivault\_labs/github-profile-scraper.md
- **Developed by:** [Apivault Labs](https://apify.com/apivault_labs) (community)
- **Categories:** Social media, Developer tools, Lead generation
- **Stats:** 24 total users, 8 monthly users, 99.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🐙 GitHub Profile Scraper & Lead Finder

Scrape any public **GitHub profile** via GitHub's official API — or paste a **repository URL and pull every stargazer / forker as a ready-to-use lead list**. Returns identity, email, **LinkedIn & all social accounts**, repositories, total stars, languages, organizations and the profile README — then layers on a **0-100 lead score**, developer tier and a ready-to-send outreach icebreaker.

Built for **recruiters, B2B sales, devtool marketers and OSS researchers**. No browser, official API, only successful results are billed.

### Two modes

#### 1. Profile mode — usernames in, enriched profiles out
Paste usernames or `https://github.com/NAME` URLs. Get the full profile + intelligence layer.

#### 2. Lead mode — repo in, developer leads out ⭐
Paste a repository URL (`https://github.com/OWNER/REPO`). The actor pulls **every developer who starred (or forked) that repo** and hydrates each into a complete lead profile with a lead score.

> **"Find every developer who starred my competitor's repo"** — turn any popular repository into a warm B2B prospect list. Filter by lead score, followers, stars, hireable status or public email.

### What makes this the most complete GitHub actor

| Capability | This actor | Typical competitor |
|---|---|---|
| Official GitHub API (live, accurate) | ✅ | Some HTML-scrape (fragile) |
| Email (public) | ✅ | Sometimes |
| **LinkedIn + all social accounts** | ✅ | Rarely |
| Repo aggregates (stars, forks, top languages) | ✅ | Sometimes |
| **Full repo list** (topics, license, issues, forks) | ✅ | Rarely |
| **Bytes-weighted language %** | ✅ | ❌ |
| Organizations, starred repos, profile README | ✅ | Rarely |
| **Achievement badges + highlights** | ✅ | Some |
| **Pinned repos** (enriched) | ✅ | Some |
| **Contributions in the last year** | ✅ | Some |
| **Stargazer / forker lead extraction** | ✅ | Rarely |
| **0-100 lead score + tier + reasons** | ✅ | ❌ |
| **Outreach icebreaker + best contact** | ✅ | ❌ |
| Filters (followers / stars / score / hireable / email) | ✅ | ❌ |
| Proxy IP rotation (beats 60 req/h limit) | ✅ | Often none |
| Per-user fault isolation (one error ≠ dead batch) | ✅ | Often batch-halting |
| CSV / JSON export | ✅ | Varies |

### Input

```json
{
  "profileUrls": ["https://github.com/sindresorhus", "torvalds"],
  "repoUrls": ["https://github.com/apify/crawlee"],
  "repoLeadsSource": "stargazers",
  "maxLeadsPerRepo": 50,
  "extractRepos": true,
  "includeRepoList": false,
  "includeLanguageStats": false,
  "includeSocialAccounts": true,
  "includeOrganizations": false,
  "includeStarred": false,
  "includeReadme": false,
  "includeAchievements": false,
  "includePinnedRepos": false,
  "includeContributions": false,
  "minLeadScore": 0,
  "withEmailOnly": false,
  "exportFormat": "default"
}
````

Use `profileUrls`, `repoUrls`, or both. Every option is independent.

### Output (abridged)

```json
{
  "success": true,
  "username": "sindresorhus",
  "fullName": "Sindre Sorhus",
  "bio": "Full-Time Open-Sourcerer",
  "company": "",
  "location": "",
  "email": "",
  "website": "https://sindresorhus.com",
  "twitterUsername": "sindresorhus",
  "linkedin": "",
  "profileUrl": "https://github.com/sindresorhus",
  "followers": 78000,
  "following": 31,
  "publicRepos": 1133,
  "accountCreated": "2011-02-15",
  "accountAgeYears": 15.1,
  "accountAgeTier": "veteran",
  "developerTier": "mega",
  "activityStatus": "active",
  "isInfluencer": true,
  "hireable": false,
  "totalStars": 784000,
  "totalForks": 41000,
  "topLanguages": ["JavaScript", "TypeScript", "Swift"],
  "mostStarredRepo": { "name": "awesome", "stars": 320000, "url": "..." },
  "socialAccounts": [{ "provider": "twitter", "url": "..." }],
  "leadScore": 74,
  "leadTier": "hot",
  "leadReasons": ["78,000 followers (mega)", "784,000 stars", "veteran account (15.1y)"],
  "bestContact": { "channel": "website", "value": "https://sindresorhus.com" },
  "outreachIcebreaker": "Hi Sindre Sorhus — with 15.1+ years on GitHub, 78,000 followers and 784,000 stars, your open-source work really stands out."
}
```

In lead mode each record also carries `leadSource`: `{ "type": "stargazers", "repo": "apify/crawlee" }`.

Enable `includeRepoList`, `includeLanguageStats`, `includeOrganizations`, `includeStarred`, `includeReadme`, `includeAchievements`, `includePinnedRepos` or `includeContributions` to add those sections.

### Lead score

A transparent 0-100 score (with human-readable `leadReasons`) computed from followers, total stars, public repos, account age, public email, LinkedIn, company and hireable status. Tiers: **cold / warm / hot / scorching**. Sort or filter on it to surface the best prospects first.

### Pricing

- **$0.0019 per profile** ($1.9 per 1,000) — pay per result, no subscription.
- A failed / not-found / private lookup is **never charged**.
- In lead mode you pay one profile lookup per stargazer/forker hydrated.

### Rate limits & token

GitHub allows ~60 requests/hour per IP unauthenticated; the actor **rotates Apify proxy IPs** to spread load. For large batches or lead mode, add an optional read-only **GitHub token** to raise the limit to 5000/hour. No scopes needed.

### Use cases

- **Recruiting** — find hireable developers with public emails, filter by language and activity.
- **B2B / devtool sales** — extract stargazers of a competitor's repo as warm leads, scored and ready for outreach.
- **OSS community growth** — identify influential users who starred your project.
- **Market & competitor research** — map a company's engineers, their stacks and orgs.
- **CRM enrichment** — append GitHub + LinkedIn data to existing contacts.

### Notes

- Only publicly available data is extracted. `email` and `linkedin` appear only when the user has set them public.
- `totalStars` / `totalForks` are aggregated over the sampled repos (cap `maxRepos`, GitHub page ceiling 100).
- `languageStats` percentages are bytes-weighted from GitHub's per-repo language endpoint (top repos).

### Disclaimer

Extracts only publicly available data. Ensure your use complies with applicable laws, GDPR/CCPA and GitHub's terms of service. Not affiliated with GitHub, Inc.

# Actor input Schema

## `profileUrls` (type: `array`):

GitHub profile URLs (https://github.com/NAME) or bare usernames. Leave empty if you only use Repo lead mode below.

## `repoUrls` (type: `array`):

Lead mode. Paste repository URLs (https://github.com/OWNER/REPO or OWNER/REPO). The actor pulls every stargazer (or forker) of those repos and turns each into a full lead profile with a lead score. Find every developer who starred a competitor's repo.

## `repoLeadsSource` (type: `string`):

Which audience to extract from each repo in Repo lead mode.

## `maxLeadsPerRepo` (type: `integer`):

Cap on how many stargazers/forkers to pull per repo (each becomes one billed profile lookup).

## `extractRepos` (type: `boolean`):

Fetch the user's public repos to compute total stars, total forks, top languages and the most-starred repo. Adds one extra API call per profile.

## `includeRepoList` (type: `boolean`):

Output the repos\[] array with per-repo details: stars, forks, watchers, open issues, language, topics, license, isFork, timestamps.

## `maxRepos` (type: `integer`):

Cap on repos sampled per user (sorted by stars, GitHub page ceiling = 100).

## `includeLanguageStats` (type: `boolean`):

Compute real language distribution (percent of code bytes) aggregated over the user's top repos. Adds extra API calls per profile.

## `includeSocialAccounts` (type: `boolean`):

Fetch all linked social accounts from the profile. LinkedIn is surfaced as a dedicated field and boosts the lead score.

## `includeOrganizations` (type: `boolean`):

Include the public organizations the user belongs to.

## `includeStarred` (type: `boolean`):

Include a sample of the repositories the user has starred (signals interests / tech stack).

## `maxStarred` (type: `integer`):

Cap on starred repos returned per user.

## `includeReadme` (type: `boolean`):

Include the text of the user's profile README (the special USER/USER repo shown on their profile page).

## `includeAchievements` (type: `boolean`):

Include GitHub achievement badges (Pull Shark, Starstruck, Arctic Code Vault, etc.) and account highlights (Pro / Developer Program / Public Sponsor). Parsed from the profile page.

## `includePinnedRepos` (type: `boolean`):

Include the repositories the user pinned to their profile, enriched with stars, forks, language and topics. Best paired with repo aggregation.

## `includeContributions` (type: `boolean`):

Include the user's total public contribution count over the last year (a strong activity signal for recruiting).

## `exportFormat` (type: `string`):

default = full JSON record. csv = flat, sales-friendly row for Google Sheets / HubSpot / Pipedrive.

## `includeLeadScore` (type: `boolean`):

Add a 0-100 lead score with tier (cold/warm/hot/scorching) and reasons, computed from followers, stars, repos, account age, email, LinkedIn, company and hireable status.

## `includeOutreach` (type: `boolean`):

Add a ready-to-send outreach icebreaker and a bestContact picker (email > LinkedIn > website > Twitter).

## `minLeadScore` (type: `integer`):

Drop profiles below this lead score. 0 = keep all.

## `minFollowers` (type: `integer`):

Drop profiles with fewer followers. 0 = keep all.

## `minRepos` (type: `integer`):

Drop profiles with fewer public repos. 0 = keep all.

## `minStars` (type: `integer`):

Drop profiles with fewer total stars across their repos. Requires repo aggregation. 0 = keep all.

## `hireableOnly` (type: `boolean`):

Keep only profiles flagged as available for hire.

## `withEmailOnly` (type: `boolean`):

Keep only profiles that expose a public email (hottest leads).

## `githubToken` (type: `string`):

Optional personal access token. Without it GitHub allows ~60 requests/hour per IP (the actor rotates proxy IPs to spread these). A token raises the limit to 5000/hour — recommended for large batches and lead mode. Read-only, no scopes needed.

## `maxConcurrency` (type: `integer`):

How many profiles to fetch in parallel.

## `timeout` (type: `integer`):

Max wait time per API request.

## `maxRetries` (type: `integer`):

Retry attempts (with a rotated IP) when a request is rate-limited or errors.

## Actor input object example

```json
{
  "profileUrls": [
    "https://github.com/sindresorhus",
    "torvalds"
  ],
  "repoUrls": [],
  "repoLeadsSource": "stargazers",
  "maxLeadsPerRepo": 50,
  "extractRepos": true,
  "includeRepoList": false,
  "maxRepos": 100,
  "includeLanguageStats": false,
  "includeSocialAccounts": true,
  "includeOrganizations": false,
  "includeStarred": false,
  "maxStarred": 30,
  "includeReadme": false,
  "includeAchievements": false,
  "includePinnedRepos": false,
  "includeContributions": false,
  "exportFormat": "default",
  "includeLeadScore": true,
  "includeOutreach": true,
  "minLeadScore": 0,
  "minFollowers": 0,
  "minRepos": 0,
  "minStars": 0,
  "hireableOnly": false,
  "withEmailOnly": false,
  "maxConcurrency": 5,
  "timeout": 30,
  "maxRetries": 2
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "profileUrls": [
        "https://github.com/sindresorhus",
        "torvalds"
    ],
    "repoUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("apivault_labs/github-profile-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "profileUrls": [
        "https://github.com/sindresorhus",
        "torvalds",
    ],
    "repoUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("apivault_labs/github-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profileUrls": [
    "https://github.com/sindresorhus",
    "torvalds"
  ],
  "repoUrls": []
}' |
apify call apivault_labs/github-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=apivault_labs/github-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GitHub Profile Scraper & Lead Finder | Stars, LinkedIn, Score",
        "description": "Scrape GitHub profiles via the official API, or pull every stargazer/forker of a repo as warm leads. Get email, LinkedIn & social accounts, repos, stars, top languages, orgs, README — plus a 0-100 lead score, developer tier & outreach icebreaker. CSV export. $1.9/1K.",
        "version": "1.2",
        "x-build-id": "4o4fELIrjZJ10GkB5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apivault_labs~github-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apivault_labs-github-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/apivault_labs~github-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-apivault_labs-github-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/apivault_labs~github-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-apivault_labs-github-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "profileUrls": {
                        "title": "GitHub Profile URLs or Usernames",
                        "type": "array",
                        "description": "GitHub profile URLs (https://github.com/NAME) or bare usernames. Leave empty if you only use Repo lead mode below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "repoUrls": {
                        "title": "Repo URLs → extract stargazers / forkers as leads",
                        "type": "array",
                        "description": "Lead mode. Paste repository URLs (https://github.com/OWNER/REPO or OWNER/REPO). The actor pulls every stargazer (or forker) of those repos and turns each into a full lead profile with a lead score. Find every developer who starred a competitor's repo.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "repoLeadsSource": {
                        "title": "Lead source (for Repo URLs)",
                        "enum": [
                            "stargazers",
                            "forkers"
                        ],
                        "type": "string",
                        "description": "Which audience to extract from each repo in Repo lead mode.",
                        "default": "stargazers"
                    },
                    "maxLeadsPerRepo": {
                        "title": "Max leads per repo",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on how many stargazers/forkers to pull per repo (each becomes one billed profile lookup).",
                        "default": 50
                    },
                    "extractRepos": {
                        "title": "Aggregate repositories (stars, languages, top repo)",
                        "type": "boolean",
                        "description": "Fetch the user's public repos to compute total stars, total forks, top languages and the most-starred repo. Adds one extra API call per profile.",
                        "default": true
                    },
                    "includeRepoList": {
                        "title": "Include full repository list",
                        "type": "boolean",
                        "description": "Output the repos[] array with per-repo details: stars, forks, watchers, open issues, language, topics, license, isFork, timestamps.",
                        "default": false
                    },
                    "maxRepos": {
                        "title": "Max repos per user",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Cap on repos sampled per user (sorted by stars, GitHub page ceiling = 100).",
                        "default": 100
                    },
                    "includeLanguageStats": {
                        "title": "Bytes-weighted language % stats",
                        "type": "boolean",
                        "description": "Compute real language distribution (percent of code bytes) aggregated over the user's top repos. Adds extra API calls per profile.",
                        "default": false
                    },
                    "includeSocialAccounts": {
                        "title": "Social accounts (LinkedIn / X / YouTube / Mastodon …)",
                        "type": "boolean",
                        "description": "Fetch all linked social accounts from the profile. LinkedIn is surfaced as a dedicated field and boosts the lead score.",
                        "default": true
                    },
                    "includeOrganizations": {
                        "title": "Organizations",
                        "type": "boolean",
                        "description": "Include the public organizations the user belongs to.",
                        "default": false
                    },
                    "includeStarred": {
                        "title": "Starred repositories",
                        "type": "boolean",
                        "description": "Include a sample of the repositories the user has starred (signals interests / tech stack).",
                        "default": false
                    },
                    "maxStarred": {
                        "title": "Max starred repos",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Cap on starred repos returned per user.",
                        "default": 30
                    },
                    "includeReadme": {
                        "title": "Profile README",
                        "type": "boolean",
                        "description": "Include the text of the user's profile README (the special USER/USER repo shown on their profile page).",
                        "default": false
                    },
                    "includeAchievements": {
                        "title": "Achievements & highlights (badges)",
                        "type": "boolean",
                        "description": "Include GitHub achievement badges (Pull Shark, Starstruck, Arctic Code Vault, etc.) and account highlights (Pro / Developer Program / Public Sponsor). Parsed from the profile page.",
                        "default": false
                    },
                    "includePinnedRepos": {
                        "title": "Pinned repositories",
                        "type": "boolean",
                        "description": "Include the repositories the user pinned to their profile, enriched with stars, forks, language and topics. Best paired with repo aggregation.",
                        "default": false
                    },
                    "includeContributions": {
                        "title": "Contributions in the last year",
                        "type": "boolean",
                        "description": "Include the user's total public contribution count over the last year (a strong activity signal for recruiting).",
                        "default": false
                    },
                    "exportFormat": {
                        "title": "Export format",
                        "enum": [
                            "default",
                            "csv"
                        ],
                        "type": "string",
                        "description": "default = full JSON record. csv = flat, sales-friendly row for Google Sheets / HubSpot / Pipedrive.",
                        "default": "default"
                    },
                    "includeLeadScore": {
                        "title": "Lead score + tier",
                        "type": "boolean",
                        "description": "Add a 0-100 lead score with tier (cold/warm/hot/scorching) and reasons, computed from followers, stars, repos, account age, email, LinkedIn, company and hireable status.",
                        "default": true
                    },
                    "includeOutreach": {
                        "title": "Outreach helpers (icebreaker + best contact)",
                        "type": "boolean",
                        "description": "Add a ready-to-send outreach icebreaker and a bestContact picker (email > LinkedIn > website > Twitter).",
                        "default": true
                    },
                    "minLeadScore": {
                        "title": "Minimum lead score (0-100)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Drop profiles below this lead score. 0 = keep all.",
                        "default": 0
                    },
                    "minFollowers": {
                        "title": "Minimum followers",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop profiles with fewer followers. 0 = keep all.",
                        "default": 0
                    },
                    "minRepos": {
                        "title": "Minimum public repos",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop profiles with fewer public repos. 0 = keep all.",
                        "default": 0
                    },
                    "minStars": {
                        "title": "Minimum total stars",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop profiles with fewer total stars across their repos. Requires repo aggregation. 0 = keep all.",
                        "default": 0
                    },
                    "hireableOnly": {
                        "title": "Only hireable (open to work)",
                        "type": "boolean",
                        "description": "Keep only profiles flagged as available for hire.",
                        "default": false
                    },
                    "withEmailOnly": {
                        "title": "Only profiles with a public email",
                        "type": "boolean",
                        "description": "Keep only profiles that expose a public email (hottest leads).",
                        "default": false
                    },
                    "githubToken": {
                        "title": "GitHub token (optional)",
                        "type": "string",
                        "description": "Optional personal access token. Without it GitHub allows ~60 requests/hour per IP (the actor rotates proxy IPs to spread these). A token raises the limit to 5000/hour — recommended for large batches and lead mode. Read-only, no scopes needed."
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many profiles to fetch in parallel.",
                        "default": 5
                    },
                    "timeout": {
                        "title": "Timeout per request (seconds)",
                        "minimum": 10,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Max wait time per API request.",
                        "default": 30
                    },
                    "maxRetries": {
                        "title": "Retries on rate limit / error",
                        "minimum": 0,
                        "maximum": 4,
                        "type": "integer",
                        "description": "Retry attempts (with a rotated IP) when a request is rate-limited or errors.",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
