Трибуна
Denis Minnetdinov
3067

Apphud — больше, чем аналитика подписок для iOS-приложений

Мы делаем Apphud — сервис, который избавит iOS-разработчиков от трудностей при работе с автоматически возобновляемыми подписками и поможет уменьшить отток подписчиков.

В закладки
Аудио

Кто мы

Привет! Меня зовут Денис. Первое приложение на iPhone разработал в 2011 году, в 2012-м познакомился со своими друзьями и партнёрами — Виктором и Александром, а в 2013 году к нам присоединился Ренат.

За семь лет вместе мы разработали и вывели на рынок больше двадцати собственных мобильных и веб-проектов, некоторые продали и пытались инвестировать (чаще — неудачно), основали аутсорс-студию и через два года закрыли, потому что «не наше», пытались играть в офлайн-бизнес и занимались блокчейн-проектами.

А с мая 2019 года разрабатываем Apphud.

Это мы: Саша, Денис, Витя, Ренат

Предыстория и идея

В 2019 году мы принялись за разработку нескольких новых iOS-приложений. Это были уже проверенные многими темы: живые обои, голосовой переводчик, трекер выпитой воды, утилита для удаления дубликатов фотографий из галереи. Во всех приложениях предлагалась премиум-подписка для доступа к расширенным функциям.

До этого мы никогда особо не возились с настройкой мобильной аналитики, но в этот раз решили подойти к этому вопросу основательно. Мы хотели протестировать платные каналы продвижения, в том числе Facebook. Нужно было понять, сколько денег в среднем приносит пользователь из каждого канала.

Начали искать подходящую мобильную аналитику и не нашли на 100% устраивающее нас решение. В Amplitude, Mixpanel, Firebase, AppMetrica нет аналитики iOS-подписок. Во все можно легко отправлять данные о выручке из самого приложения, но что делать, если пользователь уже удалил приложение, а подписку не отменил?

Как узнать, в какой именно момент произошли возобновление или отмена подписки? Amplitude и Mixpanel поддерживают приём событий от сервера, но разработчику всё равно придётся реализовывать логику проверки чека App Store на своём сервере.

Продолжив поиск, наткнулись на сервис RevenueCat. Это было именно то, что нужно. RevenueCat — это платформа для интеграции и управления подписками в мобильных приложениях. Работают с iOS и Android и умеют отправлять события о подписках в сторонние аналитики: Amplitude и Mixpanel. Ещё у них есть собственный дашборд с показом MRR, Churn rate и других метрик.

Но интеграции доступны лишь в самом дорогом тарифе за $499 в месяц. Поэтому мы решили собрать свой велосипед и заодно упаковать его в SaaS-решение. Ребята из RevenueCat весной 2018 года прошли акселерацию в Y Combinator. Солгу, если скажу, что это никак не повлияло на решение разрабатывать Apphud. В мае 2019 работа над новым проектом закипела.

Семь проблем при работе с подписками в iOS-приложении

Мы решаем проблемы, с которыми сталкиваются разработчики и продакт-менеджеры, когда имеют дело с подписками.

1. Сколько я зарабатываю в среднем с подписчика?

✴️ В разработке.

ARPU и LTV — важнейшие показатели для расчёта сходимости экономики приложения. Ключевая идея проста: привлечение пользователя должно обходиться дешевле (вообще говоря, в несколько раз), чем средняя прибыль с него. В дашборде Apphud можно будет просмотреть ключевые показатели. Пока в разработке, но базовая статистика уже есть: число активных триалов, подписок, выручка.

2. Отправка событий о подписках в продуктовые мобильные аналитики

Есть интеграция с Amplitude и Mixpanel.

Как ведут себя в приложении «киты» — наиболее платящие пользователи? Как их поведение отличается от тех, кто не платит? Ответы можно получить с помощью мобильной аналитики. Apphud умеет отправлять события о подписках в Amplitude и Mixpanel: оформление триала, конвертация триала в обычную подписку, возобновление подписки, её отмена или возврат денег и прочие.

3. Как связать подписки и атрибуцию установки?

Есть интеграция с AppsFlyer и Branch.

✴️ Скоро добавим Adjust и Apple Search Ads.

Какой канал привлечения пользователей приносит больше денег? Какова стоимость привлечения клиента по каждой кампании? Каково соотношение CAC и LTV? Мы интегрировали Apphud с системами атрибуции, чтобы помочь продакт-менеджеру ответить на этот вопрос.

