Guides

Why Your Astrology App Needs a Timeline View (and How to Build One)

Ship a multi-technique Hellenistic timeline view in one weekend. One API call returns profections, Firdaria, ZR, decennials and outer transits.

OK

Oleg Kopachovets

CTO & Co-Founder

May 18, 2026
15 min read
237 views
Astrology timeline view across techniques
Astrology timeline view across techniques
0%

The transit-only era is over

Co-Star did $15M ARR by sending pithy push notifications and showing outer-planet transits. The Pattern crossed 50M downloads with the same single technique plus a psychology gloss. Both apps own the casual end of the market. Both apps have hit the ceiling of what one timing layer can support, and the App Store top charts now show the consequence: every new transit-only launch looks like the last, churn sits at 6-8% monthly across the category, and CAC keeps climbing because differentiation is gone.

There is a reason this is happening. Transits are the lowest-effort timing technique to implement, the easiest to explain in one sentence, and the most commoditized. Every astrology API ships them. Every consumer app shows them. Discounting and influencer marketing eat into margin, and you end up running a paid-acquisition treadmill against a churn rate you cannot fix at the product layer.

The next wave is already shipping. Hellenistic-revival apps such as CHANI ($9.99/month, est. $5-8M ARR by 2025) and smaller specialists like Stellium and Sanctuary's premium tier charge $10-15/month and retain at meaningfully better rates because they offer something transit-only apps cannot: layered time. A user opens the app and sees that this is a 7th-house profection year, a Mercury Firdaria, a Jupiter ZR L2 period, and Saturn is conjuncting their Lord of the Year. That stack of context is what makes a person feel seen by their app. It is also what justifies a $99/year subscription instead of a $0.99 in-app purchase.
The gap is structural. Co-Star and The Pattern cannot retrofit Hellenistic depth onto their existing data layer without rebuilding it. Their content engines are tuned to one technique. New entrants who ship depth first do not have that constraint. This post is about how to ship that view in a weekend using one new endpoint that just went live: POST /api/v3/timing/timeline.

What a Timeline view actually looks like

A Timeline view is a horizontal calendar with 4-5 stacked rows. The x-axis is time. Each row is one timing technique, segmented into colored bands that represent active periods.

javascript
1today
2
3 Profection │ 6th house ──────┼── 7th house ──────────────│
4Mercury LOYVenus LOY
5 FirdariaMercury / Venus ┼─ Mercury / Sun ───────────│
6 ZR (Spirit)Sagittarius L1 ┼ └── Capricorn L2 ────────│
7 DecennialsSun / Mars ─────┼── Sun / Jupiter ──────────│
8 Transits │ ⌐── Saturn square LOY ─────┐ │
9 │ │
10 └── Jun '25 ────── May '26 ─────── Apr '27 ───┘

Each row has its own rhythm. Annual profections roll once a year on the solar return, so the band is wide and predictable. Monthly profections roll every 28-30 days inside that annual band, which gives you a useful second-tier accent stripe. Firdaria L1 periods last 6-13 years depending on which planet's turn it is, with shorter L2 sub-periods of months inside. Zodiacal Releasing periods are sign-length. Aries L1 lasts 15 years, Cancer L1 lasts 25 years, and L2 sub-periods can be anywhere from a few months to two years depending on the sign. Decennials run 10 years for L1 with shorter L2 inside, computed in Chaldean order and adjusted for the chart's sect. The transit overlay sits on top as discrete arcs. Saturn conjuncts the LOY for roughly 12 weeks. Jupiter trines Mars for roughly 6 weeks. The arcs are short and bright against the slower bands underneath.

The user does not need to know which row is which technique to find the view valuable. They just see "today" as a vertical line, and they can see how many bands are converging on it. Bands converging on today is the entire UX. That is the moment users screenshot and post to TikTok. From a product perspective, the timeline gives you four monetizable surfaces in one screen: tap a band for an explainer, tap "today" for a daily summary, tap a future band for a forecast, tap the transit arc for an electional micro-window. Every consumer astrology app needs that surface area to support more than one in-app purchase.

The before: 4-6 API calls and a stitching problem

Until last week, building this view meant calling four to six endpoints and stitching results in your client.

