# Duunitori Jobs Scraper (`automation-lab/duunitori-jobs-scraper`) Actor

Scrape Duunitori.fi jobs by keyword, city, or URL. Export company, location, salary, descriptions, dates, and application links.

- **URL**: https://apify.com/automation-lab/duunitori-jobs-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **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

## Duunitori Jobs Scraper

Scrape Duunitori.fi job listings for Finnish recruiting, HR analytics, labor-market research, and job aggregation workflows.

### What does Duunitori Jobs Scraper do?

Duunitori Jobs Scraper extracts public Finnish job listings from Duunitori.fi. It can run a keyword search, filter by location, process a copied Duunitori search URL, or enrich a specific job detail URL. The output is a normalized Apify dataset that is ready for CSV, JSON, Excel, API, Google Sheets, BigQuery, or recruiting automation workflows.

### Who is it for?

Recruiters can monitor competitor hiring and new role openings in Finland. HR technology teams can feed Finnish job-board data into matching, analytics, or alerting products. Labor-market analysts can track hiring demand by city, category, employer, role family, and salary signal. Job aggregators can collect public Duunitori listings without building their own scraper.

### Why use this Duunitori scraper?

Duunitori pages expose job cards in server-rendered HTML and detail data in Schema.org JobPosting JSON-LD. This actor uses that public structure directly instead of a browser, making runs lightweight, fast, and cost-conscious. Detail-page enrichment is optional so you can choose between quick discovery runs and richer records with descriptions and application URLs.

### What data can you extract?

The dataset includes job title, company, location, salary text when visible, employment type, posting date, deadline, description, tags, category, application URL, Duunitori source URL, job ID, and scrape timestamp. Some fields depend on what the employer provided in the listing.

### How much does it cost to scrape Duunitori jobs?

This actor uses pay-per-event pricing: a `$0.005` run-start event plus one item event for each saved Duunitori listing. The current item event is tiered by Apify plan:

| Plan | Price per saved job | Example: 100 jobs | Example: 1,000 jobs |
| --- | ---: | ---: | ---: |
| FREE | $0.00018316 | about $0.023 | about $0.188 |
| BRONZE | $0.00015927 | about $0.021 | about $0.164 |
| SILVER | $0.00012423 | about $0.017 | about $0.129 |
| GOLD | $0.00009556 | about $0.015 | about $0.101 |
| PLATINUM | $0.00006371 | about $0.011 | about $0.069 |
| DIAMOND | $0.00004460 | about $0.009 | about $0.050 |

For example, a FREE-plan user saving 100 jobs pays roughly `$0.005 + 100 × $0.00018316 = $0.0233` before any separate Apify platform usage. With a `$5` monthly Apify free credit, that is roughly 27,000 saved jobs at the FREE item tier if the credit were spent only on this actor's charge events. Start with the prefilled 20-job input to check the shape of the data, then increase `maxItems` for scheduled monitoring or larger exports.

### Quick start

1. Enter a keyword such as `developer`, `data engineer`, `sales`, or `sairaanhoitaja`.
2. Optionally enter a city or area such as `Helsinki`, `Espoo`, `Tampere`, or `Turku`.
3. Set `maxItems` to the maximum number of jobs you want.
4. Keep `includeDetails` enabled if you need descriptions, deadlines, employment type, and application links.
5. Run the actor and export the dataset.

### Input fields

`keywords` is the Duunitori search phrase. `location` is an optional city or area. `startUrls` accepts Duunitori search-result URLs and individual job URLs; when provided, those URLs are used instead of keyword/location search. `maxItems` limits saved records. `includeDetails` controls whether the actor follows job detail pages for richer fields.

### Input example

