The post has been translated automatically. Original language: Russian
In a previous article, I wrote about how I was building a study planner without a development team, and at the end I promised a separate text about money. Here he is. There will be no discussion about the unit economy in general, there will be specifics: how much each rail costs, what exactly the Merchant of Record checks, why my site was rejected, and how access is granted when there are two payment providers and one user.
Disclaimer: this is my experience. Providers change tariffs and requirements, check on their websites the day you read.
Why wasn't one provider enough?
The product is a web application with a subscription, the buyer can be anywhere. The logical choice for such a case is the Merchant of Record: the provider becomes the seller before the buyer, issues an invoice, calculates and pays sales tax and VAT in each country, handles refunds and disputes. For one person without accounting, this is the only realistic option. I took the Paddle.
Then something begins that changes the balance for Kazakhstan, and here it is important not to confuse two different things.
Paddle accepts cards normally, including Kazakhstani ones. Kaspi Gold is a regular Visa or Mastercard card, it passes like any other, there is no special story here. If someone tells you that Kazakhstanis will not be able to buy from you, it is not true.
And that's what Paddle really doesn't have. First, there is not a single local Kazakh method in his list of payment methods. There are cards, wallets like PayPal, Apple Pay, Google Pay, Alipay, Kakao Pay, and local methods from other countries: BLIK, Bancontact, iDEAL, MB WAY, Pix, UPI Autopay. Payments via the Kaspi, Kaspi QR, or Kaspi Red installments are not available and are not expected. Secondly, and this turned out to be more important: Paddle does not support tenge. There is no KZT in the list of 33 currencies, so it is impossible to show a Kazakhstani the price in tenge through Paddle, he will see dollars. You will also receive payments not in tenge: the available payment currencies are the dollar, euro, pound, Australian and Canadian dollars.
How critical this is, everyone decides for themselves, but the context is as follows: Kaspi for Kazakhstan is not one of the payment methods, but the default method for a huge part of people. According to the figures provided by the Minister of National Economy, by the end of 2025, Kaspi had 7.4 million active buyers with a population of about 20 million. The dollar price tag and an unfamiliar form of payment act as an additional barrier against this background.
Hence the solution I came to: two payment rails in parallel. Paddle for the world and for payment by card in foreign currency, the local Kazakh gateway for tenge. For me, this is Freedom Pay, the same class of solutions are provided by ioka and Halyk ePay.
I will clarify separately, so as not to create false expectations: the local gateway is not automatically a "payment via Kaspi". Freedom Pay Light provides a payment page with cards, Apple Pay and Google Pay, payment by link and QR code. If you need payment inside the Kaspi app, Kaspi QR, or the Kaspi Red installment plan, this is a separate integration with Kaspi Business, and this is the third project, not a side effect of the second.
How much does a Merchant of Record cost on a cheap subscription?
Paddle public rate: 5 percent plus 50 cents from the checkout transaction. The figure looks calm exactly until you insert your price into it.
My subscription costs $4.99 per month and $39.99 per year. The monthly fee will be 25 cents plus 50, or 75 cents. This is slightly more than 15 percent of the payment. From the annual rate: $2 plus 50 cents, about 6.25 percent. The difference is two and a half times, and it is taken entirely from a fixed part.
The conclusion that should be drawn before you print the prices on the landing page, and not after: on cheap subscriptions, a fixed 50 cents eats up more than a percentage. The annual tariff should not just be available, but actively highlighted. And if your product is cheaper than $10, Paddle sends you directly to the footer on the pricing page for individual conditions, meaning the standard model is not designed for such prices.
For comparison, the local rail. Freedom Pay Light, their product for small businesses, publishes a payment acceptance rate of 3.5 percent, with a minimum of 25 tenge per payment. On a monthly payment of about two and a half thousand tenge, this is the same 3.5 percent against fifteen for Paddle.
But it's not a fair comparison, and it's important to understand why. 5 percent of Paddle includes something that 3.5 percent of acquiring does not: he is a seller himself, he counts and pays sales taxes by country, he deals with chargebacks and disputes. The local acquiring service simply makes the payment, and taxes, bills, and refunds are left to you. "So "the correct conclusion is not "local is cheaper," but "you pay for global sales with tax compliance, and this should be included in the price."
The three weeks I lost checking the site
I passed the identity verification quickly, but the domain was rejected. These are two different processes, and the second one is more complicated.
Paddle's requirements for the site have been published, and they sound harmless: there should be a clear product description, a price page, a list of what is included in the purchase, as well as Terms, Refund Policy, and Privacy Policy available through the site's navigation. As a separate point: for sole proprietors, it is advisable to specify the legal name in Terms, and not just the brand. Plus a live website over HTTPS.
Technically, I had it all. In fact, I found myself with three problems, and none were obvious.
The legal pages opened in Russian. In the code, the default language was taken from localStorage, and if it was empty, then Russian. The examiner logs in from a clean browser and sees the text, which, most likely, he does not read. There is no direct requirement "in English only" in the rules, but the verification is a live person, and I assumed that he should read the document. I switched the default language to English.
The text of the pages was inserted by Javascript into an empty div. The requirement sounds like "it must be clearly accessible through navigation," and without executing scripts, there was nothing at all on my pages. I put the static English copy directly into the markup, and left the script on top to switch the language.
There was no legal name in Terms. It was "operated by Sprout Study", and the account was registered to an individual entrepreneur in Kazakhstan. I entered the full name and registration form as in the account.
Fourth, a minor one: there was a clause in the refund policy about cases when a refund is not made. I removed it and left clean cancellation conditions.
A separate surprise awaited after the domain was approved. The checkout did not open, and the application returned the error "Checkout URL domain has not yet been approved". It turned out that you need to approve not only your domain. I use RevenueCat on top of Paddle, and it opens a payment from its domain, and it was moderated in a separate line for nine days. By the way, this is written in the rules in plain text: each domain and subdomain from which the checkout will be launched must be sent for verification. Read this line more carefully than I did.
Payouts: where transfers are wrapped
MoR collects the money from itself and transfers it to you according to the schedule. How it works for Paddle: the minimum payout threshold is $ 100, the balance above the threshold goes into the queue on the first day of the month, shipping is up to the fifteenth, delivery is up to three business days. If the balance does not reach the threshold, it is postponed to the next month. In other words, it may take a month and a half between the client's first payment and the first money in your account, and this is a normal mode of operation, not a failure.
Paddle does not charge a commission for the payment itself for most countries, but for some countries a SWIFT fee of $ 15 is possible. Check your country in advance, it is noticeable for small amounts.
There are two places where everything breaks down for the Kazakh recipient when entering banking details. First: only Latin letters, without special characters and diacritics, the name of the account holder must match the name that has passed verification. The second is the currency. Tenge is not included in the list of payment currencies, so the account must accept incoming SWIFT in dollars or another available currency. Check this with your bank before sending the first payment, otherwise the transfer will be refunded.
What does the local gateway ask for, what does the global gateway not ask for?
The local acquiring company's compliance team looks at the site more closely than one might expect. According to the instructions that were sent to me when connecting, I needed: prices in tenge, a public offer with the details of the individual entrepreneur, that is, full name, IIN, address and contacts, a separately visible privacy policy, a description of the payment and refund procedure with a contact address, payment system logos. Package of documents: an identity card, a document on the registration of an individual entrepreneur, a certificate of a bank account, a merchant's questionnaire and a description of the business model. The review period after the full package is indicated there as seven to ten business days.
Another detail from the same place, which breaks plans if you find out about it too late: the new merchant is allowed to accept only cards issued in Kazakhstan, the expansion of geography is discussed after a few months of work. This is not posted on the website, it's from the instructions for connecting, so check with your manager. For me, the restriction turned out to be acceptable, because the world is closing Paddle. If you were counting on the local gateway as the only one, the plans will have to be rewritten.
How not to ruin access when there are two rails
Here The engineering part begins, and it's a place where it's easy to make holes.
RevenueCat, which I use as a subscription layer, works with three billing engines for the web: its own Stripe, Stripe Billing, and Paddle Billing. Kazakhstan's gateways are not on this list and will not be. This means that the second rail lives completely outside of it, and the question arises: where is the truth now about whether the user has a premium.
The answer I came to is that the truth is the only one in the database. The profile table has a premium flag and an end date. After successful payment, the local gateway pulls my edge function, it verifies the signature of the request, marks the order as paid, and assigns the premium to the user with the date. The application asks for access from the database, not from the provider. The global rail continues to work through its own layer, and its result is summarized in the same check.
A short checklist if you are at the beginning of the journey
Terms, Refund, and Privacy are available through navigation, visible without a Javascript, and the legal name is specified in Terms. Refund without reservations. Prices are calculated taking into account the fixed part of the commission, the annual tariff is in a prominent place. All domains and subdomains from which the checkout is opened have been sent for verification, including intermediary domains. Payment details in Latin, the currency is agreed with the bank in advance. For the local gateway, the site is prepared before submitting documents, not after. Access to the premium is decided in one place, regardless of which rail the money came from.
Now both rails are assembled, the product is going into a pilot with students, there are combat sales ahead and the first data on conversion to payment. If you have experience accepting payments from Kazakhstan for a digital product, especially with Kaspi Business and with recurrent, write in the comments how you solved it. There is almost no documentation for our jurisdiction, and someone else's experience saves weeks here.
В прошлом материале я писала, как строю планировщик учёбы без команды разработки, и в конце обещала отдельный текст про деньги. Вот он. Здесь не будет рассуждений про юнит-экономику вообще, будет конкретика: сколько стоит каждый рельс, что именно проверяет Merchant of Record, почему мой сайт отклонили и как устроена выдача доступа, когда платёжных провайдеров два, а пользователь один.
Дисклеймер: это мой опыт. Тарифы и требования провайдеры меняют, проверяйте на их сайтах на день, когда читаете.
Почему одного провайдера не хватило
Продукт это веб-приложение с подпиской, покупатель может быть где угодно. Логичный выбор для такого случая Merchant of Record: провайдер становится продавцом перед покупателем, выставляет счёт, считает и платит налог с продаж и НДС в каждой стране, обрабатывает возвраты и споры. Для одного человека без бухгалтерии это единственный реалистичный вариант. Я взяла Paddle.
Дальше начинается то, что для Казахстана меняет расклад, и тут важно не путать две разные вещи.
Карты Paddle принимает нормально, в том числе казахстанские. Kaspi Gold это обычная карта Visa или Mastercard, она проходит как любая другая, никакой особой истории тут нет. Если вам кто-то скажет, что казахстанцы не смогут у вас купить, это неправда.
А вот чего у Paddle действительно нет. Первое: в его списке способов оплаты нет ни одного казахстанского локального метода. Там карты, кошельки вроде PayPal, Apple Pay, Google Pay, Alipay, Kakao Pay, и локальные методы других стран: BLIK, Bancontact, iDEAL, MB WAY, Pix, UPI Autopay. Оплаты через приложение Kaspi, Kaspi QR или рассрочки Kaspi Red там нет и не предвидится. Второе, и это оказалось важнее: Paddle не поддерживает тенге. В списке из 33 валют KZT отсутствует, так что показать казахстанцу цену в тенге через Paddle нельзя, он увидит доллары. Выплаты вам тоже придут не в тенге: доступные валюты выплат это доллар, евро, фунт, австралийский и канадский доллары.
Насколько это критично, каждый решает сам, но контекст такой: Kaspi для Казахстана это не один из способов оплаты, а способ по умолчанию для огромной части людей. По цифрам, которые называл министр национальной экономики, к концу 2025 года активных покупателей у Kaspi было 7,4 миллиона при населении около 20 миллионов. Ценник в долларах и незнакомая форма оплаты на этом фоне работают как дополнительный барьер.
Отсюда решение, к которому я пришла: два платёжных рельса параллельно. Paddle для мира и для оплаты картой в валюте, локальный казахстанский шлюз для тенге. У меня это Freedom Pay, того же класса решения дают ioka и Halyk ePay.
Отдельно уточню, чтобы не создавать ложных ожиданий: локальный шлюз это не автоматически «оплата через Kaspi». Freedom Pay Light даёт платёжную страницу с картами, Apple Pay и Google Pay, оплату по ссылке и по QR-коду. Если вам нужна именно оплата внутри приложения Kaspi, Kaspi QR или рассрочка Kaspi Red, это отдельная интеграция с Kaspi Business, и это третий проект, а не побочный эффект второго.
Сколько стоит Merchant of Record на дешёвой подписке
Публичный тариф Paddle: 5 процентов плюс 50 центов с транзакции чекаута. Цифра выглядит спокойно ровно до того момента, пока вы не подставите в неё свою цену.
У меня подписка стоит 4,99 доллара в месяц и 39,99 в год. С месячного платежа комиссия составит 25 центов плюс 50, то есть 75 центов. Это чуть больше 15 процентов от платежа. С годового: 2 доллара плюс 50 центов, около 6,25 процента. Разница в два с половиной раза, и берётся она целиком из фиксированной части.
Вывод, который стоит сделать до того, как вы напечатаете цены на лендинге, а не после: на дешёвых подписках фиксированные 50 центов съедают больше, чем процент. Годовой тариф нужно не просто иметь, а активно подсвечивать. А если ваш продукт дешевле 10 долларов, Paddle прямо в сноске на странице тарифов отправляет вас за индивидуальными условиями, то есть стандартная модель под такие цены не рассчитана.
Для сравнения локальный рельс. Freedom Pay Light, их продукт для малого бизнеса, публикует ставку приёма платежей: 3,5 процента, минимум 25 тенге за платёж. На месячном платеже порядка двух с половиной тысяч тенге это те же 3,5 процента против пятнадцати у Paddle.
Только сравнение это нечестное, и важно понимать почему. В 5 процентов Paddle входит то, чего в 3,5 процента эквайринга нет: он сам продавец, он считает и платит налоги с продаж по странам, он разбирается с чарджбэками и спорами. Локальный эквайринг просто проводит платёж, а налоги, счета и возвраты остаются на вас. Так что правильный вывод не «локальный дешевле», а «за глобальные продажи вы платите налоговым комплаенсом, и в цену это надо закладывать».
Три недели, которые я потеряла на проверке сайта
Верификацию личности я прошла быстро, а вот домен мне отклонили. Это два разных процесса, и второй сложнее.
Требования Paddle к сайту опубликованы, и звучат они безобидно: должно быть понятное описание продукта, страница с ценами, перечень того, что входит в покупку, а также Terms, Refund Policy и Privacy Policy, доступные через навигацию сайта. Отдельным пунктом: для ИП в Terms желательно указать юридическое имя, а не только бренд. Плюс живой сайт по HTTPS.
Формально у меня всё это было. Фактически я нашла у себя три проблемы, и ни одна не была очевидной.
Юридические страницы открывались по-русски. В коде язык по умолчанию брался из localStorage, а если там пусто, то русский. Проверяющий заходит с чистого браузера и видит текст, который, скорее всего, не читает. Прямого требования «только на английском» в правилах нет, но проверка это живой человек, и я исходила из того, что прочитать документ он должен. Язык по умолчанию переключила на английский.
Текст страниц подставлялся джаваскриптом в пустой div. Требование звучит как «должно быть ясно доступно через навигацию», а без выполнения скриптов на моих страницах не было вообще ничего. Положила статическую английскую копию прямо в разметку, скрипт оставила сверху для переключения языка.
В Terms не было юридического имени. Стояло «operated by Sprout Study», а аккаунт зарегистрирован на физическое лицо, ИП в Казахстане. Вписала полное имя и форму регистрации, как в аккаунте.
Четвёртое, мелкое: в политике возврата была оговорка про случаи, когда возврат не делается. Убрала, оставила чистые условия отмены.
Отдельный сюрприз ждал уже после одобрения домена. Чекаут не открывался, приложение возвращало ошибку «Checkout URL domain has not yet been approved». Оказалось, одобрять нужно не только свой домен. Я использую RevenueCat поверх Paddle, а он открывает оплату со своего домена, и тот висел на модерации отдельной строкой девять дней. В правилах это, кстати, написано прямым текстом: отправлять на проверку нужно каждый домен и поддомен, с которого будет запускаться чекаут. Читайте эту строчку внимательнее, чем читала я.
Выплаты: где заворачивают переводы
Деньги MoR собирает у себя и переводит вам по расписанию. Как это работает у Paddle: минимальный порог выплаты 100 долларов, первого числа месяца баланс выше порога уходит в очередь, отправка до пятнадцатого числа, доставка до трёх рабочих дней. Если баланс до порога не дотянул, он переносится на следующий месяц. То есть между первым платежом клиента и первыми деньгами на вашем счету может пройти полтора месяца, и это нормальный режим работы, а не сбой.
Комиссию за саму выплату Paddle для большинства стран не берёт, но для некоторых стран возможна комиссия за SWIFT в 15 долларов. Уточняйте по своей стране заранее, на небольших суммах это заметно.
Два места, где у казахстанского получателя всё ломается на вводе реквизитов. Первое: только латиница, без спецсимволов и диакритики, имя держателя счёта должно совпадать с именем, которое прошло верификацию. Второе: валюта. Тенге в списке валют выплат нет, поэтому счёт должен принимать входящий SWIFT в долларах или другой доступной валюте. Проверьте это в своём банке до того, как отправите первую выплату, иначе перевод вернётся.
Что просит локальный шлюз, чего не просит глобальный
Комплаенс локального эквайринга смотрит на сайт внимательнее, чем можно ожидать. По инструкции, которую мне прислали при подключении, потребовалось: цены в тенге, публичная оферта с реквизитами ИП, то есть ФИО, ИИН, адрес и контакты, отдельно видимая политика конфиденциальности, описание порядка оплаты и возврата с контактным адресом, логотипы платёжных систем. Пакет документов: удостоверение личности, документ о регистрации ИП, справка о наличии банковского счёта, анкета мерчанта и описание бизнес-модели. Срок рассмотрения после полного пакета там указан как семь-десять рабочих дней.
Ещё одна деталь оттуда же, которая ломает планы, если узнать о ней поздно: новому мерчанту открывают приём только карт, выпущенных в Казахстане, расширение географии обсуждается через несколько месяцев работы. Это не опубликовано на сайте, это из инструкции для подключающихся, так что уточняйте у своего менеджера. Для меня ограничение оказалось приемлемым, потому что мир закрывает Paddle. Если вы рассчитывали на локальный шлюз как на единственный, планы придётся переписать.
Как не развалить доступ, когда рельсов два
Тут начинается инженерная часть, и это место, где легко наделать дыр.
RevenueCat, который я использую как слой над подписками, для веба работает с тремя биллинг-движками: собственным на Stripe, Stripe Billing и Paddle Billing. Казахстанских шлюзов в этом списке нет и не будет. Значит, второй рельс живёт полностью вне его, и возникает вопрос: где теперь правда о том, есть ли у пользователя премиум.
Ответ, к которому я пришла: правда одна и лежит в базе. В таблице профилей есть флаг премиума и дата окончания. Локальный шлюз после успешной оплаты дёргает мою edge-функцию, она проверяет подпись запроса, отмечает заказ оплаченным и проставляет пользователю премиум с датой. Приложение спрашивает доступ у базы, а не у провайдера. Глобальный рельс продолжает работать через свой слой, и его результат сводится в ту же проверку.
Короткий чеклист, если вы в начале пути
Terms, Refund и Privacy доступны через навигацию, видны без джаваскрипта, в Terms указано юридическое имя. Refund без оговорок. Цены посчитаны с учётом фиксированной части комиссии, годовой тариф на видном месте. На проверку отправлены все домены и поддомены, с которых открывается чекаут, включая домены посредников. Реквизиты выплаты латиницей, валюта согласована с банком заранее. Для локального шлюза сайт подготовлен до подачи документов, а не после. Доступ к премиуму решается в одном месте, независимо от того, каким рельсом пришли деньги.
Сейчас оба рельса собраны, продукт идёт в пилот со студентами, впереди боевые продажи и первые данные по конверсии в оплату. Если у вас есть опыт приёма платежей из Казахстана за цифровой продукт, особенно с Kaspi Business и с рекуррентом, напишите в комментариях, как решали. Документации по нашей юрисдикции почти нет, и чужой опыт тут экономит недели.