# Community First Yorkshire Jobs Scraper (`memo23/cfy-scraper`) Actor

Scrape jobs and other portfolio content from communityfirstyorkshire.org.uk via WP-JSON portfolio CPT. Filter by taxonomy (default jobs ≈ 6 vacancies). Title, full HTML, location, apply email/URL, best-effort closing date + salary regex. JSON or CSV out.

- **URL**: https://apify.com/memo23/cfy-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

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

## Community First Yorkshire Jobs Scraper

**Scrape jobs (and other portfolio content) from communityfirstyorkshire.org.uk.** Uses the public WP-JSON `portfolio` custom post type filtered by the `portfolio_entries` taxonomy (default `jobs` term = ~6 live vacancies). Each row carries title, full description HTML, location term, apply email/URL (extracted from body), and best-effort closing date + salary. JSON or CSV out, no compute charge per run, just per result.

#### How it works

![How Community First Yorkshire Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-cfy.png)

#### ✨ Why use this scraper?

Community First Yorkshire (CFY) is the rural voluntary-sector hub for North Yorkshire, York, and the Yorkshire Dales. Tracking who's hiring at rural Yorkshire charities? Cross-region CVS comparisons? Sourcing for paid roles outside the metro areas?

- 🎯 **Three starting points.** The default Jobs taxonomy filter (set `entityTerms: ["jobs"]`), a direct `/portfolio-item/<slug>/` URL, or any `/wp-json/wp/v2/portfolio` URL.
- ⚡ **WP-JSON `portfolio` CPT as the data source.** Each item is a full WordPress portfolio entry with content, taxonomy, and `_embed`-able media.
- 🏷️ **`portfolio_entries` taxonomy split.** Term names are auto-split into `categories` (Jobs, Leadership, Networks, etc.) vs `locations` (North Yorkshire, York, Pateley Bridge, Homeworking).
- 📧 **Apply email/URL from body.** Regex-extracted from the content HTML (first `mailto:` → `applyEmail`; first outbound http href → `externalApplyUrl`).
- 📅 **Closing date + salary (best-effort).** Heuristic regex against body plain-text ("Closing date: …", "£X – £Y per annum"). Always falls back gracefully to null.
- 🌐 **Beyond jobs.** Filter by `volunteering`, `get-support`, `leadership`, `networks`, `advertise`, `podcast`, `membership` to pull other portfolio content.
- 📤 **Clean exports.** One row per item with full HTML description inline. JSON + CSV exported automatically.

#### 🎯 Use cases

| Team | What they build |
|------|-----------------|
| **Rural CVS recruiters** | Daily new-vacancy feeds for North Yorkshire / York charities |
| **Sector publications** | Auto-populate Yorkshire voluntary-sector jobs sections |
| **Workforce strategy** | Rural vs urban pay benchmarks across Yorkshire |
| **Aggregators** | Apply emails / URLs for redirect-and-track use cases |
| **Podcast / content discovery** | Pull `podcast` term for the CFY podcast catalogue |

#### 📥 Supported inputs

| URL pattern | Behaviour |
|---|---|
| (empty + `entityTerms: ["jobs"]`) | **Default — Jobs only** (~6 vacancies) |
| `https://www.communityfirstyorkshire.org.uk/portfolio-item/<slug>/` | **Single portfolio item** |
| `https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio` | **All portfolio entries** (43 items) |
| `https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio?portfolio_entries=87` | **Filter by term ID** (pass-through) |

**Not supported:** browser listing pages (CFY has no public `/jobs/` page — content is rendered into a masonry on the homepage); hosts outside `communityfirstyorkshire.org.uk`.

#### 🔄 How it works

