ChartDetector AI ↗: snap a trading chart and AI gives a long/short read, grown with TikTok paid ads
- MRR
- $56,000self-reported Source checked 2026-10-20
- Total revenue
- -
- Active subscriptions
- -
In one line: A mobile app that reads a photo of a price chart and gives a bullish or bearish call, with a hard paywall, no free trial, and weekly or six-month plans.
- Founder
- Timo KöhlerX ↗
Timeline
- UGC videos at $15 each (self-reported)
- Interview published: about 13 months live, growing on paid ads (self-reported)
Sources: X post by @timoxkoehler; X post by @timoxkoehler; YouTube interview; X post by @timoxkoehler.
Compared with similar products
Sources: YouTube interview; App Store: ChartDetector AI; App Store: Chartby. In-app prices for both apps are from their App Store pages, checked 2026-10-26.
4 moves ChartDetector AI made
Built a Telegram bot first, then the app.
The bot read stock charts; it later became a mobile app.
Ran TikTok Smart+ ads.
He used AppsFlyer for attribution. Each campaign had at least 6 videos. Ads were optimized for subscription events.
Optimized for purchases, not installs.
He posted this ad rule on X.
Targeted markets outside the US.
He recommended other countries on X.
Sources: Interview 03:36; Interview 07:34; X post by @timoxkoehler; X post by @timoxkoehler.
How to copy it
Upload a batch of real screenshots into a general AI chat first and confirm it gives the conclusion you need
No code yet: take a batch of real screenshots from different situations in your niche, open a new ChatGPT chat, paste the prompt below and upload them one by one to see whether conclusions are stable and consistently formatted. What the founder did: it started when ChatGPT had just gained image uploads, and v1 was just a bot analyzing screenshots with AI (interview 03:36).Expand ▾Collapse ▴
No code yet: take a batch of real screenshots from different situations in your niche, open a new ChatGPT chat, paste the prompt below and upload them one by one to see whether conclusions are stable and consistently formatted. What the founder did: it started when ChatGPT had just gained image uploads, and v1 was just a bot analyzing screenshots with AI (interview 03:36 ↗).
- A test table with each screenshot's conclusion, reasons and your judgment; the same image uploaded twice gives the same conclusion.
- One of <your target users> you know reviews the table and finds the conclusions useful.
You are an analysis assistant for <your niche>. I'll upload screenshots one at a time. For each, output in a fixed format: 1) a one-line conclusion; 2) 2-3 reasons visible in the image; 3) what's uncertain; 4) one risk note. If it's unclear or there isn't enough information, say so rather than guessing.
Step 1: upload screenshots to test the analysis (our recommendation; the idea came from ChatGPT's new image upload; the model the app uses is not disclosed).
Build a mobile app: snap or upload a screenshot, get the analysis back
Start an Expo project in Cursor with only three screens: take or pick a photo, loading, result (in the step 1 format). Send the image to a Supabase Edge Function that calls a vision-capable model API with the step 1 prompt and stores the result. What the founder did: the app is built in React Native and Expo with Supabase as the backend, all coded with Cursor (interview 11:06).Expand ▾Collapse ▴
Start an Expo project in Cursor with only three screens: take or pick a photo, loading, result (in the step 1 format). Send the image to a Supabase Edge Function that calls a vision-capable model API with the step 1 prompt and stores the result. What the founder did: the app is built in React Native and Expo with Supabase as the backend, all coded with Cursor (interview 11:06 ↗).
- On a real phone, a snapped image returns a fixed-format result within seconds and the record is in the database.
- Someone who doesn't know you installs the test build and completes an analysis.
Help me build a minimal app with Expo (React Native) and Supabase: 1) three screens: take or pick a photo, loading, result; 2) upload the image to Supabase Storage and call an Edge Function; 3) the Edge Function calls a vision-capable model API with the prompt below, stores the structured result and returns it; 4) keep secrets only in Edge Function environment variables. Follow official docs and flag anything uncertain. Prompt: <paste step 1 prompt>
Step 2: write the app code; X post: "Cursor (to build your app)".
Step 2: set up the React Native project and preview it on your phone; the app is "built in React Native and Expo".
Step 2: write one interface for both iOS and Android.
Step 2: an Edge Function calls the model API and the database stores results; X post: "Supabase (backend)".
Step 2: the vision model your Edge Function calls (our recommendation; the provider is not disclosed).
Add a hard paywall with RevenueCat, no free trial, with onboarding that sells the outcome
Create subscription products in App Store Connect and configure the paywall in RevenueCat. Put a few onboarding screens before it that sell the user's outcome rather than features, use only real data for social proof, and end on the paywall with no free trial. You set the price. What the founder did: he uses a hard paywall with no free trial, which in his view pays back fastest alongside ads, sells the outcome in onboarding with lots of social proof, and runs the paywall on RevenueCat (interview 02:14).Expand ▾Collapse ▴
Create subscription products in App Store Connect and configure the paywall in RevenueCat. Put a few onboarding screens before it that sell the user's outcome rather than features, use only real data for social proof, and end on the paywall with no free trial. You set the price. What the founder did: he uses a hard paywall with no free trial, which in his view pays back fastest alongside ads, sells the outcome in onboarding with lots of social proof, and runs the paywall on RevenueCat (interview 02:14 ↗).
- Opening the app shows onboarding then the paywall with no free-trial button; a sandbox account can purchase.
- RevenueCat shows the first real subscription.
My app gives <your target users> a <conclusion> from one screenshot, with a hard paywall, no free trial, at $<price>. Write English copy for a few onboarding screens: 1) the first screen states the outcome; 2) one social-proof screen with placeholders for my real data, no invented numbers; 3) the final paywall screen: headline, 2-3 outcomes, button text. No guaranteed-returns language.
Step 3: set up subscription products and the paywall; interview 11:21: "we use RevenueCat for all of our paywalls and subscription handling".
Step 3: study the onboarding flows of other successful apps; interview: "use a tool like Screens Design to analyze onboarding flow of other successful apps".
Step 3: create the weekly and 6-month subscription products in App Store Connect (our recommendation for where to set them up).
Set up attribution and launch TikTok ads with a few "how the app is used" videos, optimizing for subscriptions
Open TikTok Business Manager, connect a mobile attribution tool and confirm the ads dashboard receives subscription events. Record a few vertical videos of real use, each with a different opening line. Create a Smart+ app campaign optimized for subscription events, targeting by country only. You set the budget. What the founder did: acquisition is almost all paid ads, using AppsFlyer for attribution and Smart+ campaigns optimized for subscriptions, and his best video simply shows a user using the app (interview 07:34); he also suggests targeting markets other than the US (X post by @timoxkoehler).Expand ▾Collapse ▴
Open TikTok Business Manager, connect a mobile attribution tool and confirm the ads dashboard receives subscription events. Record a few vertical videos of real use, each with a different opening line. Create a Smart+ app campaign optimized for subscription events, targeting by country only. You set the budget. What the founder did: acquisition is almost all paid ads, using AppsFlyer for attribution and Smart+ campaigns optimized for subscriptions, and his best video simply shows a user using the app (interview 07:34 ↗); he also suggests targeting markets other than the US (X post by @timoxkoehler ↗).
Original page 1 ↗Original page 2 ↗Original page 3 ↗Author post 4 ↗
- TikTok Events Manager shows subscription events; the campaign is live with all videos running.
- The ads bring a first subscription attributed to TikTok.
I'm shooting TikTok ads for an app that gives <your target users> a conclusion from a photo. Write scripts for a few 15-30 second vertical videos: 1) each shows real use: take a photo, the app shows the conclusion; 2) each opens with a different 2-second hook; 3) English captions, no guaranteed-returns language; 4) list the shots needed for each.
Step 4: send in-app subscription events back to TikTok for attribution; interview 07:34: "I would recommend to use a tool like AppsFlyer".
Step 4: create the Smart+ app campaign; X post: "Tiktok Ads Manager (to run ads)".
Step 4: edit the 6 vertical ad videos; the ads are edited in CapCut ("we use CapCut as our video editing software").
Leave settings alone during the learning phase, then check ROAS weekly to decide budget or new videos
Change nothing during the learning phase. After that, compute ROAS weekly as net subscription revenue / ad spend: raise the budget in small steps when returns are stable, and swap in new videos without touching the budget when they're not. What the founder did: he leaves settings alone for the roughly week-long learning phase, checks ROAS weekly, raises budget when profitable and adds new videos when not, in small budget steps (interview 09:38, X post by @timoxkoehler).Expand ▾Collapse ▴
Change nothing during the learning phase. After that, compute ROAS weekly as net subscription revenue / ad spend: raise the budget in small steps when returns are stable, and swap in new videos without touching the budget when they're not. What the founder did: he leaves settings alone for the roughly week-long learning phase, checks ROAS weekly, raises budget when profitable and adds new videos when not, in small budget steps (interview 09:38 ↗, X post by @timoxkoehler ↗).
- A weekly table of ad spend, net subscription revenue, ROAS and the week's decision (raise budget or swap videos).
- In the weekly log, one week's ad-driven subscription revenue exceeds spend.
Below is my app's weekly ad data: TikTok spend, RevenueCat net subscription revenue (after platform fees), and spend and subscriptions per video. Please: 1) compute weekly ROAS; 2) name which videos drive subscriptions and which to replace; 3) give this week's decision under "raise budget in small steps only when stable, otherwise swap videos and hold budget"; 4) use only my data. Data: <paste>
Step 5: see real subscriptions and net revenue to compute ROAS; X post: "RevenueCat (analytics & paywalls)".
Step 5: check daily spend, then adjust budget or swap videos by the rule.
Sources
- Starter Story interview (2026-07-23)
- From the founder in a July 2026 interview: 01:51, "We are currently at $56,000 per month"
- From the founder in a July 2026 interview: 03:36, a Telegram bot that analyzed charts came first, then the app
- From the founder in a July 2026 interview: from 07:34, TikTok ad setup (AppsFlyer, 6 videos, Smart+, subscription events, $50/day)
- X: "I made $43,704 in April with a single app" with a cost breakdown (2026-04-30, self-reported)
- X: "The only tools I use to run my 40k MRR mobile app" (2026-05-04)
- X: ad rules, "optimize on purchase events not installs" (2026-07-29)
- X: "Target other markets than US." (2026-04-26)
- X: "UGC creators are so cheap. I pay $15 per video" (2026-06-19)
- X: revenue estimate if ads stopped for a month, "Probably 20-30k" (2026-07-24)
- X: "currently at $600k ARR" (2026-08-18, scope not stated)
- App Store: ChartDetector AI (developer KI Koehler International Ltd.)
- Official site chartdetectorai.com
- apps.apple.com
Next case
Boothie: AI retro-look selfie app, 4 months after launch
Business model: B2C mobile subscription + credit packs (AI photo restyling)
Data source: TrustMRR, checked 2026-10-17