Игра стоит в 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», когда разница незначительна. Последнее — единственное, что отличает его от витрины: сравнивалка, которая всегда советует купить, бесполезна по построению.

Ссылку оставлю в комментариях, чтобы пост не выглядел рекламным — он писался не ради неё.

Если делать самому, короткий чеклист по итогам:

  1. Сравнивайте с той ценой, которую человек может заплатить, а не с той, что написана.

  2. Смотрите на сырые пары глазами, особенно когда результат вам нравится.

  3. Читайте описание лота, а не заголовок.

  4. Считайте эффективную ставку для конкретной суммы, а не «комиссию вообще».

  5. Проверьте, не устроены ли ваши стимулы так, что честный ответ вам невыгоден.

Методика и оговорки

Замер выгоды: 40 игр из топа SteamSpy, поровну дорогих и массовых, цена Steam в рублях с country_code=RU, по две страницы выдачи маркетплейса на игру, сопоставление названий с описанными выше правилами. Классификация лотов: 15 игр, по 80 предложений, разбор по названию и описанию. Данные о каналах пополнения: часть снята живыми запросами к калькуляторам, часть взята из официальных справок, часть из обзоров; для каждого канала помечено, откуда именно, потому что достоверность у них разная.

Выборка небольшая и намеренно смещена в сторону популярных игр — на них смотрит большинство. Для длинного хвоста каталога числа наверняка другие. Цены на маркетплейсе меняются ежедневно, так что конкретные суммы к моменту чтения устареют; порядок величин — вряд ли.

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