curl --request GET \
--url https://scrapebadger.com/v1/github/profiles/{username} \
--header 'X-API-Key: <api-key>'import requests
url = "https://scrapebadger.com/v1/github/profiles/{username}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/github/profiles/{username}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/github/profiles/{username}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/github/profiles/{username}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/github/profiles/{username}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/github/profiles/{username}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"profile": {
"login": "example-user",
"link": "https://github.com/example-user",
"is_organization": false,
"followers": 1234,
"followers_display_count": 1200,
"created_at": "2020-01-02T03:04:05Z",
"created_utc": 1577934245
}
}Get a GitHub profile
Parameters, pagination and explicit response schema for public GitHub profiles.
curl --request GET \
--url https://scrapebadger.com/v1/github/profiles/{username} \
--header 'X-API-Key: <api-key>'import requests
url = "https://scrapebadger.com/v1/github/profiles/{username}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/github/profiles/{username}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/github/profiles/{username}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/github/profiles/{username}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/github/profiles/{username}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/github/profiles/{username}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"profile": {
"login": "example-user",
"link": "https://github.com/example-user",
"is_organization": false,
"followers": 1234,
"followers_display_count": 1200,
"created_at": "2020-01-02T03:04:05Z",
"created_utc": 1577934245
}
}profile and mode-specific sections.
Valid parameter combinations
| Tab | Allowed optional input | Pagination |
|---|---|---|
overview (default) | year from 1970 through the current year | No page/cursor input |
repositories | page starting at 1 | 30 rows; follow pagination.next_page while has_next is true |
stars (users only) | next_page_token | 30 rows; reuse the exact opaque pagination.next_page_token |
username as a login or leading @handle; raw URLs and reserved website
routes are rejected. Do not substitute a next-page URL for a cursor. Use your
ScrapeBadger X-API-Key; a restricted key needs the github API scope.
Calendar and activity windows
year selects a whole calendar year. Its activity timeline is December for past
years and the current month for the current year. Without it, the calendar is the
last 12 months and the activity timeline is the current month. contributions.from
and to describe the calendar; activity_from and activity_to describe the
activity window when published. Organizations omit user contribution sections.
Source availability and errors
Missing fields or omitted sections mean unavailable/not applicable. Explicitnull public metadata remains null. A *_approximate flag marks compact native
counts; exact supplemental metadata keeps original website counts separately.
Timestamp pairs use ISO *_at and Unix-seconds *_utc.
Invalid tab/parameter combinations are rejected before source requests. Unknown
handles return 404; invalid values return 400/422; authentication, scope, credit
and account rate-limit errors follow the standard API contract. Source failures,
challenge pages or unexpected markup return 502/503 and are not billed. An empty
list is a verified native empty state, never a substitute for a source failure.
See the overview for examples and the
endpoint reference for the same
OpenAPI operation. General search, standalone repository detail and trending are
outside this profile endpoint.Authorizations
Path Parameters
GitHub login or leading @handle, not a profile URL. Up to 39 login characters; reserved site routes and invalid logins are rejected.
1 - 40^@?[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$Query Parameters
Profile mode. Stars supports user accounts only.
overview, repositories, stars Overview only: 1970 through the current UTC year; activity is December or current month
x >= 1970Repositories only. Positive page number; 30 repository rows per page. Follow pagination.next_page.
x >= 1Stars only. Exact opaque pagination.next_page_token from the prior response; not a URL. 30 rows per page.
1024Response
Unwrapped profile object. Source-specific sections may be omitted. Representative examples are abridged and not live production results.
Unwrapped profile response, with mode-specific public sections.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Public user overview only; omitted for organizations and other tabs.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

