Datasets API endpoint
Searches enriched public GitHub user profiles stored in a search index. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Sort enum: `relevance`, `rank_score_desc`, `followers_desc`, `account_age_desc`, `account_age_asc`, `distance_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).
/datasets/github-users/searchDataset id enum:
github-usersQuery parameters:
q: optional full-text query over login, name, company, bio and location, max 256 characters.login: optional exact login filter, max 128 characters.company: optional exact normalized-company filter (lowercased, leading @ stripped), max 128 characters.influence_tier: optional follower-based tier filter. Allowed values: nano, micro, mid, macro, mega.country: optional exact geocoded country filter, max 128 characters.country_code: optional exact ISO country-code filter, max 128 characters.state: optional exact geocoded state/region filter, max 128 characters.city: optional exact geocoded city filter, max 128 characters.domain: optional interest-domain tag filter (e.g. ml-ai, web, devops), max 128 characters.has_email: optional public-email presence filter.has_twitter: optional public Twitter/X handle presence filter.has_blog: optional public blog/website presence filter.reachable: optional filter for any public contact channel (email, Twitter, blog or social account).active_90d: optional filter for activity within the last 90 days.hireable: optional filter for the GitHub available-for-hire flag.is_org: optional organization filter (normally false; the crawl indexes individuals).is_bot: optional bot filter (normally false; the crawl skips formal GitHub bots).is_suspected_automation: optional filter for suspected automation (commit-farm / mass-repo bots). When omitted these records are hidden by default; pass true to isolate them or false for the same default clean view.min_followers: optional minimum follower count.max_followers: optional maximum follower count.min_repos: optional minimum public repository count.min_rank_score: optional minimum composite rank score.min_account_age_years: optional minimum account age in years.max_account_age_years: optional maximum account age in years.lat: optional latitude for radius filtering or distance sort.lon: optional longitude for radius filtering or distance sort.radius_m: optional radius in meters, from 1 through 50000; requires lat and lon when supplied.sort: optional sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc.page: optional page number, defaults to 1.page_size: optional page size, defaults to 20 and maxes at 100.Response behavior:
is_suspected_automation is set, so rank_score ranking is clean by default.rank_score weights follower-based influence primarily and log-dampens recent activity (pushes/PRs/reviews), so raw push volume cannot dominate the ranking.relevance sort when q is supplied, otherwise rank_score_desc.lat and lon must be supplied together. distance_asc requires lat and lon, but does not require radius_m.min_followers must not exceed max_followers.10000; page * page_size must not exceed 10000.items array (not an error) when the dataset has no matches yet.1 credit per record returned, minimum 2. A search that returns 20 records costs 20 credits, a full page of 100 costs 100, and an empty or one-record result costs 2. You are charged for what comes back, not for the page_size you ask for, but your balance must cover the requested page_size for the call to be accepted. The response header x-credit-cost shows what a call was charged.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| login | 20 | |
| id | 20 | |
| type | 20 | |
| name | 19 | |
| company | 10 | |
| company_normalized | 9 | |
| hireable | 20 | true in 3 of 20 |
| avatar_url | 20 | avatars.githubusercontent.com |
| html_url | 20 | github.com |
| location_raw | 16 | |
| has_email | 20 | true in 4 of 20 |
| has_twitter | 20 | true in 3 of 20 |
| has_blog | 20 | true in 10 of 20 |
| social_count | 20 | 0 to 3, median 0 |
| reachable | 20 | true in 11 of 20 |
| geo | 15 | |
| followers | 20 | 1 to 310,536, median 12 |
| following | 20 | 0 to 208, median 8 |
| follower_following_ratio | 20 | 0.33 to 310,536, median 1.05 |
| public_repos | 20 | 7 to 447, median 24 |
| public_gists | 20 | 0 to 45, median 0 |
| created_at | 20 | 2010-10-14 to 2025-12-26 |
| account_age_years | 20 | 0.5 to 15.8, median 7.8 |
| active_90d | 20 | true in 12 of 20 |
| pushes_30d | 20 | 0 to 546, median 15 |
| prs_30d | 20 | 0 to 1, median 0 |
| reviews_30d | 20 | 0 |
| influence_tier | 20 | |
| rank_score | 20 | 720 to 5,492, median 1,362 |
| is_org | 20 | true in 0 of 20 |
| is_bot | 20 | true in 0 of 20 |
| is_suspected_automation | 20 | true in 0 of 20 |
| crawled_at | 20 | 2026-06-23 to 2026-08-06 |
| schema_version | 20 | |
| bio | 19 | |
| last_active_at | 12 | 2026-05-30 to 2026-06-22 |
| blog | 10 | |
| 4 | ||
| social_accounts | 4 | median 1 entry |
| twitter_username | 3 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Full-text query over login, name, company, bio and location, max 256 characters | ||
| login | string | No | Exact login filter, max 128 characters | ||
| company | string | No | Exact normalized-company filter, max 128 characters | ||
| influence_tier | string | No | Follower-tier enum: nano, micro, mid, macro, mega Allowed values: nano, micro, mid, macro, mega. | ||
| country | string | No | Exact geocoded country filter, max 128 characters | ||
| country_code | string | No | Exact ISO country-code filter, max 128 characters | ||
| state | string | No | Exact geocoded state filter, max 128 characters | ||
| city | string | No | Exact geocoded city filter, max 128 characters | ||
| domain | string | No | Interest-domain tag filter (e.g. ml-ai, web, devops), max 128 characters | ||
| has_email | boolean | No | Filter by public email presence | ||
| has_twitter | boolean | No | Filter by public Twitter/X handle presence | ||
| has_blog | boolean | No | Filter by public blog/website presence | ||
| reachable | boolean | No | Filter by any public contact channel | ||
| active_90d | boolean | No | Filter by activity within the last 90 days | ||
| hireable | boolean | No | Filter by the GitHub available-for-hire flag | ||
| is_org | boolean | No | Organization filter (normally false; the crawl indexes individuals) | ||
| is_bot | boolean | No | Bot filter (normally false; the crawl skips bots) | ||
| is_suspected_automation | boolean | No | Suspected automation (commit-farm/mass-repo bots); omitted these are hidden by default, pass true to isolate them | ||
| min_followers | integer | No | Minimum follower count | ||
| max_followers | integer | No | Maximum follower count | ||
| min_repos | integer | No | Minimum public repository count | ||
| min_rank_score | integer | No | Minimum composite rank score | ||
| min_account_age_years | number | No | Minimum account age in years | ||
| max_account_age_years | number | No | Maximum account age in years | ||
| lat | number | No | Latitude for radius filtering or distance sort | ||
| lon | number | No | Longitude for radius filtering or distance sort | ||
| radius_m | integer | No | Radius in meters, 1 through 50000; requires lat and lon when supplied | ||
| sort | string | No | Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc Allowed values: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc. | ||
| page | integer | No | 1 | Page number, defaults to 1 | |
| page_size | integer | No | 20 and maxes at 100 | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/github-users/search?q=coffee&influence_tier=nano&country=us&has_email=true&has_twitter=true&has_blog=true&reachable=true&active_90d=true&hireable=true&is_org=true&is_bot=true&is_suspected_automation=true&sort=relevance&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "github-users",
"items": [
{
"login": "octodev",
"name": "Octo Dev",
"company_normalized": "google",
"influence_tier": "mid",
"geo": {
"country": "Germany",
"country_code": "DE",
"city": "Berlin"
},
"followers": 1200,
"reachable": true,
"has_email": true,
"domains": [
"ml-ai"
],
"rank_score": 88
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "rank_score_desc"
}
}Request schema
No body schema
Response schema
#/definitions/datasets.githubUsersSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | datasets.GithubUserSearchResponse | No | ||||
| data.dataset | string | No | Identifier of the dataset queried (`github-users`). | |||
| data.items | array | No | Matching GitHub user records on this page. GithubUserDatasetItem record, 51 fields: account_age_years, active_90d, avatar_url, bio, blog, company, company_normalized, crawled_at, created_at, distance_m, domains, email and 30 more. Described under Search nearby GitHub users API. | |||
| data.page | integer | No | Page number returned. | |||
| data.page_size | integer | No | Number of items per page. | |||
| data.sort | string | No | Sort order applied. | |||
| data.total | integer | No | Total number of records matching the filters. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/github-users/search?q=coffee&influence_tier=nano&country=us&has_email=true&has_twitter=true&has_blog=true&reachable=true&active_90d=true&hireable=true&is_org=true&is_bot=true&is_suspected_automation=true&sort=relevance&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"