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

Timeline of John Doe's Vimshottari dasha from 1989 to 2049, zoomed in three levels: Jupiter's main period, its Moon sub-period, and the Jupiter third-level period running on Oct 25, 2026

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.

See the dasha API, which returns main periods, sub-periods and third-level periods with exact dates in one call

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.