# GitHub Trending Scraper — Repos by Language, Stars & Topics (`highbrow_fame/github-trending-repos`) Actor

GitHub Trending repositories by programming language, date range and spoken language: rank, stars gained today/this week/this month, total stars, forks, and optionally topics, license and dates.

- **URL**: https://apify.com/highbrow_fame/github-trending-repos.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 repository delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## GitHub Trending Scraper — Repos by Language, Stars & Topics

Get the repositories on GitHub Trending — for any programming language, today, this week or this month, and for any spoken language: rank, stars gained in the period, total stars, forks, description and main language — and, if you want, topics, license, homepage, creation and last-push dates, open issues and whether the owner is an organization or a user. Type languages, or paste your github.com/trending links.

**Why this one**

- 🗂️ **Every list GitHub has.** Type languages as GitHub names them — Python, TypeScript, C++, C#, Jupyter Notebook, any of the 842 in GitHub's menu — choose today, this week and/or this month, and optionally a spoken language. Or paste a trending link as you set it up on github.com/trending.
- ⚡ **Fast.** A live test run read 31 lists — all languages plus 9 languages, each for today, this week and this month, and a Rust list in Chinese — 557 repositories with topics, license and dates in 40 seconds. The three lists of the example input take 5 seconds.
- 🏷️ **Details without a token.** Tick **Add topics, license and dates**: they come from the public GitHub API, 50 repositories per call, so the 557 above needed 9 calls and no waiting. A GitHub token is optional.
- 🔒 **No personal data.** Only the owner in the repository's address is kept; the "Built by" contributors are counted, not named, and trending developers (a list of persons) are not read. Phone numbers and e-mail addresses written into descriptions are replaced with `[phone removed]` / `[e-mail removed]`.
- 💸 **You pay only for repositories delivered.** A link that is not a GitHub Trending link, or a language GitHub does not know, comes back as a free record with the reason.

### What you get

For every repository:

| Field | What it is |
|---|---|
| `rank` | its place in the list (1 = top) |
| `fullName`, `owner`, `name`, `url`, `repoId` | the repository and GitHub's numeric id |
| `description`, `language` | as shown on GitHub Trending (the main language can be empty) |
| `starsInPeriod` | stars gained today / this week / this month, as GitHub counts them |
| `stars`, `forks` | totals at the time of the run |
| `builtByShown` | how many contributors GitHub shows under "Built by" (at most 5) |
| `trendingLanguage`, `period`, `spokenLanguage`, `listUrl` | which list it came from: "All languages" or a language; daily, weekly or monthly; the spoken-language code |
| `input`, `scrapedAt`, `status`, `error` | which input it came from, and why an input gave nothing |

