← Articles Indie Development · Case Study

How I Got My Fortune-Telling App Approved After Four 4.3B (Spam) Rejections

My real experience developing a fortune-telling app, facing four App Store 4.3B rejections, and finally getting approved by rebuilding the app.

I’d like to share my experience of being rejected four times by App Store reviewers and finally getting approved after a major app overhaul.

It all started with BaZi fortune-telling (八字, Eight Characters) as material for learning Swift programming. Since I have a full-time data engineering job, I could only study on weekends. BaZi fortune-telling involves a lot of pattern-matching logic — specifically, you calculate a person’s Eight Characters from their birth date, check whether they match a certain pattern, and output a boolean result. Each function was short enough that I could write it during spare moments and ask AI to verify whether my logic was correct. That’s how I built a library called SwiftStemBranch — you feed in a birth date, and it generates the Heavenly Stems and Earthly Branches (干支, Ganzhi) and determines what patterns they match.

Later, I noticed that the fortune-telling apps on the App Store all had ugly UIs — they looked like web pages from ten years ago. So I dove into SwiftUI and eventually built a native SwiftUI BaZi fortune-telling app.

I’d heard before that fortune-telling apps tend to get flagged with 4.3B. To hedge against that, I added an achievement system and also a second I Ching (易經, Book of Changes) fortune-telling module. My thinking was to position this not as a pure fortune-telling app but as a folk-culture exploration and entertainment tool — you check fortunes for yourself and friends, then unlock achievements, kind of like a game. I submitted it on December 30, 2025, and unsurprisingly, got hit with 4.3B on the first try.

After that, I figured since I’d already invested so much time, I should at least figure out what changes might get it approved. I added a Ganzhi clock that binds to a person’s Eight Characters and shows real-time yin-yang and Five Elements (陰陽五行) flows and fortune trends. I also built a time-travel feature that lets you see the Ganzhi changes at any point in the past or future. The app structure at that point was: page one with the Ganzhi clock, page two with BaZi and I Ching readings, and page three with achievements to unlock. Still worried about another 4.3B, I submitted a public TestFlight build on February 5, 2026, thinking the review might be a bit more lenient there.

Two days later, I got hit with 4.3B again. I felt awful — the word “Spam” felt like an insult to all the time I’d spent. I filed an appeal requesting review by the App Review Board. After a week or two with no response, I looked around various forums and found people saying the board was basically useless. So I figured that was that.

After my mood recovered a bit, I kept brainstorming. I often use Star Walk to identify stars, but it has way too many stars — for someone like me who isn’t an astronomer and just wants to track the famous stars visible to the naked eye in ancient China, that’s overwhelming. So I decided to add a stargazing feature to my app. Instead of the zodiac signs, I designed it around the ancient Chinese “Twenty-Eight Mansions” (二十八宿) along the celestial equator. I checked the App Store and it seemed no one else had done this.

Another round of development followed — downloading star catalogs, figuring out the calculation algorithms, integrating AR, all done together with Claude Code.

I submitted again on March 9. This time I was fairly confident, because I felt the stargazing was now the main focus. But I got rejected with 4.3B again. I was truly crushed at that point.

A couple of days later, I wondered if it was a cultural gap issue. So I carefully reviewed the metadata again and restricted the release region to Asia. Then I made what I think was the most impactful decision: I removed the page where you directly input a birth date and get the BaZi reading. Instead, you first register a friend or yourself as a profile, and then run the BaZi calculation from within that profile.

I submitted again. On March 22, I was rejected once more — but this time it was for an IAP (in-app purchase) issue, not 4.3B! That felt like a breakthrough. I made the fix, resubmitted, and on March 23, the app finally got approved.

And here’s the most dramatic part: on March 25, Apple’s App Review Board suddenly emailed me saying they had overturned the 4.3B decision from February 5, 2026, and asked me to resubmit. I thought they were incredibly slow, but I was genuinely happy — it meant my app technically hadn’t been considered spam since February 5.

I’m sharing this story to give other developers of fortune-telling or dating apps who want to get on the App Store some encouragement: it’s possible, but you need to be willing to make major changes and not let emotions get the best of you. Good luck, everyone!