Valuation

Measure betas from prices

valuation_beta · Reads only · Markdown

Betas of listed peers from closing prices the business gives, with R squared, the t-statistic and the unlevered beta.

Free*

*Free up to 1,000,000 reads a month for the whole account, then $0.50 per 10,000 reads.

An example

Here are Rational's weekly closes and the CDAX for the last month. What beta do they give?

Your agent callsvaluation_betaFree*

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "index": {
    "name": "CDAX",
    "prices": [
      {
        "date": "2026-09-04",
        "close": 1840.2
      },
      {
        "date": "2026-09-11",
        "close": 1862.7
      },
      {
        "date": "2026-09-18",
        "close": 1851.3
      },
      {
        "date": "2026-09-25",
        "close": 1879.9
      },
      {
        "date": "2026-10-02",
        "close": 1873.4
      }
    ]
  },
  "stocks": [
    {
      "name": "Rational AG",
      "debt": 12,
      "equity": 7200,
      "tax_rate": 0.28,
      "prices": [
        {
          "date": "2026-09-04",
          "close": 640.5
        },
        {
          "date": "2026-09-11",
          "close": 652
        },
        {
          "date": "2026-09-18",
          "close": 645.5
        },
        {
          "date": "2026-09-25",
          "close": 659
        },
        {
          "date": "2026-10-02",
          "close": 655.5
        }
      ]
    }
  ]
}
What comes back
{
  "index": "CDAX",
  "frequency": "as_given",
  "adjustment": "blume",
  "stocks": [
    {
      "name": "Rational AG",
      "observations": 4,
      "raw_beta": 1.448683,
      "adjusted_beta": 1.300618,
      "alpha": -0.000657,
      "r_squared": 0.997611,
      "standard_error": 0.050127,
      "t_statistic": 28.900093,
      "significant": true,
      "debt_to_equity": 0.001667,
      "unlevered_beta": 1.299059
    }
  ],
  "summary": {
    "adjusted_beta": {
      "median": 1.300618,
      "mean": 1.300618,
      "n": 1
    },
    "unlevered_beta": {
      "median": 1.299059,
      "mean": 1.299059,
      "n": 1
    }
  },
  "method": "Simple returns between the dates both series have; beta = covariance with the index / the index's variance (least squares). Blume adjustment: 0.67 x raw + 0.33. Significant when |t| is at least 1.96 (95%)."
}

Use it when

To measure peer betas from the business's own price data before working out the WACC.

What it does

Betas of stocks against an index from closing prices the business gives (from its own data service): returns on the dates both have, or the last close of each week or month; the raw beta by least squares, the Blume-adjusted beta, alpha, R squared, standard error and t-statistic, whether it is significant at 95%, and the unlevered beta when debt and equity are given. Median and mean across the stocks.

What comes back

index, frequency, adjustment, stocks (observations, raw_beta, adjusted_beta, alpha, r_squared, standard_error, t_statistic, significant, debt_to_equity and unlevered_beta), summary (median and mean of adjusted_beta and unlevered_beta) and method. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
indexRequiredobject
index.nameRequiredstring1 to 200 characters.
index.pricesRequiredarray of objects4 to 3000 items.
index.prices[].dateRequiredstringMatches ^\d{4}-\d{2}-\d{2}$.
index.prices[].closeRequirednumber
stocksRequiredarray of objects1 to 20 items.
stocks[].nameRequiredstring1 to 200 characters.
stocks[].pricesRequiredarray of objects4 to 3000 items.
stocks[].prices[].dateRequiredstringMatches ^\d{4}-\d{2}-\d{2}$.
stocks[].prices[].closeRequirednumber
stocks[].debtnumberAt least 0.
stocks[].equitynumber
stocks[].tax_ratenumberFor unlevering. A decimal: 0.09 is 9%. 0 to 0.9.
frequencystringOne of: as_given,weekly,monthly. Default: as_given.
adjustmentstringOne of: blume,none. Default: blume.
releveringstringOne of: hamada,harris_pringle. Default: hamada.
tax_ratenumberFor unlevering, where a stock gives none. A decimal: 0.09 is 9%. 0 to 0.9.

The call

Over MCP, call valuation_beta on https://api.conecto.chat/mcp/valuation. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/valuation_beta \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"index":{"name":"CDAX","prices":[{"date":"2026-09-04","close":1840.2},{"date":"2026-09-11","close":1862.7},{"date":"2026-09-18","close":1851.3},{"date":"2026-09-25","close":1879.9},{"date":"2026-10-02","close":1873.4}]},"stocks":[{"name":"Rational AG","debt":12,"equity":7200,"tax_rate":0.28,"prices":[{"date":"2026-09-04","close":640.5},{"date":"2026-09-11","close":652},{"date":"2026-09-18","close":645.5},{"date":"2026-09-25","close":659},{"date":"2026-10-02","close":655.5}]}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
invalid_input400A date is not a date, a close is zero or below, or the index never moved.Send dates like 2026-10-02 and positive closes.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md