# GitHub Contributors Scraper (`automation-lab/github-contributors-scraper`) Actor

Export ranked contributor lists from public GitHub repositories with contribution counts, profile URLs, repo metadata, and optional profile enrichment.

- **URL**: https://apify.com/automation-lab/github-contributors-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Contributors Scraper

Export ranked contributor lists from public GitHub repositories using the official GitHub REST API.

This actor turns one or more GitHub repositories into clean dataset rows with contributor logins, profile URLs, avatar URLs, contribution counts, repository metadata, and optional public profile enrichment.

Use it for developer relations, open-source intelligence, recruiting research, ecosystem mapping, competitive engineering research, and community reporting.

### What does GitHub Contributors Scraper do?

GitHub Contributors Scraper extracts contributors from public repositories.

It accepts repository strings like `apify/crawlee` or full URLs like `https://github.com/apify/crawlee`.

For each repository it saves a ranked list of contributors.

Each row includes the contributor's GitHub profile URL and contribution count.

The actor can also add repository stars, forks, language, description, open issues, and archive status.

If you enable profile enrichment, it fetches public user profile fields such as name, company, location, bio, followers, and public repo count.

### Who is it for?

#### Developer relations teams

Track active contributors in your ecosystem.

Find community members who repeatedly contribute to public projects.

Build lists for contributor recognition, ambassador programs, and community outreach.

#### Recruiters and talent teams

Identify engineers contributing to specific open-source repositories.

Export profile links and public profile metadata for sourcing workflows.

Prioritize contributors by contribution counts.

#### Open-source maintainers

Audit repository contributor lists.

Create reports about project health and contributor distribution.

Monitor the top contributors across related projects.

#### Competitive intelligence teams

Compare contributor communities across competing frameworks, SDKs, tools, and libraries.

Export structured data for spreadsheets, BI tools, and CRM enrichment.

### Why use this actor?

GitHub already exposes contributors in the UI, but manually copying that information is slow.

This actor creates a reusable dataset in seconds.

It works without cookies or browser automation.

It uses the public REST API and paginates with GitHub `Link` headers.

It supports optional user-provided GitHub tokens for larger workloads.

It produces predictable rows that are easy to export to CSV, JSON, Excel, Google Sheets, or your own API workflow.

### What data can you extract?

| Field | Description |
| --- | --- |
| `repository` | Repository in `owner/name` format |
| `repositoryUrl` | Direct GitHub repository URL |
| `repositoryOwner` | Repository owner |
| `repositoryName` | Repository name |
| `contributorLogin` | GitHub username |
| `contributorId` | Numeric GitHub user ID |
| `contributorType` | GitHub account type |
| `contributorUrl` | GitHub profile URL |
| `avatarUrl` | Avatar image URL |
| `contributions` | Contribution count returned by GitHub |
| `rank` | Contributor rank within the repository |
| `siteAdmin` | GitHub site admin flag |
| `repoStars` | Repository stars, when metadata is enabled |
| `repoForks` | Repository forks, when metadata is enabled |
| `repoLanguage` | Primary language, when metadata is enabled |
| `userName` | Public profile name, when user enrichment is enabled |
| `userCompany` | Public profile company, when user enrichment is enabled |
| `userLocation` | Public profile location, when user enrichment is enabled |
| `userFollowers` | Public follower count, when user enrichment is enabled |
| `scrapedAt` | ISO timestamp for the run |

### How much does it cost to scrape GitHub contributors?

The actor uses pay-per-event pricing.

You pay a small start fee for a run and a per-contributor fee for rows saved to the dataset.

Default pricing is designed for lightweight API extraction.

Because the actor does not use a browser or paid proxy by default, typical runs are inexpensive.

Large enriched runs may use more GitHub API quota because user enrichment performs one extra request per contributor.

Check the Apify run details for exact charged event counts and compute usage.

### Input options

#### `repositories`

A list of repositories to process.

Accepted formats:

- `apify/crawlee`
- `apify/apify-sdk-js`
- `https://github.com/apify/crawlee`

#### `maxContributorsPerRepo`

Maximum number of contributor rows to save for each repository.

Use the default for a balanced first run.

Increase it when you need deeper lists.

#### `includeRepoMetadata`

Adds repository-level information to every contributor row.

This is enabled by default.

#### `includeUserDetails`

Adds public user profile details.

This is disabled by default because it uses one extra GitHub API request per contributor.

Enable it when you need sourcing, CRM, or enrichment fields.

#### `githubToken`

Optional GitHub token for higher API quota.

Small public runs do not require a token.

Use your own token for larger workloads or user enrichment.

#### `requestDelayMs`

Delay between paginated and enrichment requests.

Keep a small delay to be polite to GitHub and avoid hitting rate limits too quickly.

### Example input

