Guides

SMS reseller pricing: rate cards that keep the margin

Rate cards per client and per destination, operator-level pricing where costs diverge, margin floors, prepaid against postpaid, currencies, the monthly review.

Reading time9 minPublishedUpdated
Written by the Smppcube teamEngineers building messaging platforms since 2011, not content marketers. About us →
SMS reseller pricing: rate cards that keep the margin
In this guide
  1. SMS reseller pricing starts from cost, not from the competitor
  2. Per client, per destination: the two axes of a rate card
  3. Margin floors: the guardrail under every row
  4. Prepaid, postpaid and the credit limit between them
  5. Currency and tax without a spreadsheet
  6. The monthly rate card review
  7. What the platform has to do for you
  8. The counterpoint: when simple beats correct

Every SMS reseller has a rate card. The good ones have a system: a small number of default cards by tier, a way to price at the operator level where it matters, a floor under every destination so a supplier’s price change cannot push a route below cost, and a monthly habit of comparing sell prices with what the routes actually cost. This guide is that system. It covers SMS reseller pricing from the first card to the multi-currency, multi-client setup a growing operation ends up with, and it is deliberately practical: numbers, structures and the mistakes that show up in the margin report.

SMS reseller pricing starts from cost, not from the competitor

The temptation is to price by looking at what other resellers charge for a country. The problem is that their cost is not your cost. Two resellers sending to the same country can pay very different rates depending on whether they hold a direct contract, which aggregator they buy from and what quality tier they bought. A price copied from a competitor with a cheaper route is a price that loses money on yours.

So the first input to every rate card is the cost of the route that will carry the traffic, per destination, as your supplier’s price list states it today. The second input is the margin your service tier earns: premium routes with sender ID preserved and reliable receipts command more than economy routes, and clients understand that when it is presented as a tier rather than as a mystery. The third input is rounding: a client reads 0.0090 more easily than 0.00873, and the difference is yours.

A worked example, with round numbers. A destination costs 0.0060 on your standard route. A 40 percent markup gives 0.0084; round to 0.0085 and you sell at a 0.0025 spread, about 29 percent of the sell price. On 1,000,000 messages a month to that destination, that spread is 2,500 USD of margin. Move the route to a supplier at 0.0055 and the same card earns 3,000 USD, which is why buying well and pricing well are the same job.

Per client, per destination: the two axes of a rate card

A rate card has two axes: who is paying and where the message is going. Most pricing mistakes come from collapsing one of them.

Per destination. The unit of pricing should be the finest level at which your cost differs. In many countries every operator costs the same through your route, and a country price is enough. In others, the cost differs by operator, sometimes by a factor of two, and pricing at the country level means you either overcharge the cheap operators or lose on the expensive ones. That is where operator-level pricing, keyed by MCCMNC (the mobile country code and network code that identify an operator), earns its place: one row per operator where costs diverge, one row per country where they do not. The platform must resolve the operator for the number, including ported numbers, to apply the right row; the wholesale aggregator guide covers why MNP data matters for that.

Per client. Not every client should have a bespoke card. The structure that scales is a small set of default cards, one per tier (premium, standard, economy, say), assigned at account creation, plus client-specific overrides only for accounts whose volume or contract justifies them. A reseller with 40 clients and 40 rate cards spends a day on every supplier price change; a reseller with 3 default cards and 4 exceptions spends an hour.

In practice the two axes meet in a price plan: a named card that lists destinations and prices, assigned to clients. The billing guide explains how the three billing models use those plans; wallet and auto-route clients are charged by destination from their plan, credit clients buy blocks on a specific route at a price per block.

Margin floors: the guardrail under every row

Supplier price lists change, often weekly and sometimes with a day’s notice. Your rate card does not change by itself. Between the two events, a destination can be sold below cost for as long as nobody looks, and the traffic to that destination will grow because your price just became the cheapest on the market.

A margin floor is the fix. For every destination, define the minimum acceptable spread between the cost of the route actually chosen at send time and the client’s sell price, as an absolute amount (never less than 0.0005) or a percentage (never less than 10 percent), and have the platform act when the floor is crossed: alert at minimum, block routing on that destination for that client at most. Two details make the floor real rather than decorative. It must be evaluated against the cost of the route the message will take now, not against an average cost from the last import. And it must be visible per client and per route, because the client whose negotiated price sat comfortably above cost in March can be under water in June without either of you touching anything.

The rate card is a promise you made to the client. The supplier’s price list is a fact that changes without asking. The floor is the only thing standing between the two.

This is also why margin should be recorded on each message when it is sent, not reconstructed later. The revenue page describes the way Smppcube stamps cost and revenue onto the message at send, so the margin you see per client and per route is what you actually earned that day, with that route, at that cost.

Prepaid, postpaid and the credit limit between them

Pricing and payment terms are two different decisions, and the second one decides your cash flow.

Prepaid is the default because it removes credit risk entirely. The client loads a balance, every message deducts from it, and when it reaches zero sending stops. You have been paid for every message that left, which matters most when your own supplier bills you in real time.

