# 🐙 GitHub Trending Repos Scraper (`skootle/github-trending`) Actor

Scrape daily/weekly/monthly trending repositories from github.com/trending. Joined with GitHub REST API for license, topics, watchers, push date. Watchlist mode tracks rank/star changes day-over-day. Export, run via API, schedule, or integrate with other tools.

- **URL**: https://apify.com/skootle/github-trending.md
- **Developed by:** [Skootle](https://apify.com/skootle) (community)
- **Categories:** Developer tools, AI, News
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 github trending repo records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![GitHub Trending Repos hero](https://raw.githubusercontent.com/kesjam/skootle-actors-assets/main/heroes/github-trending.png)

### TL;DR

Daily, weekly, monthly trending repositories from `github.com/trending`. Returns clean structured JSON with rank, stars, stars-gained-this-period, language, contributors, plus optional GitHub REST API enrichment for license, topics, watchers, default branch, push date, and archived/fork flags. Watchlist mode emits only repos where rank or stars changed. Built on the public `github.com/trending` HTML page plus optional `api.github.com/repos/<owner>/<repo>` enrichment.

---

<!-- skootle:review-cta -->
> Try it on a small dataset, then let us know what you think in a [review](https://apify.com/skootle/github-trending/reviews).

---

### What does GitHub Trending Repos do?

GitHub Trending Repos extracts the trending repositories from `github.com/trending` and optionally joins each repo with its full GitHub REST API metadata. You pick which trending windows to pull (`daily`, `weekly`, `monthly`), optionally filter by programming language, and the actor returns one record per repo with: full name, owner, name, URL, description, language + color, stars, forks, stars gained this period, rank, top contributors, and the API enrichment block (license, topics, watchers, default branch, push date, created/updated dates, size, archived flag, fork flag).

Watchlist mode (`watchlistMode: true`) tracks `stars` and `rank` per repo across runs and emits only repos where either changed. Schedule daily and you get a clean diff feed of what's gaining or losing momentum.

### Why scrape GitHub Trending?

`github.com/trending` is the de facto pulse of the open-source world. Every viral OSS launch, every breakthrough AI repo, every new framework hits Trending within hours of going viral on Twitter/HN. For developer relations, technology radar, VC tech scouting, recruiting, license auditing, and competitive OSS intelligence, the trending feed is high-signal data.

GitHub doesn't expose a Trending API — only the HTML page. This actor handles the HTML parsing plus optional REST API enrichment so you get clean typed records with license + topics + watchers, not just the basic stats visible on the page.

### Who needs this?

- **AI / LLM teams** tracking trending AI repos and benchmarks daily
- **VC and tech-scouting analysts** sourcing OSS-first acquisition or investment targets
- **DevRel teams** monitoring competitor and category-adjacent OSS momentum
- **Recruiters** mining contributor lists of fast-rising repos for top-of-funnel candidates
- **License compliance teams** auditing license types across trending dependencies
- **Technology radar / engineering leadership** spotting new frameworks before they go mainstream
- **AI agents** consuming a daily curated digest of dev innovation

### How to use GitHub Trending Repos

1. Open the **Input** tab on the actor page
2. Pick periods in the `periods` field (`daily`, `weekly`, `monthly`). One run handles many.
3. Optionally filter by language (`languages: ["python", "typescript"]`) — empty means all languages combined
4. Optionally set `spokenLanguageCode` for spoken-language filter (`en`, `zh`, `ja`)
5. Optionally enable `enrichWithApi` (default `true`) for license, topics, watchers
6. Optionally provide a `githubToken` (raises GitHub API quota from ~60/h to ~5,000/h)
7. Optionally enable `watchlistMode` for daily diffs
8. Set `maxItems` (default 25)
9. Click **Start**

### How much will scraping GitHub Trending cost?

This actor is priced per event:

- **Actor Start**: $0.01 once per run
- **GitHub trending repo record**: tiered, charged per record written

| Apify plan | $/1000 records |
|---|---|
| FREE | $25.00 |
| BRONZE | $21.25 |
| SILVER | $17.50 |
| GOLD | $15.00 |
| PLATINUM | $15.00 |
| DIAMOND | $13.50 |

A typical daily watchlist on the `daily` window with API enrichment returns ~25 repos on day 1, ~5-15 per day in watchlist mode. Roughly $0.10-$0.30 per daily run on GOLD.

### Is it legal to scrape GitHub Trending?

Yes. `github.com/trending` is a public marketing page — anyone in a browser can read it. The GitHub REST API is also explicitly published with public read access (no auth required for public-repo endpoints, though authenticated requests get a higher rate limit). This actor honors both with respectful pacing.

GitHub's Acceptable Use Policy permits programmatic access to public data. The data scraped (repo names, stars, descriptions, contributor handles) is published by repo owners as marketing material specifically intended to be discoverable. Use freely for research, analytics, AI training, or commercial intelligence products.

### Examples

#### Example 1: Daily Python trending

```json
{
  "periods": ["daily"],
  "languages": ["python"],
  "enrichWithApi": true,
  "watchlistMode": true,
  "maxItems": 25
}
````

#### Example 2: AI-focused weekly trending across 4 languages

```json
{
  "periods": ["weekly"],
  "languages": ["python", "typescript", "rust", "go"],
  "enrichWithApi": true,
  "maxItems": 100
}
```

#### Example 3: Daily all-languages combined

```json
{
  "periods": ["daily"],
  "languages": [],
  "enrichWithApi": true,
  "maxItems": 25
}
```

#### Example 4: Monthly TypeScript trending with token

```json
{
  "periods": ["monthly"],
  "languages": ["typescript"],
  "enrichWithApi": true,
  "githubToken": "ghp_yourtoken",
  "maxItems": 25
}
```

#### Example 5: Star-velocity tracker (watchlist on daily)

```json
{
  "periods": ["daily"],
  "languages": ["python", "typescript"],
  "enrichWithApi": false,
  "watchlistMode": true,
  "maxItems": 50
}
```

Run hourly. Diff output gives you star velocity in near-real-time.

#### Example 6: License-compliance audit

```json
{
  "periods": ["daily", "weekly"],
  "languages": ["python", "javascript", "typescript", "go", "rust", "java"],
  "enrichWithApi": true,
  "githubToken": "ghp_yourtoken",
  "maxItems": 200
}
```

Filter the output for `enrichment.license` values; flag GPL/AGPL repos against your team's allowed-license policy.

#### Example 7: Hiring funnel from contributor lists

```json
{
  "periods": ["weekly", "monthly"],
  "languages": ["python", "typescript"],
  "enrichWithApi": false,
  "maxItems": 100
}
```

Each record carries `contributors[]` (login + avatar). Pipe to a recruiter pipeline.

#### Example 8: Spoken-language filter (Chinese-language repos)

```json
{
  "periods": ["weekly"],
  "spokenLanguageCode": "zh",
  "enrichWithApi": true,
  "maxItems": 25
}
```

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `periods` | enum\[] | `["daily"]` | `daily`, `weekly`, `monthly` |
| `languages` | string\[] | `[]` | Language slugs (`python`, `typescript`, `rust`). Empty = all combined. |
| `spokenLanguageCode` | string|null | `null` | Spoken-language filter (`en`, `zh`, `ja`) |
| `enrichWithApi` | bool | `true` | Adds 1 GitHub API call per repo |
| `githubToken` | string|null | `null` | PAT raises API quota from ~60/h to ~5,000/h |
| `watchlistMode` | bool | `false` | Diff against KV-stored last-seen rank+stars |
| `maxItems` | int | `25` | Hard cap |
| `useApifyProxy` | bool | `false` | Usually unneeded |

### GitHub Trending output format

#### `github_trending_repo`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `fullName`, `owner`, `name`, `url` | string | Repo identity + canonical URL |
| `description` | string | Tagline |
| `language`, `languageColor` | string | Primary language + color |
| `stars`, `forks`, `starsGainedThisPeriod` | int | Engagement |
| `rank`, `period` | int / enum | Position + window |
| `spokenLanguageCode`, `languageFilter` | string | Filters used |
| `contributors` | array | `[{ login, avatarUrl }]` (top 5) |
| `enrichment` | object | null | When `enrichWithApi: true`: `defaultBranch`, `license`, `homepage`, `topics[]`, `openIssues`, `watchers`, `pushedAt`, `createdAt`, `updatedAt`, `size`, `archived`, `isFork`, `htmlUrl` |
| `fieldCompletenessScore`, `agentMarkdown` | int / string | Quality + LLM-ready summary |
| `scrapedAt` | ISO 8601 | Snapshot timestamp |

#### GitHub Trending scraper output example

```json
{
  "outputSchemaVersion": "2026-05-09",
  "recordType": "github_trending_repo",
  "recordId": "github:trending:daily:anthropics/financial-services",
  "fullName": "anthropics/financial-services",
  "owner": "anthropics",
  "name": "financial-services",
  "url": "https://github.com/anthropics/financial-services",
  "language": "Python",
  "stars": 15808,
  "forks": 1988,
  "starsGainedThisPeriod": 3660,
  "rank": 1,
  "period": "daily",
  "contributors": [
    { "login": "user1", "avatarUrl": "https://avatars.githubusercontent.com/u/..." }
  ],
  "enrichment": {
    "license": "MIT",
    "topics": ["ai", "claude", "finance"],
    "watchers": 32,
    "openIssues": 12,
    "pushedAt": "2026-05-09T08:30:00Z",
    "archived": false,
    "isFork": false
  },
  "fieldCompletenessScore": 95,
  "agentMarkdown": "**🐙 anthropics/financial-services** (#1 daily · Python)\n- ⭐ 15,808 · 🔱 1,988 · 📈 +3,660 daily\n- 🏷 ai, claude, finance\n- 📜 MIT\n- 🔗 https://github.com/anthropics/financial-services"
}
```

### During the Actor run

The actor fetches `github.com/trending?since=<period>` (one call per period × language combination), parses the repo cards from the HTML, and optionally calls `api.github.com/repos/<owner>/<repo>` per repo for the enrichment block. Inter-request delay: 800ms for trending pages, 250ms for API calls.

Each record is validated against a Zod schema before push. The actor writes:

1. **`OUTPUT`** — run summary
2. **`AGENT_BRIEFING`** — top 10 by stars-gained
3. **`WATCHLIST_STATE`** — (when `watchlistMode: true`) per-repo last-seen rank + stars

### FAQ

#### How does GitHub Trending Repos work?

The actor fetches `github.com/trending` HTML, parses the repo cards, and (optionally) calls `api.github.com/repos/<owner>/<repo>` per repo for the enrichment.

#### Do I need a GitHub token?

For small runs (≤25 repos with enrichment), no — GitHub's unauthenticated API allows ~60 requests/hour, which covers a daily watchlist comfortably. For larger runs, provide a GitHub personal access token (PAT); authenticated requests get ~5,000/hour.

#### Can I monitor for star/rank changes only?

Yes. Set `watchlistMode: true`. The actor tracks `stars` and `rank` per repo per run and only emits records where either changed.

#### Can I filter by programming language?

Yes. `languages: ["python", "typescript"]`. The actor pulls `github.com/trending/python?since=daily` and `github.com/trending/typescript?since=daily` separately.

#### Can I filter by README spoken language?

Yes. Set `spokenLanguageCode: "zh"` (or any ISO-639-1 code). GitHub's trending page accepts this filter.

#### Can I get the contributors of each trending repo?

Yes — the top 5 contributors visible on the trending card are emitted as `contributors[]` (login + avatar URL).

#### Can I use this with the Apify API?

Yes. POST to `https://api.apify.com/v2/acts/skootle~github-trending/runs`.

#### Can I integrate with Make / Zapier / n8n / Slack?

Yes. Click **Integrations** on the actor page.

#### What if GitHub changes the trending page layout?

The trending page format has been stable for years. If it changes, the actor adapts within 24-48 hours.

#### Your feedback

Hit a bug or want a feature? Open an issue on the [Issues tab](https://apify.com/skootle/github-trending/issues/open) rather than the reviews page, and we'll fix it fast (typically within 48 hours).

### Why choose GitHub Trending Repos

- **All 3 windows covered** — daily, weekly, monthly. One actor handles all.
- **API enrichment** — license, topics, watchers, push date, archived flag, fork flag added to every record (when `enrichWithApi: true`).
- **Watchlist diff mode** — only emits repos where stars or rank changed.
- **Star-velocity computation built-in** — `starsGainedThisPeriod` per record.
- **Versioned schema** — `outputSchemaVersion: '2026-05-09'` literal.
- **Idempotent record IDs** — `github:trending:<period>:<owner>/<repo>` stable across runs.
- **Agent-grade output** — `agentMarkdown` ready to paste into an LLM context.
- **No anti-bot challenges** — `github.com/trending` is HTTP-friendly; no proxy required by default.

### Other Skootle actors you might want to check

- **[Hacker News Watchlist](https://apify.com/skootle/hackernews-watchlist)** — same pattern for HN streams
- **[Reddit Subreddit Scraper](https://apify.com/skootle/reddit-subreddit-monitor)** — subreddit monitoring
- **[SEC EDGAR Filings Monitor](https://apify.com/skootle/sec-edgar-filings)** — public-company filings stream
- **[Apple App Store Reviews Monitor](https://apify.com/skootle/app-store-reviews)** — App Store reviews + metadata
- **[Shopify App Store Scraper](https://apify.com/skootle/shopify-app-store-scraper)** — Shopify app listings + pricing tiers

### Support and contact

File issues on this actor's page — replies within 48 hours.

# Actor input Schema

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

Which trending windows to pull. One run handles many.

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

Filter by GitHub language slug (e.g., 'python', 'typescript', 'rust'). Empty = all languages combined.

## `spokenLanguageCode` (type: `string`):

Filter trending by spoken language of README. Empty = no filter.

## `enrichWithApi` (type: `boolean`):

Adds one API call per repo. Returns license, topics, watchers, push/created/updated dates, archived/fork flags.

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

Without a token, GitHub's API allows ~60 req/h. With a classic PAT, ~5000/h.

## `watchlistMode` (type: `boolean`):

When true, only emit repos where stars or rank changed since the previous run.

## `maxItems` (type: `integer`):

Hard cap. Default conservative for the 5-minute auto-test.

## `useApifyProxy` (type: `boolean`):

GitHub trending is HTTP-friendly; proxy usually unnecessary.

## `apifyProxyGroups` (type: `array`):

Optional. Empty unless you specifically need a proxy group.

## Actor input object example

```json
{
  "periods": [
    "daily"
  ],
  "languages": [],
  "enrichWithApi": true,
  "watchlistMode": false,
  "maxItems": 25,
  "useApifyProxy": false,
  "apifyProxyGroups": []
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

No description

## `agentBriefing` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "periods": [
        "daily"
    ],
    "languages": [],
    "apifyProxyGroups": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("skootle/github-trending").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 = {
    "periods": ["daily"],
    "languages": [],
    "apifyProxyGroups": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "periods": [
    "daily"
  ],
  "languages": [],
  "apifyProxyGroups": []
}' |
apify call skootle/github-trending --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skootle/github-trending",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🐙 GitHub Trending Repos Scraper",
        "description": "Scrape daily/weekly/monthly trending repositories from github.com/trending. Joined with GitHub REST API for license, topics, watchers, push date. Watchlist mode tracks rank/star changes day-over-day. Export, run via API, schedule, or integrate with other tools.",
        "version": "0.1",
        "x-build-id": "NQW4M3saR8hP0mhFQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/skootle~github-trending/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-skootle-github-trending",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/skootle~github-trending/runs": {
            "post": {
                "operationId": "runs-sync-skootle-github-trending",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/skootle~github-trending/run-sync": {
            "post": {
                "operationId": "run-sync-skootle-github-trending",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "periods": {
                        "title": "Trending periods",
                        "type": "array",
                        "description": "Which trending windows to pull. One run handles many.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "languages": {
                        "title": "Programming language filters",
                        "type": "array",
                        "description": "Filter by GitHub language slug (e.g., 'python', 'typescript', 'rust'). Empty = all languages combined.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "spokenLanguageCode": {
                        "title": "Spoken language code (e.g. 'en', 'zh', 'ja')",
                        "type": "string",
                        "description": "Filter trending by spoken language of README. Empty = no filter."
                    },
                    "enrichWithApi": {
                        "title": "Enrich each repo via GitHub REST API",
                        "type": "boolean",
                        "description": "Adds one API call per repo. Returns license, topics, watchers, push/created/updated dates, archived/fork flags.",
                        "default": true
                    },
                    "githubToken": {
                        "title": "GitHub personal access token (optional)",
                        "type": "string",
                        "description": "Without a token, GitHub's API allows ~60 req/h. With a classic PAT, ~5000/h."
                    },
                    "watchlistMode": {
                        "title": "Watchlist mode (rank/star change diff)",
                        "type": "boolean",
                        "description": "When true, only emit repos where stars or rank changed since the previous run.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max repos",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap. Default conservative for the 5-minute auto-test.",
                        "default": 25
                    },
                    "useApifyProxy": {
                        "title": "Use Apify proxy",
                        "type": "boolean",
                        "description": "GitHub trending is HTTP-friendly; proxy usually unnecessary.",
                        "default": false
                    },
                    "apifyProxyGroups": {
                        "title": "Apify proxy groups",
                        "type": "array",
                        "description": "Optional. Empty unless you specifically need a proxy group.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