```json
{
  "repositories": [
    "apify/crawlee",
    "https://github.com/apify/apify-sdk-js"
  ],
  "maxContributorsPerRepo": 100,
  "includeRepoMetadata": true,
  "includeUserDetails": false,
  "requestDelayMs": 250
}
````

### Example output

```json
{
  "repository": "apify/crawlee",
  "repositoryUrl": "https://github.com/apify/crawlee",
  "repositoryOwner": "apify",
  "repositoryName": "crawlee",
  "contributorLogin": "example-user",
  "contributorId": 12345,
  "contributorType": "User",
  "contributorUrl": "https://github.com/example-user",
  "avatarUrl": "https://avatars.githubusercontent.com/u/12345?v=4",
  "contributions": 120,
  "rank": 1,
  "siteAdmin": false,
  "repoStars": 18000,
  "repoForks": 1600,
  "repoLanguage": "TypeScript",
  "scrapedAt": "2026-07-10T00:00:00.000Z"
}
```

### How to run the actor

1. Open the actor on Apify.
2. Add one or more public GitHub repositories.
3. Choose the maximum contributors per repository.
4. Keep repository metadata enabled for reporting fields.
5. Enable user details only when you need profile enrichment.
6. Add a GitHub token if you plan to run large enriched exports.
7. Start the run.
8. Download the dataset as CSV, JSON, Excel, XML, or via API.

### Tips for best results

Start with one repository and the default limit.

Use `owner/repo` format for the cleanest input.

Use a GitHub token for large jobs.

Avoid enabling user enrichment for thousands of contributors unless you have enough GitHub API quota.

Combine multiple related repositories in one run when you want a unified export.

Sort by `contributions` or `rank` in your downstream spreadsheet.

### GitHub API quota notes

Unauthenticated GitHub REST API requests are rate limited.

The default actor settings are intentionally conservative.

Repository metadata uses one request per repository.

Contributor pagination uses roughly one request per 100 contributors.

User enrichment uses one request per contributor.

A GitHub token increases quota under your GitHub account.

The actor does not ask for private repository access.

Only public repository endpoints are used.

### Integrations

Send results to Google Sheets for community reporting.

Export CSV files for recruiter sourcing workflows.

Use webhooks to notify a Slack channel when a repository contributor export completes.

Feed the dataset into BI tools to compare contributor communities.

Join exported contributors with internal CRM records.

Run scheduled exports to monitor open-source community changes over time.

### API usage

#### Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/github-contributors-scraper').call({
  repositories: ['apify/crawlee'],
  maxContributorsPerRepo: 100,
  includeRepoMetadata: true
});

console.log(run.defaultDatasetId);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/github-contributors-scraper').call(run_input={
    'repositories': ['apify/crawlee'],
    'maxContributorsPerRepo': 100,
    'includeRepoMetadata': True,
})
print(run['defaultDatasetId'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~github-contributors-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"repositories":["apify/crawlee"],"maxContributorsPerRepo":100}'
```

### MCP usage

Use this actor through Apify MCP when you want Claude or another MCP client to export GitHub contributor data.

MCP URL:

```text
https://mcp.apify.com/?tools=automation-lab/github-contributors-scraper
```

Claude Code setup command:

```bash
claude mcp add apify-github-contributors https://mcp.apify.com/?tools=automation-lab/github-contributors-scraper
```

Claude Desktop JSON configuration:

```json
{
  "mcpServers": {
    "apify-github-contributors": {
      "url": "https://mcp.apify.com/?tools=automation-lab/github-contributors-scraper"
    }
  }
}
```

#### Example MCP prompts

Example prompt 1:

```text
Use the GitHub Contributors Scraper MCP tool for apify/crawlee and summarize the top 20 contributors by contribution count.
```

Example prompt 2:

```text
Use MCP to export contributors from apify/crawlee and apify/apify-sdk-js, then compare the overlap in contributor communities.
```

Example prompt 3:

```text
Run the GitHub contributor extractor through Apify MCP for apify/apify-sdk-js and create a recruiting shortlist with public profile URLs.
```

### Common workflows

#### DevRel community list

Run the actor for your main open-source repositories.

Export contributor profiles.

Filter by contribution count.

Send high-signal community members to your outreach workflow.

#### Recruiting source list

Enable public user details.

Export profile URLs, company, location, and follower counts.

Review public profiles manually before outreach.

#### Competitor ecosystem report

Run the actor for comparable open-source repositories.

Compare top contributors, stars, forks, and language fields.

Create a recurring report for community intelligence.

### Limitations

GitHub controls the contributor data and API rate limits.

The actor only processes public repositories.

Private repositories require GitHub permissions and are outside this actor's default public-data scope.

Contribution counts come from GitHub's contributors endpoint and may differ from custom contribution analytics.

Anonymous contributors are not included by default.

Public user profile enrichment only returns fields GitHub exposes publicly.

### Troubleshooting

#### I received a GitHub API rate limit error

Reduce `maxContributorsPerRepo`, disable user enrichment, wait for quota reset, or provide your own GitHub token.

#### A repository returns not found

Check that the repository is public and that the input is in `owner/repo` format or a valid GitHub repository URL.

#### User enrichment is slow

User enrichment performs an extra request per contributor. Disable it for large exports or add a token and keep a small request delay.

### Legality

This actor uses public GitHub REST API endpoints for public repositories.

You should only process data for lawful purposes and respect GitHub's terms, API limits, privacy rules, and applicable data protection laws.

