Every date in a Vimshottari dasha comes from one number: where the Moon was at birth. Vimshottari is a 120-year timeline split into nine planetary periods, called dashas.
The method has four steps. First, find the Moon's nakshatra, one of 27 equal star groups of 13°20′ each. The planet that rules that nakshatra runs the first period. Second, measure how much of the nakshatra the Moon had already crossed. Third, count that same share of the first period as used up before birth. What is left is the balance at birth. Fourth, run the other periods in a fixed order, and split each one into nine smaller periods by the same proportions.
John Doe was born on Aug 15, 1990, at 10:30 AM in New York. His Moon sat 1°14′30″ into Mrigashira, a nakshatra ruled by Mars. That is 9.31% of the way through. So 9.31% of Mars's 7 years had passed before he was born, and 6.348 years were left. His Mars period ends on Dec 20, 1996, and every later date follows from that one.
Below, each step uses real numbers from our API, run in October 2026. We also measure four choices that move the dates from one app to the next.
The nine periods and their order
The cycle has nine main periods, each called a mahadasha. Each one is ruled by a planet, its lord. The order never changes, and it starts again after Mercury.
Lord | Years | Nakshatras it rules |
|---|---|---|
Ketu | 7 | Ashwini, Magha, Mool |
Venus | 20 | Bharani, Purva Phalguni, Purva Ashadha |
Sun | 6 | Krittika, Uttara Phalguni, Uttara Ashadha |
Moon | 10 | Rohini, Hast, Shravan |
Mars | 7 | Mrigashira, Chitra, Dhanishtha |
Rahu | 18 | Ardra, Swati, Shatabhisha |
Jupiter | 16 | Punarvasu, Vishakha, Purva Bhadrapada |
Saturn | 19 | Pushya, Anuradha, Uttara Bhadrapada |
Mercury | 17 | Ashlesha, Jyeshtha, Revati |
Rahu and Ketu are not physical planets. They are the two points where the Moon's path crosses the Sun's path. Each lord rules three nakshatras, spaced nine apart. That ruler is called the nakshatra lord. Our API counts a dasha year as 365.25 days, as rule DA-01 of our rulebook states.
Step 1: Find the Moon's nakshatra
Start with the Moon's sidereal longitude. Sidereal means the zodiac is measured against the fixed stars. To get it, take the Western position and subtract the ayanamsa, the gap in degrees between the two zodiacs. Our API uses the Lahiri ayanamsa unless you ask for another.
For John, the API puts the Moon at 54.575019°, which is 24°34′30″ into Taurus. The Lahiri ayanamsa on his birthday was 23.726073°.
Now divide the circle into 27 slices of 13°20′, or 13.3333°. Then 54.575019 ÷ 13.3333 = 4.09, so the Moon is in the 5th slice. That is Mrigashira, which runs from 53°20′ to 66°40′. Its lord is Mars, so John's timeline starts with Mars. You can look up any birth star with our free nakshatra finder.
Step 2: Measure how far the Moon has gone
Subtract the start of Mrigashira from the Moon's position: 54.575019 − 53.333333 = 1.241686°. That is 1°14′30″.
Then divide by the width of one nakshatra: 1.241686 ÷ 13.3333 = 0.0931. So the Moon had crossed 9.31% of Mrigashira. The API returns this as nakshatra_fraction_elapsed, with the value 0.09312644.
Step 3: Work out the balance of the first period
The share of the nakshatra crossed equals the share of the first period used before birth. Mars has 7 years, and 7 × 0.0931 = 0.652 years. That is 238.10 days used before birth. The balance at birth is 7 − 0.652 = 6.348 years, or 2,318.65 days.
So the Mars period really began 238 days before birth, on Dec 20, 1989. The API lists it at its full 7 years, from Dec 20, 1989, to Dec 20, 1996. It also returns balance_at_birth_years as 6.348115, the part John actually lives.
Listing the full period keeps the sub-periods on their true dates, as rule DA-03 explains. Mars's own sub-period ended on May 18, 1990, before John was born. At birth, John was in the Mars and Rahu sub-period, which ran to Jun 5, 1991.
From there, each main period runs at its full length:
Main period | Starts | Ends |
|---|---|---|
Mars (6.348 years left at birth) | Dec 20, 1989 | Dec 20, 1996 |
Rahu | Dec 20, 1996 | Dec 20, 2014 |
Jupiter | Dec 20, 2014 | Dec 20, 2030 |
Saturn | Dec 20, 2030 | Dec 20, 2049 |
Mercury | Dec 20, 2049 | Dec 20, 2066 |
Ketu | Dec 20, 2066 | Dec 20, 2073 |
Venus | Dec 20, 2073 | Dec 20, 2093 |
Sun | Dec 20, 2093 | Dec 20, 2099 |
Moon | Dec 20, 2099 | Dec 21, 2109 |
Step 4: Split each period into sub-periods
Each main period splits into nine sub-periods, called antardashas. They run in the same order, starting with the main period's own lord. Each one gets the main period's length × its lord's years ÷ 120. One level down, each antardasha splits the same way into nine pratyantardashas. Rule DA-04 sets out this split.
On Oct 25, 2026, the day this post was published, John is here:
Level | Lord | Starts | Ends | Length |
|---|---|---|---|---|
Main period | Jupiter | Dec 20, 2014 | Dec 20, 2030 | 16 years |
Sub-period | Moon | Apr 21, 2026 | Aug 21, 2027 | 16 × 10 ÷ 120 = 1.333 years, or 487 days |
Third level | Jupiter | Sep 10, 2026 | Nov 14, 2026 | 487 × 16 ÷ 120 = 64.9 days |