1. **Resolve start URLs** — either from explicit `startUrls`, or built from `entityTerms` (slug → numeric term ID via a known map).
2. **Classify + translate** each URL into the canonical `/wp-json/wp/v2/portfolio` shape, optionally with `?portfolio_entries=<id>&_embed=1`.
3. **Walk pagination** via `X-WP-TotalPages` from the response header.
4. **Parse each portfolio item**:
   - title, content HTML
   - `portfolio_entries` term names → split into `categories` vs `locations`
   - body regex → apply email, external URL, closing date, salary (best-effort)
5. **Push one normalised row per item** to the dataset.

#### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `[]` | Direct portfolio-item / WP-JSON URLs. Empty = use `entityTerms`. |
| `entityTerms` | array | `["jobs"]` | portfolio_entries taxonomy slugs to scrape. Allowed: `jobs`, `volunteering`, `get-support`, `get-involved`, `leadership`, `networks`, `advertise`, `podcast`, `membership`. |
| `enrichTaxonomies` | boolean | `true` | When `true`, embeds taxonomy term names + featured image via WP-JSON `_embed`. |
| `postedWithinHours` | integer | (none) | Only return rows posted in the last N hours (24 = last day, 72 = last 3 days). Empty/0 = all. Ideal for daily monitoring runs that only want fresh postings. |
| `maxItems` | integer | `1000` | Hard cap on rows pushed. |
| `maxConcurrency` / `minConcurrency` | integer | `5` / `1` | Parallel WP-JSON page-fetch limits. |
| `maxRequestRetries` | integer | `5` | Retries before a failed request is given up. |
| `proxy` | object | No proxy | Site does not anti-bot. |

#### 📊 Output overview

Each scraped item is one **single dataset row**. The `type` field is `"job"` when the item is in the "Jobs" category, else `"post"`. The `cpt` field is always `"portfolio"`.

#### 📦 Output sample

