평점을 지표로 쓰려고 했습니다. 별점은 스토어 전환율에 직접 걸리는 항이고, 앱 43개짜리 플릿이면 앱별 별점 추이가 우선순위 판단에 쓸 만하다고 봤습니다.
App Store Connect API에서 평점을 찾았습니다. 없었습니다.
여기서 먼저 하나 여쭙겠습니다. 당신은 앱 평점을 레버로 보십니까, 결과 지표로 보십니까? 저는 레버라고 생각했고, 그게 이 글의 반전입니다.
공식 API에는 평점이 없다
ASC API는 평균 평점과 평점 수를 어디에도 노출하지 않습니다. 앱 리소스에도, 버전 리소스에도 없습니다. 있는 건 customerReviews뿐인데 이건 다른 것입니다 — 글이 달린 리뷰만 돌려줍니다. 별점만 남기고 지나간 대다수는 애초에 포함되지 않습니다. 이 엔드포인트를 믿었다가 크게 틀린 이야기는 따로 있습니다 → 리뷰가 사라졌다고 두 번 보고했다.
즉 스토어 제품 페이지에 실제로 표시되는 그 숫자를 공식 API로는 못 얻습니다. 유일한 출처는 인증도 필요 없는 공개 lookup 엔드포인트입니다.
curl -s "https://itunes.apple.com/lookup?id=<appId>&country=us"
# averageUserRating / userRatingCount43개 앱 × 3개 스토어프론트
결과가 진짜 반전이었습니다.
kr + us + jp 합계 77건
그 중 KR 77건
US 0건 · JP 0건 — 43개 앱 전부미국은 이 플릿의 최대 설치 시장입니다(110일 누적 390건, 한국 347건보다 많습니다). 그런데 43개 앱 전체에 미국 평점이 하나도 없습니다. 일본도 0입니다(설치 157건).
매출이 나는 앱들이 특히 나쁩니다. 이명 트래커·장 기록·회복 루틴·끝말잇기·픽셀 퍼즐은 평점이 0건입니다. 중위 앱은 1~2건입니다. 이 정도면 제품 페이지에 별점이 사실상 안 보이는 상태입니다.
첫 가설은 틀렸다
"인앱 평점 요청을 안 붙였겠지"라고 생각했습니다. 틀렸습니다. 확인해보니 플릿 거의 전부에 SKStoreReviewController 기반 요청이 이미 들어 있습니다. 두 달 전에 미탑재 22개를 일괄 이식한 기록까지 있었습니다.
그러면 왜 안 뜨느냐 — 게이트 때문입니다. 남용을 막으려고 이렇게 조여뒀습니다.
설치 후 3일 경과 ∧ 코어 작업 1회 완료 ∧ 14일 쿨다운 ∧ 연 3회 이하 ∧ 점수 ≥ 임계값이건 좋은 설계입니다. 문제는 비한국 사용자가 이 게이트에 도달하지 않는다는 것입니다. 같은 플릿의 다른 지표가 이유를 말해줍니다. 삭제율 1215%, 세션 길이 6684초, 일 활성 기기 5~6대. 설치 후 3일까지 남아서 코어 작업을 한 번 끝내는 사람이 한국 밖에는 거의 없습니다.
당신이라면 여기서 무엇을 고치시겠습니까? 게이트를 느슨하게 풀어 요청을 더 자주 띄우겠습니까, 아니면 3일을 남게 만드는 쪽을 고치겠습니까? 전자는 이번 주에 되고 후자는 몇 달 걸립니다. 그런데 전자를 해도 요청을 볼 사람이 없습니다.
즉 평점 0은 프롬프트 문제가 아니라 리텐션 문제입니다. 평점을 "붙이면 되는 것"으로 보고 있었는데, 실제로는 리텐션의 결과 지표였습니다.
도구에서 갈라야 하는 두 가지 0
r = requests.get("https://itunes.apple.com/lookup",
params={"id": app_id, "country": cc}, timeout=20)
if not r.json().get("resultCount"):
return None # 그 스토어프론트에 아예 없는 앱과 평점 0을 구분해야 한다resultCount == 0과 userRatingCount == 0은 다른 상태입니다. 앞은 그 나라에 앱이 없는 것, 뒤는 있는데 평점이 없는 것입니다. 한 칸에 넣으면 다음 사람이 오독합니다.
도구는 스토어프론트를 인자로 받고 결과를 날짜별 JSON으로 남깁니다. 요청 사이에 짧은 sleep을 둡니다 — 인증 없는 엔드포인트라 두드리면 안 됩니다.
평점 보유 앱 37 / 43 · 합계 77건 · 전부 KR
중위 1~2건 · 최다 5건 · 매출 상위 앱 다수가 0건지금 바로 점검할 3가지
- 당신의 최대 설치 시장에서 앱 평점이 몇 건입니까? 공개 lookup으로 30초면 나옵니다.
- 평점 요청 게이트의 조건을 적어 놓고, 그 조건에 실제로 도달하는 사용자 비율을 세어 보세요. 0에 가까우면 게이트가 아니라 리텐션이 문제입니다.
- 데이터 수집 코드에서 "그 나라에 앱이 없음"과 "평점이 0"을 구분하고 있습니까?
솔직한 부분
평점을 레버로 착각했습니다. "프롬프트를 넣자 → 평점이 오른다 → 전환이 오른다"로 생각했는데, 앞의 화살표가 성립하려면 3일을 남아 있어야 합니다. 순서를 거꾸로 짚었습니다.
lookup 엔드포인트의 "현재 버전" 필드도 못 믿습니다. averageUserRatingForCurrentVersion / userRatingCountForCurrentVersion이 37개 앱 전부에서 전체 값과 똑같이 나왔습니다. 이걸 근거로 "릴리스마다 평점이 초기화되고 있다"는 가설을 세웠다가 접었습니다 — 한 앱은 5월 리뷰가 여러 릴리스를 건너 지금도 살아 있어서 모순입니다. 이 필드는 전체 값을 미러링하는 것으로 보고 쓰지 않는 게 안전합니다.
그리고 인증 없는 공개 엔드포인트에 의존하는 구조입니다. 애플이 막으면 대안이 없습니다. 그래서 라이브 조회 대신 날짜별 스냅샷을 파일로 남기게 만들었습니다. 스토어 숫자는 천천히 움직이므로 델타가 신호입니다.
왜 한국만 남는지도 가설입니다. "한국 사용자가 지인·초기 유저라 3일을 남는다"와 "그냥 한국 트래픽의 질이 높다"를 이 데이터로 구분할 수 없습니다.
그 스냅샷의 오늘 값(평점 78건, 전부 KR)과 앱 41개 목록은 113일 결제 원장 글에 있습니다.
지금 당신 앱의 최대 시장 스토어프론트로 lookup을 한 번 때려 보시겠습니까? 별점 수가 0이면, 고칠 것은 팝업이 아닙니다.