The next third-level period is Saturn's, from Nov 14, 2026, to Jan 30, 2027. The API returns up to five levels. You choose with levels, from 1 to 5, and the default is 3.
Why two apps give different dates
The method is fixed, but the inputs around it are not. We changed one input at a time for John and measured how far his dates moved.
Choice | What we changed | How far John's dates moved |
|---|---|---|
Year length | 360 days instead of 365.25 | His current sub-period starts 187 days earlier, on Oct 15, 2025 |
Year length | 365.2425 days, the average calendar year | Less than 1 day, even 120 years out |
Ayanamsa | KP instead of Lahiri | Every date 18.57 days earlier |
Ayanamsa | Raman instead of Lahiri | Every date 277.34 days earlier |
First period | Split only the 6.348 years left | Mars, not Rahu, runs at birth |
The year-length gap grows with age. Some traditions use a 360-day year. With it, John's first period ends 33 days earlier, and the gap grows by 5.25 days each year. On Oct 25, 2026, a 360-day app would put him in Ketu's third-level period, not Jupiter's.
The ayanamsa moves the Moon itself, so every date shifts by the same amount. John's Moon stays in Mrigashira under all three choices.
The third gap comes from a shortcut: start the first period at birth and split only the balance. That squeezes nine sub-periods into 6.348 years. Under it, John's Rahu sub-period starts on Dec 28, 1990, not May 18, 1990.
Every answer from our dasha API names its year length, in year_length_days, and its ayanamsa, in meta.ayanamsa. So you can show users the exact choice behind a date. See what the dasha API returns, and how to pick an ayanamsa in our conventions guide.

How much the birth time moves the dates
The fourth input is the birth time, and the Moon moves fast. On John's birthday it moved 14.26° a day. We sent his birth to the API at different minutes and compared the end of his first period.
Each minute of birth time moved it by 1.898 days. A later birth moves every date earlier, and one hour moves them about 114 days. A birth time rounded to the nearest half hour can be 15 minutes off. For John, that is about 28 days.
The number depends on the chart. It grows with the Moon's speed and with the first lord's years. At the same Moon speed, a Venus start, with 20 years, would move almost three times as much as John's Mars start.
What about a birth near the edge of a nakshatra? Had John been born at 8:24 AM, his Moon would still be in Rohini, ruled by the Moon. His timeline would open with 1.6 days of the Moon period, then Mars. A birth at 8:25 AM starts with Mars, and its Mars period ends just 2.4 days earlier. So the dates do not jump at the edge. Only the name of the first period changes.
Get the same timeline from the API
Send the birth details and levels to POST /v1/dasha/vimshottari. Here is the request for John Doe, born Aug 15, 1990, at 10:30 AM in New York:
{
"year": 1990,
"month": 8,
"day": 15,
"hour": 10,
"minute": 30,
"latitude": 40.7128,
"longitude": -74.006,
"timezone": "America/New_York",
"levels": 3
}And here is the top of the answer, with the nested sub-periods left out:
{
"system": "vimshottari",
"year_length_days": 365.25,
"nakshatra_fraction_elapsed": 0.09312644,
"starting_lord": "Mars",
"balance_at_birth_years": 6.348115,
"periods": [
{
"lord": "Mars",
"start": "1989-12-20T08:04:30.831945",
"end": "1996-12-20T02:04:30.831945",
"years": 7,
"partial_at_birth": true,
"balance_years": 6.348115
}
]
}Dates are in the local time of the birth place. Sub-periods that ended before birth carry "elapsed": true, so you can hide them. Yogini dasha, a shorter 36-year system, starts from the same Moon and the same balance.
For every field in the answer, with its type, see the API reference.
The math behind Vimshottari fits on one page. The gaps between apps come from the four inputs around it. Choose each one on purpose, and tell your users what you chose.



