# EV/EBITDA Comparable Valuation

`D18-F03-A02` · Fundamental Analysis and Valuation → Relative Valuation · archetype `record-transform` · difficulty 4/5 · verification **verified**

Full page: https://docs.thefintechbuilder.com/fundamental-analysis-and-valuation/relative-valuation/ev-ebitda-comparable-valuation/
Agent skill: `npx skills add IslamBaraka90/Fintech-Algorithms-Library` — https://docs.thefintechbuilder.com/guides/agent-skill/

## Install and import

```bash
npm install fintech-algorithms
```

```ts
import { evEbitdaComparableValuation } from "fintech-algorithms/fundamental-analysis-and-valuation/relative-valuation/ev-ebitda-comparable-valuation";
```

## Signature

```ts
evEbitdaComparableValuation(rawInputs)
```

Takes the median of the peer group's enterprise-value-to-EBITDA multiples, applies it to the target's EBITDA, then walks the resulting enterprise value down to an equity value and a per-share price through a net-debt bridge.

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `rawInputs` | `unknown` | yes | Declared `unknown` and narrowed at runtime. It must be a plain object with a `target` object and a `peers` array. `target` supplies a positive `ebitda` and `shares_outstanding`, an optional `net_debt` (any finite sign, defaulting to 0), optional nonnegative `preferred_equity`, `noncontrolling_interest` and `nonoperating_assets` (each defaulting to 0), and an optional `current_price`. `peers` holds at least three objects, each with a nonempty and unique string `id`, a positive `enterprise_value` and a positive `ebitda`. |

## Returns

`Record<string, unknown>`

`model`, `peer_count`, `peer_multiples` (per peer: `id`, `enterprise_value`, `ebitda`, `ev_ebitda`), `multiple_summary` with `minimum`, `median`, `maximum` and `range`, `selected_multiple` which is that median, `target_ebitda`, `implied_enterprise_value`, `equity_bridge` echoing `net_debt`, `preferred_equity`, `noncontrolling_interest` and `nonoperating_assets`, `implied_equity_value` (enterprise value less net debt, preferred and minority interest, plus nonoperating assets), `shares_outstanding`, `implied_price` which is null when the equity value is not positive, `premium_discount_to_current`, and `state`, either `valuation-complete` or `nonpositive-equity-bridge`.

## Errors

- When rawInputs, target or a peer row is not a plain object, or a numeric field is not a finite number — throws TypeError
- When peers is not an array of at least three rows, or a peer id is missing, blank or duplicated — throws RangeError
- When target.ebitda, target.shares_outstanding, a peer enterprise_value, a peer ebitda or target.current_price is not greater than zero — throws RangeError
- When preferred_equity, noncontrolling_interest or nonoperating_assets is negative — throws RangeError

## Complexity

Time `O(n log n)`, space `O(n)`.

## Worked example

This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

### Input

`rawInputs`:

```json
{
  "target": {
    "ebitda": 150,
    "net_debt": 300,
    "preferred_equity": 20,
    "noncontrolling_interest": 30,
    "nonoperating_assets": 50,
    "shares_outstanding": 100,
    "current_price": 9.5
  },
  "peers": [
    {
      "id": "E1",
      "enterprise_value": 600,
      "ebitda": 100
    },
    {
      "id": "E2",
      "enterprise_value": 700,
      "ebitda": 100
    },
    {
      "id": "E3",
      "enterprise_value": 800,
      "ebitda": 100
    }
  ]
}
```

### Call

```ts
evEbitdaComparableValuation(rawInputs)
```

### Returns

object with 13 fields: model, peer_count, peer_multiples, multiple_summary, selected_multiple, target_ebitda, implied_enterprise_value, equity_bridge, …

```json
{
  "model": "median-positive-ebitda-peer-ev-ebitda",
  "peer_count": 5,
  "peer_multiples": [
    {
      "id": "E1",
      "enterprise_value": 600,
      "ebitda": 100,
      "ev_ebitda": 6
    },
    {
      "id": "E2",
      "enterprise_value": 700,
      "ebitda": 100,
      "ev_ebitda": 7
    },
    {
      "id": "E3",
      "enterprise_value": 800,
      "ebitda": 100,
      "ev_ebitda": 8
    }
  ],
  "multiple_summary": {
    "minimum": 6,
    "median": 8,
    "maximum": 10,
    "range": 4
  },
  "selected_multiple": 8,
  "target_ebitda": 150,
  "implied_enterprise_value": 1200,
  "equity_bridge": {
    "net_debt": 300,
    "preferred_equity": 20,
    "noncontrolling_interest": 30,
    "nonoperating_assets": 50
  },
  "implied_equity_value": 900,
  "shares_outstanding": 100,
  "implied_price": 9,
  "premium_discount_to_current": -0.052631578947368474,
  "state": "valuation-complete"
}
```

## Other exports

`calculate`, `pEComparableValuation`, `priceToBookValuation`, `pegRatio`, `peerMultipleRegression`. Every module additionally exports `run` as an alias of its primary
function, and a `meta` object carrying its catalog id, domain, family, shape and article URL.

## Verification and provenance

Tier: **verified** (via input-expected).

The worked example below is the figure published in this algorithm's article, replayed and asserted by the test suite on every build. The arithmetic cannot drift without the build failing.

Both tiers guarantee the signature. Full explanation: https://docs.thefintechbuilder.com/guides/verification/

Generated from the docs.json payload shipped inside fintech-algorithms@0.13.0.
The signature and parameter list are checked against the compiled implementation at build time,
so a description that contradicts the code fails the build rather than reaching this file.

## Links

- Article (how it works, step by step): https://thefintechbuilder.com/fundamental-analysis-and-valuation/relative-valuation/ev-ebitda-comparable-valuation/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/fundamental-analysis-and-valuation/relative-valuation/ev-ebitda-comparable-valuation/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/fundamental-analysis-and-valuation/llms.txt