A typical implementation:

  1. POST /v3/profections/annual for the current profected sign and Lord of the Year
  2. POST /v3/profections/monthly for the monthly LOY
  3. POST /v3/firdaria/periods for L1 + L2
  4. POST /v3/zodiacal-releasing/periods for Spirit-anchored L1 + L2
  5. POST /v3/decennials/periods for L1 + L2
  6. POST /v3/transits/outer-to-natal for the overlay

Six round trips. Six sect calculations that have to agree. Six timezone normalizations. Six places to introduce a bug. If your client is a mobile app on a flaky connection, that is roughly 1.5-3 seconds of network time on a cold launch, and one failed call leaves the view half-rendered. You then build retry logic per endpoint, a partial-render state, an error toast for each timing technique, and a logging story that distinguishes a profections-call failure from a ZR-call failure. The complexity compounds and your timeline view ends up being three files of integration code before you write a line of UI.

There is also a correctness trap. Sect (day chart versus night chart) flips the Lord of the Year math for some traditional rulership schemes, changes the Chaldean rotation in decennials, and determines whether Spirit or Fortune is the default ZR anchor for vocational readings. If any one of your six endpoint calls uses a slightly different sect heuristic than the others, your timeline will show subtly inconsistent lords across rows. That bug is invisible in dev and obvious to any user who knows enough to care.

The aggregator pattern fixes this. One call. One sect determination. One timezone normalization. One response shape. /timing/timeline ships everything you need to draw the view in a single payload, with internal consistency guaranteed because every technique is computed against the same chart instance.

The endpoint walkthrough

The request takes a subject (birth data with lat, lon, timezone), a target_date, and an optional zr_anchor set to spirit or fortune. That is it. The response returns the active period for each technique at target_date, with ISO start and end dates so you can draw the band.
json
1{
2 "target_date": "2026-05-18",
3 "sect": "diurnal",
4 "profection": {
5 "annual": { "house": 7, "sign": "Libra", "lord": "Venus",
6 "start": "2025-06-15", "end": "2026-06-15" },
7 "monthly": { "house": 11, "sign": "Aquarius", "lord": "Saturn",
8 "start": "2026-05-15", "end": "2026-06-14" }
9 },
10 "firdaria": {
11 "l1": { "lord": "Mercury", "start": "2023-06-15", "end": "2036-06-15" },
12 "l2": { "lord": "Venus", "start": "2025-12-01", "end": "2027-02-21" }
13 },
14 "zodiacal_releasing": {
15 "anchor": "spirit",
16 "l1": { "sign": "Sagittarius", "lord": "Jupiter",
17 "start": "2018-04-02", "end": "2030-04-02" },
18 "l2": { "sign": "Capricorn", "lord": "Saturn",
19 "start": "2026-01-11", "end": "2028-08-22" }
20 },
21 "decennials": {
22 "l1": { "lord": "Sun", "start": "2020-06-15", "end": "2030-06-15" },
23 "l2": { "lord": "Mars", "start": "2026-03-30", "end": "2027-08-12" }
24 },
25 "transits_to_loy": [
26 { "transiting": "Saturn", "aspect": "square", "exact": "2026-07-04",
27 "start": "2026-05-20", "end": "2026-09-12" }
28 ],
29 "metadata": {
30 "warnings": [],
31 "engine_version": "swisseph-2.10.03"
32 }
33}
A few things to call out. The top-level sect field is computed once and applied across every technique that needs it, so decennials use the right Chaldean rotation and you do not have a drift bug between endpoints. The zr_anchor parameter accepts spirit or fortune. Spirit is the standard career and vocation lot. Fortune is the body and livelihood lot. Most consumer apps want Spirit by default and let Pro users toggle to Fortune in settings.
The metadata.warnings array fires for the edge cases you would otherwise discover in a Sentry alert at 2 AM. Polar latitude house calculation issues when a user's birthplace is above the Arctic Circle. Charts within a year of birth where profection math degenerates because the technique is undefined for age zero. Modern-ruler ambiguity when a user toggles between traditional and modern rulerships, since Aquarius and Scorpio LOYs get different lords. You read the warnings array and decide how to surface them. Some apps hide the affected row. Some apps show a small info icon. Either is fine, but you want the data before you render, not after a support ticket.
Cost is roughly 300-500ms uncached for a fresh subject, well under 50ms warm because each Swiss Ephemeris helper is wrapped in an lru_cache server-side. One API request consumed per call, same as any single-technique endpoint. That pricing collapses a six-call workflow into one billable unit, which matters at scale.