Postpaid is what large institutions expect: a bank will not top up a wallet before every campaign. It is a loan from you to them, funded by the supplier invoices you are paying meanwhile, and it should be priced as one. Postpaid clients get a credit limit that stops traffic when the unbilled balance reaches it, an invoice cycle you actually enforce, and a slightly higher rate card or a monthly minimum to pay for the working capital they consume.

A useful middle ground is the deposit: a postpaid client lodges an amount equal to a month’s expected traffic, which becomes the credit limit. It keeps the client’s process (invoice, purchase order, payment terms) intact while capping your exposure to money you already hold.

Currency and tax without a spreadsheet

The moment you serve clients in more than one country, you bill in more than one currency and under more than one tax rule. Three rules keep that manageable.

Keep one internal cost currency. Your suppliers usually price in USD (or one other currency). Keep the cost basis in that currency internally, and convert only at the point where a client’s price plan is expressed in their currency. A rate card in a second currency is a rate card with an exchange rate baked in; when the rate moves, it needs repricing like any other cost change, and the margin floor should catch it if you forget.

Bill through profiles, not settings typed per client. A billing profile bundles a currency, the allowed payment mode and the default tax rate (“EU Clients” in EUR with 20 percent VAT, “US Standard” in USD with no tax) and is assigned when the account is created. The rate belongs to the profile, not to a field somebody has to remember on each invoice.

Offer only currencies you can collect. A profile’s currency should be limited to what your enabled payment gateways actually settle. Quoting a client in a currency you then have to accept by wire and convert by hand is a margin leak with extra paperwork.

The monthly rate card review

Pricing is not set once. A one-hour monthly routine keeps the cards honest:

  1. Import the current supplier price lists and compare with last month’s: every destination whose cost rose is a row to check.
  2. Read the margin report by destination, lowest spread first. Anything under the floor is a repricing or a route change today.
  3. Read the margin report by client, lowest first. A negotiated card that has drifted below your default card’s margin is a renegotiation, not a surprise at renewal.
  4. Check the exceptions. Every client-specific card should still be justified by volume; the ones that are not go back onto a default card.
  5. Check currency drift on foreign-currency plans against the month’s rate.
  6. Reprice, with notice terms the client agreed to, and let the platform apply the new plan from the effective date rather than editing rows by hand.

Resellers who do this review find it takes less time each month, because the structure (few default cards, floors, profiles) does the work between reviews. Resellers who skip it find out about the problem when the platform fee, the supplier invoice and the client’s payment no longer add up, and by then the destination in question has been below cost for a quarter.

What the platform has to do for you

None of this survives in a spreadsheet past about twenty clients: too many cards, too many routes, too many currencies, all changing weekly and all reconciled against delivery receipts every day. The platform underneath needs to hold price plans per destination and per operator, assign them per client with overrides, know the cost of the route chosen at send time and stamp it on the message, enforce balances and credit limits, bill through profiles in the currencies your gateways collect, and show margin per client, per route and per day. Those are the mechanics on the revenue page, and on a one-time licence they do not scale their own price with your traffic, which for a reseller is the difference between a platform fee and a partner’s share of the margin.

The counterpoint: when simple beats correct

If you have five clients sending to two countries, a single rate card per country and a prepaid wallet each is the right amount of pricing. Operator-level rows, floors and profiles are for the reseller whose destinations diverge in cost, whose clients pay in different currencies and whose supplier list changes faster than a person can track. Build the structure when the margin report starts to show you problems you did not see coming, and not before; the reseller guide is the right starting point if you are still at the first five clients.

QUESTIONS

How should an SMS reseller price a message?

Start from the cost of the route that will carry it to that destination, add the margin your tier of service earns, and round to a price the client can read. Price per destination operator where costs differ within a country, per country where they do not. Publish one default rate card per tier for most clients and negotiate a client-specific card only for accounts whose volume justifies the exception. Review every card against cost monthly.

What is a margin floor in SMS pricing?

The minimum spread between the cost of a route and the sell price below which the platform should refuse to route, or at least alert. Supplier price lists change weekly; a floor turns a silent loss on one destination into a visible warning. Set it per destination as an absolute amount or a percentage, and apply it at send time against the cost of the route actually chosen, not against last month's average.

Should SMS resellers use prepaid or postpaid billing?

Prepaid by default: the client loads a balance, the platform enforces it, and you are never funding traffic you have not been paid for. Postpaid only for clients with a contract, a history and a credit limit, because you pay your supplier in real time and collect from the client weeks later. Many resellers run both: prepaid wallets for the many, postpaid invoices for the few large accounts that require them.

How do I handle SMS pricing in more than one currency?

Bill each client in the currency they pay in, through a billing profile that bundles the currency, the allowed payment mode and the default tax rate, and keep your cost basis in one currency internally. Only offer a currency your payment gateways can actually collect. Reprice a foreign-currency rate card when the exchange rate moves enough to eat your margin, and record the cost basis at the time of sale so margin reports stay true.

All guides