# EU Tenders Monitor 🇪🇺 : TED Alerts, Filters & AI Scoring (`tagadanar/ted-tenders-monitor`) Actor

Every EU public tender from TED with keyword, CPV code, country and deadline filters. Monitor mode charges only for new tenders, with Slack or webhook alerts and optional AI relevance scoring against your company profile. Official data, one clean schema.

- **URL**: https://apify.com/tagadanar/ted-tenders-monitor.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 tender delivereds

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

## EU TED Tenders Monitor (alerts + AI fit scoring)

**Track every public tender in the EU that matters to your business, and let AI tell you which ones are worth bidding on.** This actor queries **TED** (*Tenders Electronic Daily*, the official EU procurement journal where every above-threshold contract in 27+ countries is published) with keyword, CPV, country and deadline filters, then returns one clean, structured record per tender: buyer, country, deadline, estimated value, summary and a direct link to the notice.

Built for **bid teams, tender consultancies, sales to the public sector, market intelligence, and AI agents** (works via API and MCP out of the box). Tender alert platforms charge 49 to 150 euro per month for cruder keyword alerts; here you pay a few dollars per thousand tenders, only for what you actually receive.

### Why this actor

- ✅ **True monitor mode:** it remembers what it already reported, so scheduled runs return (and charge for) **new tenders only**. Run it daily and get a delta, not a dump.
- ✅ **Slack and webhook alerts.** New tenders land in your Slack channel or any endpoint the moment a run finds them.
- ✅ **AI relevance scoring**, optional and off by default (bring your own Anthropic API key for now; a built-in option is planned). Describe your company once and every tender gets a **0-100 relevance score**, a one-line reason, and a **bid / consider / skip** recommendation.
- ✅ **Opportunities, not paperwork.** By default you get notices you can still bid on: contract award notices and expired deadlines are filtered out. Flip one switch to include them for market research.
- ✅ **Official data** from the EU Publications Office, fetched live at run time. No scraping, no stale caches.
- ✅ **Real filtering** on keywords (full-text), CPV codes, buyer or delivery country, publication window and deadline.

### The 5-minute tender radar

1. Set your `keywords` / `cpvCodes` / `countries`.
2. Turn on **`monitorMode`** and paste a **Slack webhook URL**.
3. (Optional) Describe your business in **`companyProfile`**, add your **`anthropicApiKey`** and set `alertMinScore: 60`.
4. Create an Apify **Schedule** (daily).

Every morning, your Slack channel gets only the **new** tenders relevant to **your** business, scored and sorted. Nothing you've already seen, nothing off-topic.

### Use cases

- **Never miss an RFP.** Get every new EU contract notice matching your keywords or CPV codes the day it's published.
- **Stop reading irrelevant tenders**: the AI score does that reading for you and tells you which ones actually fit.
- **Bid consultancies:** run one monitor per client (each `monitorName` keeps its own history) and feed scored opportunities straight into your pipeline.
- **Public-sector sales.** A live list of buyers, budgets and deadlines across your segment and countries.
- **Market intelligence:** who is buying what, where, for how much, and by when. Set `onlyOpen: false` to include award notices.
- **AI agents.** Plug into Claude / Cursor via MCP and ask *"any open IT tenders in Germany closing this month?"*

### Input

