# Startup Valuation - 8 Methods, Stage Aware (`bloom-consulting/startup-valuation`) Actor

Value a startup or SME with the methods that fit its stage: Berkus, Scorecard, risk factors, VC method, revenue and EBITDA multiples, DCF and net assets. Returns a defensible value range, a value bridge, a sensitivity table, an HTML/PDF report and an Excel workbook.

- **URL**: https://apify.com/bloom-consulting/startup-valuation.md
- **Developed by:** [Bloom Consulting](https://apify.com/bloom-consulting) (community)
- **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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Startup Valuation - 8 Methods, Stage Aware

Turn one set of figures into a **defensible valuation range**, the assumptions that carry it, and a value bridge showing which lever moves the number by how much.

No API keys, no LLM calls, no data sent anywhere. The arithmetic is deterministic: the same inputs always produce the same range, and every method shows what it was computed from.

### What it does

A pre-seed company and a profitable one do not get valued the same way, so the Actor picks the method set from the **stage** you give it and weights the results accordingly.

| Stage | Methods used |
| --- | --- |
| Pre-seed - idea or prototype, no revenue | Berkus, Scorecard, risk factor summation |
| Seed - product live, first revenue | Scorecard, risk factor summation, VC method, revenue multiple |
| Early growth - repeatable revenue | VC method, revenue multiple, EBITDA multiple, DCF |
| Growth - profitable or near break-even | Revenue multiple, EBITDA multiple, DCF, adjusted net assets |

Eight methods are implemented in total: **Berkus, Scorecard (Payne), risk factor summation, VC method, revenue multiple, EBITDA multiple, DCF, adjusted net asset value.**

A method whose inputs are missing is reported as **not computed** — never silently scored as zero. Its weight is redistributed across the methods that were computed, and the report says which ones dropped out and why. The **effective share** column tells you how much each method actually carried.

**Enterprise value is not equity value.** Multiples and DCF produce enterprise value; the report bridges to equity value line by line (`+ cash − financial debt`) in every method detail.

**The early-stage anchor.** Berkus, Scorecard and risk factor summation are all relative methods — they scale a single anchor: the median pre-money valuation of comparable rounds in the same sector, stage and geography. Without an anchor those three are not computed and nothing is guessed.

### What you get

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

| File | What it is |
| --- | --- |
| `value-card.md` | One-screen summary: range, mid value, method-by-method figures, round maths |
| `report.html` | Full report — method comparison, every method's detail, DCF and sensitivity, value bridge, inputs, limits |
| `report.pdf` | The same report, print-ready |
| `table.xlsx` | Summary, methods, DCF, sensitivity, value bridge, inputs and the parameter set, as a spreadsheet |
| `data.json` | Everything above as structured data |
| `input.json` | The exact input the engine used |

The dataset row carries the low / mid / high value, each method's result and effective share, confidence, post-money and investor stake, the one-line diagnosis and the full value bridge — so you can chain this into a sheet, a database or another Actor.

### Input

Tick **Run with sample data** for a full example run before you enter anything.

Otherwise fill **Valuation data**. Field names can be English or Turkish. Anything you do not have, leave as `null`.

```json
{
  "company": "Example Technology Inc.",
  "period": "Last 12 months - end of June 2026",
  "currency": "USD",
  "stage": "seed",
  "sector": "saas",
  "anchorValuation": 25000000,
  "financials": {
    "netSales": 4800000,
    "grossProfit": 3600000,
    "ebitda": -900000,
    "netProfit": -1250000,
    "cash": 2500000,
    "financialDebt": 600000,
    "equity": 1900000
  },
  "growth": { "priorYearNetSales": 2100000 },
  "scorecard": {
    "team": 1.2, "marketSize": 1.15, "product": 1.1, "competition": 0.9,
    "salesChannel": 0.95, "additionalInvestment": 0.9, "other": 1.0
  },
  "riskFactors": {
    "management": 1, "stageRisk": 0, "regulation": 0, "manufacturing": 1,
    "sales": -1, "funding": -1, "competitionRisk": 0, "technology": 1,
    "litigation": 0, "international": -1, "reputation": 0, "exit": 1
  },
  "vc": {
    "exitYear": 5, "exitRevenue": 120000000, "exitMultiple": 4,
    "targetReturnMultiple": 12, "dilution": 30
  },
  "dcf": { "revenueGrowth": 60, "targetEbitdaMargin": 22 },
  "round": { "roundSize": 6000000 }
}
```

Notes:

- **`stage`** — `pre-seed`, `seed`, `early growth` or `growth`. When in doubt pick the lower one; a higher stage inflates the value.
- **`sector`** — `general`, `saas`, `marketplace`, `e-commerce`, `fintech`, `deep tech`, `services`, `manufacturing`, `health`. It selects the revenue and EBITDA multiple bands; position inside the band is set by growth (60%) and margin (40%). Supply `multiples.revenueMultiple` or `multiples.ebitdaMultiple` to override.
- **`anchorValuation`** — the median **pre-money** valuation of comparable rounds. Publicly announced figures are usually post-money; deduct the round size first. If you cannot source it, leave it `null`.
- **`berkus`** — five criteria, 0-100 each. **`scorecard`** — seven factors, 0.50-1.50, where 1.00 means "same as the median company". **`riskFactors`** — twelve items, -2 to +2, where 0 is neutral. Score against evidence, not adjectives.
- **`dcf`** — give `freeCashFlow` as five years directly, or just `revenueGrowth` and `targetEbitdaMargin` and let the engine project it. Tax, capex, working capital and D\&A ratios fall back to defaults (25% · 3% · 5% · 3%); a blank discount rate falls back to the stage default (24%-45%).
- **`round.roundSize`** — supply it and post-money and investor stake are computed. Without it the VC method result is flagged as post-money.
- Amounts must all be in the same currency. Use plain numbers.
- Instead of the JSON field you can pass **Input file URL** — a public link to a JSON or CSV file with the same data.

### Report language

`language: "en"` or `"tr"`. Every output — value card, HTML, PDF, spreadsheet — is produced in the chosen language.

### Typical uses

- **Founders** — walk into a round with a range you can defend and the three assumptions that carry it, instead of a single number from a napkin.
- **Investors and angels** — screen inbound decks consistently: the same method set, the same weights, every time.
- **Accelerators** — value a whole cohort on one rubric and see where each company sits.
- **Advisors and accountants** — produce a client-facing valuation report from figures 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 possible run.

### Limits and honesty

- A valuation is a **range**. The single mid value is a defence line, not a price — the market sets the price.
- The multiple bands in the parameter set are **documented defaults, not market data**. They ship in `table.xlsx` so you can disagree with them explicitly and replace them with your own transaction evidence.
- The report is for information only: it is not an audit, a statutory or regulatory valuation report, a legal opinion or investment advice.
- Garbage in, garbage out. A DCF built on a plan nobody believes produces a confident-looking number that means nothing — which is why the report shows the terminal value share and warns above 75%.

### About

Built by **Bloom Consulting**, a fractional CFO practice working with startups and SMEs. The [paid desktop edition](https://bloomconsulting.com.tr/paketler?utm_source=apify\&utm_medium=store\&utm_campaign=terazi\&utm_content=readme-paid#ajanlar) adds valuation-over-valuation comparison, your own multiple bands and weights, and branded report templates.

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

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

# Actor input Schema

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

Ignore the fields below and run on a built-in example startup (seed stage, SaaS). Use this first to see what the report looks like. Reports produced this way are stamped DEMO.

## `valuationInput` (type: `object`):

stage: pre-seed | seed | early growth | growth. sector: general | saas | marketplace | e-commerce | fintech | deep tech | services | manufacturing | health. anchorValuation is the median pre-money valuation of comparable rounds - Berkus, Scorecard and risk factor summation all rest on it, so leave it null rather than inventing one. berkus scores are 0-100, scorecard factors are 0.50-1.50 (1.00 = same as the median company), risk factors are -2 to +2 (0 = neutral). English and Turkish field names are both accepted. Leave anything you do not have as null.

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

Alternative to the field above: a public http(s) URL of a JSON or CSV file holding the same data. Used only when "Valuation data" is empty.

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

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

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

Language of the value card, HTML report, PDF and spreadsheet.

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

Print the HTML report to PDF with headless Chromium. Turn off for a faster, cheaper run.

## Actor input object example

```json
{
  "useSampleData": false,
  "valuationInput": {
    "company": "Example Technology Inc.",
    "period": "Last 12 months - end of June 2026",
    "currency": "USD",
    "stage": "seed",
    "sector": "saas",
    "anchorValuation": 25000000,
    "financials": {
      "netSales": 4800000,
      "grossProfit": 3600000,
      "ebitda": -900000,
      "netProfit": -1250000,
      "cash": 2500000,
      "financialDebt": 600000,
      "equity": 1900000
    },
    "growth": {
      "priorYearNetSales": 2100000,
      "annualRevenueGrowth": null
    },
    "multiples": {
      "revenueMultiple": null,
      "ebitdaMultiple": null
    },
    "berkus": {
      "idea": 80,
      "prototype": 85,
      "team": 70,
      "strategicRelationships": 55,
      "firstSales": 75
    },
    "scorecard": {
      "team": 1.2,
      "marketSize": 1.15,
      "product": 1.1,
      "competition": 0.9,
      "salesChannel": 0.95,
      "additionalInvestment": 0.9,
      "other": 1
    },
    "riskFactors": {
      "management": 1,
      "stageRisk": 0,
      "regulation": 0,
      "manufacturing": 1,
      "sales": -1,
      "funding": -1,
      "competitionRisk": 0,
      "technology": 1,
      "litigation": 0,
      "international": -1,
      "reputation": 0,
      "exit": 1
    },
    "vc": {
      "exitYear": 5,
      "exitRevenue": 120000000,
      "exitMultiple": 4,
      "targetReturnMultiple": 12,
      "dilution": 30
    },
    "dcf": {
      "discountRate": null,
      "terminalGrowth": null,
      "taxRate": null,
      "freeCashFlow": [
        null,
        null,
        null,
        null,
        null
      ],
      "revenueGrowth": 60,
      "targetEbitdaMargin": 22
    },
    "round": {
      "roundSize": 6000000
    }
  },
  "language": "en",
  "generatePdf": true
}
```

# Actor output Schema

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

The valuation: low, mid and high value, every method's result and effective share, confidence, post-money and investor stake, the diagnosis and the value bridge.

## `valueCard` (type: `string`):

One-screen summary: the value range, the mid value, each method's figure and the round maths.

## `reportHtml` (type: `string`):

The full report, section by section, ready to read in the browser.

## `reportPdf` (type: `string`):

The same report, print-ready.

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

Summary, methods, DCF, sensitivity, value bridge, inputs and the parameter set.

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

Every intermediate figure the report was built from - the audit trail.

# 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 = {
    "valuationInput": {
        "company": "Example Technology Inc.",
        "period": "Last 12 months - end of June 2026",
        "currency": "USD",
        "stage": "seed",
        "sector": "saas",
        "anchorValuation": 25000000,
        "financials": {
            "netSales": 4800000,
            "grossProfit": 3600000,
            "ebitda": -900000,
            "netProfit": -1250000,
            "cash": 2500000,
            "financialDebt": 600000,
            "equity": 1900000
        },
        "growth": {
            "priorYearNetSales": 2100000,
            "annualRevenueGrowth": null
        },
        "multiples": {
            "revenueMultiple": null,
            "ebitdaMultiple": null
        },
        "berkus": {
            "idea": 80,
            "prototype": 85,
            "team": 70,
            "strategicRelationships": 55,
            "firstSales": 75
        },
        "scorecard": {
            "team": 1.2,
            "marketSize": 1.15,
            "product": 1.1,
            "competition": 0.9,
            "salesChannel": 0.95,
            "additionalInvestment": 0.9,
            "other": 1
        },
        "riskFactors": {
            "management": 1,
            "stageRisk": 0,
            "regulation": 0,
            "manufacturing": 1,
            "sales": -1,
            "funding": -1,
            "competitionRisk": 0,
            "technology": 1,
            "litigation": 0,
            "international": -1,
            "reputation": 0,
            "exit": 1
        },
        "vc": {
            "exitYear": 5,
            "exitRevenue": 120000000,
            "exitMultiple": 4,
            "targetReturnMultiple": 12,
            "dilution": 30
        },
        "dcf": {
            "discountRate": null,
            "terminalGrowth": null,
            "taxRate": null,
            "freeCashFlow": [
                null,
                null,
                null,
                null,
                null
            ],
            "revenueGrowth": 60,
            "targetEbitdaMargin": 22
        },
        "round": {
            "roundSize": 6000000
        }
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bloom-consulting/startup-valuation").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 = { "valuationInput": {
        "company": "Example Technology Inc.",
        "period": "Last 12 months - end of June 2026",
        "currency": "USD",
        "stage": "seed",
        "sector": "saas",
        "anchorValuation": 25000000,
        "financials": {
            "netSales": 4800000,
            "grossProfit": 3600000,
            "ebitda": -900000,
            "netProfit": -1250000,
            "cash": 2500000,
            "financialDebt": 600000,
            "equity": 1900000,
        },
        "growth": {
            "priorYearNetSales": 2100000,
            "annualRevenueGrowth": None,
        },
        "multiples": {
            "revenueMultiple": None,
            "ebitdaMultiple": None,
        },
        "berkus": {
            "idea": 80,
            "prototype": 85,
            "team": 70,
            "strategicRelationships": 55,
            "firstSales": 75,
        },
        "scorecard": {
            "team": 1.2,
            "marketSize": 1.15,
            "product": 1.1,
            "competition": 0.9,
            "salesChannel": 0.95,
            "additionalInvestment": 0.9,
            "other": 1,
        },
        "riskFactors": {
            "management": 1,
            "stageRisk": 0,
            "regulation": 0,
            "manufacturing": 1,
            "sales": -1,
            "funding": -1,
            "competitionRisk": 0,
            "technology": 1,
            "litigation": 0,
            "international": -1,
            "reputation": 0,
            "exit": 1,
        },
        "vc": {
            "exitYear": 5,
            "exitRevenue": 120000000,
            "exitMultiple": 4,
            "targetReturnMultiple": 12,
            "dilution": 30,
        },
        "dcf": {
            "discountRate": None,
            "terminalGrowth": None,
            "taxRate": None,
            "freeCashFlow": [
                None,
                None,
                None,
                None,
                None,
            ],
            "revenueGrowth": 60,
            "targetEbitdaMargin": 22,
        },
        "round": { "roundSize": 6000000 },
    } }

# Run the Actor and wait for it to finish
run = client.actor("bloom-consulting/startup-valuation").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 '{
  "valuationInput": {
    "company": "Example Technology Inc.",
    "period": "Last 12 months - end of June 2026",
    "currency": "USD",
    "stage": "seed",
    "sector": "saas",
    "anchorValuation": 25000000,
    "financials": {
      "netSales": 4800000,
      "grossProfit": 3600000,
      "ebitda": -900000,
      "netProfit": -1250000,
      "cash": 2500000,
      "financialDebt": 600000,
      "equity": 1900000
    },
    "growth": {
      "priorYearNetSales": 2100000,
      "annualRevenueGrowth": null
    },
    "multiples": {
      "revenueMultiple": null,
      "ebitdaMultiple": null
    },
    "berkus": {
      "idea": 80,
      "prototype": 85,
      "team": 70,
      "strategicRelationships": 55,
      "firstSales": 75
    },
    "scorecard": {
      "team": 1.2,
      "marketSize": 1.15,
      "product": 1.1,
      "competition": 0.9,
      "salesChannel": 0.95,
      "additionalInvestment": 0.9,
      "other": 1
    },
    "riskFactors": {
      "management": 1,
      "stageRisk": 0,
      "regulation": 0,
      "manufacturing": 1,
      "sales": -1,
      "funding": -1,
      "competitionRisk": 0,
      "technology": 1,
      "litigation": 0,
      "international": -1,
      "reputation": 0,
      "exit": 1
    },
    "vc": {
      "exitYear": 5,
      "exitRevenue": 120000000,
      "exitMultiple": 4,
      "targetReturnMultiple": 12,
      "dilution": 30
    },
    "dcf": {
      "discountRate": null,
      "terminalGrowth": null,
      "taxRate": null,
      "freeCashFlow": [
        null,
        null,
        null,
        null,
        null
      ],
      "revenueGrowth": 60,
      "targetEbitdaMargin": 22
    },
    "round": {
      "roundSize": 6000000
    }
  }
}' |
apify call bloom-consulting/startup-valuation --silent --output-dataset

```

## MCP server setup

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

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/4ROM1fVvIYrHXQgbu/builds/lgZ7nm4fvu51p1Wg8/openapi.json
