SaaSFlow
DevelopersAPIReferencedata

Valuation

Use this when the user asks what the company could be worth: an ARR multiple range from growth, net revenue retention, gross margin and burn multiple…

Authentication

Checking whether you're signed in…
POST
/companies/{companyId}/data/valuation

Authorization

headerAuthorization<token>

A SaaSFlow API key (format sf_…) or an OAuth bearer token. Paste only the key — the proxy adds the Bearer prefix. Create an API key in Settings → Company settings → API keys — see API keys.

Path Parameters

companyId*string
Length1 <= length

Request Body

application/json
  1. body
lens?string

fundraising prices like a venture round, acquisition like a private M&A buyer. Defaults to the company's saved lens, then fundraising.

Value in"fundraising""acquisition"
category?string

traditional, aiEnhanced or aiNative. Defaults to the company's saved category, then traditional.

Value in"traditional""aiEnhanced""aiNative"
arrStage?string

Price against this ARR stage's peers instead of the company's own.

Value in"lt1m""from1to3m""from3to10m""from10to20m""gte20m"
acvSegment?string

Price against this ACV segment's peers instead of the company's own.

Value in"mice""rabbits""deer""elephants"
scenario?

What-if driver values (fractions for percentages, so 0.4 is 40% growth) that replace the measured ones. The response then carries both the measured estimate and the scenario. Nothing is saved.

timeZone?string

IANA time zone. Defaults to BatchContext.timeZone, then UTC.

Response Body

valuation result

application/json
  1. response
asOfMonth*string

Last complete month the drivers are read from.

multiplesAsOf*string

Market snapshot the multiple corridors encode.

lens*string
Value in"fundraising""acquisition"
category*string
Value in"traditional""aiEnhanced""aiNative"
inputs*
estimate*|

The estimate from the measured values. Null when there is nothing honest to show, see unavailableReason.

scenarioEstimate?|

Present when scenario was sent: the estimate with those driver values.

unavailableReason?string

noCompanySize: committed ARR and the paying customer count are not known yet. They are computed nightly and after a subscription import, and need active subscriptions. noDriverMetrics: none of the four drivers has a value, usually because there are fewer than 12 months of history.

Value in"noCompanySize""noDriverMetrics"
Example Request
curl -X POST 'https://api.saasflow.com/companies/string/data/valuation' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{  "asOfMonth": "string",  "multiplesAsOf": "string",  "lens": "fundraising",  "category": "traditional",  "inputs": {    "arrEur": 0,    "peerCell": {      "arrStage": "lt1m",      "acvSegment": "mice"    },    "factorValues": {      "mrrGrowthRateAnnual": 0,      "netRevenueRetention": 0,      "grossProfitMargin": 0,      "burnMultiple": 0    },    "grossMarginCovered": true,    "profitable": true  },  "estimate": {    "arrEur": 0,    "arrStage": "lt1m",    "lens": "fundraising",    "category": "traditional",    "corridor": {      "low": 0,      "mid": 0,      "high": 0    },    "multipleLow": 0,    "multipleMid": 0,    "multipleHigh": 0,    "low": 0,    "mid": 0,    "high": 0,    "factors": [      {        "metric": "mrrGrowthRateAnnual",        "value": 0,        "zone": "green",        "score": 0,        "weight": 0,        "deltaMultiple": 0      }    ],    "missingFactors": [      "mrrGrowthRateAnnual"    ]  },  "scenarioEstimate": {    "arrEur": 0,    "arrStage": "lt1m",    "lens": "fundraising",    "category": "traditional",    "corridor": {      "low": 0,      "mid": 0,      "high": 0    },    "multipleLow": 0,    "multipleMid": 0,    "multipleHigh": 0,    "low": 0,    "mid": 0,    "high": 0,    "factors": [      {        "metric": "mrrGrowthRateAnnual",        "value": 0,        "zone": "green",        "score": 0,        "weight": 0,        "deltaMultiple": 0      }    ],    "missingFactors": [      "mrrGrowthRateAnnual"    ]  },  "unavailableReason": "noCompanySize"}