```json
{
    "keywords": ["cybersecurity", "penetration testing"],
    "cpvCodes": ["72000000"],
    "countries": ["DE", "NL", "BE"],
    "publishedWithinDays": 7,
    "onlyOpen": true,
    "monitorMode": true,
    "monitorName": "cyber-benelux-dach",
    "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
    "companyProfile": "15-person security consultancy in Berlin: penetration testing, security audits, ISO 27001 readiness. Clients in the public sector and healthcare.",
    "alertMinScore": 60
}
````

- `keywords`: matched in the tender full text (OR logic). Leave it empty and every tender in your other filters comes through.
- `cpvCodes`: Common Procurement Vocabulary codes, e.g. `72000000` for IT services. A short division like `45` (construction) works too.
- `countries`: 2- or 3-letter codes; matches the buyer's country or where the contract is performed.
- `onlyOpen`: keeps only notices you can still respond to (open deadline, not an award notice).
- `monitorMode`: only returns tenders not seen in previous runs (tracked per `monitorName`).
- `webhookUrl`: a Slack incoming webhook for a digest message, or any URL for a JSON payload.
- `companyProfile`: enables AI scoring. A few sentences is enough, in any language.
- `alertMinScore`: alerts only include tenders scoring at least this value.

### Output (one record per tender)

```json
{
    "source": "TED",
    "id": "483935-2026",
    "title": "Germany, Engineering services, District heating network extension",
    "buyer": "Stadtwerke Ludwigslust-Grabow GmbH",
    "country": "DEU",
    "publicationDate": "2026-07-14",
    "deadline": "2026-08-25",
    "marketType": "Services",
    "noticeType": "Contract notice",
    "cpvCodes": ["71300000"],
    "location": "NUTS DE80O",
    "estimatedValue": 111399.15,
    "currency": "EUR",
    "summary": "Planning services for the first and second construction phases of the district heating network extension...",
    "url": "https://ted.europa.eu/en/notice/-/detail/483935-2026",
    "relevanceScore": 82,
    "relevanceReason": "Core engineering-services match in the company's home region.",
    "recommendation": "bid",
    "source_ref": "api.ted.europa.eu (TED / EU Publications Office)",
    "retrievedAt": "2026-07-17T09:12:00.000Z"
}
```

Titles come back in English whenever TED provides a translation; the `summary` stays in the notice's original language. `estimatedValue` and `deadline` are null when the notice doesn't state them, never guessed. The `relevance*` fields appear when `companyProfile` is set; results are then sorted best-first.

### Companion actor

- [**French & EU Public Tenders Monitor**](https://apify.com/tagadanar/french-public-tenders): the same monitoring for the French market, combining BOAMP (French national bulletin, including below-EU-threshold tenders) with TED, in French.

### Pricing

Pay per event, no subscription:

| Event | When |
|---|---|
| Actor start | Once per run |
| Tender found | Per tender returned (in monitor mode: **new tenders only**) |
| Tender scored | Per tender AI-scored (only when `companyProfile` is set) |

### FAQ

**Where does the data come from?** From `api.ted.europa.eu`, the official API of TED (Tenders Electronic Daily), run by the EU Publications Office. Fetched live at run time.

**Which countries are covered?** All EU member states, plus EEA countries and others that publish to TED (Norway, Switzerland, and more). Filter with the `countries` input or leave it empty for everything.

**How does monitor mode work?** The actor keeps a per-`monitorName` memory of every tender id it already returned (kept 120 days). Scheduled runs output only what's new, so you're not charged twice for the same tender.

**How does AI scoring work?** Each tender's key facts (title, buyer, country, CPV, value, deadline, summary) are rated against your `companyProfile` by a fast Claude model, called with **your own Anthropic API key** (`anthropicApiKey` input; get one at console.anthropic.com). You get a 0-100 score, a one-sentence reason, and bid/consider/skip. Token cost on your key is tiny (about $1 per 1,000 tenders), and your key is used for the calls only, never stored.

**Does it include contract award notices?** Not by default: the actor is tuned for opportunities you can still bid on. Set `onlyOpen: false` to include awards, results and expired notices for market research.

**What about tenders below the EU publication threshold?** TED only carries above-threshold procurement (roughly 143k euro and up for most supplies and services). National portals carry the small ones; for France, see the companion actor above.

**How fresh is it?** TED publishes every working day; the actor returns what's live at run time. Schedule it daily for a monitoring feed.

**Can I filter by contract value or procedure type?** Keywords, CPV, country, deadline and window are supported today. More structured filters are on the roadmap, so open an issue with what you need.

**Does it deduplicate?** Yes, within a run (by publication number), and across runs in monitor mode.

**Does it work with AI agents?** Yes, exposed via REST API and **MCP**, callable as a tool from Claude, Cursor & co.

***

### Something missing?

If you need an extra field, another source, or a different output, open an issue on this Actor and describe it. I read every request and small additions usually ship within days. More tender and company-data Actors are on [my profile](https://apify.com/tagadanar).

*Keywords: TED tenders, EU procurement, public tenders Europe, tender monitoring, tender alerts, TED alerts, RFP monitoring, CPV codes, government contracts EU, bid management, tender API, contract notices, procurement intelligence, AI tender scoring, bid/no-bid.*

# Actor input Schema

## `keywords` (type: `array`):

Free-text terms matched in the tender full text (OR logic). Leave empty to get all recent tenders in your other filters. E.g. <code>software</code>, <code>cybersecurity</code>, <code>consulting</code>.

## `cpvCodes` (type: `array`):

Common Procurement Vocabulary codes, e.g. <code>72000000</code> (IT services), <code>45000000</code> (construction). A short division like <code>72</code> also works. Empty = all categories.

## `countries` (type: `array`):

Limit to tenders bought or performed in these countries. Use 2- or 3-letter codes: <code>DE</code>, <code>FR</code>, <code>NLD</code>, <code>ESP</code>. Empty = all of the EU/EEA.

## `publishedWithinDays` (type: `integer`):

Only return tenders published in this window.

## `onlyOpen` (type: `boolean`):

Exclude tenders whose response deadline has already passed.

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

Cap the number of tenders returned per run.

## `monitorMode` (type: `boolean`):

Remember which tenders were already returned in previous runs and only output (and charge for) new ones. Perfect with an Apify Schedule: run daily, get only what's new.

## `monitorName` (type: `string`):

Memory bucket for monitor mode. Use a different name per saved search (e.g. <code>it-germany</code>, <code>construction-benelux</code>) so each keeps its own history.

## `webhookUrl` (type: `string`):

POST new tenders to this URL after each run. Slack incoming-webhook URLs (<code>hooks.slack.com</code>) get a formatted digest message; any other URL gets a JSON payload. Leave empty to disable.

## `companyProfile` (type: `string`):

Optional, leave empty to get normal results (no API key needed, nothing extra billed). If filled: describe what your company sells and to whom (a few sentences, any language); each tender then gets <code>relevanceScore</code> (0-100), <code>relevanceReason</code> and a <code>bid/consider/skip</code> recommendation, sorted by score. Requires your Anthropic API key below.

## `anthropicApiKey` (type: `string`):

Leave empty unless you filled in the company profile above. Get one at <code>console.anthropic.com</code>. Used only to score tenders against your profile; never stored. If empty, scoring is simply skipped.

## `maxTendersToScore` (type: `integer`):

Cap on AI-scored tenders per run (each scored tender is a paid event).

## `alertMinScore` (type: `integer`):

Webhook/Slack alerts only include tenders with a relevance score at or above this value (unscored tenders always alert). 0 = alert on everything.

## Actor input object example

```json
{
  "keywords": [
    "software"
  ],
  "cpvCodes": [],
  "countries": [],
  "publishedWithinDays": 7,
  "onlyOpen": true,
  "maxItems": 100,
  "monitorMode": false,
  "monitorName": "default",
  "maxTendersToScore": 50,
  "alertMinScore": 0
}
```

# Actor output Schema

## `tenders` (type: `string`):

All matched tender notices (one item per tender) in the default dataset.

# 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 = {
    "keywords": [
        "software"
    ],
    "cpvCodes": [],
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/ted-tenders-monitor").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 = {
    "keywords": ["software"],
    "cpvCodes": [],
    "countries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/ted-tenders-monitor").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 '{
  "keywords": [
    "software"
  ],
  "cpvCodes": [],
  "countries": []
}' |
apify call tagadanar/ted-tenders-monitor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU Tenders Monitor 🇪🇺 : TED Alerts, Filters & AI Scoring",
        "description": "Every EU public tender from TED with keyword, CPV code, country and deadline filters. Monitor mode charges only for new tenders, with Slack or webhook alerts and optional AI relevance scoring against your company profile. Official data, one clean schema.",
        "version": "0.1",
        "x-build-id": "TtM7QOa6gN2AWMRnA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tagadanar~ted-tenders-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tagadanar-ted-tenders-monitor",
                "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/tagadanar~ted-tenders-monitor/runs": {
            "post": {
                "operationId": "runs-sync-tagadanar-ted-tenders-monitor",
                "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/tagadanar~ted-tenders-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-tagadanar-ted-tenders-monitor",
                "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": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Free-text terms matched in the tender full text (OR logic). Leave empty to get all recent tenders in your other filters. E.g. <code>software</code>, <code>cybersecurity</code>, <code>consulting</code>.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpvCodes": {
                        "title": "CPV codes",
                        "type": "array",
                        "description": "Common Procurement Vocabulary codes, e.g. <code>72000000</code> (IT services), <code>45000000</code> (construction). A short division like <code>72</code> also works. Empty = all categories.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Limit to tenders bought or performed in these countries. Use 2- or 3-letter codes: <code>DE</code>, <code>FR</code>, <code>NLD</code>, <code>ESP</code>. Empty = all of the EU/EEA.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "publishedWithinDays": {
                        "title": "Published within the last N days",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only return tenders published in this window.",
                        "default": 7
                    },
                    "onlyOpen": {
                        "title": "Only tenders still open for bids",
                        "type": "boolean",
                        "description": "Exclude tenders whose response deadline has already passed.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max tenders",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap the number of tenders returned per run.",
                        "default": 100
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only NEW tenders)",
                        "type": "boolean",
                        "description": "Remember which tenders were already returned in previous runs and only output (and charge for) new ones. Perfect with an Apify Schedule: run daily, get only what's new.",
                        "default": false
                    },
                    "monitorName": {
                        "title": "Monitor name",
                        "type": "string",
                        "description": "Memory bucket for monitor mode. Use a different name per saved search (e.g. <code>it-germany</code>, <code>construction-benelux</code>) so each keeps its own history.",
                        "default": "default"
                    },
                    "webhookUrl": {
                        "title": "Webhook / Slack URL",
                        "pattern": "^https?://.+",
                        "type": "string",
                        "description": "POST new tenders to this URL after each run. Slack incoming-webhook URLs (<code>hooks.slack.com</code>) get a formatted digest message; any other URL gets a JSON payload. Leave empty to disable."
                    },
                    "companyProfile": {
                        "title": "Company profile (optional, enables AI relevance scoring)",
                        "type": "string",
                        "description": "Optional, leave empty to get normal results (no API key needed, nothing extra billed). If filled: describe what your company sells and to whom (a few sentences, any language); each tender then gets <code>relevanceScore</code> (0-100), <code>relevanceReason</code> and a <code>bid/consider/skip</code> recommendation, sorted by score. Requires your Anthropic API key below."
                    },
                    "anthropicApiKey": {
                        "title": "Anthropic API key (only needed if AI scoring is enabled)",
                        "type": "string",
                        "description": "Leave empty unless you filled in the company profile above. Get one at <code>console.anthropic.com</code>. Used only to score tenders against your profile; never stored. If empty, scoring is simply skipped."
                    },
                    "maxTendersToScore": {
                        "title": "Max tenders to score per run",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on AI-scored tenders per run (each scored tender is a paid event).",
                        "default": 50
                    },
                    "alertMinScore": {
                        "title": "Alert threshold (min score)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Webhook/Slack alerts only include tenders with a relevance score at or above this value (unscored tenders always alert). 0 = alert on everything.",
                        "default": 0
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