4. Технические трудности при реализации подписок

Удобный SDK с открытым исходным кодом.

iOS-разработчик сталкивается с трудностями при интеграции подписок:

  • Определение статуса подписки пользователя в любой момент времени. Пользователь может находиться в триале, вводном или промопредложении, быть текущим подписчиком или не быть подписчиком вовсе. В зависимости от статуса нужно предоставлять пользователю доступ к платным функциям и нужным образом менять интерфейс.
  • Конвертация валют. Пользователь покупает подписку в локальной валюте. Перед отправкой в систему аналитики программист должен конвертировать эту валюту, например, в USD.
  • Реализация промопредложений (Subscription Offers) требует наличия собственного сервера для генерации подписи.

Apphud решает эти технические проблемы. Разработчику остаётся только интегрировать SDK и написать несколько строк кода.

5. Как узнать, почему пользователи отменяют подписку?

Apphud отправляет опрос пользователю при отмене подписки.

Мы хотим помочь разработчику понять, почему пользователь отменяет триал или подписку. Его не устраивает цена? Он нашёл приложение получше? Его устраивает функциональность бесплатной версии?

Apphud автоматически отправляет push-уведомление при отмене подписки. Вы можете сами задать вопрос и варианты ответов, которые пользователь увидит при следующем открытии приложения. А ответы пользователей помогут улучшить приложение.

Показываем опрос при отмене подписки. Если пользователь выбирает «Слишком дорого», даём скидку

6. Вернуть отвалившихся подписчиков

Если пользователь считает, что подписка слишком дорогая, Apphud автоматически предложит скидку или дополнительный триал.

Если в опросе пользователь отвечает, что его не устраивает цена подписки, Apphud автоматически предложит скидку или дополнительный триал. Это поможет вернуть часть отвалившихся подписчиков.

Экраны покупки не нужно программировать, всё можно сделать в визуальном редакторе:

Создавайте экраны покупок промопредложений во встроенном редакторе

7. Уменьшить Involuntary churn

Apphud отправит пользователю push-уведомление с просьбой обновить платёжные данные при проблеме с возобновлением подписки.

Если подписка не может быть продлена, например, из-за недостатка средств на кредитке пользователя, Apphud сразу же пришлёт push-уведомление. При следующем открытии приложения пользователь увидит такой экран:

​Apphud попросит пользователя обновить кредитную карту

Нажав на кнопку, он сразу попадёт на экран изменения платёжных данных его аккаунта в App Store.

Бонус: узнать в реальном времени, когда пользователь оформил, отменил, продлил подписку

Apphud присылает уведомления о событиях, связанных с подписками, в Slack и Telegram.

Приятно и круто получать уведомления о продлении подписки.

Прогресс

Мы начали продвижение Apphud в июне, когда до запуска оставалось два месяца. Сделали посадочную страницу, рассказывающую об основных фичах, завели блог на Medium, начали писать о разработке на Swift и особенностях работы с подписками на vc.ru и «Хабре», вскользь упоминая наше решение. В итоге получили больше 60 заявок на участие в бета-тестировании сервиса. В середине лета решили съехать с Medium и завели собственный блог.

Проект был запущен 7 августа. Сейчас у нас зарегистрировано 60 разработчиков и 45 приложений.

С августа Apphud отследил больше 200 тысяч пользователей, которые совершили покупок на $160 тысяч.

Сколько стоит

Apphud работает по подписочной модели и бесплатен, если отслеженная Apphud выручка до вычета комиссии Apple (Monthly Tracked Revenue, MTR) меньше $10 тысяч в месяц. В бесплатной версии доступны все функции, и она не ограничена по времени.

Если ваше приложение зарабатывает больше $10 тысяч в месяц, то можете выбрать один из двух платных тарифов: Launch (включает $25 тысяч MTR, стоит от $199 в месяц) и Grow (включает $100 тысяч MTR, стоит от $499 в месяц). Пока что тарифы отличаются только включенным в него MTR. MTR свыше включенного план оплачивается отдельно. Подробнее о ценах — на нашем сайте.

Платящих пользователей пока нет: сейчас занимаемся интеграцией Stripe. Компанию для проекта зарегистрировали через знакомого юриста в Delaware.