```json
{
  "keywords": "developer",
  "location": "Helsinki",
  "maxItems": 50,
  "includeDetails": true
}
````

### Direct URL example

```json
{
  "startUrls": [
    { "url": "https://duunitori.fi/tyopaikat?haku=data%20engineer&alue=Espoo" }
  ],
  "maxItems": 40,
  "includeDetails": true
}
```

### Output fields

| Field | Description |
| --- | --- |
| `title` | Job title from the search card |
| `company` | Hiring company |
| `location` | City or location text |
| `salary` | Salary text or structured salary when present |
| `employmentType` | Schema.org employment type, when available |
| `postedDate` | Posting date from the card or detail page |
| `validThrough` | Application deadline from JobPosting JSON-LD |
| `description` | Job description from detail-page structured data |
| `tags` | Duunitori labels such as easy apply or salary badge |
| `category` | Duunitori job category |
| `applicationUrl` | Apply button URL, often an external ATS link |
| `sourceUrl` | Duunitori job URL |
| `jobId` | Duunitori job identifier |
| `scrapedAt` | ISO timestamp when the row was saved |

### Output example

```json
{
  "title": "Business Developer (Product Owner), Pohjola Vakuutus, Helsinki",
  "company": "OP Pohjola",
  "location": "Helsinki",
  "employmentType": "FULL_TIME",
  "applicationUrl": "https://op-careers.fi/...",
  "sourceUrl": "https://duunitori.fi/tyopaikat/tyo/...",
  "jobId": "20335300"
}
```

### Search tips

Use both Finnish and English terms when monitoring bilingual roles. Leave `location` empty for nationwide exports. Use direct Duunitori URLs when you already have a carefully tuned search in the website UI. Disable detail enrichment for a very fast first pass, then enable it for final records.

### Scheduling and monitoring

Create an Apify task with your preferred keyword, location, and item limit. Schedule it daily or weekly to track new Finnish jobs. Send dataset output to Slack, email, Google Sheets, or a data warehouse using Apify integrations and webhooks.

### Integrations

Recruiting teams can send new records to Airtable, Google Sheets, or a CRM. Analysts can load CSV or JSON into BigQuery, Snowflake, or a BI dashboard. Product teams can call the actor from an application backend and use the dataset API as a normalized job feed.

### Node.js API usage

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/duunitori-jobs-scraper').call({
  keywords: 'developer',
  location: 'Helsinki',
  maxItems: 50,
  includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

### Python API usage

```python
from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/duunitori-jobs-scraper').call(run_input={
    'keywords': 'sairaanhoitaja',
    'maxItems': 100,
    'includeDetails': True,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['title'], item.get('company'))
```

### cURL API usage

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~duunitori-jobs-scraper/runs?token=$APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"keywords":"developer","location":"Helsinki","maxItems":50,"includeDetails":true}'
```

### MCP usage

Use the Apify MCP server to call this actor from Claude, Cursor, VS Code, OpenAI Agents SDK, or another MCP client. To expose only this scraper, configure the server URL with the actor tool filter:

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

Authentication is required. Clients with OAuth support can connect to `https://mcp.apify.com` and sign in to Apify in the browser. Clients that use static configuration should send your Apify API token as an authorization header.

Claude Code CLI setup:

```bash
claude mcp add --transport http apify-duunitori "https://mcp.apify.com?tools=automation-lab/duunitori-jobs-scraper"
```

If your CLI supports headers, add `Authorization: Bearer <APIFY_TOKEN>` through the client's header option or environment-backed config. Otherwise use OAuth in a supported client or generate a compatible setup at `https://mcp.apify.com/`.

Claude Desktop / Cursor-style JSON config:

```json
{
  "mcpServers": {
    "apify-duunitori": {
      "url": "https://mcp.apify.com?tools=automation-lab/duunitori-jobs-scraper",
      "headers": {
        "Authorization": "Bearer <APIFY_TOKEN>"
      }
    }
  }
}
```

Replace `<APIFY_TOKEN>` with a token from Apify Console → Settings → API & Integrations. Do not paste the token into prompts or shared project files. If your MCP client does not support HTTP headers, use the Apify MCP configurator at `https://mcp.apify.com/` to generate a compatible setup for that client.

Example prompts: “Find recent developer jobs in Helsinki and summarize hiring companies,” “Export salary-bearing Duunitori jobs for Tampere,” or “Monitor Finnish nursing jobs weekly and flag new employers.”

### Common workflows

- Competitor hiring monitoring for recruiters.
- Finnish labor-market dashboards for analysts.
- Job aggregator feed collection.
- Salary-signal extraction for compensation research.
- Weekly hiring alerts by city or keyword.
- Enrichment of internal employer lists with active job postings.

### Performance notes

The actor uses HTTP requests and Cheerio parsing, not a browser. Detail enrichment requires one extra page request per job, so disabling `includeDetails` is faster. The default memory is 256 MB, which is appropriate for this lightweight actor.

### Troubleshooting

If no results appear, broaden the keyword or remove the location filter. If descriptions or application links are missing, make sure `includeDetails` is enabled. If a direct URL fails, confirm it is a public Duunitori search or `/tyopaikat/tyo/` detail URL. If salary is empty, the employer likely did not publish salary information.

### Legality and responsible use

