수익 장부, 3주 만의 업데이트 — 토스·Play 광고 수익과 1원 프로모션까지 명령 하나로
장부에 잡히는 앱이 46개가 되고 Play 광고가 다시 켜지고 1원 프로모션까지 시작하면서, 매일 돌리는 수집 명령이 5단계가 됐습니다. 토스 광고 수익 수집이 조용히 실패하던 원인, AdMob 수익 수집, 프로모션 집행 수집, 앱별로 펼쳐 보는 대시보드, 토스·Play 이름 통일까지 정리했고, 앱인토스 콘솔에 바라는 메뉴 세 가지도 적었습니다
Info
Three weeks after building a revenue ledger for our apps, it now covers 46 apps on two platforms. One command collects Toss ad revenue, Toss 1 KRW promotion payouts, AdMob revenue for the Google Play apps and Play reviews, then rebuilds a single-file dashboard. This post covers what broke, what was added, how to read the numbers, and three menus we would like to see in the Apps in Toss console.
3주 사이에 바뀐 것
9월 15일에 앱 27개의 수익을 한 화면에 모으는 장부를 만들었다고 썼습니다. 그 뒤로 세 가지가 바뀌었습니다.
- 앱이 늘었습니다. 대시보드에 잡히는 앱이 46개가 됐습니다.
- 9월 24일에 광고 계정 정지가 풀려 Google Play 앱의 광고 수익도 다시 들어오기 시작했습니다.
- 10월 1일부터 토스 혜택 탭에서 1원 프로모션을 시작했습니다(시작 이야기). 이제 버는 돈뿐 아니라 쓰는 돈도 봐야 합니다.
그래서 아침마다 돌리는 update.cmd가 다섯 단계가 됐습니다.
| 단계 | 가져오는 것 | 출처 |
|---|---|---|
| 1/5 | 토스 광고 수익 | 앱인토스 콘솔 API |
| 2/5 | 토스 프로모션 집행 | 앱인토스 콘솔 API |
| 3/5 | Play 광고 수익 | AdMob API |
| 4/5 | Play 후기 | Google Play 개발자 API |
| 5/5 | 리포트와 대시보드 | 위 장부들 |
1. 토스 광고 수익 — 조용히 실패하던 수집을 고쳤습니다
한동안 수집이 실패: None이라는 말만 남기고 끝나는 날이 있었습니다. 로그인이 풀린 줄 알았는데 아니었습니다.
토스 수익은 Claude를 명령줄로 불러 콘솔 API를 대신 호출하게 하는 방식으로 받습니다. 이때 “몇 번까지 주고받을지” 한도를 3번으로 걸어 두었는데, 정상 호출도 정확히 3번을 다 썼습니다. 그런데 토스 API는 한 번에 55~60초가 걸려 가끔 시간 초과가 납니다. 그러면 한 번 더 부르느라 한도를 넘기고, 결과가 비어 None이 찍혔던 겁니다.
고친 것은 셋입니다.
- 한도를 6번으로 늘렸습니다.
- 모델이 응답을 받아 적게 하지 않고, 도구가 돌려준 원본을 바로 읽습니다. 50KB짜리 JSON을 받아 적느라 3~4분 걸리던 것이 약 1분이 됐고, 옮겨 적다 틀릴 위험도 사라졌습니다. 9월 13~25일치 376행을 예전 장부와 대조해 차이가 0건인 것을 확인했습니다.
- 앱이 33개가 되자 응답이 50KB를 넘어 파일로 따로 빠지는 일이 생겼습니다. 그 파일 경로를 읽어 직접 푸는 처리를 넣었습니다.
2. Play 광고 수익 — AdMob도 장부에 넣었습니다
Play 앱의 광고 수익은 AdMob에서 옵니다. AdMob API는 Play 후기와 달리 서비스 계정을 지원하지 않아서, 처음 한 번은 브라우저에서 직접 동의해야 합니다.
- 동의 화면을 ‘프로덕션’으로 게시해야 합니다. ‘테스트’로 두면 7일마다 인증이 만료돼 매주 다시 동의해야 합니다.
- 금액은 계정 통화와 상관없이 원화로 받습니다. 토스와 같은 단위로 더해야 하니까요.
- 앱 이름은 AdMob에 연결된 Play 패키지를 보고 토스 쪽과 같은 이름으로 붙입니다.
그리고 0원인 날과 수집을 안 한 날을 구분하게 했습니다. 토스도 AdMob도 노출이 없던 날은 행을 아예 주지 않아서, 장부만 보면 둘이 똑같이 빈칸입니다. 이제 언제부터 언제까지 조회했는지를 따로 기록하고, 그 기간 안의 빈칸은 0원으로 칩니다. 광고 계정이 정지됐던 8월 26일~9월 24일이 빈칸이 아니라 0원으로 제대로 보입니다.
3. 합계·토스·Play — 플랫폼을 나눠 보거나 더해 봅니다
맨 위에 합계 · 토스 · Play 스위치를 달았습니다. 고르면 지표, 차트, 표가 전부 그 플랫폼 기준으로 다시 계산됩니다. 합계 화면에서는 표마다 토스 열과 Play 열이 붙고, ‘이번 달’ 카드 아래에 두 몫이 적힙니다.
합계 화면. 이번 달 카드에 토스와 Play 몫이 따로 적히고, 프로모션 집행도 한 칸 차지합니다. 숫자는 가렸습니다
토스와 AdMob 모두 어제 치까지만 담습니다. 한쪽만 오늘 치가 있으면 합계의 마지막 날이 조각만 남아, 수익이 갑자기 떨어진 것처럼 보이기 때문입니다.
4. 앱별로 따로 보기 — 누르면 그 자리에서 펼쳐집니다
앱별 표에서 앱을 누르면 바로 아래로 그 앱의 일별 수익이 펼쳐집니다. 페이지를 옮기지 않고, 한 번에 하나만 열립니다.
벽돌깨기를 펼친 화면. 아래는 토스, 위는 Play로 쌓고, 점선은 프로모션 첫 지급일입니다. 숫자는 가렸습니다
- 기간(14일·30일·전체)을 바꾸면 요약, 차트, 표가 같이 바뀝니다.
- 앱이 출시되기 전 날은 0원이 아니라 ‘없음’으로 뺍니다. 9월 중순에 나온 앱의 30일 평균이 출시 전 0원 때문에 낮아 보이던 문제를 없앴습니다.
- 프로모션을 시작한 앱에는 첫 지급일에 점선이 그어집니다. 그 전후로 광고 수익이 어떻게 변했는지 눈으로 바로 봅니다.
5. 프로모션 집행 — 버는 돈 옆에 쓰는 돈을
1원 프로모션을 26개 앱에 걸고 나니, 어느 앱에서 몇 명이 받아 갔는지 매일 보고 싶어졌습니다. 그래서 수집 2단계를 새로 만들었습니다.
- 프로모션 목록과 상태, 예산, 사용액, 비즈월렛 잔액을 받습니다.
- 지급 이력은 장부 합계와 콘솔 사용액이 다를 때만 받습니다. 새 지급이 없으면 약 12초 만에 끝납니다.
- 프로모션 목록에는 어느 앱의 것인지가 없어서, 카드를 눌렀을 때 이동하는 주소(
intoss://앱이름/)로 앱을 알아냅니다.
대시보드에는 프로모션 탭이 생겼습니다. 앱마다 첫 지급일 직전 7일과 이후의 토스 광고 수익 일평균을 나란히 놓고, 집행 1원당 광고 수익을 계산합니다. 1원을 써서 1원보다 많이 벌면 계속하고, 아니면 멈춥니다.
앱마다 예산과 집행, 첫 지급 전후의 광고 수익을 한 줄에 놓습니다. 숫자는 가렸습니다
6. 토스와 Play 이름을 하나로
대시보드에 ‘이름로또’와 ‘내 이름 로또 · 이름 오행으로 뽑기’가 따로 떠 있었습니다. 같은 앱인데 토스 쪽은 제가 붙인 이름표로, Play 쪽은 AdMob에 등록된 스토어 제목 그대로 들어온 겁니다. 그래서 로또 앱 네 개가 토스에서 한 푼도 못 버는 것처럼 보였습니다.
이제는 새 앱이 생기면 앱 등록부(토스 앱 이름과 Play 패키지가 한 줄에 있는 파일)를 보고 양쪽에 같은 이름을 자동으로 붙입니다. 어디에도 없는 앱이 들어오면 경고를 띄웁니다. 이름이 갈라졌던 앱 9개를 하나로 합쳤고, 합계 금액은 한 푼도 바뀌지 않았습니다.
그 밖에 Play 후기 수집이 구글 쪽 일시 장애(503)로 멈추던 것은 2·4·8초 간격으로 다시 시도하게 했습니다.
숫자를 읽으며 배운 것
장부를 매일 보다 보니, 숫자를 잘못 읽는 방법도 여럿 배웠습니다.
- 어제 수익은 그날 밤에 절반만 잡힙니다. 토스 수익은 노출 수까지 하루 이틀에 걸쳐 보정됩니다. 하루 지나 다시 받아 보니 81% 늘어난 날도 있었습니다. 판단은 이틀 뒤 숫자로 합니다. 그래서 장부는 매번 최근 14일을 통째로 다시 받아 덮어씁니다.
- 노출 수는 어느 API로 보느냐에 따라 다릅니다. 성과 리포트는 수익이 0원인 노출을 빼고 셉니다. 그걸 그대로 믿고 한 앱의 광고 자리가 죽었다고 오해한 적이 있습니다. 노출은 콘솔 인앱광고 화면과 같은 값을 쓰고, 수익과 eCPM만 성과 리포트로 비교합니다.
- ‘사용자당’ 수익의 분모는 사람이 아닙니다. 광고 리포트의 사용자 수는 같은 기간 일간 사용자의 3.5~7배였습니다. 한 사람이 하루에 버는 돈은 대시보드의 일간 사용자로 나눠야 맞습니다.
앱인토스 콘솔에 바라는 것
장부를 만들면서 콘솔 메뉴를 자주 오가다 보니, 바뀌면 좋겠다 싶은 곳이 셋 보였습니다.
① 정산 내역은 앱 바깥으로 지금 정산 내역은 개별 앱 메뉴 안의 ‘인앱광고 > 정산 내역’에 있습니다. 그런데 내용은 그 앱의 정산이 아니라 워크스페이스 전체 앱의 정산 내역입니다. 어느 앱 메뉴에서 열어도 같은 전체 내역이 나옵니다. 내용이 전체에 대한 것이니, 메뉴도 앱 아래가 아니라 워크스페이스 단위로 한 단계 위에 있는 게 맞아 보입니다.
② 광고 성과 모아보기 여러 앱의 광고 수익, 노출, eCPM을 앱 × 날짜 표 하나로 보는 화면입니다. 지난 글에서도 부탁드렸는데, 앱이 46개가 되니 더 절실합니다. 이 장부가 결국 그 화면을 직접 만든 것입니다.
③ 프로모션 모아보기 프로모션을 26개 앱에 걸고 나면, 어느 앱이 예산을 얼마나 썼고 몇 명이 받아 갔는지 한눈에 보고 싶어집니다. 앱별 상태, 예산, 사용액, 지급 수, 카드 클릭과 일별 집행 합계를 한 화면에 모아 주면 좋겠습니다. 지금은 이걸 보려고 장부에 프로모션 수집 단계를 따로 만들었습니다.
앱인토스 관계자분이 이 글을 보신다면, 정산 내역의 메뉴 위치와 광고 성과 모아보기 · 프로모션 모아보기 메뉴를 한 번 검토해 주시면 좋겠습니다. 앱을 여러 개 운영하는 파트너에게는 앱별 화면보다 모아보기 화면이 매일 여는 첫 화면이 됩니다.
아직 남은 것
여전히 하루 한 번 명령을 직접 실행합니다. 토스 후기는 콘솔에 로그인한 브라우저에서만 받을 수 있어서 따로 챙깁니다. 그래도 아침마다 콘솔 화면 수십 개를 열던 일이 명령 하나와 대시보드 한 장으로 줄었습니다.
숫자 자체는 7일째 되는 날 프로모션 점검과 함께 정리하겠습니다. 소식은 이 블로그와 인스타그램(@fadongkwon.soft) (새 창에서 열림)에서 전해드립니다.