openvaluation
openvaluation
Методы оценки стартапов как проверяемый код. Berkus, Scorecard, Risk Factor Summation, метод венчурного капитала, First Chicago и рыночные мультипликаторы — реализованы, протестированы и способны показать свои расчёты.
Бесплатно и с открытым исходным кодом, лицензия MIT. Чистый Python, без зависимостей, без API-ключей, без сетевых вызовов.
pip install openvaluationМетоды для компаний без выручки, которые реально используют ангельские группы, живут в учебниках, таблицах и электронных таблицах, но не в поддерживаемом программном обеспечении. Поищите на GitHub «Berkus method» — найдёте разрозненные скрипты с нулём звёзд; каждый коммерческий инструмент, реализующий эти методы, держит арифметику закрытой. Этот пакет — недостающий элемент: библиотека, которую может вызвать агент, скрипт или блокнот и получить защищаемое число с приложенным выводом.
from openvaluation import Engine
company = {
"company": {"sector": "saas", "stage": "seed", "region": "us"},
"financials": {"revenue": {"arr": 480_000}},
"berkus": {"sound_idea": 1.0, "prototype": 1.0, "management_team": 0.8,
"strategic_relationships": 0.4, "product_rollout": 0.6},
"scorecard": {"management_team": 1.25, "opportunity_size": 1.4},
}
print(Engine().run_all(company, stage="seed").summary())4 methods ran; median 4,420,000 USD (range 1,400,000–6,462,500)
berkus 1,900,000 [1,400,000 – 2,400,000]
ev_arr 3,840,000 [2,400,000 – 5,760,000]
risk_factor_summation 5,000,000 [4,750,000 – 5,250,000]
scorecard 5,875,000 [5,287,500 – 6,462,500]
2 methods could not run:
vc_method: vc_method needs exit.value, exit.revenue (supply an exit value, or
projected revenue at exit to apply a multiple to)
first_chicago: first_chicago needs scenarios.success.probability, ...Извлечение вероятностно; арифметика — нет
Языковые модели постоянно спрашивают, сколько стоит стартап, и они плохи в этом — не в рассуждениях, а в арифметике и в запоминании того, какой метод требует какой вход. Однако они очень хороши в чтении питч-дека и извлечении структурированных фактов.
Этот пакет проводит границу между этими двумя задачами. Модель читает документы и заполняет поля. Движок выполняет арифметику детерминированно и сообщает, как именно он к этому пришёл. Одинаковый вход, одинаковый выход, каждый раз — без модели в цикле, которая могла бы отклоняться.
result = Engine().run(company, "berkus")
print(result.explain())berkus: 1,900,000 USD (range 1,400,000–2,400,000)
Steps
1. Sound idea — basic value, product risk: 500,000 — rating 1.00
2. Prototype — technology risk: 500,000 — rating 1.00
3. Quality management team — execution risk: 400,000 — rating 0.80
4. Strategic relationships — market risk: 200,000 — rating 0.40
5. Product rollout or sales — production risk: 300,000 — rating 0.60
6. Pre-money valuation: 1,900,000 — sum of five elements
Assumptions
cap_per_element: 500000.0
Limitations
- Berkus caps pre-revenue value and ignores market size, growth and financials.
- Ratings are judgements, not measurements; this run capped at 2,500,000.
- This company reports revenue; Berkus was designed for pre-revenue companies
and a revenue-based method will usually say more.
Sources
- Dave Berkus, 'The Berkus Method: Valuing an Early Stage Investment' (berkonomics.com)Каждый результат несёт свои шаги, свои допущения, свои ограничения и ссылку на метод. Оценка, которую никто не может проверить, не стоит защиты.
Что вообще можно запустить?
Обычно вопрос возникает до оценки: учитывая то, что известно о компании, какие методы доступны и какой один недостающий факт откроет больше всего?
report = Engine().readiness(company)
[m.method for m in report.ready] # ['berkus', 'scorecard', 'risk_factor_summation', 'ev_arr']
report.unlocks()
# {'exit.value|exit.revenue': ('vc_method',),
# 'financials.ebitda': ('ev_ebitda',),
# 'financials.revenue.annual': ('ev_revenue',)}unlocks() упорядочен по тому, сколько методов освобождает каждое недостающее поле, поэтому первая
запись — самое полезное, что можно пойти и выяснить. | в пути означает, что подойдёт любое из полей.
Метод, о котором сообщается как о готовом, всегда запускается — этот инвариант тестируется, потому что отчёт о готовности, который лжёт, хуже, чем его отсутствие.
Методы
id | Метод | Применимо, когда | Требуется |
| Berkus Method | До выручки | Оценки по пяти факторам риска |
| Scorecard Method | До выручки | Сектор, плюс оценки относительно сопоставимых компаний |
| Risk Factor Summation | До выручки | Сектор, плюс оценки по двенадцати рискам |
| Venture Capital Method | Привлечение капитала с реалистичным выходом | Стоимость выхода или выручка при выходе |
| First Chicago Method | Исходы действительно бимодальны | Три сценария с вероятностями |
| EV / ARR | Подписная выручка | ARR и сектор |
| EV / Revenue | Выручка, но ещё нет прибыли | Годовая выручка и сектор |
| EV / EBITDA | Прибыльная | Положительный EBITDA и сектор |
Полная документация по каждому методу — формула, проработанный пример, ограничения и источник, по одной странице на каждый. Каждый пример на этих страницах выполняется тестовым набором, поэтому ничто не может отклониться от кода.
Каждый метод реализован из его опубликованного описания и цитирует его. Веса Scorecard — это веса Билла Пейна (30% команда, 25% возможность, 15% продукт, 10% конкуренция, 10% продажи, 5% потребность в инвестициях, 5% прочее); Berkus ограничивает пять элементов по 500 000 каждый; Risk Factor Summation сдвигает сопоставимое среднее на 250 000 за шаг по двенадцати факторам. Каждая из этих констант — аргумент конструктора, а не магическое число, зарытое в арифметике.
from openvaluation import Berkus, RiskFactorSummation
Berkus(cap_per_element=300_000) # a market where 500k is too rich
RiskFactorSummation(step=100_000) # finer-grained risk adjustmentsДанные для бенчмарков — ваша проблема, и пакет об этом говорит
Три метода нуждаются во внешних числах: сколько стоят сопоставимые компании, по какому мультипликатору торгуется сектор, под какую ставку фонд андеррайтит. Эти числа устаревают, и ни одна библиотека не должна делать вид, что это не так, поэтому они поступают через провайдера, которого вы поставляете.
Провайдер по умолчанию поставляет иллюстративные заглушки — круглые, без дат, чтобы примеры работали. Любая оценка, которая их касается, говорит об этом в своих ограничениях:
- Benchmark figures are illustrative placeholders, not market data; replace
StaticBenchmarks with a real source before relying on this figureМетоды, которые никогда не обращаются к рыночным данным, например Berkus, не несут этой оговорки. Предоставьте реальные цифры — и она исчезнет:
from openvaluation import Engine, Multiple, TableBenchmarks
benchmarks = TableBenchmarks(
seed_valuations={"saas": 4_200_000},
multiple_table={("saas", "ARR"): Multiple(4.1, 6.8, 11.2, basis="ARR",
source="Our comp set", sample_size=180,
as_of="2026-06-30")},
rate_table={"seed": 0.5},
citations=("Our comp set, n=180, June 2026",),
)
engine = Engine(benchmarks=benchmarks)Или реализуйте BenchmarkProvider поверх того, что у вас есть — базы данных, API, электронной
таблицы. Три метода, все синхронные. Отраслевые мультипликаторы и стоимость капитала, публикуемые
Асватом Дамадараном в NYU Stern, — обычная бесплатная отправная точка.
Провайдер, у которого нет цифры, вызывает UnknownBenchmark, а не подставляет догадку, потому что
оценка, построенная на выдуманном мультипликаторе, хуже, чем отсутствие оценки.
Дайте это ИИ-агенту
Отправьте методы любой модели, с которой вы уже общаетесь. MCP-сервер предоставляет четыре инструмента, и, поскольку арифметика происходит в Python, модель не может ошибиться в расчётах:
pip install "openvaluation[mcp]"{"mcpServers": {"openvaluation": {"command": "openvaluation-mcp"}}}Инструмент | Что делает |
| Каждый метод и точный формат ввода, чтобы модель заполняла реальные имена полей |
| Что данные уже поддерживают и какое недостающее поле открывает больше всего — чтобы модель спрашивала, а не выдумывала |
| Все применимые методы сразу, с диапазоном и теми, которые не смогли запуститься |
| Полный вывод одного метода для отчёта |
Инструкции сервера сообщают модели то, что она иначе сделала бы неправильно: что оценки Berkus и Scorecard — это суждения, требующие доказательств, что поставляемые бенчмарк-цифры — заглушки, оговорку о которых нужно передавать дальше, и что медиана сама по себе не является ответом.
Те же четыре функции импортируются без MCP, для HTTP-обработчика или блокнота:
from openvaluation.tools import check_readiness, value_company
check_readiness(company) # plain dicts in, plain dicts outИз командной строки
openvaluation company.json # every applicable method
openvaluation company.json --readiness # what can run, what is missing
openvaluation company.json --method berkus --explain
openvaluation company.json --json # for piping onward
openvaluation --list-methodsФормат ввода
Обычный вложенный словарь — всё, что создал ваш этап извлечения. Поля читаются по точечному пути, поэтому ничего не должно быть полным:
{
"company": {"sector": "saas", "stage": "seed", "region": "us"},
"financials": {"revenue": {"arr": 480000, "annual": 520000}, "ebitda": 90000},
"product": {"stage": "mvp"},
"berkus": {"sound_idea": 1.0, "prototype": 0.8},
"scorecard": {"management_team": 1.25, "opportunity_size": 1.4},
"risk": {"management": 2, "competition": -1},
"exit": {"revenue": 40000000, "years": 5, "dilution": 0.3},
"funding": {"round_size": 2000000},
"scenarios": {"success": {"value": 80000000, "probability": 0.15},
"base": {"value": 15000000, "probability": 0.35},
"failure": {"value": 0, "probability": 0.50}}
}Суммы могут быть голыми числами, числовыми строками или объектами {"value": 480000, "currency": "USD"}.
Ставки могут быть 0.4 или 40. Ноль считается отсутствующим для таких величин, как выручка, потому
что нулевая выручка и неизвестная выручка — один и тот же вход для этих методов.
Чем это не является
Не инвестиционная рекомендация и не оценка по 409A. Эти методы дают переговорные якоря и проверки здравомыслия. Оценка с юридическим или налоговым статусом требует квалифицированного оценщика.
Не экстрактор. Он принимает структурированные факты; извлечение их из питч-дека — отдельная задача, и хорошая для языковой модели.
Не источник рыночных данных. См. выше.
Не механизм суждений. Оценки Berkus и факторы Scorecard — это суждения о компании. Пакет записывает и применяет их; он не формирует их.
Когда методы расходятся более чем на медиану, отчёт говорит об этом — потому что это расхождение является информацией, и усреднение его уничтожает.
Требования
Python 3.9+ (разработано и протестировано на 3.11). Нет зависимостей времени выполнения.
Откуда это взялось
Я построил движок оценки, лежащий в основе Wakeworth, который оценивает стартапы по загруженным документам. Сами методы — общеизвестное знание и должны быть в публичном коде; проприетарными там остаются извлечение документов и отчётность вокруг них. Этот пакет — слой методов, пересобранный отдельно из опубликованных описаний, с открытыми константами и каждым результатом, показывающим свои расчёты.
Участие
Приветствуются issues и pull request'ы. Я поддерживаю это на основе best-effort наряду с другой работой, поэтому ожидайте обдуманных ответов, а не быстрых. Самые полезные вклады — метод, реализованный из цитируемого источника, или случай, когда арифметика здесь расходится с проработанным примером в литературе.
git clone https://github.com/yagebin79386/openvaluation
cd openvaluation
pip install -e ".[dev]"
pytestЛицензия
MIT — см. LICENSE.
Последнее обновление: 2026-08-20 · Changelog
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Free MCP tools: the only MCP linter, health checks, cost estimation, and trust evaluation.
A paid remote MCP for Equibles, built to return verdicts, receipts, usage logs, and audit-ready JSON
Free SME valuation, sell-readiness, M&A pricing, partner and deal-referral tools in EN/FR/ES/PT.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yagebin79386/openvaluation'
If you have feedback or need assistance with the MCP directory API, please join our Discord server