個人アプリをGoogle広告に出したら思いのほか人が来た話

## はじめに

半年ほど前、[json to csv](https://jsontocsvconv.com)と言う、JSONをCSVに変換するシンプルなサブスクのWebサービスを作ったのですが[^1]、これがどうにもユーザーが集まらない。サービス自体は、どの競合のサービスよりも使いやすいと言う自負はあったので、Googleさん、分かってますよね。私のサービスが一番なんです。非常に優秀なアルゴリズムを持ったあなたなら、きっと、SEOで１位の座においてくれると信じてますよ。と心の中で唱えていたのですが、現実ってのは意外と厳しい。世界の物理法則がよくできていることに感心しつつ、いつしか私は、Googleが、もちろん良いサービスを作ればSEOを上げますよ。でも、タダってわけには行きませんなぁ。むふ。と言う顔をしてるんじゃないかと考えるようになりました。そのため、わかりました正々堂々、資本主義に乗っ取り、広告を出しましょう。と言うことで、とりあえず5000円を奉納する決意をしました。

## 方法

まず私自身、Google広告自体は噂で聞いていたくらいで、利用経験ゼロ、全くの無知だったので、とりあえずGoogle広告のホームページに表示される手順に従って、ぽちぽちしてみました。そうすると、さすがGoogle先生。どう言うキーワードで検索されたらどんな広告を出すのかまでを、自動でHTMLなどを解析して、懇切丁寧に提案してくれました。これはもう素人の私が色々と設定しなくても、デフォルトの設定が一番良いはずです。自分なりの隠し味を入れて、何度も料理に失敗した私はそう思いました。その上で、コンバージョンと言う、クリックしたユーザーがその後何をして欲しいのかを指定する必要もありました。これは測定するためにもJavaScriptを書かないとダメで、少し複雑だったのですが、悪戦苦闘の末、JSONをCSVに変換して、それをクリップボードにコピー、もしくはファイルとしてダウンロード、した時をコンバージョンとして指定することができました。また、実際の支払い自体は、1日の支払い料金だけを決めておき、あとは月に一度、クレカで自動引き落としされる、というシステムになっていました。なので、せっかく5000円を支払うので、長く楽しめるように、１ヶ月で5000円ということで、5000円/30日≒167円を1日の支払い料金にすることにしました。スタートは10月31日です。ちなみにGoogle広告ではクリックしたかどうかが課金に繋がるポイントで、１回のクリックの単価は常に変動しています。

## 結果

日付を横軸に、Google Analyticsのユーザー数を縦軸に取った図が以下になります。

![ga.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164793/fbc1a9a0-ee50-828d-f81c-75a3784e2593.png)

増えてる！！！
広告スタート時点から一気にユーザー数が何十倍も増えて、毎日100人弱の人が使ってくれるようになりました。Google広告最高です。気持ち良いです。気持ち良すぎて、5000円で歯止めが止まらず、なんと現在12月の半ば、まだやっちゃっています。もう5000円とかどうでもよくなっています。一種の依存症かもしれません。とりあえず、１年間様子見しようと思っています。12ヶ月なので、合計６万円です。ちなみにこのサービスはリリースから今まで、1円も利益を生んでいません。というかテストで自分で課金してるので、Stripeに毎月手数料が取られています。完全に負債です。やけくそです。もうこれ以上深く考えたくありません。
その上で、実際のコンバージョン数なども含めた結果を以下に示します。これはGoogle広告のダッシュボードにある画像で、10月29日からの記録になります。縦軸が色々なので若干ややこしいんですが、平均で考えると、1日64クリック、22.5コンバージョンになっています。割とみんなちゃんと使ってくれていて嬉しいです。

![期間(2021.10.29-2021.12.19) (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164793/67eaff0d-3eaa-d76c-29f2-3952754b0bb5.png)

## 考察

広告を出している間に、いろんな実験をしたので、それについても紹介させてください。

- **キーワードを部分一致から完全一致に変えた**

最初Google先生がお薦めしてくれたキーワードは、全て部分一致という設定になっていました。これはjson to csvというキーワードが設定されてあったら、jsonかtoかcsvのどれか１つが検索キーワードに含まれていたら、広告を出す、というものです。広くアプローチをしたい時はそれで良いと思うのですが、私の場合、かなりニッチなサービスなので、JSONファイルの開き方、みたいな、関係無い検索に対しても広告が出てしまっていました。これだとせっかくの広告が無駄に消費されてしまいます。なので、11月の2週目からは、1週目のデータをもとに、コンバージョン率が高い厳選されたキーワードのみを選んで、かつそれを、部分一致ではなく、完全一致、の設定で指定することにしました。その結果、11月の2週目以降、一気にユーザーが増えました。

- **先進国の谷**

ユーザーがたくさん来てウハウハしていた私は、このユーザーが、一体どこの国から来ているのかを調べてみました。そうするとなんと、１位インド！２位ブラジル！３位インドネシア！４位アルゼンチン！５位ベトナム！となっていました。ちょっとおもてたんと違う。あれ。アメリカとかいないの。少なくとも先進国にももっとアプローチしたい。と思い、広告を出す国を指定できる設定がGoogle広告にあったので、アメリカを含めた先進国だけにしてみました。その結果が、11/18です。なんと、大きな谷ができ、Google広告においてのクリック数は7回、コンバージョン数は１回だけになりました。青天の霹靂、一瞬何が起きたのかわかりませんでした。これはおそらく私の推測ですが、先進国１人あたりのクリックの価値が発展途上国に比べて非常に高いのだと思います。なので数百円で広告を打つには、７人をクリックさせるのが精一杯だったと。まぁなので、世界の不平等さを若干感じつつ、すぐに設定を戻し、無理に先進国へアプローチするのは辞めました。

- **1日の上限を上げましょう！と言うGoogle先生の甘い誘い**

Google広告を見ていると、ものすごい頻度で、以下の画像のような提案をしてきます。
![Screen Shot 2021-12-20 at 19.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164793/1bd590a1-21df-cb31-0aa8-7115e33df069.png)
あたかも最新テクノロジーで解析した結果、あなたの設定はまだまだ最適化されていません。予算を引き上げれば、完璧な状態になりますよ。と言う具合に。最初、無垢な私はそれを信じました。具体的には１週間くらいが経過したころ、Google先生が167円から223円にした方が、良いよと言ってきたので、言われるがまま223円に変更しました。なので１ヶ月で6690円です。まぁ当初予定していた5000円と比べると、プラス1500円くらいしますが、それで最適化されるなら。。。まぁ。良いじゃないですか。。。その結果、同時期に部分一致を完全一致に変えたこともあって、ちゃんと1日のクリック数やコンバージョン数は上がりました。それで納得していたのですが、数日すると、なんとまたGoogleから、あなたの設定は最適化されていません、予算を上げてくださいと来ました。しかもそのお薦めする額、なんと１日1000円くらい。ちょっと待って、それしたら月に３万円必要じゃん。さすがに生活苦しくなりますよ。先生。と言う気持ちでした。と言うことで、やっぱり12月からは、元の167円にすることにしました。そうするとあら不思議、なぜかクリック数やコンバージョン数が、全く落ちないのです。もちろん曜日によって波はありますが、決して下降傾向になるわけではなく、223円の時と同じような感じです。これはちょっと衝撃の発見でした。と考えると、もはや本当は1日80円とかでも、あんまり変わらないのかもしれません。もしくは223円にしていたらもっと上昇していたのかも。今後更なる実験をしたいと思います。まぁGoogle広告を初めてやる方は、Google先生の下心を垣間見ることになるかもしれませんが、ぜひ自分なりの最適な予算を見つけてみてください。

## おわりに

初めて広告を出してみて思った率直な感想は、お金出せば簡単にユーザー集められるやん。と言うことです。今までは謎の抵抗があったりしましたが、実際に自分でやってみると案外一人でできるし、最悪お金さえあればなんとかなる、というマインドが持てたのは良い経験になった気がします。個人開発をしている人で、自分のサービスが良いと自負しているけど、ユーザーが数人なんです、という方は、ぜひ投資的、趣味的、実験的な意味で、積極的にGoogle広告を使ってみてください。

[^1]: [サブスク作った話](https://qiita.com/_s_/items/a25118198e1d7f760e3d)