The 3-tier UX strategy

The Timeline view is also a monetization wedge. Hide rows behind tiers. Users who want depth will pay for it.

Free tier. Show two rows. Annual profections and outer-planet transits. This is enough to feel meaningfully more Hellenistic than Co-Star without giving the whole thing away. The user sees "you are in a 7th-house Venus year" and "Saturn squares your Lord of the Year in July." That sentence alone differentiates you from every transit-only app in the store. Free users get an unmistakable taste of the depth tier without unlocking it. The free tier also gives you something to push notify on: when the annual profection rolls over, every free user gets a notification, which is a re-engagement event you cannot fake with a generic horoscope.
Pro tier at $7-10/month. Unlock the timing stack. Firdaria, Zodiacal Releasing, and Decennials. This is where users go from "huh, neat" to "I am paying for this forever." Firdaria gives a Persian time-lord view that is rare in consumer apps and reads as exotic and expert-coded. ZR gives the cinematic peak-period framing that users screenshot, because the word "peak" attached to a multi-year period is a frame that makes people feel they are inside a story. Decennials gives the Hellenistic completionist signal that signals to power users you take traditional astrology seriously. The conversion math: if 2% of free users upgrade at $7/month, 1,000 free DAU returns about $1,680/year in subscription revenue. At 100k installs and 30k DAU you are looking at $50k+/year from this tier alone, before factoring in annual-plan discounts and the lift from year-over-year retention.
Pro+ or Expert tier at $15-20/month. Professional toolkit. Add the LOY transit overlay with exact dates and orbs. Surface the profections biwheel SVG endpoint as a renderable chart users can save to their photo library and share. Add the Cazimi/Combust calendar for advanced electional users who want to know when Mercury is in the heart of the Sun for an important meeting. This tier serves practicing astrologers and the 1-2% of consumer users who go fully down the rabbit hole. ARPU on this tier carries the rest of the funnel because the same users who pay $15/month for your app are also the ones who buy your $99 yearly upgrade, your $29 reading credit pack, and the merch tee you launched on a whim.

Each row you unlock is a reason to upgrade. Each row you hide is a discoverable upsell. The Timeline view turns into a pricing page that the user actually wants to scroll through.

Subscription wedge math

Here is the math that determines whether you should build this.

Apple CPI for an astrology-vertical install runs $4-8 depending on geo and creative quality. Call it $6 blended. To pay back CAC at a $9.99/month price point with Apple's 15% small-business cut (net $8.49), you need the user to retain for 0.71 months. That sounds easy until you look at the data. Transit-only apps retain Month 1 paid users at roughly 60% and Month 6 at 25-30%. LTV ends up around $35-45 per paid user. Net of CAC, App Store fees, and refunds you make $10-20 per paid user before any content or support cost.

Hellenistic apps with multi-layer timing retain Month 1 at 75-80% and Month 6 at 45-55% based on what operators in this niche report on public podcasts and indie-Twitter threads. LTV moves to $80-110. Same CAC. The net per paid user roughly triples. That is the entire reason the depth tier exists as a business strategy.

Translate to a small indie shop. 10,000 monthly installs from organic + light paid spend. 3% paid conversion = 300 new paid subs per month. At $70 LTV (mid-range Hellenistic) that is $21k of cohort value per month, or about $250k annualized run rate. Same funnel built on transit-only gives you $90k. The Timeline view is worth roughly $160k/year in this scenario before you account for the better word-of-mouth coefficient that depth-first apps see in the App Store reviews.

The same math scales up. AI astrology chatbot products built on top of the Astrology Chat API report ARPU 2-3x higher when they ground responses in time-lord context instead of just transits, because the bot has more to say and the user gets a reason to come back daily. Depth is a content engine, not just a pricing wedge.