```json
{
  "type": "job",
  "cpt": "portfolio",
  "source": "communityfirstyorkshire.org.uk",
  "jobId": "24490",
  "slug": "north-yorkshire-adviser-to-unpaid-carers-veterans-carers-plus-yorkshire",
  "jobUrl": "https://www.communityfirstyorkshire.org.uk/portfolio-item/north-yorkshire-adviser-to-unpaid-carers-veterans-carers-plus-yorkshire/",
  "wpJsonUrl": "https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio/24490",
  "title": "North Yorkshire: Adviser to Unpaid Carers (Veterans), Carers Plus Yorkshire",
  "description": "<div>About the role…</div>",
  "descriptionText": "About the role…",
  "companyName": null,
  "companyWebsite": "https://www.carersplus.net/",
  "companyDomain": "carersplus.net",
  "location": "North Yorkshire",
  "locations": ["North Yorkshire"],
  "remote": false,
  "salary": {
    "currency": "GBP",
    "min": 24000,
    "max": 27000,
    "raw": "£24,000 - £27,000 per annum"
  },
  "salaryRaw": "£24,000 - £27,000 per annum",
  "categories": ["Jobs"],
  "employmentTypes": [],
  "contractType": null,
  "portfolioTerms": ["Jobs", "North Yorkshire"],
  "status": "publish",
  "postedDate": "2026-05-15T09:26:35Z",
  "closingDate": "Friday 30 May 2026",
  "modifiedDate": "2026-05-15T09:26:35Z",
  "applyType": "email",
  "applyUrl": "https://www.communityfirstyorkshire.org.uk/portfolio-item/north-yorkshire-adviser-to-unpaid-carers-veterans-carers-plus-yorkshire/",
  "applyEmail": "recruitment@carersplus.net",
  "externalApplyUrl": "https://www.carersplus.net/",
  "featuredImageUrl": null,
  "authorId": 1,
  "authorName": null,
  "scrapedAt": "2026-05-20T00:13:00.000Z"
}
````

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| **Identifiers** | `type` (`job` or `post`), `cpt` (always `portfolio`), `source`, `jobId`, `slug`, `jobUrl`, `wpJsonUrl`, `scrapedAt` |
| **Content** | `title`, `description` (HTML), `descriptionText` (plain) |
| **Dates** | `postedDate` (ISO), `closingDate` (raw text), `modifiedDate` (ISO) |
| **Employer** | `companyName` (null), `companyWebsite` (= externalApplyUrl), `companyDomain` |
| **Location** | `location` (primary, from `portfolio_entries`), `locations[]` (all), `remote` (true if 'Homeworking' tag present) |
| **Compensation** | `salary.{currency, min, max, raw}` (best-effort regex), `salaryRaw` |
| **Taxonomies** | `categories[]` (Jobs/Leadership/etc.), `portfolioTerms[]` (all term names) |
| **Apply flow** | `applyType`, `applyUrl`, `applyEmail`, `externalApplyUrl` |

#### ❓ FAQ

**Why is closing date sometimes null even when the body mentions a deadline?**
The regex looks for "Closing date:", "Deadline:", or "Apply by:" prefixes. If the body uses other phrasing (e.g. "Applications must arrive by…"), the field stays null. The full body HTML is always in `description`.

**Why is salary parse fragile?**
CFY items don't have a structured salary field — the regex hunts for "£" patterns in body text. Look at `salaryRaw` to see what was matched; if structured `min`/`max` look wrong, fall back to the raw string.

**Can I scrape volunteering or events too?**
Yes. Set `entityTerms: ["volunteering"]` (or other term slugs). The same row shape applies — `type` becomes `"post"` for non-job categories.

**Can I scrape private pages or applicant data?**
No. Only the public WP-JSON REST API.

**How do I limit results?**
Set `maxItems`. With only ~6 jobs live, `maxItems: 100` covers everything.

#### 💬 Support

- For issues or feature requests, please use the **Issues** tab on the actor's Apify Console page.
- Author's website: <https://muhamed-didovic.github.io/>
- Email: <muhamed.didovic@gmail.com>

#### 🛠 Additional services

- Custom output shape, additional fields, or one-off datasets: <muhamed.didovic@gmail.com>
- Similar scrapers for other CVS / volunteer hubs (Doing Good Leeds, VA Rotherham, VAS Sheffield, Barnsley CVS, BCVS, York CVS): drop an email.
- For API access (no Apify fee, just usage): <muhamed.didovic@gmail.com>

#### 🔎 Explore more scrapers

See other scrapers at [memo23's Apify profile](https://apify.com/memo23) — covering job boards, real estate, social media, and more.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Community First Yorkshire (CFY), communityfirstyorkshire.org.uk, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only the publicly available WP-JSON REST endpoint and public detail pages on communityfirstyorkshire.org.uk — no authenticated endpoints, recruiter-only features, or content behind a login. Users are responsible for ensuring their use complies with communityfirstyorkshire.org.uk's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

community first yorkshire scraper, scrape communityfirstyorkshire.org.uk, cfy jobs api, yorkshire rural charity jobs scraper, north yorkshire voluntary sector jobs api, york charity jobs scraper, yorkshire dales charity recruitment data, Apify cfy, rural yorkshire jobs scraper, pateley bridge jobs api, yorkshire homeworking jobs scraper, wp-json portfolio cpt scraper, wordpress portfolio scraper, charityjob alternative scraper, doing good leeds alternative scraper, vassheffield alternative scraper, barnsleycvs alternative scraper, va rotherham alternative scraper, uk rural cvs jobs scraper, yorkshire third sector recruitment data

# Actor input Schema

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

Supported shapes: `/portfolio-item/<slug>/`, `/wp-json/wp/v2/portfolio`, `/wp-json/wp/v2/portfolio/<id>`. Leave empty + set `entityTerms` to filter by category.

## `entityTerms` (type: `array`):

Select which portfolio\_entries terms to include when no `startUrls` are given. Default `jobs` returns ~6 paid vacancies. Other useful terms: `volunteering`, `get-support`, `get-involved`, `leadership`, `networks`, `advertise`, `podcast`, `membership`.

## `enrichTaxonomies` (type: `boolean`):

When enabled (recommended), each row carries decoded `portfolio_entries` term names (split into `categories` vs `locations`) plus featured image URL. Uses WP-JSON `_embed` — no extra HTTP requests.

## `postedWithinHours` (type: `integer`):

Filters on each row's posted date. Leave 0 (default) to return every live vacancy regardless of age — recommended, since CFY only posts a handful of jobs per week. Set 24 for the last day, 72 for the last 3 days, etc. Rows whose source has no posted date are always kept.

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

Hard cap on rows pushed. ~6 jobs live; whole portfolio is 43 items.

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

Maximum WP-JSON pages fetched in parallel.

## `minConcurrency` (type: `integer`):

Minimum WP-JSON pages fetched in parallel.

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

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Site does not anti-bot — proxy optional.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio?portfolio_entries=87&per_page=100&_embed=1"
  ],
  "entityTerms": [
    "jobs"
  ],
  "enrichTaxonomies": true,
  "postedWithinHours": 0,
  "maxItems": 1000,
  "maxConcurrency": 5,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio?portfolio_entries=87&per_page=100&_embed=1"
    ],
    "postedWithinHours": 0,
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/cfy-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": ["https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio?portfolio_entries=87&per_page=100&_embed=1"],
    "postedWithinHours": 0,
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/cfy-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": [
    "https://www.communityfirstyorkshire.org.uk/wp-json/wp/v2/portfolio?portfolio_entries=87&per_page=100&_embed=1"
  ],
  "postedWithinHours": 0,
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call memo23/cfy-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Community First Yorkshire Jobs Scraper",
        "description": "Scrape jobs and other portfolio content from communityfirstyorkshire.org.uk via WP-JSON portfolio CPT. Filter by taxonomy (default jobs ≈ 6 vacancies). Title, full HTML, location, apply email/URL, best-effort closing date + salary regex. JSON or CSV out.",
        "version": "0.0",
        "x-build-id": "YqmlDoVkKNceQOQBV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~cfy-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-cfy-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/memo23~cfy-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-cfy-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/memo23~cfy-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-cfy-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": "communityfirstyorkshire.org.uk URLs",
                        "type": "array",
                        "description": "Supported shapes: `/portfolio-item/<slug>/`, `/wp-json/wp/v2/portfolio`, `/wp-json/wp/v2/portfolio/<id>`. Leave empty + set `entityTerms` to filter by category.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "entityTerms": {
                        "title": "Which portfolio_entries taxonomy terms to scrape",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select which portfolio_entries terms to include when no `startUrls` are given. Default `jobs` returns ~6 paid vacancies. Other useful terms: `volunteering`, `get-support`, `get-involved`, `leadership`, `networks`, `advertise`, `podcast`, `membership`.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "jobs",
                                "volunteering",
                                "get-support",
                                "get-involved",
                                "leadership",
                                "networks",
                                "advertise",
                                "podcast",
                                "membership"
                            ]
                        },
                        "default": [
                            "jobs"
                        ]
                    },
                    "enrichTaxonomies": {
                        "title": "Embed taxonomies + featured media",
                        "type": "boolean",
                        "description": "When enabled (recommended), each row carries decoded `portfolio_entries` term names (split into `categories` vs `locations`) plus featured image URL. Uses WP-JSON `_embed` — no extra HTTP requests.",
                        "default": true
                    },
                    "postedWithinHours": {
                        "title": "Only rows posted in the last N hours",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filters on each row's posted date. Leave 0 (default) to return every live vacancy regardless of age — recommended, since CFY only posts a handful of jobs per week. Set 24 for the last day, 72 for the last 3 days, etc. Rows whose source has no posted date are always kept.",
                        "default": 0
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows pushed. ~6 jobs live; whole portfolio is 43 items.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum WP-JSON pages fetched in parallel.",
                        "default": 5
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum WP-JSON pages fetched in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Site does not anti-bot — proxy optional.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
