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_type | What it is | Price effect | Volume effect |
|---|---|---|---|
split | Forward or reverse stock split, and equivalent same-class share events | Multiply | Divide |
cash_dividend | Regular and special cash dividends, and cash capital returns | Multiply | None |
spin_off | Spinoff or distribution of another entity's shares | Multiply | None |
other | Events that do not fit the model, kept for transparency | Never applied | Never 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
splitrows. 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
| Endpoint | Purpose |
|---|---|
GET /api/v3/companies/{company_id}/adjustment-factors | Lists 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
start_date | date | No | Only events with ex_date on or after this date |
end_date | date | No | Only events with ex_date on or before this date |
limit | integer | No | Rows per page, default and maximum 500 |
offset | integer | No | Pagination offset |
Response fields
| Field | Type | Description |
|---|---|---|
id | integer | Stable row id |
ex_date | date | The date the event takes effect in the market price |
factor | number | Multiplicative price factor for this single event |
factor_type | string | One of split, cash_dividend, spin_off, other |
event | string | The source event code, for example SD (subdivision) or DIV (dividend) |
detail | string | Human-readable description of the event |
created_at / updated_at | datetime | When 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:
- Take every factor with
factor_typeofsplit,cash_dividend, orspin_offwhoseex_dateis strictly after D. - Multiply the price by all of them.
- For volume, divide by the
splitfactors 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.
Updated about 1 hour ago