Adjustment Factors

Normalize historical prices for corporate actions

Raw prices can become misleading after corporate actions. A 10-for-1 stock split, for example, causes the price to fall 90% overnight even though shareholders have not lost value. Special dividends and spin-offs can create similar distortions.

Adjustment factors correct these effects. Daloopa stores one factor for each corporate action, allowing you to see exactly what affected a company, apply adjustments yourself, or let the API apply them automatically using adjusted=true on the stock prices endpoint.

Factor types

factor_typeWhat it isPrice effectVolume effect
splitForward or reverse stock split, and equivalent same-class share eventsMultiplyDivide
cash_dividendRegular and special cash dividends, and cash capital returnsMultiplyNone
spin_offSpinoff or distribution of another entity's sharesMultiplyNone
otherEvents that do not fit the model, kept for transparencyNever appliedNever applied

other rows are informational. The API never uses them when computing adjusted prices, and you should not multiply them into a series either. Each one's detail field explains what the event was.

How the factors work

  • Factors are per event, not cumulative. A company with three splits has three split rows. To adjust a price, multiply it by every applicable factor.
  • A factor applies to all dates strictly before its ex_date. It never applies on the ex-date itself, because the market price already reflects the event from that day on.
  • Factors are multiplicative and carry up to 6 decimal places. A 2-for-1 split has a factor of 0.5, and a reverse 1-for-8 split has a factor of 8.
  • Spinoffs follow the standard adjusted-close convention: the parent's historical prices are scaled down by the value that left with the spun-off entity, the same way a dividend is handled. The factors do not value the spun-off company and do not build a total-return series.
  • Sources occasionally restate historical events. Factors re-sync every day, and the full history is validated weekly, so restatements flow through automatically.

Endpoint

EndpointPurpose
GET /api/v3/companies/{company_id}/adjustment-factorsLists a company's corporate action events, one row per event

Same auth and limits as the stock prices endpoint: Authorization: Basic base64(email:apiKey), the market_data endpoint group (or full_access), 120 requests per minute, pages of up to 500 rows.

Parameters

ParameterTypeRequiredNotes
start_datedateNoOnly events with ex_date on or after this date
end_datedateNoOnly events with ex_date on or before this date
limitintegerNoRows per page, default and maximum 500
offsetintegerNoPagination offset

Response fields

FieldTypeDescription
idintegerStable row id
ex_datedateThe date the event takes effect in the market price
factornumberMultiplicative price factor for this single event
factor_typestringOne of split, cash_dividend, spin_off, other
eventstringThe source event code, for example SD (subdivision) or DIV (dividend)
detailstringHuman-readable description of the event
created_at / updated_atdatetimeWhen the row was stored and last restated

Example

curl "https://app.daloopa.com/api/v3/companies/2/adjustment-factors?start_date=2020-01-01" \
  -H "Authorization: Basic <base64 of email:apiKey>"
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 160,
      "ex_date": "2020-08-31",
      "factor": 0.25,
      "factor_type": "split",
      "event": "SD",
      "detail": "Subdivision of 4 for 1",
      "created_at": "2026-08-06T23:54:12Z",
      "updated_at": "2026-08-06T23:54:12Z"
    }
  ]
}

Doing the math yourself

To adjust a price on date D:

  1. Take every factor with factor_type of split, cash_dividend, or spin_off whose ex_date is strictly after D.
  2. Multiply the price by all of them.
  3. For volume, divide by the split factors only, and round to whole shares.

Using the example above: Apple's close on 2020-08-28 was 501.93 as reported. The 4-for-1 split on 2020-08-31 has a factor of 0.25, so the adjusted close is 501.93 x 0.25 = 125.48, which lines up with post-split prices.

If you do not need your own convention, skip the math: ?adjusted=true on the stock prices endpoint applies exactly this recipe server-side, and the Daloopa MCP server's get_stock_prices tool always returns adjusted values.

Full request and response schemas are in the API reference.


Did this page help you?