# #130 to #9: how Kirill Lukyanov's weekly ASO loop moved his Mac app for 'eye strain' in the UK store

Kirill Lukyanov is a solo iOS/macOS developer. He works through a seven-step App Store Optimization (ASO) process on two of his own apps: Clay Sniper, a clay shooting log for iPhone and Apple Watch, and SafeYourEye, a Mac app for eye breaks and vision self-checks. The process is wrapped in a Claude Code skill and a dashboard. One weekly command pulls App Store analytics for all his apps, rankings across target storefronts and a metadata snapshot with change history, through the official App Store Connect API. App metadata lives in his repo and ships with `asc metadata push`, so every change is a diff. He reports that Clay Sniper's US and Europe share of impressions went from 3% to 68% and its daily impressions rose 5×. SafeYourEye went from #130 to #9 for "eye strain" in the UK store. He also lists the rankings that fell, and SafeYourEye got zero new installs in a month.

| | |
|---|---|
| **Who** | Kirill Lukyanov, solo iOS/macOS developer and independent tech lead with his own apps (Clay Sniper, SafeYourEye). DEV: [@klukyanov](https://dev.to/klukyanov) (verified: author of the source) |
| **Problem** | Almost nobody in Clay Sniper's target markets could see its App Store page |
| **Stack** | Claude Code skill, a dashboard, App Store Connect API, `asc` (`asc analytics`, `asc metadata push`), metadata in a repo, iTunes Search API, App Store search suggestions, Custom Product Pages, promotional text, system review prompt, Apple Ads |
| **Confidence** | Medium (first-person, own apps. Volumes are multiplied by a constant, the ranking source is approximate, and the biggest jump coincided with an Apple Ads change) |
| **Last verified** | 2026-10-25 |

## The problem
Clay sports, he writes, "live mostly in the US and Europe." In mid-September, 72% of Clay Sniper's impressions came from Russia and Kazakhstan and a quarter came from random countries. Only 3% came from the US and Europe. The app had three locales (ru, en-US, de-DE). Its primary language was Russian, so France and Italy saw the Russian page. It was not in the US top 100 for "trap shooting", "sporting clays" or "skeet". It had zero Custom Product Pages, empty promotional text and no review prompt in the code.

His diagnosis: "no sales not because the page fails to convince, but because almost nobody sees it." He set the order as "reach first, conversion second, paid traffic third."

## The blueprint (as he describes it)
1. **Baseline, weekly.** He records impressions, page views and installs by source and country with `asc analytics`. He also tracks rankings for 20–40 queries per target country. Apple keeps daily analytics for about 9 days, "so I collect it weekly."
2. **Pick markets.** He decides where each app should grow and where to leave it as is. Keywords, locales and screenshots then target those storefronts.
3. **Build the semantic core.** His inputs are App Store search suggestions, iTunes Search API results, competitor metadata and terms from the app's own code. He writes, "Without paid tools you can't measure query volume, so I look at competition: how many apps rank and how relevant they are."
4. **Audit duplicates.** He checks for overlap between name, subtitle and keywords, because "A word repeated in keywords is wasted characters." In SafeYourEye, duplicates took up a third of the keyword field.
5. **Spread across locales.** Each storefront language gets its own name, subtitle and keywords. He adds a second keyword pool through cross-localization. For example, the US store also indexes es-MX, ru, zh-Hans and fr-FR on top of en-US.
6. **Ship and amplify.** Metadata goes out with `asc metadata push` alongside the release. Promotional text is set right away, and he adds Custom Product Pages for key queries. Because metadata lives in the repo, every change is a diff.
7. **Measure in 1–2 weeks.** He repeats step 1 and compares results per country and per query. His reasoning: "Indexing takes days; looking earlier means reading noise."
8. **Run it with one command.** The Claude Code skill and dashboard pull analytics for all his apps, rankings across target storefronts and a metadata snapshot with change history, through the official App Store Connect API.
9. **What he changed on Clay Sniper:**
   - **Aug 23, 1.1.0:** He rewrote the keywords around disciplines ("double, compact, fitasc, 5stand, scorecard") in place of generic terms. This release also added the first promotional text.
   - **Sep 21, 1.2.0:** German locale.
   - **Sep 26, 1.3.0:** French locale ("ball-trap", "carnet de tir", "compak").
   - **Oct 1, 1.4.1:** en-GB with British terms ("DTL", "clay pigeon", "cartridges"), plus Italian. He also cleaned en-US keywords of words already in the subtitle.
   - **Oct 6:** Apple Ads pilot in the US on competitor and niche queries, exact match.
   - **Oct 7, 1.4.2:** es-ES and es-MX, a second keyword pool for the US. This brought the total to 8 locales.
   - **Oct 8:** Apple approved 12 Custom Product Pages in under a day.
   - **Oct 11:** All 12 Custom Product Pages got versions in six more storefront languages, each with its own keywords and screenshots.
10. **What he changed on SafeYourEye.** The audit found that a third of the keyword field duplicated the name. It also found that the app's vision self-checks on a Mac were not searchable. For queries like "visual acuity" and "amsler grid", there are only 12–24 apps in results. He renamed the app "SafeYourEye: Eye Strain Timer" with the subtitle "20-20-20 Break & Vision Test", and added en-GB, fr-FR and it.
11. **Review prompts.** Both apps got a system review prompt after a good moment. In Clay Sniper, that moment is a finished session.
12. **Next steps he lists.** He plans to reshuffle words between fields so the trap and skeet Custom Product Pages get their own queries. He will reshoot US/UK screenshots that still show Russian clubs and ammo. He will email federations and clubs with free access via offer codes, giving each link its own campaign token. He will run Apple Ads in the US first, then the UK.

## Stated results
All volume figures are multiplied by a constant. Proportions are exact, per the author.
- **Clay Sniper geography:** US and Europe share of impressions went from 3% (Sep 16–20) to 68% (Oct 8–10).
- **Clay Sniper impressions:** 1,020 a day (Sep 16–20) to 4,867 a day (Oct 8–10). He describes this as "daily impressions grew 5×, almost all of it from the US and the UK."
- **Clay Sniper installs:** zero new installs a day in Sep 16–20 and 8 a day in Oct 8–10. Impression-to-page conversion fell from 7.8% to 3.9%. He reads this as "the new audience sees the app but doesn't open it yet."
- **Ratings:** "Ratings doubled over the period, average 5.0."
- **SafeYourEye rankings** (before Sep 23–27, after Oct 9):
  - "eye strain": UK 130 to 9, Germany 83 to 13, US 170 to 39.
  - "eye health" in Germany: 126 to 54.
  - "pause yeux / pausa occhi" in France and Italy: from no locale to 7 and 5.
- **SafeYourEye losses:**
  - US "20-20-20 rule": 11 to out of the top 200.
  - US "eye care timer": 39 to 100.
- **Clay Sniper rankings** (after Oct 12):
  - From outside the top 200: US "clay shooting" 29, Germany "Tontaubenschießen" 8, UK "clay pigeon" 45, France "ball trap" 106, US "trap shooting" 125 and "sporting clays" 108.
  - Germany "Wurfscheiben": 4 to 5.
  - New locales: "shooting log" (UK), "Wurftaube" (Germany) and "strozzatore" (Italy) landed in the top 5 right away.
- **SafeYourEye traffic:** 105–185 impressions a day and zero new installs in a month. He calls it "a conversion problem now, not a search one."
- **Revenue:** None stated. "Revenue, subscriptions and ad budget are not shown at all."

## Caveats
- **Scaled volumes.** All volume metrics (impressions, page views, installs, ratings) are multiplied by the same constant. Rankings are real.
- **Approximate rankings.** Positions come from the iTunes Search API, which he describes as "close to the real App Store, not identical." "Clay shooting" moved 35th, 18th, 29th within four days.
- **Ads and organic are mixed.** The October 8 impressions jump happened on the same day Apple approved the 12 Custom Product Pages and his Apple Ads groups were switched to them. The Apple Ads US pilot started Oct 6. He says the split between ads and organic will come from the Apple Ads report "next time."
- **Short window.** The data covers about one month. He calls the late-September conversion spike a one-off: conversion returned to 8% a week later.
- **Backfilled data.** Apple backfilled October 8 data after his first pull. He warns against drawing conclusions from the last 2–3 days.
- **Install count conflict.** He writes that installs appeared "every week since Sep 21." His own table shows 0 new installs a day for Oct 5–7.
- **Trade-offs.** He frames the losses as the cost of the name change, which "lifted the broad query in three countries and dropped the narrow ones."
- **Commercial context.** This is his own post about his own apps, which he is trying to grow. It is not hosted by a vendor. The Claude Code skill is his internal tooling. The source does not offer it for sale or download.
- Handles: LinkedIn kirill-lukyanov-4732b037 (verified 2026-10-25: linked from klukyanov.ru). DEV @klukyanov (verified: author of the source). GitHub kiri11ko and Telegram t.me/klukyanov (verified: linked from klukyanov.ru). No X, Bluesky, Threads, Instagram, Mastodon or TikTok found.

## Sources
- https://dev.to/klukyanov/aso-on-my-own-apps-what-actually-moved-app-store-impressions-in-a-month-4jpi (primary: first-person write-up on DEV, originally published at klukyanov.ru)

---
*Want agents like these working your distribution? [See the Agent Stack Teardown](/agent-stack-teardown). Get new teardowns weekly: [subscribe](/subscribe) (double opt-in).*