# S1 Jobs Scraper: Scotland Jobs, Salaries & Employers (`getascraper/s1jobs-scraper`) Actor

Scrape every job on s1jobs.com (Scotland's leading job board). Extract titles, employers with logos, full JobPosting JSON-LD, parsed salary bands, geo-coords, posting dates. Auto-paginate listings or paste direct detail URLs. $1.99 per 1,000 jobs.

- **URL**: https://apify.com/getascraper/s1jobs-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## S1 Jobs Scraper: Scotland Jobs, Salaries & Employers

**S1 Jobs** is Scotland's leading job board, advertising thousands of live vacancies across Glasgow, Edinburgh, Aberdeen, Dundee, Inverness, and the Highlands. This Actor pulls every job listing and decodes the full `JobPosting` JSON-LD schema into clean, structured rows ready for B2B lead generation, salary benchmarking, or recruitment analytics.

Pay-per-result pricing, no subscription, no minimums.

### What does S1 Jobs Scraper do?

Scrape [s1jobs.com](https://www.s1jobs.com) at scale. Enter any combination of keywords (electrician, nurse, accountant, project-manager, driver) and locations (Glasgow, Edinburgh, Aberdeen, Fife, Highlands), and the Actor walks the search listings, follows the next page links, and fetches each job's detail page. Detail pages are parsed from the embedded Schema.org `JobPosting` JSON-LD block, giving you perfectly structured data with no fragile DOM scraping.

Each row contains the job ID, title, employer name and logo, full description, posting and expiry dates, employment type, parsed salary band (min / max / currency / period), and structured address (locality, region, postal code, country, latitude, longitude). The Actor is built on Crawlee + Cheerio, so it runs on lightweight HTTP, not a browser. Standard datacenter IPs succeed without proxies.

Built for recruiters, talent intelligence teams, salary researchers, regional economic analysts, and CRM enrichment pipelines.

### Why use S1 Jobs Scraper?

- **Scotland-only coverage.** S1 Jobs is the dominant job board for Scottish vacancies. Capture roles the major UK-wide boards miss.
- **B2B leads with logos.** Every job row ships the employer name and logo URL. Drop straight into HubSpot, Salesforce, or Airtable.
- **Salary benchmarking.** Parse raw salary strings into structured `min`, `max`, `currency`, and `period` fields. Run market-rate research across regions and sectors.
- **Geo-coordinates.** Address parsing includes latitude and longitude for every job. Power maps and heatmaps.
- **Job alerts pipeline.** Filter by `dateWithinDays` to emit only fresh postings. Wire into Slack, email, or webhook alerts.
- **No anti-bot blocks.** Standard datacenter IPs work. No residential proxy spend required.

### How to use S1 Jobs Scraper

1. **Open the Input tab.** Type one or more keywords (e.g. `electrician, driver`) and one or more locations (e.g. `glasgow, edinburgh`). Or paste specific listing or detail URLs into **Start URLs** for surgical precision.
2. **Click Run.** The Actor queues listing pages, walks pagination, and fetches every detail page.
3. **Download the dataset.** Output is available as JSON, CSV, Excel, or via the API. Choose from four pre-built views: Overview, B2B Leads, Salary Benchmark, and Newest Postings.

### Input

| Field | Type | Description | Default |
| --- | --- | --- | --- |
| `startUrls` | array | Paste listing URLs (e.g. `https://www.s1jobs.com/jobs/electrician/in-glasgow/`) or detail URLs. Overrides keyword/location filters when set. | `[]` |
| `keywords` | array | Job titles, sectors, or categories. Each becomes a `/jobs/<keyword>/` path. Examples: `electrician`, `nurse`, `accountant`, `project-manager`, `driver`, `teacher`, `social-care`. | `[]` |
| `locations` | array | Scottish cities or regions. Each becomes a `/in-<location>/` path. Examples: `glasgow`, `edinburgh`, `aberdeen`, `dundee`, `fife`, `highlands`, `orkney`. | `[]` |
| `maxItems` | integer | Maximum job rows to emit per search URL (1-10000). | `100` |
| `includeDescription` | boolean | Emit full HTML description. Set `false` for lean B2B lead rows (~1 KB instead of ~10 KB). | `true` |
| `dateWithinDays` | integer | Only emit jobs posted within the last N days. `0` = no filter. | `0` |
| `maxConcurrency` | integer | Parallel HTTP requests for detail pages (1-20). | `8` |
| `maxRequestRetries` | integer | Per-URL retry budget on transient errors and 5xx (0-10). | `3` |
| `proxyConfiguration` | object | S1 Jobs does not block datacenter IPs. Leave disabled for cheapest runs. | `{ "useApifyProxy": false }` |

#### Example input

```json
{
    "keywords": ["electrician", "driver"],
    "locations": ["glasgow", "edinburgh"],
    "maxItems": 250,
    "includeDescription": true,
    "dateWithinDays": 30,
    "maxConcurrency": 8
}
````

### Output

Each row is one job posting. Download the dataset in JSON, CSV, HTML, or Excel. The Actor also writes a `run-summary` to the key-value store with top employers, top locations, salary distribution, and contract type counts.

#### Example row

```json
{
    "rowType": "job",
    "listingUrl": "https://www.s1jobs.com/jobs/electrician/in-glasgow/",
    "jobId": "126836433",
    "jobUrl": "https://www.s1jobs.com/job/electrician-engineer-126836433",
    "title": "Electrician Engineer",
    "description": "<p><strong>Electrician Engineer</strong></p><p><strong>Contract: Government</strong>...",
    "datePosted": "2026-05-13",
    "validThrough": "2026-06-10",
    "employmentType": "FULL_TIME, OTHER",
    "industry": null,
    "directApply": true,
    "jobLocationType": null,
    "employer": {
        "name": "ISS Facility Services",
        "url": "",
        "logoUrl": "https://www.s1jobs.com//ui/img/shared/company_logos/1f50adaef0bda3b04b964a4d5df6c710.png"
    },
    "location": {
        "text": "Hairmyres, South Lanarkshire, G758EA, UK",
        "locality": "Hairmyres",
        "region": "South Lanarkshire",
        "postalCode": "G758EA",
        "country": "UK",
        "lat": 55.7581,
        "lng": -4.23012
    },
    "salary": {
        "rawText": null,
        "min": null,
        "max": null,
        "currency": "GBP",
        "period": "annum"
    },
    "scrapedAt": "2026-06-07T03:55:00.000Z"
}
```

### Data table

| Field | Type | Description |
| --- | --- | --- |
| `rowType` | string | Always `job` for job rows. |
| `listingUrl` | string | The search page the job was discovered on. |
| `jobId` | string | The 9-digit S1 Jobs vacancy ID, parsed from the URL. |
| `jobUrl` | string | Canonical URL of the job detail page. |
| `title` | string | Job title as listed. |
| `description` | string | Full HTML description (or empty if `includeDescription=false`). |
| `datePosted` | string | ISO date the job was posted. |
| `validThrough` | string | null | ISO date the listing closes. |
| `employmentType` | string | null | Comma-joined list (e.g. `FULL_TIME, OTHER`). |
| `industry` | string | null | Industry tag if provided. |
| `directApply` | boolean | null | Whether the job supports direct apply on s1jobs.com. |
| `jobLocationType` | string | null | `TELECOMMUTE` for remote roles. |
| `employer.name` | string | Hiring organization name. |
| `employer.url` | string | Hiring organization website if provided. |
| `employer.logoUrl` | string | null | URL of the employer logo image. |
| `location.text` | string | Joined `locality, region, postalCode, country`. |
| `location.locality` | string | null | City or town. |
| `location.region` | string | null | County or region. |
| `location.postalCode` | string | null | UK postcode. |
| `location.country` | string | Country code (always `UK` for S1 Jobs). |
| `location.lat` | number | null | Latitude. |
| `location.lng` | number | null | Longitude. |
| `salary.rawText` | string | null | Original visible salary string when JSON-LD omits min/max. |
| `salary.min` | number | null | Minimum salary. |
| `salary.max` | number | null | Maximum salary. |
| `salary.currency` | string | Currency code (always `GBP` for S1 Jobs). |
| `salary.period` | string | null | `annum`, `hour`, `day`, `week`, or `month`. |
| `scrapedAt` | string | ISO timestamp when the row was written to the dataset. |

### Pricing

$1.99 per 1,000 results. Pay only for the data you extract. A 5,000-row run costs about $9.95 of platform credit. Compute and storage costs are negligible because the Actor runs on lightweight HTTP, not a browser. No subscription, no minimums, no proxy overhead.

### Tips or Advanced options

- **Use `startUrls` for precision.** If you only want jobs from a specific listing, paste the URL directly. Direct detail URLs always emit 1 row each.
- **Combine keywords and locations.** Every keyword is paired with every location, so `["electrician", "driver"]` x `["glasgow", "edinburgh"]` produces 4 search URLs.
- **Trim descriptions for B2B lead lists.** Set `includeDescription: false` to drop description HTML. Rows shrink from ~10 KB to ~1 KB, so a 10,000-row run costs 10x less to store.
- **Tighten freshness.** Set `dateWithinDays: 7` to only emit jobs posted in the last week. Great for daily job alerts.
- **Avoid burning rate limits.** S1 Jobs is open. Default `maxConcurrency: 8` is comfortable. If you observe 429s, drop to 4 or enable Apify Residential GB.
- **Use the B2B Leads view.** In the Output tab, switch to the `leads` view to see a clean table of title, employer, location, and apply URL ready for CRM import.

### FAQ, disclaimers, and support

**Is scraping S1 Jobs legal?** This Actor accesses publicly available job postings. You are responsible for ensuring your use case complies with s1jobs.com's Terms of Service, the UK Computer Misuse Act, and applicable data protection laws. Do not republish full descriptions verbatim. This Actor is intended for personal research, recruitment analytics, and CRM enrichment, not bulk redistribution.

**How fresh is the data?** The Actor fetches live pages in real time. Job postings appear in your dataset within seconds of the run completing.

**Why are some salaries missing?** S1 Jobs JSON-LD sometimes includes only `unitText` (e.g. `YEAR`) without numeric min/max values. The Actor captures the period but leaves min/max as `null`. Set `includeDescription: true` and parse the visible salary string in your downstream pipeline for a second pass.

**What's the difference between S1 Jobs Scraper and `cwjobs-scraper`?** CWJobs targets the UK tech / IT job market on cwjobs.co.uk. S1 Jobs targets general Scottish vacancies on s1jobs.com. They are sister Actors in the same portfolio and use the same JSON-LD extraction logic.

**How do I report a bug or request a feature?** Open an issue in the [Issues tab](https://console.apify.com/actors/~console/runs). Include the run ID and a sample URL that reproduces the problem.

Need a custom scraper for another regional job board or a vertical-specific extractor? Custom development is available on request.

# Actor input Schema

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

Optional. Paste S1 Jobs listing URLs (e.g. https://www.s1jobs.com/jobs/electrician/in-glasgow/). If provided, takes precedence over search filters.

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

Job titles, sectors, or categories (e.g. electrician, nurse, accountant).

## `locations` (type: `array`):

Scottish cities or regions (e.g. glasgow, edinburgh, aberdeen). Leave empty for all Scotland.

## `includeDescription` (type: `boolean`):

If true (default), emit the full HTML job description.

## `dateWithinDays` (type: `integer`):

Only emit jobs whose posting date is within the last N days. 0 = no filter.

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

Maximum job rows to emit per search URL. Default 100.

## `maxConcurrency` (type: `integer`):

Parallel HTTP requests for detail-page fetches.

## `maxRequestRetries` (type: `integer`):

Per-URL retry budget on transient errors.

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

Connection proxies to prevent website blocks.

## Actor input object example

```json
{
  "startUrls": [],
  "keywords": [
    "electrician",
    "driver"
  ],
  "locations": [
    "glasgow"
  ],
  "includeDescription": true,
  "dateWithinDays": 0,
  "maxItems": 100,
  "maxConcurrency": 8,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [],
    "keywords": [
        "electrician",
        "driver"
    ],
    "locations": [
        "glasgow"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/s1jobs-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 = {
    "startUrls": [],
    "keywords": [
        "electrician",
        "driver",
    ],
    "locations": ["glasgow"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/s1jobs-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 '{
  "startUrls": [],
  "keywords": [
    "electrician",
    "driver"
  ],
  "locations": [
    "glasgow"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/s1jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "S1 Jobs Scraper: Scotland Jobs, Salaries & Employers",
        "description": "Scrape every job on s1jobs.com (Scotland's leading job board). Extract titles, employers with logos, full JobPosting JSON-LD, parsed salary bands, geo-coords, posting dates. Auto-paginate listings or paste direct detail URLs. $1.99 per 1,000 jobs.",
        "version": "0.1",
        "x-build-id": "Woq55dPhpllPE9IZK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~s1jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-s1jobs-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/getascraper~s1jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-s1jobs-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/getascraper~s1jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-s1jobs-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": {
                    "startUrls": {
                        "title": "Start URLs (advanced)",
                        "type": "array",
                        "description": "Optional. Paste S1 Jobs listing URLs (e.g. https://www.s1jobs.com/jobs/electrician/in-glasgow/). If provided, takes precedence over search filters.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Job titles, sectors, or categories (e.g. electrician, nurse, accountant).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Scottish cities or regions (e.g. glasgow, edinburgh, aberdeen). Leave empty for all Scotland.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDescription": {
                        "title": "Include full description",
                        "type": "boolean",
                        "description": "If true (default), emit the full HTML job description.",
                        "default": true
                    },
                    "dateWithinDays": {
                        "title": "Posted within last N days",
                        "minimum": 0,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only emit jobs whose posting date is within the last N days. 0 = no filter.",
                        "default": 0
                    },
                    "maxItems": {
                        "title": "Max Jobs per Search",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum job rows to emit per search URL. Default 100.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel HTTP requests for detail-page fetches.",
                        "default": 8
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Per-URL retry budget on transient errors.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Connection proxies to prevent website blocks.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
