GitHub Followers and Following Export
Pricing
from $1.70 / 1,000 user rows
GitHub Followers and Following Export
Export the full followers and following lists of any public GitHub account as flat rows: login, name, company, location, bio, profile URL, and user ID. Reads past the page 100 point where the Next link ends, and reports whether each list was read to the end.
Pricing
from $1.70 / 1,000 user rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
Give GitHub usernames and get their followers and following lists back as flat rows: one row per person, with login, name, company, location, bio, profile URL, and user ID. A free report per list states the count GitHub declares and whether the list was read to the end. Mamba Labs pays the platform and proxy costs; you pay per row returned.
Features
- Reads past page 100. On GitHub's list pages the Next link stops at page 100, about 5,000 people, and the pages after it are still served. This actor keeps reading until a page is empty. A test run returned 5,200 unique rows past that point. In a page read of an account with 24,955 followers, page 500 held the last 5 rows and page 501 was empty, which matches the declared count exactly.
- One report per list.
list_reportgivesdeclared_count,rows_returned,pages_read, andlist_complete, so you can see whether an export is whole.list_completeis true only when the actor reached the end. - Published profile fields with no extra requests. Name, company, location, and bio come from the list page itself.
- Users and organizations. An organization has a followers list and no following list.
- Cost guards. A maximum per list, a maximum charge per run, and the actor stops 90 seconds before the run's timeout and delivers what it has.
How the data is read
The actor reads the same public list pages a logged out visitor sees, through the Apify proxy, at one exit address and a steady pace of about 8 pages a minute. One request per list goes to the GitHub REST API for the declared count. No GitHub login is needed, and no other developer's actor is called. If GitHub answers 429, the actor waits for the time GitHub states, up to 120 seconds, up to 3 times, then stops that list and says so in its report. It does not switch to other addresses to keep going.
With your own github_token, the lists come from the GitHub REST API instead, at up to 5,000 requests an hour. Those rows carry login, user ID, profile URL, and avatar only, because the API list does not include the other fields. The token goes only to api.github.com, and it is never stored or logged. The token route was tested with fixtures and the refused token path; your own token is its first live test.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
users | array | Usernames or profile URLs of public GitHub accounts, up to 100 a run. Clay users: wrap a column in a one item list. | |
list | string | both | followers, following, or both (default). |
max_results_per_list | string | 1000 | Rows to return per list, from 1 to 100000. Default 1000. Each row is charged. Large lists also need a longer run timeout: about 400 rows a minute. |
github_token | string | Optional. Your own GitHub token reads through the REST API at up to 5,000 requests an hour, with login, user ID, and avatar only: no name, company, location, or bio. Never stored or logged. | |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Give at least one username. max_results_per_list takes a number as text, which is what Clay sends.
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: user, list_report, run_summary. run_summary is the one free row written when the input is refused. |
target_user | string | The account whose list this row belongs to. |
list_type | string | followers or following. |
login | string | user: the GitHub username of this follower or followed account. |
name | string | user: the display name the account published. Empty on a github_token run. |
company | string | user: the company the account published. Empty on a github_token run. |
location | string | user: the location the account published. Empty on a github_token run. |
bio | string | user: the bio the account published. Empty on a github_token run. |
profile_url | string | user: the account page. |
avatar_url | string | user: the profile image. |
user_id | integer | user: the numeric GitHub account ID. |
position | integer | user: place in the list as read, starting at 1. |
declared_count | integer | list_report: the count GitHub states for this list. Empty when that read was refused. |
rows_returned | integer | list_report: user rows returned for this list. |
pages_read | integer | list_report: list pages read. |
list_complete | boolean | list_report: true only when the actor read to the end of the list. |
read_route | string | list_report: github_list_pages, or github_rest_api on a github_token run. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"user-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. You pay for each user row and for the run start. A list_report row, a user with no public account, and a refused input are free. A list with 25,000 followers costs about 50 USD at this price, so set max_results_per_list or max_charge_usd before you run a large account.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
user-row, one follower or followed account returned | $0.002 | $0.0019 | $0.0018 | $0.0017 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.0015 | $0.0015 | $0.0015 | $0.0015 |
Per 1,000 rows of user-row: $2.00 on the free plan, $1.70 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 750 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
Usage examples
Apify Console or API.
{"users": ["sindresorhus"],"list": "following","max_results_per_list": "20"}
Clay. Number inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-github-followers-following-export exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| A username with no public account | One free list_report row with row_status no_results and error_reason starting not_found:. The next user runs |
| GitHub rate limits the run | The rows read so far, and a free list_report with error_reason rate_limited and list_complete false |
| GitHub refuses your token | One free list_report per list, with error_reason starting token_refused: |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- About 400 rows a minute without a token, measured at 5,200 rows in 755 seconds. A list of 25,000 needs a run timeout of about 70 minutes, so raise the timeout for a large list.
- No email addresses. The actor reads list pages, which do not show email, and it does not open each profile.
- Rows carry only what each account chose to publish. A person can change or remove these fields at any time.
declared_countis empty when GitHub refuses that one REST read, which allows 60 reads an hour per address. The list is still read.- A list can change during a long run. The actor removes repeats between neighboring pages, and
declared_countis read at the start of the list, so the final count can differ slightly. - On the Apify free plan the actor stops at 1.50 USD of charges a month, about 750 rows. Any paid Apify plan removes the cap.
- GitHub's Acceptable Use Policies restrict automated collection and forbid using GitHub information for spam, including unsolicited email and selling personal information to recruiters, headhunters, and job boards. You are responsible for how you use this data.
Mamba Labs actor suite
Built by Mamba Labs.