This actor extracts public job-listing pages. You are responsible for using the data lawfully, respecting Duunitori terms, and complying with privacy, database, and employment-data rules that apply to your use case. Avoid excessive scheduling and do not use the data for spam or unlawful profiling.

### Related scrapers

This actor belongs with Finland and European recruitment-data workflows. After publication, cross-link it with other automation-lab job-board scrapers, company scrapers, lead-generation actors, and market-intelligence tools on Apify.

### FAQ

**Does it require a Duunitori account?** No. It reads public pages.

**Can it scrape external ATS pages?** No. It records application URLs but does not crawl external application systems.

**Can I monitor jobs every day?** Yes. Use Apify tasks and schedules.

**Can I scrape exact Duunitori URLs?** Yes. Put them in `startUrls`.

**Why is salary sometimes empty?** Salary is only available when Duunitori or the employer publishes it.

### Field notes

- Title and company come from search cards first, preserving the wording users see in Duunitori search results.
- Detail pages are used for JobPosting JSON-LD when `includeDetails` is enabled.
- Application URLs may point to Duunitori or to an external employer ATS.
- Category values are Duunitori category labels and may be Finnish.
- Tags are user-visible badges from the search result card.
- Posting dates can be localized card text or ISO dates from JSON-LD when details are enabled.
- `validThrough` is usually an ISO deadline from Schema.org data.
- `scrapedAt` helps scheduled users identify which run produced a record.
- If a card and detail page disagree, the detail page is preferred for structured dates, application links, and employment type.
- Runs are best compared by `sourceUrl` or `jobId` when building deduplication logic for recurring monitoring.

# Actor input Schema

## `keywords` (type: `string`):

Search phrase to use on Duunitori, for example developer, nurse, sales, data engineer.

## `location` (type: `string`):

Optional Finnish city or area used in Duunitori search, for example Helsinki, Espoo, Tampere, Turku.

## `startUrls` (type: `array`):

Optional Duunitori search result or job detail URLs. If provided, these override keyword/location search.

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

Maximum number of job records to save.

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

Open each job detail page to collect description, application URL, employment type, ISO posting dates, deadline, and structured salary data when available.

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

Use Apify Proxy for reliable cloud access to Duunitori. Residential Finland proxy is prefilled because Duunitori returns incomplete pages from some datacenter networks.

## Actor input object example

```json
{
  "keywords": "developer",
  "location": "Helsinki",
  "startUrls": [
    {
      "url": "https://duunitori.fi/tyopaikat?haku=developer&alue=Helsinki"
    }
  ],
  "maxItems": 20,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FI"
  }
}
```

# 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 = {
    "keywords": "developer",
    "location": "Helsinki",
    "startUrls": [
        {
            "url": "https://duunitori.fi/tyopaikat?haku=developer&alue=Helsinki"
        }
    ],
    "maxItems": 20,
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FI"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/duunitori-jobs-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 = {
    "keywords": "developer",
    "location": "Helsinki",
    "startUrls": [{ "url": "https://duunitori.fi/tyopaikat?haku=developer&alue=Helsinki" }],
    "maxItems": 20,
    "includeDetails": True,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FI",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/duunitori-jobs-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 '{
  "keywords": "developer",
  "location": "Helsinki",
  "startUrls": [
    {
      "url": "https://duunitori.fi/tyopaikat?haku=developer&alue=Helsinki"
    }
  ],
  "maxItems": 20,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FI"
  }
}' |
apify call automation-lab/duunitori-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Duunitori Jobs Scraper",
        "description": "Scrape Duunitori.fi jobs by keyword, city, or URL. Export company, location, salary, descriptions, dates, and application links.",
        "version": "0.1",
        "x-build-id": "7AW2LfeBj9JjYpaKZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~duunitori-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-duunitori-jobs-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~duunitori-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-duunitori-jobs-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~duunitori-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-duunitori-jobs-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",
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Search phrase to use on Duunitori, for example developer, nurse, sales, data engineer."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional Finnish city or area used in Duunitori search, for example Helsinki, Espoo, Tampere, Turku."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional Duunitori search result or job detail URLs. If provided, these override keyword/location search.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum jobs",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of job records to save.",
                        "default": 20
                    },
                    "includeDetails": {
                        "title": "Include detail-page data",
                        "type": "boolean",
                        "description": "Open each job detail page to collect description, application URL, employment type, ISO posting dates, deadline, and structured salary data when available.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliable cloud access to Duunitori. Residential Finland proxy is prefilled because Duunitori returns incomplete pages from some datacenter networks.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "FI"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