Y Combinator

В августе мы решили попытать счастье и подать заявку в Y Combinator. Анкету отправили 3 сентября, 6 октября нас пригласили на созвон. Через десять дней пришло приглашение на интервью в Mountain View, которое пройдёт в начале декабря. Если интересно, по результатам напишу статью. Напишите в комментариях, интересно ли.

Что дальше

Мы продолжаем совершенствовать платформу. В ноябре-декабре появятся:

  • Интеграции с Apple Search Ads и Adjust.
  • Новые метрики в дашборде с возможностью их просмотра по разным когортам пользователей.
  • Возможность создавать экраны любых подписок (сейчас поддерживаются только промопредложения) без программирования с помощью визуального редактора.
  • Поддержка других типов встроенных покупок, а не только подписок.

Если у вас есть iOS-приложение с подписками, то добро пожаловать на борт! Вот ссылка на сервис: Apphud.com. Будем рады идеям, пожеланиям и замечаниям.

Расскажите в комментариях, как вы работаете с подписками в ваших приложениях, с какими проблемами сталкиваетесь и как их сейчас решаете.

Передаем микрофон читателю.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Denis Minnetdinov", "author_type": "self", "tags": [], "comments": 51, "likes": 37, "favorites": 84, "is_advertisement": false, "subsite_label": "tribuna", "id": 88580, "is_wide": false, "is_ugc": true, "date": "Tue, 22 Oct 2019 08:12:22 +0300", "is_special": false }
0
{ "id": 88580, "author_id": 64686, "diff_limit": 1000, "urls": {"diff":"\/comments\/88580\/get","add":"\/comments\/88580\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/88580"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116, "last_count_and_date": null }
51 комментарий
Популярные
По порядку
Написать комментарий...
7

Ничего не понятно, но интересно😀. Удачи в декабре!

Ответить
5

выглядит супер, попробую)

Ответить
5

Интересно 🧐 

Ответить
5

Круто! Успехов!

Ответить
4

Здорово) успехов вам!

Ответить
2

а почему цена зависит от MRR? ведь нагрузка на сервера зависит от числа платежей, а не от суммы MRR.

Ответить
0

А почему не должна? И при чем тут нагрузка на сервера?

Ответить
0

сначала стоит ответить почему должна, ведь так?

Ответить
0

Не обязательно. Но вопрос звучит странно, как будто цель продукта соблюсти норму прибыли, а не максимизировать ее

Ответить
1

я совершенно с другой причиной вопрос задал, большинство сервисов аналитики оборота делает цену зависимую от MRR, но фишка в том, что нагрузка на сервера возрастает с числом транзакций, а не с величиной MRR. Посчитать аналитику для 10 транзакций на 100 000 MRR сильно проще, чем для 1 000 000 транзакций на 100 000 MRR. 

Ответить
0

Ок, теперь понятно. С точки зрения посчитать, согласен. Но во-первых количество транзакций можно усреднить, во-вторых число транзакций можно спрогнозировать +-, в третьих ребята на старте только, поэтому модель может поменяться несколько раз

Ответить
0

у меня в вопросе не было отрицательной коннотации. Мне это интересно, потому что я делаю сервис который считает Revenue — и я отказался от такого подхода. 

Ответить
0

В связи с чем ?

Ответить
1

потому что считаю что это обман. желание получить за одну и туже услугу денег больше только потому что потребитель услуги богатый. При этом сама услуга не меняется. Это не обвинение, просто мне было странным это видеть. 

Ответить
0

 это обман

 Это не обвинение

Г - Логика :) 

PS Случайно ткнул +1 вам в коммент. Но я его не одобряю :)

Ответить
0

я не сказал, что сервис обманывает, я сказал, что привязка к MRR выглядит как обман. я не обвиняю сервис в чем либо, и что они не правы, мне лично интересно почему они выбрали такую монетизацию, потому что я сам решил от нее отказаться. 

Ответить
0

Не вижу тут ни какого обмана

Ответить
0

так я же сказал, что я вижу, а не вы ;)

Ответить
0

А причем тут нагрузка на сервера? По такой логике все offline приложения должны быть бесплатны.

Ответить
0

нет конечно, но у вас ничего вообще не меняется от MRR, только от числа транзакций. мой же вопрос почему цена зависит от MRR? это тоже самое что повышать цену на самолеты из-за того, что ты на сайт с айфона зашел. 