Do not use exported data for spam or prohibited outreach.

### FAQ

#### Is it legal to scrape GitHub contributors?

This actor uses public GitHub API data from public repositories. Your use case still must comply with GitHub terms and applicable laws.

#### Do I need a GitHub token?

No token is needed for small public exports. Add your own token for larger runs or profile enrichment.

#### Can it scrape private repositories?

This actor is designed for public repositories. Private repository workflows are outside the default public-data scope.

### Related scrapers

Explore other Automation Lab actors for developer, company, and web data workflows:

- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/bulk-url-status-checker
- https://apify.com/automation-lab/domain-email-discovery

### Support

If you need a field that is publicly available in the GitHub API but not included yet, open an issue on the actor page.

Include an example repository and the output field you need.

### Changelog

See `.actor/CHANGELOG.md` for release notes.

### Summary

GitHub Contributors Scraper is a focused API actor for exporting contributors from public GitHub repositories.

It is designed to be simple, quota-aware, and useful for repeat reporting workflows.

It gives you structured contributor rows without browser automation, cookies, or manual copying.

# Actor input Schema

## `repositories` (type: `array`):

GitHub repositories to export contributors from. Use owner/repo (apify/crawlee) or full GitHub repository URLs.

## `maxContributorsPerRepo` (type: `integer`):

Maximum contributor records to save for each repository. Keep the default low if you do not provide a GitHub token because unauthenticated API quota is 60 requests/hour.

## `includeRepoMetadata` (type: `boolean`):

Add repository stars, forks, language, description, default branch, and archive status to each contributor row.

## `includeUserDetails` (type: `boolean`):

Fetch each contributor's public user profile to add name, company, location, bio, followers, and public repo counts. Uses one extra GitHub API request per contributor.

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

Optional user-provided GitHub token for higher API quota. Only public repository data is requested; no token is needed for small default runs.

## `requestDelayMs` (type: `integer`):

Conservative pause between paginated and enrichment API calls. Increase if you are close to your GitHub rate limit.

## Actor input object example

```json
{
  "repositories": [
    "apify/crawlee",
    "apify/apify-sdk-js"
  ],
  "maxContributorsPerRepo": 20,
  "includeRepoMetadata": true,
  "includeUserDetails": false,
  "requestDelayMs": 250
}
```

# Actor output Schema

## `overview` (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 = {
    "repositories": [
        "apify/crawlee",
        "apify/apify-sdk-js"
    ],
    "maxContributorsPerRepo": 20,
    "includeRepoMetadata": true,
    "includeUserDetails": false,
    "requestDelayMs": 250
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/github-contributors-scraper").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 = {
    "repositories": [
        "apify/crawlee",
        "apify/apify-sdk-js",
    ],
    "maxContributorsPerRepo": 20,
    "includeRepoMetadata": True,
    "includeUserDetails": False,
    "requestDelayMs": 250,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/github-contributors-scraper").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 '{
  "repositories": [
    "apify/crawlee",
    "apify/apify-sdk-js"
  ],
  "maxContributorsPerRepo": 20,
  "includeRepoMetadata": true,
  "includeUserDetails": false,
  "requestDelayMs": 250
}' |
apify call automation-lab/github-contributors-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GitHub Contributors Scraper",
        "description": "Export ranked contributor lists from public GitHub repositories with contribution counts, profile URLs, repo metadata, and optional profile enrichment.",
        "version": "0.1",
        "x-build-id": "qNiC3G0xA7MK5IKIC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~github-contributors-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-github-contributors-scraper",
                "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/automation-lab~github-contributors-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-github-contributors-scraper",
                "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/automation-lab~github-contributors-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-github-contributors-scraper",
                "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",
                "required": [
                    "repositories"
                ],
                "properties": {
                    "repositories": {
                        "title": "📦 Repositories",
                        "minItems": 1,
                        "maxItems": 50,
                        "type": "array",
                        "description": "GitHub repositories to export contributors from. Use owner/repo (apify/crawlee) or full GitHub repository URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxContributorsPerRepo": {
                        "title": "Maximum contributors per repository",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum contributor records to save for each repository. Keep the default low if you do not provide a GitHub token because unauthenticated API quota is 60 requests/hour.",
                        "default": 20
                    },
                    "includeRepoMetadata": {
                        "title": "Include repository metadata",
                        "type": "boolean",
                        "description": "Add repository stars, forks, language, description, default branch, and archive status to each contributor row.",
                        "default": true
                    },
                    "includeUserDetails": {
                        "title": "Include public user profile details",
                        "type": "boolean",
                        "description": "Fetch each contributor's public user profile to add name, company, location, bio, followers, and public repo counts. Uses one extra GitHub API request per contributor.",
                        "default": false
                    },
                    "githubToken": {
                        "title": "GitHub token (optional)",
                        "type": "string",
                        "description": "Optional user-provided GitHub token for higher API quota. Only public repository data is requested; no token is needed for small default runs."
                    },
                    "requestDelayMs": {
                        "title": "Delay between API requests (ms)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Conservative pause between paginated and enrichment API calls. Increase if you are close to your GitHub rate limit.",
                        "default": 250
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