With **Add topics, license and dates** also: `topics`, `license` (SPDX id such as MIT, or the license's name), `homepage`, `createdAt`, `pushedAt` (last push), `openIssues`, `isArchived`, `isFork`, `ownerType` (Organization or User), `defaultBranch`, `sizeKb`.

#### Example

A real record from a live run with details — all languages, this week, 25 September 2026:

```json
{
  "input": "all",
  "period": "weekly",
  "spokenLanguage": null,
  "trendingLanguage": "All languages",
  "rank": 4,
  "repoId": 1241960226,
  "fullName": "alibaba/open-code-review",
  "owner": "alibaba",
  "name": "open-code-review",
  "url": "https://github.com/alibaba/open-code-review",
  "description": "Secure, fast, efficient, battle-tested at Alibaba's scale. Hybrid architecture code review tool: deterministic pipelines + LLM Agent, precise line-level comments, …",
  "language": "Go",
  "stars": 41297,
  "forks": 2967,
  "starsInPeriod": 6920,
  "builtByShown": 5,
  "topics": ["agent", "agent-skills", "code-review", "code-review-assistant", "harness", "repository-level-context"],
  "license": "Apache-2.0",
  "homepage": "https://open-codereview.ai",
  "createdAt": "2026-05-18T02:16:36Z",
  "pushedAt": "2026-09-24T09:59:47Z",
  "openIssues": 224,
  "isArchived": false,
  "isFork": false,
  "ownerType": "Organization",
  "defaultBranch": "main",
  "sizeKb": 54938,
  "listUrl": "https://github.com/trending?since=weekly",
  "status": "OK",
  "scrapedAt": "2026-09-25T21:46:54.853Z"
}
```

### How to use it

1. Type **Programming languages** (or "all"), choose the **Date ranges** and, if you like, a **Spoken language** — or paste **Trending links** from github.com/trending, one per line. With both fields empty you get today's list over all languages.
2. Tick **Add topics, license and dates** if you need them.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow what is trending in your stack, save your input as a task and schedule it daily: every run keeps the `rank`, `starsInPeriod` and `scrapedAt` of that day.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per repository delivered** — see the price on this page. The details cost nothing extra. Links that are not GitHub Trending links and languages GitHub does not know are free.

### FAQ

**How many repositories per list?** At most 25 — that is all GitHub Trending shows. In the live test run the 30 language lists held 11 to 25 each, and the Rust list in Chinese held 1; a list can also be empty (then you get a free `NO_RESULTS` record). Set **Max repositories per list** lower for the top N only.

**Why is a repository in more than one list?** Because it trends in more than one: in the all-languages list and in its language's list, today and this week. Each record says which list it is from and its rank there. The 557 records of the live test run were 413 different repositories; use `repoId` to keep one of each.

**Do I need a GitHub token?** No. The details come from GitHub's public search API, which allows 10 calls a minute without a token — each call covers 50 repositories, so about 500 repositories a minute. Beyond that the run waits for GitHub's limit and says so in the log. If you have a GitHub token, you can add it for GitHub's higher limit for signed-in calls; it is stored as a secret and used only for the GitHub API. A token GitHub turns down leaves the repositories without details, with the reason in `detailsError`, and the run goes on.

**Why not the trending developers?** That list shows persons — their names and accounts. This tool reads repositories only.

**Is this affiliated with GitHub?** No. This is an independent tool that reads the public GitHub Trending pages and the public GitHub API.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `trendingUrls` (type: `array`):

Open github.com/trending, choose a language, a date range and a spoken language, and paste the address. One per line. Developer lists are not read.

## `languages` (type: `array`):

Or type languages as GitHub names them: Python, TypeScript, C++, C#, Jupyter Notebook, Rust… Write "all" for the list over all languages. Each language is read for every date range below. Leave both fields empty for today's list over all languages.

## `periods` (type: `array`):

For the languages above: trending today, this week and/or this month.

## `spokenLanguage` (type: `string`):

Optional, for the languages above: only repositories whose README is written in this language.

## `maxReposPerList` (type: `integer`):

GitHub shows at most 25 trending repositories per list. Set a lower number for the top N only.

## `includeDetails` (type: `boolean`):

Adds topics, license, homepage, created and last-push dates, open issues, archived/fork flags and owner type from the public GitHub API — one call per 50 repositories. Without a token GitHub allows 10 such calls a minute; beyond that the run waits for the limit.

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

Optional, only for the details above: your GitHub personal access token (no scopes needed) for GitHub's higher limit for signed-in calls. It is used only for the GitHub API.

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

How many lists to read at the same time.

## `proxyConfiguration` (type: `object`):

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "trendingUrls": [
    "https://github.com/trending"
  ],
  "languages": [
    "Python",
    "Rust"
  ],
  "periods": [
    "daily"
  ],
  "spokenLanguage": "",
  "maxReposPerList": 25,
  "includeDetails": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "trendingUrls": [
        "https://github.com/trending"
    ],
    "languages": [
        "Python",
        "Rust"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/github-trending-repos").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 = {
    "trendingUrls": ["https://github.com/trending"],
    "languages": [
        "Python",
        "Rust",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/github-trending-repos").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "trendingUrls": [
    "https://github.com/trending"
  ],
  "languages": [
    "Python",
    "Rust"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/github-trending-repos --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/github-trending-repos"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/RZlIKwUt9z1zTBc2p/builds/p31W4TXdDhHZk9b4C/openapi.json
