# Board Dashboard - Monthly Board Pack With Early Warning (`bloom-consulting/board-dashboard`) Actor

Turn monthly financials, budget, scorecard and board actions into a one-file board dashboard: a one-line thesis, ten verdict-led pages, ten early-warning triggers and board questions with owners. HTML, PDF, Excel, JSON; optional encryption.

- **URL**: https://apify.com/bloom-consulting/board-dashboard.md
- **Developed by:** [Bloom Consulting](https://apify.com/bloom-consulting) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Board Dashboard - Monthly Board Pack With Early Warning

Turn monthly financials into a **board dashboard that opens with a verdict**: one sentence for the board, ten pages that each start with a conclusion, ten early-warning triggers and the questions the board should ask next, each with an owner.

No API keys, no LLM calls, no data sent anywhere. The arithmetic is deterministic: the same inputs always produce the same dashboard, and every figure links back to its source and definition.

### What it does

Boards rarely like a dashboard for its charts. They like it when it tells them what is going on and what to ask. The Actor applies one formula: **clean data + a verdict on every page + a source behind every number + actuals kept apart from plan.**

| Page | What it answers |
| --- | --- |
| Executive home | The thesis, eight headline indicators, the attention list, revenue and cash trends, the full-year path |
| Chair and CEO agenda | Owned priorities, number-bearing questions for the next meeting, KPIs that hit target while the company fails the cash gate |
| Board pulse | Each finding as finding, evidence, implication, action and board question |
| Earnings quality | Bridge from revenue to gross profit, EBITDA, operating cash flow and free cash flow; headline EBITDA is never shown alone |
| Cash and capital | Cash, cash budget, financial debt, free cash flow, runway, net debt |
| Working capital | DSO, DIO, DPO and cash conversion cycle over time |
| Scorecard | Each KPI against min, target and max with weights and owners |
| Action tracker | Board decisions with owner, due date and status; open items past due become overdue |
| Early warning | What would break the thesis: ten triggers with threshold, value and owner |
| Data status | Sources, definitions and every assumption the engine had to make |

**Early-warning triggers:** cash runway, revenue vs budget, EBITDA vs budget, gross margin change, cash conversion (FCF/EBITDA), DSO increase, cash conversion cycle, net debt/EBITDA, overdue board actions, scorecard score.

**Actuals and plan never mix.** Months after `periodEnd` are read as budget only. Zero placeholders in future months are not treated as data, and the plan period is shaded in every chart.

### What you get

Every run writes these to the run's key-value store:

| File | What it is |
| --- | --- |
| `dashboard.html` | The ten-page dashboard in one file. No server, no library, opens offline, works on a phone |
| `board-card.md` | One-screen summary: thesis, revenue, EBITDA, cash, flags, first question |
| `dashboard.pdf` | Every page, landscape A4 (not produced for encrypted runs) |
| `table.xlsx` | Summary, monthly data with formulas, scorecard, early warning, board pulse, agenda, actions |
| `data.json` | Every figure the dashboard was built from |
| `input.json` | The exact input the engine used |

The dataset row carries the thesis, headline figures, every early-warning flag, the board pulse findings, chair priorities and next-meeting questions, so you can chain this into a sheet, a CRM or a monthly workflow.

### Input

Tick **Run with sample data** first to see a full dashboard.

Otherwise fill **Board data**. Field names can be English or Turkish. Anything you do not have, leave out.

```json
{
  "company": "Example Packaging Ltd.",
  "periodEnd": "2026-08",
  "currency": "USD",
  "monthly": [
    { "month": "2026-08", "revenue": 1020000, "revenueBudget": 960000, "cogs": 715000,
      "ebitda": 121000, "ebitdaBudget": 140000, "cash": 1260000,
      "operatingCashFlow": -60000, "capex": 25000, "receivables": 2300000,
      "inventory": 1000000, "payables": 660000, "financialDebt": 1900000 },
    { "month": "2026-09", "revenueBudget": 980000, "ebitdaBudget": 145000 }
  ],
  "kpis": [
    { "name": "DSO (days)", "owner": "CFO", "weight": 50, "min": 70, "target": 55,
      "max": 45, "actual": 68, "direction": "lower" }
  ],
  "actions": [
    { "action": "Rewrite credit terms for the top 10 customers", "owner": "CFO",
      "due": "2026-08-31", "status": "open" }
  ]
}
```

Notes:

- **`monthly`** needs at least 3 months of `revenue` and `cash`. 13-24 months unlocks the year-on-year comparisons. Add `operatingCashFlow` and `capex` for real burn and cash conversion; without them runway falls back to month-end cash changes, which financing inflows can hide.
- **`periodEnd`** is the last actual month. If it is missing, the last month with revenue is used and the dashboard says so.
- **`kpis`** score min = 50, target = 100, max = 150, linear in between; `direction: "lower"` flips the scale for indicators like DSO.
- **`thesis`** replaces the one-sentence message the engine derives from growth and cash.
- **`owners`** routes findings to people: `revenue`, `profitability`, `cash`, `workingCapital`, `leverage`. The default owner is CFO for finance areas and CEO otherwise.
- **`unitDivisor: 1000`** if your figures are in thousands.
- Instead of the JSON field you can pass **Input file URL**: a public link to the Excel template or a JSON file. The [Excel template](https://bloomconsulting.com.tr/ornek/kurul-input-template.xlsx) has five sheets: Sirket (company), Aylik (monthly), KPI, Aksiyonlar (actions), Kaynaklar (sources).

### Encryption

Set **Dashboard password** and the dashboard file is encrypted with AES-256 (PBKDF2-SHA256 key, HMAC integrity check). It asks for the password when opened and decrypts locally in the browser; a wrong password does not open it. The password is never written into any file. Send the file and the password through different channels. The JSON and Excel records stay unencrypted in your private Apify storage.

### Report language

`language: "en"` or `"tr"`. Every output is produced in the chosen language.

### Typical uses

- **CEOs and CFOs**: send the monthly board pack as one file instead of thirty slides.
- **Startups**: report to investors every month with the same structure, runway and cash conversion up front.
- **Investors and holding finance teams**: run every portfolio company through the same triggers and compare.
- **Advisors and accountants**: produce a client-facing board dashboard from the trial balance you already have.

### Cost

The Actor is free to use; you pay only Apify platform usage for the run. A run takes roughly 15-40 seconds, most of it PDF rendering. Turn **Generate PDF** off for the cheapest run.

### Limits

- The dashboard is for information only. It is not an audit, a statutory report or investment advice. Figures are as declared by you.
- Thresholds are defaults (for example runway critical below 6 months, watch below 12). They are documented in the Early Warning page.
- The engine does not reconcile your sources. It records what you give it and says what is missing.

### About

Built by **Bloom Consulting**, an AI consulting company that builds finance agents for startups and SMEs. The [desktop edition](https://bloomconsulting.com.tr/paketler?utm_source=apify\&utm_medium=store\&utm_campaign=kurul\&utm_content=readme-paid#kurul) adds the Excel template workflow, month-over-month comparison, your own thresholds and a Claude Code agent that writes the chair's note.

- Web: [bloomconsulting.com.tr](https://bloomconsulting.com.tr/?utm_source=apify\&utm_medium=store\&utm_campaign=kurul\&utm_content=readme-footer)
- Contact: iletisim@bloomconsulting.com.tr

Found a bug or want a trigger added? Open an issue on the Actor page.

# Changelog

This Actor's version history is a separate document: https://apify.com/bloom-consulting/board-dashboard/changelog.md

# Actor input Schema

## `useSampleData` (type: `boolean`):

Ignore the fields below and run on a built-in example company (packaging SME, 20 months of actuals, budget, scorecard and board actions). Use this first to see the dashboard. Output produced this way is stamped DEMO.

## `boardInput` (type: `object`):

monthly: one row per month with month (2026-08), revenue, revenueBudget, cogs or grossProfit, ebitda, ebitdaBudget, netProfit, cash, cashBudget, operatingCashFlow, capex (positive), receivables, inventory, payables, financialDebt, headcount, customers. Give 13-24 months for year-on-year comparisons; 3 months is the minimum. periodEnd is the last actual month. kpis: name, owner, weight (sums to 100), min (score 50), target (100), max (150), actual, direction (higher | lower). actions: action, owner, due, status (open | done); open actions past their due date count as overdue. thesis overrides the one-sentence message the engine derives. If figures are in thousands set unitDivisor to 1000. English and Turkish field names are both accepted.

## `inputFileUrl` (type: `string`):

Alternative to the field above: a public http(s) URL of the Excel template (sheets Sirket, Aylik, KPI, Aksiyonlar, Kaynaklar; download it from this Actor's README) or a JSON file with the same data. Used only when "Board data" is empty.

## `companyName` (type: `string`):

Overrides the company name inside the data. Leave empty to keep it.

## `language` (type: `string`):

Language of the board card, dashboard, PDF and spreadsheet.

## `generatePdf` (type: `boolean`):

Print every dashboard page to a landscape A4 PDF with headless Chromium. Skipped automatically when a password is set. Turn off for a faster, cheaper run.

## `dashboardPassword` (type: `string`):

Encrypts the dashboard file with AES-256 (PBKDF2-SHA256 key). The file asks for the password when opened and decrypts locally in the browser. At least 8 characters. Send the file and the password through different channels. The JSON and Excel records in the key-value store are not encrypted; they stay private to your Apify account.

## Actor input object example

```json
{
  "useSampleData": false,
  "boardInput": {
    "company": "Example Packaging Ltd.",
    "periodEnd": "2026-08",
    "currency": "USD",
    "type": "sme",
    "audience": "board",
    "owners": {
      "revenue": "Sales Director",
      "profitability": "CFO",
      "cash": "CFO",
      "workingCapital": "CFO",
      "leverage": "CFO"
    },
    "monthly": [
      {
        "month": "2026-06",
        "revenue": 980000,
        "revenueBudget": 920000,
        "cogs": 680000,
        "ebitda": 118000,
        "ebitdaBudget": 130000,
        "netProfit": 61000,
        "cash": 1420000,
        "operatingCashFlow": -10000,
        "capex": 30000,
        "receivables": 2000000,
        "inventory": 950000,
        "payables": 680000,
        "financialDebt": 1950000
      },
      {
        "month": "2026-07",
        "revenue": 1000000,
        "revenueBudget": 940000,
        "cogs": 700000,
        "ebitda": 120000,
        "ebitdaBudget": 135000,
        "netProfit": 63000,
        "cash": 1350000,
        "operatingCashFlow": -40000,
        "capex": 25000,
        "receivables": 2150000,
        "inventory": 980000,
        "payables": 670000,
        "financialDebt": 1950000
      },
      {
        "month": "2026-08",
        "revenue": 1020000,
        "revenueBudget": 960000,
        "cogs": 715000,
        "ebitda": 121000,
        "ebitdaBudget": 140000,
        "netProfit": 64000,
        "cash": 1260000,
        "operatingCashFlow": -60000,
        "capex": 25000,
        "receivables": 2300000,
        "inventory": 1000000,
        "payables": 660000,
        "financialDebt": 1900000
      },
      {
        "month": "2026-09",
        "revenueBudget": 980000,
        "ebitdaBudget": 145000
      }
    ],
    "kpis": [
      {
        "name": "Revenue growth %",
        "area": "revenue",
        "owner": "Sales Director",
        "weight": 50,
        "min": 10,
        "target": 20,
        "max": 30,
        "actual": 24,
        "direction": "higher",
        "unit": "%"
      },
      {
        "name": "DSO (days)",
        "area": "workingCapital",
        "owner": "CFO",
        "weight": 50,
        "min": 70,
        "target": 55,
        "max": 45,
        "actual": 68,
        "direction": "lower",
        "unit": "days"
      }
    ],
    "actions": [
      {
        "action": "Rewrite credit terms for the top 10 customers",
        "owner": "CFO",
        "due": "2026-08-31",
        "status": "open"
      }
    ],
    "thesis": null,
    "sources": {
      "aylik": "Trial balance and management accounts, Jan-Aug 2026",
      "kpi": "2026 CEO scorecard",
      "aksiyonlar": "Board resolution log"
    }
  },
  "language": "en",
  "generatePdf": true
}
```

# Actor output Schema

## `results` (type: `string`):

Thesis, headline figures, early-warning flags, board pulse findings, chair priorities and next-meeting questions.

## `dashboard` (type: `string`):

The ten-page board dashboard in one file. Opens offline; asks for the password if one was set.

## `boardCard` (type: `string`):

One-screen summary: thesis, revenue, EBITDA, cash, flags and the first board question.

## `dashboardPdf` (type: `string`):

Every dashboard page, landscape A4. Not produced for encrypted runs.

## `workbook` (type: `string`):

Summary, monthly data with formulas, scorecard, early warning, board pulse, agenda and actions.

## `data` (type: `string`):

Every figure the dashboard was built from; pass it as the previous run next month.

# 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 = {
    "boardInput": {
        "company": "Example Packaging Ltd.",
        "periodEnd": "2026-08",
        "currency": "USD",
        "type": "sme",
        "audience": "board",
        "owners": {
            "revenue": "Sales Director",
            "profitability": "CFO",
            "cash": "CFO",
            "workingCapital": "CFO",
            "leverage": "CFO"
        },
        "monthly": [
            {
                "month": "2026-06",
                "revenue": 980000,
                "revenueBudget": 920000,
                "cogs": 680000,
                "ebitda": 118000,
                "ebitdaBudget": 130000,
                "netProfit": 61000,
                "cash": 1420000,
                "operatingCashFlow": -10000,
                "capex": 30000,
                "receivables": 2000000,
                "inventory": 950000,
                "payables": 680000,
                "financialDebt": 1950000
            },
            {
                "month": "2026-07",
                "revenue": 1000000,
                "revenueBudget": 940000,
                "cogs": 700000,
                "ebitda": 120000,
                "ebitdaBudget": 135000,
                "netProfit": 63000,
                "cash": 1350000,
                "operatingCashFlow": -40000,
                "capex": 25000,
                "receivables": 2150000,
                "inventory": 980000,
                "payables": 670000,
                "financialDebt": 1950000
            },
            {
                "month": "2026-08",
                "revenue": 1020000,
                "revenueBudget": 960000,
                "cogs": 715000,
                "ebitda": 121000,
                "ebitdaBudget": 140000,
                "netProfit": 64000,
                "cash": 1260000,
                "operatingCashFlow": -60000,
                "capex": 25000,
                "receivables": 2300000,
                "inventory": 1000000,
                "payables": 660000,
                "financialDebt": 1900000
            },
            {
                "month": "2026-09",
                "revenueBudget": 980000,
                "ebitdaBudget": 145000
            }
        ],
        "kpis": [
            {
                "name": "Revenue growth %",
                "area": "revenue",
                "owner": "Sales Director",
                "weight": 50,
                "min": 10,
                "target": 20,
                "max": 30,
                "actual": 24,
                "direction": "higher",
                "unit": "%"
            },
            {
                "name": "DSO (days)",
                "area": "workingCapital",
                "owner": "CFO",
                "weight": 50,
                "min": 70,
                "target": 55,
                "max": 45,
                "actual": 68,
                "direction": "lower",
                "unit": "days"
            }
        ],
        "actions": [
            {
                "action": "Rewrite credit terms for the top 10 customers",
                "owner": "CFO",
                "due": "2026-08-31",
                "status": "open"
            }
        ],
        "thesis": null,
        "sources": {
            "aylik": "Trial balance and management accounts, Jan-Aug 2026",
            "kpi": "2026 CEO scorecard",
            "aksiyonlar": "Board resolution log"
        }
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bloom-consulting/board-dashboard").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 = { "boardInput": {
        "company": "Example Packaging Ltd.",
        "periodEnd": "2026-08",
        "currency": "USD",
        "type": "sme",
        "audience": "board",
        "owners": {
            "revenue": "Sales Director",
            "profitability": "CFO",
            "cash": "CFO",
            "workingCapital": "CFO",
            "leverage": "CFO",
        },
        "monthly": [
            {
                "month": "2026-06",
                "revenue": 980000,
                "revenueBudget": 920000,
                "cogs": 680000,
                "ebitda": 118000,
                "ebitdaBudget": 130000,
                "netProfit": 61000,
                "cash": 1420000,
                "operatingCashFlow": -10000,
                "capex": 30000,
                "receivables": 2000000,
                "inventory": 950000,
                "payables": 680000,
                "financialDebt": 1950000,
            },
            {
                "month": "2026-07",
                "revenue": 1000000,
                "revenueBudget": 940000,
                "cogs": 700000,
                "ebitda": 120000,
                "ebitdaBudget": 135000,
                "netProfit": 63000,
                "cash": 1350000,
                "operatingCashFlow": -40000,
                "capex": 25000,
                "receivables": 2150000,
                "inventory": 980000,
                "payables": 670000,
                "financialDebt": 1950000,
            },
            {
                "month": "2026-08",
                "revenue": 1020000,
                "revenueBudget": 960000,
                "cogs": 715000,
                "ebitda": 121000,
                "ebitdaBudget": 140000,
                "netProfit": 64000,
                "cash": 1260000,
                "operatingCashFlow": -60000,
                "capex": 25000,
                "receivables": 2300000,
                "inventory": 1000000,
                "payables": 660000,
                "financialDebt": 1900000,
            },
            {
                "month": "2026-09",
                "revenueBudget": 980000,
                "ebitdaBudget": 145000,
            },
        ],
        "kpis": [
            {
                "name": "Revenue growth %",
                "area": "revenue",
                "owner": "Sales Director",
                "weight": 50,
                "min": 10,
                "target": 20,
                "max": 30,
                "actual": 24,
                "direction": "higher",
                "unit": "%",
            },
            {
                "name": "DSO (days)",
                "area": "workingCapital",
                "owner": "CFO",
                "weight": 50,
                "min": 70,
                "target": 55,
                "max": 45,
                "actual": 68,
                "direction": "lower",
                "unit": "days",
            },
        ],
        "actions": [{
                "action": "Rewrite credit terms for the top 10 customers",
                "owner": "CFO",
                "due": "2026-08-31",
                "status": "open",
            }],
        "thesis": None,
        "sources": {
            "aylik": "Trial balance and management accounts, Jan-Aug 2026",
            "kpi": "2026 CEO scorecard",
            "aksiyonlar": "Board resolution log",
        },
    } }

# Run the Actor and wait for it to finish
run = client.actor("bloom-consulting/board-dashboard").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "boardInput": {
    "company": "Example Packaging Ltd.",
    "periodEnd": "2026-08",
    "currency": "USD",
    "type": "sme",
    "audience": "board",
    "owners": {
      "revenue": "Sales Director",
      "profitability": "CFO",
      "cash": "CFO",
      "workingCapital": "CFO",
      "leverage": "CFO"
    },
    "monthly": [
      {
        "month": "2026-06",
        "revenue": 980000,
        "revenueBudget": 920000,
        "cogs": 680000,
        "ebitda": 118000,
        "ebitdaBudget": 130000,
        "netProfit": 61000,
        "cash": 1420000,
        "operatingCashFlow": -10000,
        "capex": 30000,
        "receivables": 2000000,
        "inventory": 950000,
        "payables": 680000,
        "financialDebt": 1950000
      },
      {
        "month": "2026-07",
        "revenue": 1000000,
        "revenueBudget": 940000,
        "cogs": 700000,
        "ebitda": 120000,
        "ebitdaBudget": 135000,
        "netProfit": 63000,
        "cash": 1350000,
        "operatingCashFlow": -40000,
        "capex": 25000,
        "receivables": 2150000,
        "inventory": 980000,
        "payables": 670000,
        "financialDebt": 1950000
      },
      {
        "month": "2026-08",
        "revenue": 1020000,
        "revenueBudget": 960000,
        "cogs": 715000,
        "ebitda": 121000,
        "ebitdaBudget": 140000,
        "netProfit": 64000,
        "cash": 1260000,
        "operatingCashFlow": -60000,
        "capex": 25000,
        "receivables": 2300000,
        "inventory": 1000000,
        "payables": 660000,
        "financialDebt": 1900000
      },
      {
        "month": "2026-09",
        "revenueBudget": 980000,
        "ebitdaBudget": 145000
      }
    ],
    "kpis": [
      {
        "name": "Revenue growth %",
        "area": "revenue",
        "owner": "Sales Director",
        "weight": 50,
        "min": 10,
        "target": 20,
        "max": 30,
        "actual": 24,
        "direction": "higher",
        "unit": "%"
      },
      {
        "name": "DSO (days)",
        "area": "workingCapital",
        "owner": "CFO",
        "weight": 50,
        "min": 70,
        "target": 55,
        "max": 45,
        "actual": 68,
        "direction": "lower",
        "unit": "days"
      }
    ],
    "actions": [
      {
        "action": "Rewrite credit terms for the top 10 customers",
        "owner": "CFO",
        "due": "2026-08-31",
        "status": "open"
      }
    ],
    "thesis": null,
    "sources": {
      "aylik": "Trial balance and management accounts, Jan-Aug 2026",
      "kpi": "2026 CEO scorecard",
      "aksiyonlar": "Board resolution log"
    }
  }
}' |
apify call bloom-consulting/board-dashboard --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bloom-consulting/board-dashboard"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yhMvm8fKv1rH8H220/builds/LXb5cEbffarT1BNE0/openapi.json