Time-to-build, hand-stitched vs. aggregator

Engineering cost matters because indie shops have one or two builders. Hand-stitching the six-endpoint approach takes a competent backend developer about 5-7 days of focused work: four to write and test each endpoint integration, one to harmonize sect and timezone handling, one to build the partial-render and retry UX, and a buffer for the bugs that always show up in QA. That is before you write a single line of timeline UI.

Building against /timing/timeline collapses the integration layer to maybe half a day. One client function, one response type, one error path. You spend your remaining 4-5 days on the UI, which is where the user-facing differentiation actually lives. For a two-person team that is the difference between a month-long sprint and a two-week one.

There is also a maintenance argument. Each of the six underlying techniques has its own edge cases. When you find a profections bug at age zero or a ZR sign-length question, you debug it once on our side rather than across six client integrations across your iOS and Android codebases.

What you can build in a weekend

A concrete product, scoped to a real Friday-to-Sunday window.

The product. A React Native or native iOS app whose one job is to show the user's stacked timeline for last 30 days and next 30 days. One screen. Vertical "today" line. Tap a band for an explainer. Push notification when a major period rolls over.
The retention loop. This is the part most indie founders get wrong. You do not retain on chart accuracy. You retain on a recurring reason to open the app. The Timeline view gives you a built-in trigger: when the annual profection changes signs (once per year), when monthly profections change (12x/year), when Firdaria L2 changes (every few months), when ZR L2 changes (variable), and on any major outer transit entering orb to the LOY. That is roughly 20-30 push-notifiable events per user per year, each one anchored to a real timing change rather than a generic "your horoscope is ready" nudge. Open rate on the real-event nudge is 3-5x the generic kind.
The growth loop. Period-change moments are also share moments. Building a "new chapter" share card for the moment a user's annual profection rolls over (e.g. "Mira just entered her 7th-house Venus year") gives you organic social distribution. CHANI built a $5M+ ARR business partly on this exact mechanic.
The cost line. One daily call per user per device. At 30,000 DAU that is 900k requests per month uncached. With sane month-boundary caching you can hold this at 60-100k requests, which fits inside our Business tier at $99/month. API cost per paid user works out to roughly $0.04-0.08 per month, well under 1% of subscription revenue at a $7-10 price point.
The revenue line. $7/month subscription, 4% paid conversion, 30k DAU = 1,200 paying users = $8,400 MRR. Net of API cost and Apple's 15-30% cut you keep roughly $5,500-6,200 MRR. At $9.99/month with the same conversion you cross $7,500 MRR net. Built in a weekend, scaled in six months.

You will not hit those numbers in the first month. You might hit them by month six if the timeline view does what it has done for everyone else who shipped it. The category is small enough that one good launch can move you into the top 10 paid astrology apps in a country and large enough that the top 10 print money.

Beyond Hellenistic

The Timeline shape is technique-agnostic. Swap profections, Firdaria, ZR, and decennials for Vimshottari dasha Mahadasha and Antardasha and you have a Vedic app with the same UX and the same monetization wedges. The Indian market alone has 100M+ astrology-app installs and is significantly underserved on the depth axis. The data shape is stacked rows of typed start/end intervals, and it survives every system.

The Hellenistic stack is the most opinionated and the most differentiated right now, which is why I led with it. The same architecture extends sideways to whatever school your audience cares about.

Ship one row first

Pick the single technique with the most narrative punch for your audience. For a general consumer app, that is annual profections. For a career-oriented app, ZR Spirit. For Indian markets, Vimshottari Mahadasha. Ship that one row and the transit overlay. Charge $5/month. Validate that anyone wants this at all.

Then add Firdaria. Then add ZR L2. Then the biwheel. Each addition is a launch and a pricing-page change.

Endpoint docs: /p/timing-api. Related: profections, zodiacal releasing, Firdaria, Cazimi & Combust, and the Astrology Chat API for the LLM-narration layer on top. Pricing: /pricing.
Feedback via /contact.
Oleg Kopachovets

Oleg Kopachovets

CTO & Co-Founder

Technical founder at Astrology API, specializing in astronomical calculations and AI-powered astrology