RORK LABEN
SDK58 — Expo SDK 58 のベータが始まりました。React Native 0.88 の RC を同梱し、ベータ期間は3〜4週間と公式に書かれています11/01 — Google Play の対象 API レベル、延長を申請した場合の配信期限は11月1日です。残り44日ですEASENV — ローカルビルドに渡したはずの秘密が、中身ではなく変数名の文字列のまま届く、という報告が長く開いたままですNEW — 推奨された移行先が、すでに停止していました。廃止表を74行突き合わせた記録ですUISCENE — iOS 27 では新しい画面ライフサイクルが必須です。SDK 57 では自分で有効にする設定で、既定になるのは 58 からですCREDIT — 「AI のエラーには消費しない」がどこまでを指すのかは、同じ修正を何度か頼んだ日の記録を取ると見えてきますSDK58 — Expo SDK 58 のベータが始まりました。React Native 0.88 の RC を同梱し、ベータ期間は3〜4週間と公式に書かれています11/01 — Google Play の対象 API レベル、延長を申請した場合の配信期限は11月1日です。残り44日ですEASENV — ローカルビルドに渡したはずの秘密が、中身ではなく変数名の文字列のまま届く、という報告が長く開いたままですNEW — 推奨された移行先が、すでに停止していました。廃止表を74行突き合わせた記録ですUISCENE — iOS 27 では新しい画面ライフサイクルが必須です。SDK 57 では自分で有効にする設定で、既定になるのは 58 からですCREDIT — 「AI のエラーには消費しない」がどこまでを指すのかは、同じ修正を何度か頼んだ日の記録を取ると見えてきます
記事一覧/ビジネス
ビジネス/2026-06-13上級

収益の「本当の数字」を掴む — AdMob・App Store・Google Play・Stripe を突き合わせる集計設計

ダッシュボードの売上と実際の入金額は一致しません。通貨・タイムゾーン・推定値と確定値のズレを吸収し、4つの収益ソースを突き合わせる集計パイプラインを、6本並行運用の実装と運用判断とともに整理しました。

収益管理AdMob71App Store Connect13Stripe17データ設計

プレミアム記事

ある月、AdMob のダッシュボードは前月比 12% 増を示していたのに、実際の入金は横ばいでした。最初はバグを疑いましたが、原因は単純で、ダッシュボードの「推定収益」と確定した入金額は別物だったのです。為替の確定タイミング、無効トラフィックの事後調整、支払いの最低額への到達——いくつもの要因で、画面の数字と銀行口座の数字はずれます。

個人開発でアプリを6本運用していると、収益は AdMob・App Store・Google Play・Stripe の4つから入ってきます。それぞれが別の通貨、別のタイムゾーン、別の「推定と確定」の概念を持っています。これらを素朴に足し算すると、毎月どこかで数字が合わなくなります。ここでは、4ソースを突き合わせて「本当の数字」を掴むために組んだ集計パイプラインを、正規化のスキーマと日次集計の実装、そして月次の帳尻合わせの手順とともに共有します。

なぜ数字がずれるのか — ソース別の性格

突き合わせを設計する前に、4つのソースがそれぞれどう嘘をつくかを理解する必要がありました。

AdMob の画面に出るのは推定収益です。無効トラフィックの控除や為替の確定により、月末に確定する金額は数%下振れします。私の実績では、推定と確定の差はおおむね 2〜6% の範囲に収まっていました。App Store Connect と Google Play は、画面の「販売」と、財務レポートの確定額、さらに実際の入金額(手数料控除後)の3層がそれぞれ違います。Stripe は比較的素直ですが、返金やチャージバックが後日マイナスで入るため、発生日と確定日を分けて持たないと月をまたいだときに合わなくなります。

つまり、どのソースも「今いくら稼いだか」を一意には教えてくれません。設計の出発点は、推定値と確定値を別の列として持つことだと最初に決めました。

正規化スキーマ — すべてを同じ形に直す

4ソースのデータ形式はバラバラなので、いったん共通の形に正規化します。私が使っているスキーマはこうです。

CREATE TABLE revenue_events (
  app_id        TEXT NOT NULL,        -- 6本のどれか
  source        TEXT NOT NULL,        -- admob / appstore / googleplay / stripe
  kind          TEXT NOT NULL,        -- ad / iap / subscription / refund
  occurred_on   DATE NOT NULL,        -- 発生日(UTC基準に統一)
  amount_minor  INTEGER NOT NULL,     -- 最小通貨単位(円なら1=1円, ドルなら1=1セント)
  currency      TEXT NOT NULL,        -- JPY / USD など
  status        TEXT NOT NULL,        -- estimated / finalized
  fx_to_jpy     REAL,                 -- 確定時の対円レート(estimated は NULL 可)
  PRIMARY KEY (app_id, source, kind, occurred_on, status)
);

肝は3つです。金額を浮動小数ではなく最小通貨単位の整数(amount_minor)で持つことで、丸め誤差が積み上がるのを防ぎます。status で推定と確定を明確に分け、同じ日・同じソースの行が二重に立つのを主キーで防ぎます。そして為替は「集計時の今のレート」ではなく「確定時のレート」を fx_to_jpy に保存し、後から再集計しても過去の数字が動かないようにします。

通貨換算をうっかり集計時のレートでやると、月初に見た数字と月末に見た数字が変わってしまい、信頼できないダッシュボードになります。これは一度やって痛い目を見ました。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
推定値と確定入金額がなぜズレるのかを4ソース別に切り分け、突き合わせる集計の考え方
通貨・タイムゾーン・返金を吸収する正規化スキーマと、日次で集計する実装の骨格
ダッシュボードの数字を鵜呑みにせず、月次で入金と帳尻を合わせる運用手順
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

ビジネス2026-03-25
Rork アプリの収益化を自動で回す5つのエンジン — 設計と実装
サブスクの自動リテンション、広告収益の自動最適化、動的価格設定、自動カスタマーサポート、レビュー駆動の改善ループという5つのエンジンで、Rorkアプリの収益運用を手離れさせる設計です。全体アーキテクチャからフェーズ別のスケーリングまで実装コード付きで組み立てます。
ビジネス2026-09-08
共有ボタンだけなら「ソーシャルメディア機能」には当たりません。フィードを持つと 13+ が下限になります
2026年9月から App Store の提出に必須となった「ソーシャルメディア機能」の質問について、Apple が引いた線の位置と、13歳未満で無効化する選択肢に付いてくる年齢範囲の取得を、expo-age-range の実装まで含めて書き残します。
ビジネス2026-09-06
eCPM が下がった月の広告収益を、国の構成と単価に切り分けます
ブレンド eCPM は単価ではなく加重平均です。下がった原因が配信国の構成なのか単価なのかを、合計差分と誤差なく一致する形で切り分ける手順とスクリプトをまとめました。低単価の国を止める前に確かめることも書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます