# GitHub Topics Repositories API

> Public GitHub repositories listed under a topic, with name, owner, description, stars, forks and language.

- Page: https://cleanedweb.com/catalog/github-topics-repositories-api/
- Contract (JSON): https://cleanedweb.com/catalog/github-topics-repositories-api/contract.json
- Source: github.com (https://github.com/)
- Category: Public data
- Languages: English
- Updated: 2026-10-26

## About

GitHub topic pages list the public repositories that carry a topic, such as web-scraping. This API reads one topic at a time and returns a record for each repository: its name, owner, description, topics and link.

Choose a topic with the topics input, and narrow it to one programming language if you want. Stars, forks and language are on each repository's own page, so they are present only when detail pages are read.

## Typical uses

- Find the most-starred projects in a topic.
- Watch which repositories join a topic over time.
- Build a list of open source projects in one language.

## Limitations

- Stars, forks and language come from each repository page, so they appear only on enriched records.
- Stars and forks are returned as text, such as "12", not as numbers.

A run reads until the source ends or your `max_items`, `timeout_seconds` or budget stops it.

## Key fields

| Field | Type | Sample value |
| --- | --- | --- |
| `title` | string | `creeper` |
| `owner_login` | string | `z7r1k3` |
| `description` | string | `Web Crawler and Scraper` |
| `stargazer_count` | string | `12` |
| `forks_count` | string | `1` |
| `programming_language` | string | `Python` |
| `url` | string | `https://github.com/z7r1k3/creeper` |

Sample values come from one saved record, not a live run. Every field with its type, and the schemas, are in https://cleanedweb.com/catalog/github-topics-repositories-api/contract.json. Some fields the source returns are not published, so a record can carry fields the schema does not list.

## Inputs

- `topics` (string): Optional. Reads the site's listing for this topic. Leave it out for the default listing.
- `programming_language` (string): Optional. Only records whose programming language matches.

`enrich_records` is on by default and adds the fields that only appear on each record's detail page. Send `false` to read list fields only. See https://cleanedweb.com/docs/run-api/
`continuation` and `read_on` resume a run that stopped early; see https://cleanedweb.com/catalog/github-topics-repositories-api/contract.json.

## Request

`POST https://broker.cleanedweb.com/v1/catalog/public/apis/generated_047a8ebb25911ccf62f4a212/endpoints/generated_047a8ebb25911ccf62f4a212_search/run`

```bash
curl -X POST https://broker.cleanedweb.com/v1/catalog/public/apis/generated_047a8ebb25911ccf62f4a212/endpoints/generated_047a8ebb25911ccf62f4a212_search/run \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: UNIQUE_REQUEST_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "topics": "web-scraping"
  },
  "max_items": 25
}'
```

Send an `Idempotency-Key` header with every run and save it before you send. Reuse it only to retry the same request. If the run does not end within `wait_seconds`, read the result with the same API key and key:

`GET https://broker.cleanedweb.com/v1/catalog/public/apis/generated_047a8ebb25911ccf62f4a212/endpoints/generated_047a8ebb25911ccf62f4a212_search/result`

## Run it

Reading the catalog needs no credential. Running needs a CleanedWeb account and an API key with the `run` scope; the first 5,000 records are free, then $1 per 1,000 records. See https://cleanedweb.com/docs/run-catalog-api/

CleanedWeb is not affiliated with GitHub.