Ответить
0

Не "у вас" а у автора. Я мимокрокодил.
Цена строится от того сколько люди готовы заплатить, а не от прямых затрат. MRR хороший пример.

Ответить
0

не понял почему зависимость от MRR хороший пример? 

Ответить
2

Потому что она дает возможность приложениям с небольшим доходом пользоваться нашим сервисом абсолютно бесплатно. У вас может быть 9999 транзакций по 1 доллару, и вы попадаете под бесплатный тариф.

Ответить
1

а зачем надо отдавать продукт бесплатно?

Ответить
1

Триала у нас нет, мы даем продукт бесплатно небольшим приложениям, чтобы они росли вместе с нами. "Pay as you grow" – наш девиз.

Ответить
0

а зачем вам это? что вы получаете из-за этого какая стратегия? 

Ответить
1

Не исключено, что в будущем монетизация изменится. Но сейчас хотим протестировать именно эту модель. Мы нацелены на крупных клиентов, которых могут привести как раз небольшие приложения по виралке. Например, инди-разработчик порекомендует сервис своему начальнику, тот своему, и т.д.

Ответить
0

стратегия понятна, но тогда зачем вам мелочь? реально ли они приведут крупняк? как замерять эффект?

Ответить
0

 реально ли они приведут крупняк?

не знаем, посмотрим
 как замерять эффект?

 спрашивать у клиентов, откуда они про нас узнали :)

Ответить
0

Наше дело – предоставлять хороший сервис и чтобы ничего не падало, для всех приложений

Ответить
0

это верно.

Ответить
0

как они узнал не работает, куча исследований и книг на это есть, там много психологических ловушек. я бы не стал опираться на такие данные.

Ответить
0

Ваш бесплатный тариф это тоже триал, просто с отсрочкой не по времени а по росту

Ответить
0

Все таки это не триал, разработчик может никогда не перешагнуть на следующий тариф. А триал всегда конечен.

Ответить
0

Триал же

Ответить
0

MTR тоже связан с числом транзакций. И, думаю, разработчик может прикинуть его быстрее: он обычно знает, сколько зарабатывает его приложение за месяц. Но биллинг по транзакциям – жизнеспособная гипотеза, надо проверять. Спасибо!

Ответить
2

Годнота!! Сами намучились в своё время с подписками

Ответить

Комментарий удален

Комментарий удален

1

Всё славно. А русский язык есть?

Ответить
1

Интерфейс сервиса, документация на английском. Тексты пушей и экраны покупок можно сделать на любом языке. Но пока только на одном: локализацию добавим позднее в этом году.

Ответить
2

Прекрасно! Успехов вам!

Ответить
0

Спасибо!

Ответить
1

Очень нужна интеграция с Facebook Ads. У RevenueCat она есть :)
Чтобы можно было оптимизировать кампании под триалы/подписки

Ответить
1

Скоро будет 👍 Вероятно, в этом году

Ответить
0

я к тому что если у меня 10 платежек на 100 000MRR это не тоже самое, если у меня 100 000 платежей на 10 000 MRR

Ответить
1

Зависит от среднего чека транзакции, да. Вообще, надо считать, что выгоднее (для нас и для разработчиков). Пока мы решили остановиться на биллинге по MTR – удобнее. 

Ответить
1

я решил, что это жульничество и отказался от MRR (MTR), вопрос числа транзакций открыт, но пока я не вижу накладок на объем. 

Ответить
0

Subscription Status URL - можно ли прокидывать обновление статусов и на собственный бэкенд?

Ответить
0

Пока нет, но скоро можно будет: сделаем вебхуки.

Ответить
0

трекер выпитой воды

Расскажите пожалуйста, как пришли к идее такого нужного приложения, пользовались ли им сами, какие премиум-функции доступны по подписке? Не было ли идеи делать гороскопы?

Ответить
0

Смотрели что есть в App Store, и что можно сделать быстро: трекер воды как раз подошел. Сам до момента разработки не пользовался трекерами. Приложение разработали, оно доступно в App Store, но подписки так и не добавили. Работа над этим приложением сейчас приостановлена. Гороскопы делали когда-то, да

Ответить
–4

Зачем Приложение за которое нужно платить по подписке + ещё свои подписки- что за бред ха ха

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }