Игра стоит в Steam 3299 ₽, ключ на маркетплейсе — 843 ₽. Вывод очевиден: ключ выгоднее вчетверо.
Я тоже так думал, пока не начал считать всерьёз. Оказалось, что при таком сравнении ответ неверен примерно в трети случаев, а иногда неверен катастрофически: есть игры, где «выгодный» ключ дороже Steam на 67%.
По дороге я дважды ошибся в измерениях, и обе ошибки были в свою пользу — то есть в ту сторону, в которую хочется ошибаться. Расскажу и про них тоже, потому что они интереснее результата.
Ошибка, с которой всё начинается
Сравнивать цену ключа с ценой на витрине Steam нельзя, потому что эту мы, люди с РФ, заплатить не можем. Российские карты не работают со Steam с 2022 года. Чтобы купить игру внутри магазина, надо сначала положить деньги в кошелёк через посредника — и отдать посреднику его долю.
Значит, честная база сравнения выглядит так:
платимая цена = цена на витрине × (1 + стоимость пополнения)
Разница не косметическая. При типовых 7% игра за 3299 ₽ обходится в 3530 ₽. И наоборот: в дешёвом сегменте те же 7% решают, выгоден ключ или нет вообще.
Дальше везде считаю выгоду от реальной цены.
Ошибка первая: 59,3% вместо 18,4%
Первый замер дал медианную выгоду 59,3%, и я почти в это поверил. Цифра красивая, гипотеза подтверждается, можно писать статью.
Спасло то, что я решил посмотреть глазами на конкретные пары. И увидел, что за «ключ ELDEN RING за 999 ₽» сопоставитель принял лот «ELDEN RING NIGHTREIGN: The Forsaken Hollows» — дополнение к спин‑оффу. Наивное сравнение по вхождению слов честно нашло все слова из запроса и осталось довольно собой.
Проблема оказалась глубже, чем один частный случай. Пришлось написать отдельный набор правил:
цифры значимы: Portal и Portal 2 — разные игры, а по токенам они почти совпадают;
апострофы выкидываются до разбора: «Baldur's Gate» и «Baldurs Gate» должны совпасть, а посимвольно — нет;
шумовые слова («издание», «набор», «deluxe», “bundle”) матчатся по основам, иначе «Издание Spiritfarer» не совпадёт с «Spiritfarer»;
направление важно: «ELDEN RING» ⊂ “ELDEN RING NIGHTREIGN” истинно, но обратное — нет, а именно обратное нам и нужно.
После починки медиана упала с 59,3% до примерно двадцати. Мораль скучная, но повторю: если измерение показывает ровно то, что вы хотели увидеть, — посмотрите на сырые пары глазами. Двадцати минут хватило.
Ошибка вторая: не с тем сравнивал
Вторая уже описана выше — я сравнивал ключ с витринной ценой Steam, которую заплатить невозможно. Её я нашёл не сам: мне указали на неё в разговоре, когда я хвастался первыми числами.
Обе ошибки, что характерно, работали в одну сторону — завышали выгоду от ключей. Это не совпадение: измеряя то, во что уже поверил, ошибаешься в сторону своей гипотезы, и заметить это тем труднее, чем результат приятнее.
Что получилось в итоге
Выборка: 40 игр из данных SteamSpy, поровну двух сегментов — «дорогие» (от 2000 ₽ на витрине) и «массовые». Цена Steam через IStoreBrowseService/GetItems с country_code=RU, минимальная цена безопасного лота на маркетплейсе Plati. Ключ нашёлся для 39 игр из 40.
Медианная выгода ключа относительно платимой цены Steam:
Стоимость пополнения | Все игры | Массовые (n=19) | Дорогие (n=20) |
|---|---|---|---|
0% (гипотетически) | 12,7% | −1,7% | 41,0% |
7% (типовая) | 18,4% | 5,0% | 44,9% |
Общее число в 18,4% — самое бесполезное в этой таблице. Оно складывается из двух совершенно разных ситуаций.
Дорогие игры — ключ выигрывает почти всегда и много. Europa Universalis IV: витрина 3049 ₽, платимая 3262 ₽, ключ 399 ₽ — экономия 87,8%. Detroit: Become Human — 87,6%. DEATH STRANDING Director's Cut — 76,1%. Медиана по сегменту почти 45%, и это не выбросы, там весь сегмент такой.
Массовые игры — выгоды практически нет. Медиана 5,0%. На игре за 500 ₽ это 25 рублей, ради которых надо найти продавца, проверить его, разобраться, что именно продаётся, и принять риск. Двадцать пять рублей.
Отдельно случаи, где ключ дороже:
Игра | Витрина | Платимая (7%) | Ключ | Выгода |
|---|---|---|---|---|
Counter‑Strike | 259 ₽ | 277 ₽ | 462 ₽ | −66,7% |
Half‑Life | 259 ₽ | 277 ₽ | 274 ₽ | +1,1% |
Portal | 385 ₽ | 412 ₽ | 404 ₽ | +1,9% |
Half‑Life 2 | 385 ₽ | 412 ₽ | 404 ₽ | +1,9% |
Старые игры Valve стоят в Steam так дёшево, что перепродавцу нечего им противопоставить: ему нужна своя маржа, и она съедает всю разницу. Полтора процента — это не выгода, это шум.
И ещё одно наблюдение из той же таблицы. При нулевой стоимости пополнения ключ проигрывал бы в 12 случаях из 39, при 7% — только в одном. То есть значительная часть «выгоды ключей» — это на самом деле стоимость пополнения кошелька, а вовсе не щедрость перепродавцов. Мы платим не за ключ, мы платим за то, что не можем заплатить напрямую.
Сколько стоит пополнение на самом деле
Раз всё упирается в этот множитель, я разобрал каналы отдельно. Тут выяснилась вещь, которая разозлила меня больше всего в этом исследовании.
Банки и операторы связи пишут «без комиссии», и формально не врут. Их маржа спрятана в курсе конвертации, а комиссии действительно нет.
билайн. На форме оплаты дословно написано «СБП: 0,00%». Курс агрегатора при этом ровно на 12% выше курса ЦБ.
Т2. Реклама: «комиссии нет». В собственной справке оператора: потеря «в среднем 10% от суммы платежа».
Сбербанк, ВТБ, Т‑Банк, Альфа‑Банк. Все четыре сообщают, что комиссии банка нет. Реальное удорожание — от 8% до 12%.
Отдельный сюжет — фиксированная часть. У МТС удорожание складывается из процента и фиксированных 50 ₽. На минимальном пополнении в 325 ₽ это даёт эффективные 23%. На пополнении под игру за 3599 ₽ — 9%. Один и тот же канал, разница в два с половиной раза, и нигде на форме этого не написано.
Отсюда практический вывод: вопрос «где выгоднее пополнять» не имеет ответа без указания суммы. Любой список каналов, отсортированный «по комиссии» без учёта суммы, вводит в заблуждение — и таких списков в поиске десятки.
Половина маркетплейса — не то, чем кажется
Теперь про слово «безопасный», которое я употребил при описании методики.
Я взял 15 популярных игр и разобрал по 80 предложений на каждую — 1200 лотов. Классифицировал по названию и описанию, потому что продавцы регулярно пишут в заголовке «КЛЮЧ», а в описании оказывается совсем другое.
Что продают | Доля |
|---|---|
Ключ | 45,3% |
Общий аккаунт | 30,8% |
Подарок | 8,6% |
Подписка | 6,8% |
Аренда аккаунта | 5,3% |
Не удалось определить | 3,2% |
46% предложений — не ключ и не подарок. Это общие аккаунты, аренда и подписки: покупатель не получает игру себе, он получает доступ к чужому аккаунту. За такое Steam блокирует профиль — вместе со всей библиотекой, которая на нём была.
По отдельным играм картина хуже средней: Detroit: Become Human — 68% опасных лотов, God of War — 61%, Baldur's Gate 3 — 57%.
Наглядно: Black Myth: Wukong “за 148 ₽” — это общий аккаунт. Настоящий ключ стоит 2589 ₽.
При этом сортировка по цене на любом маркетплейсе поднимает наверх именно такие лоты: доступ к чужому аккаунту дешевле ключа по определению. То есть человек, открывший список и взявший первое сверху, с высокой вероятностью покупает не то, что думает.
Почему опасных лотов так много
Я думал, что дело в жадности отдельных продавцов. Оказалось, дело в экономике, и она устроена красиво.
Партнёрские программы игровых маркетплейсов платят вебмастеру процент с покупки. Ставки разные по категориям, и разница показательная: за ключи и игровую валюту — около 5%, за категории «аккаунты», «оффлайн‑аккаунты» и «аренда аккаунтов» — 10%. Ровно вдвое.
Это не заговор. Маржа на аккаунтах выше, значит и делиться есть чем. Но следствие получается неприятное: любой сайт, который зарабатывает на партнёрских отчислениях, имеет прямой финансовый интерес поднимать наверх ровно то, за что покупателя банят. И чем честнее он сортирует, тем меньше зарабатывает.
Это, кстати, объясняет, почему сравнивалкам цен обычно не верят. Не потому, что их авторы плохие люди, — а потому, что стимул устроен именно так.
Техническая часть
Несколько вещей, которые сэкономят время, если будете делать что‑то похожее или просто хотите перенять опыт:)
ISteamApps/GetAppList/v2 мёртв. Отдаёт 404. Каталог игр приходится собирать из сторонних дампов; у меня 246 790 позиций — 184 688 игр и 62 102 дополнения.
IStoreBrowseService/GetItems/v1 лучше, чем store/api/appdetails. Ключ не нужен, отдаёт discount_end_date (когда скидка кончится — в старом API этого нет) и честно сообщает unvailable_for_country_restriction для игр, недоступных в регионе. Опечатка в названии поля — Valve'овская, воспроизводится как есть.
Кстати о недоступных: Cyberpunk 2077 и «Ведьмак 3» в российском Steam не продаются вовсе. Для таких игр «сравнить с ценой Steam» невозможно в принципе, и это отдельная ветка логики, про которую легко забыть.
appdetails батчит по 159 appid, но только если передать filters=. Без этого параметра он молча игнорирует всё, кроме первого.
Цены надо кэшировать, и не ради скорости. Лимит запросов Steam считается на приложение, а не на пользователя. Поисковый робот, обходящий пару сотен страниц, выбирает его целиком — после чего сервис перестаёт отвечать живым людям. Тем же способом его можно положить намеренно.
И самая странная находка. С сервера в Германии маркетплейс перестаёт отдавать ответы больше определённого размера. Не медленно — вообще. Соединение встаёт примерно на 16 КБ и дальше ползёт со скоростью 133 байта в секунду; я ждал две минуты, ответ так и не пришёл.
Замер по 16 параллельных запросов на каждый размер страницы:
Лотов в ответе | Ответ доехал | Получено лотов |
|---|---|---|
3 | 14 из 16 | 42 |
4 | 13 из 16 | 52 |
5 | 6 из 16 | 30 |
8 | 0 из 16 | 0 |
Между четырьмя и пятью лотами — стена. Ограничение размера TCP‑сегмента не помогло, IPv6 у хоста нет, заголовки и версия протокола роли не играют. Похоже на потолок объёма где‑то по маршруту, и лечится он единственным способом: просить меньше, но чаще. Поскольку запросы идут параллельно, шестнадцать маленьких страниц занимают столько же времени, сколько шесть, — около четырёх секунд, — но приносят втрое больше данных.
Пока это не было починено, один запрос пользователя обрабатывался до 95 секунд: три попытки по тридцать секунд к тому, что уже никогда не ответит. Индикатор «печатает» в Telegram живёт пять секунд, так что человек видел, как бот замолкает, и уходил.
И совет из той же истории: проверьте, не длиннее ли ваш тайм‑аут, чем терпение. Удачный ответ приходил за 0,3 секунды. Всё, что дольше нескольких секунд, не придёт никогда, и ждать его — значит терять людей вместо того, чтобы честно сказать «не смог».
Стоит ли смотреть глубже
Отдельно проверил гипотезу «а если поискать подольше, найдётся дешевле». Замер на пяти играх, 6 страниц выдачи против 24: выигрыш в цене 0–1%. Самое дешёвое предложение и так лежит в первых страницах.
Зато у двух игр из пяти первые страницы не дали ни одного годного лота — при том, что ключи есть. То есть ценность глубокого поиска не в лучшей цене, а в том, чтобы вообще получить ответ. Разница между «дольше искать» и «искать надёжнее» оказалась принципиальной, и интуиция тут подсказывает неверное.
Что со всем этим делать
Выводы оказались достаточно неочевидными, чтобы я собрал из них инструмент: он считает платимую цену, сравнивает с ценой безопасного ключа и говорит «бери в Steam», когда разница незначительна. Последнее — единственное, что отличает его от витрины: сравнивалка, которая всегда советует купить, бесполезна по построению.
Ссылку оставлю в комментариях, чтобы пост не выглядел рекламным — он писался не ради неё.
Если делать самому, короткий чеклист по итогам:
Сравнивайте с той ценой, которую человек может заплатить, а не с той, что написана.
Смотрите на сырые пары глазами, особенно когда результат вам нравится.
Читайте описание лота, а не заголовок.
Считайте эффективную ставку для конкретной суммы, а не «комиссию вообще».
Проверьте, не устроены ли ваши стимулы так, что честный ответ вам невыгоден.
Методика и оговорки
Замер выгоды: 40 игр из топа SteamSpy, поровну дорогих и массовых, цена Steam в рублях с country_code=RU, по две страницы выдачи маркетплейса на игру, сопоставление названий с описанными выше правилами. Классификация лотов: 15 игр, по 80 предложений, разбор по названию и описанию. Данные о каналах пополнения: часть снята живыми запросами к калькуляторам, часть взята из официальных справок, часть из обзоров; для каждого канала помечено, откуда именно, потому что достоверность у них разная.
Выборка небольшая и намеренно смещена в сторону популярных игр — на них смотрит большинство. Для длинного хвоста каталога числа наверняка другие. Цены на маркетплейсе меняются ежедневно, так что конкретные суммы к моменту чтения устареют; порядок величин — вряд ли.
Если у вас есть данные, которые этому противоречат, напишите. Мне интересно, где я ошибся в третий раз. И да, критикуйте, критика двигает нас вперед!)
