The GEO Payout Matrix: Why One Brand Pays You Three Different Rates
Two affiliates, one casino, $210 and $45. A payout is a grid: traffic source against country, paid at the narrowest cell that matches. How resolution works, why an unmatched conversion earns zero, and what to ask for before you sign.

A brand's payout is not one number, it is a grid: traffic source on one axis, country on the other, and every conversion is paid at the narrowest cell that matches it. That is how one casino pays $210 on a German deposit and $45 on a Mexican one without anyone being cheated. The expensive part is the empty cell, because where a matrix exists a conversion that matches no row earns zero, not the headline rate.
Two affiliates, one brand, $165 apart
Two affiliates send traffic to the same casino this month. One collects $210 per qualifying deposit, the other $45. Nobody was cheated, nobody negotiated harder, and both are reading the same signed agreement. They are standing on different squares of it.
Rate cards get printed as if a brand carried one number. "BrandX, $150 CPA." That is a headline, not a deal. Underneath it sits a grid: traffic source on one axis, country on the other, a rate in each cell put there by somebody who had a reason. A conversion arrives carrying a country and a source, the lookup finds the cell those two land in, and that cell pays.
Choosing a GEO puts you on a square. This article is about what that square is worth, and about the squares that turn out to be empty.
Why the operator builds a grid at all
Start from their side of the table. None of this is affiliate management being difficult, it is arithmetic nobody can get out of.
A German player and a Mexican player are not the same asset. Germany's licensed regime caps a virtual slot spin at one euro, caps deposits at a thousand euros a month across every licensed operator at once, and taxes stakes rather than revenue at 5.3%. Read that as a ceiling. There is a hard limit on what a German account can lose in a month, so nobody there is a whale. What is left is duration. Every licensed brand sells the same capped product, switching buys the player nothing, and an account that survives its first quarter tends to keep depositing near the cap for a long time. Bounded per month, long in months. That is what a $210 CPA is buying.
Brazil regulated in 2025: a licence costs tens of millions of reais, gross gaming revenue is taxed at 12%, and the market went from grey to a queue of licensed brands inside a year. Deposits are smaller and far more frequent, PIX settles instantly and for almost nothing, and churn is fast because nothing stops a player holding accounts at a dozen brands at once.
Mexico has no modern online gambling act at all, only permits issued under a 1947 law and stretched to cover online. Smaller deposits again, a real share of them arriving as cash paid over a convenience store counter against a voucher, which adds a step players drop out of.
Now put one number across all three. Whatever you pick overpays the cheapest market and underpays the dearest. At $210 the brand loses money on every Mexican deposit it buys. At $45 it never sees a German click, because the affiliate holding German volume takes it to the brand next door that prices Germany properly. There is no single figure that survives all three.
Traffic source splits the same way. Someone who read three reviews on a comparison page and clicked through has already decided. Someone who saw a fifteen second video in a feed has not, and the difference shows up downstream, in second deposits and in who is still depositing in month three. So source rows sit either side of the country row rather than always above it: search and owned content at or above, feed traffic below, and the gap is what the operator thinks the intent was worth.
Most specific row wins
Resolution is a lookup, and it runs from narrow to wide.
A conversion arrives with two facts attached: the country the click came from, and the traffic source you were assigned or declared. The lookup wants an exact match on both. A row for (paid social, BR) beats a row for (any source, BR), which beats a row for (any source, any country). The first match wins outright and the wider rows below it are never consulted.
One consequence is worth holding onto, because on a statement it looks exactly like a mistake. Adding a row can lower a payout. If your Brazilian traffic was paid $85 off the country-wide row and the brand writes a (paid social, BR) row at $70, your paid social conversions move to $70 the day it lands. Everything else stays put. Nothing broke, a narrower row simply became available, and narrower always wins.
Attribution has layered fallbacks for the messy cases, so a click that loses one signal is not automatically a lost conversion. None of that helps here. Once a conversion is attributed, the country and source it carries are the two keys, and the grid answers with whatever it has.

What a real matrix looks like
Invented brand, realistic shape. CPA per qualifying first-time deposit, in USD. The deal's allowed GEO list is DE, BR, MX and PT.
| Traffic source | Country | CPA | What lands here |
|---|---|---|---|
| SEO | DE | $210 | Organic and owned content out of Germany |
| Any | DE | $180 | Every other German conversion |
| SEO | BR | $95 | Organic out of Brazil |
| Paid social | BR | $70 | Feed traffic out of Brazil |
| Any | BR | $85 | Every other Brazilian conversion |
| Any | MX | $45 | All Mexican traffic, any source |
| Any | Any allowed GEO | $40 | Anything on the GEO list the rows above miss |
Read it downwards and the resolution order is sitting there in the data. A German organic deposit stops at row one. A German paid social deposit fails the source test and lands on row two at $180. A Brazilian paid social deposit takes row four at $70, $15 under the Brazilian country row. A Portuguese conversion, which no row above describes but the deal's GEO list allows, drops to the bottom and pays $40.
That last row is doing far more work than its size suggests.
Zero is a real outcome
When a payout matrix exists on a deal, the matrix is authoritative. It is not a set of hints layered over a default rate. It is the answer. A conversion that matches no row does not fall back to the headline number on the rate card, or to what the brand usually pays, and it is not something an affiliate manager will spot for you.
It earns zero. Real player, real deposit, real money in the operator's account, no commission, because the grid was asked a question and had no cell to answer with.
The situations that produce it are dull and common:
- Traffic arrives from the country next door, which the deal allows but which never got a row of its own. Real players. No row.
- The brand adds a traffic-source category, your placements get reclassified into it, and nobody wrote a rate for it in your country.
- The matrix was built for the four markets that mattered in 2024, and your mix has moved twice since.
Unmatched is not the same as out of GEO
Two different failures leave you looking at an unpaid deposit, and they need different fixes.
A conversion from a country on the deal's allowed list with no row to price it resolves at zero. The deal covers that market, the grid has nothing to say about it, and one line of text fixes it.
A conversion from a country that is not on the allowed list is not a pricing problem at all. A licensed operator cannot pay for a deposit from a market it holds no licence in, so that conversion is not underpaid, it is refused, and no row you negotiate changes it. The allowed GEO list is a pass or fail check you run before you buy the domain, not something a payout row rescues afterwards.
So the thing to ask for is narrower than it first looks. Not a catch-all for any country on earth, because no compliant brand can write one. A catch-all row covering every GEO on your deal's allowed list, for any source. Ask in writing, before you send a click: does this deal carry a catch-all row for any source across the whole allowed GEO list, and what is the rate on it?
Yes plus a number is a floor. A brand that answers instead that the matrix already covers everything you will ever run has told you there is no floor, and you now know to keep traffic inside the drawn rows and recheck them whenever your mix moves.
That floor can be low. A $40 catch-all under a $180 German row is not generous and is not pretending to be. It is there so a real deposit, inside markets you already agreed to work, never evaluates to nothing.
Reading a matrix before you sign
Four checks, all inside one careful read. Reading the rest of an offer is the wider job; this is the payout half.
- Overlay your actual traffic mix onto the rows. Not the mix you intend to have. Last month's, by country and source, then find the row each slice lands on. A slice that lands nowhere is a problem you fix while the terms are still open, not in a statement six weeks from now.
- Is there a catch-all row? Bottom of the grid, any source, every allowed GEO, present or absent. If it is absent, ask about it before anything else, the headline rate included.
- Source labels are not self-evident. Social and paid social are often separate rows at separate rates, and display sometimes swallows native and sometimes does not. Get the classification rule for your placements in writing, because otherwise it sets your rate without you, and the same labels decide which sources the brand accepts at all.
- Read the model per cell, not per deal. One matrix can mix them: CPA in one country, revenue share in another, hybrid in a third. Where a cell pays revenue share, the carryover rule attached to it decides more of your money than the percentage does.
Read the gaps too. A brand with dense rows across three countries and silence on the fourth is telling you where it holds a licence and where it would rather not receive traffic.
Your own grid, on top of the brand's
The program default is not the last word. Per-affiliate overrides sit above it, so a partner can be given their own rows, and those take precedence the same way a narrow row beats a wide one.
Asking for a better rate on BrandX is a request nobody can price. Asking for one cell is a request somebody can approve in a minute:
- "My Brazilian organic did 140 qualifying deposits last quarter and two thirds of those players were still depositing in month three. The (SEO, BR) row is $95. I want $115."
- "I open Poland next month, roughly 30 deposits a month to start. Poland is on the allowed list and has no PL row in this matrix. Write one before I start, at whatever you think it is worth, so nothing resolves to nothing."
The second costs the brand almost nothing and protects you completely, which is why it is the easier of the two to get and the one nobody asks for.
An override is still a commercial decision and plenty of brands refuse. What none of them can do is pretend the mechanism does not exist. The affiliates who get one turn up with a single named cell and a number behind it.
The twenty-minute habit
Be clear about what the tooling does and does not do. A conversion that resolved at zero is visible: it sits in your reporting as a conversion with no commission against it, the same week it happens. What nothing does is come and find you. No alert fires because a row was missing, and holds and clearing rules (the payouts article covers those) are a separate question. A zero-rate conversion is not a late payment, it is a payment that was never created.
Which leaves the check on you. Once a quarter, and again the week anything real changes about your mix, pull last month's conversions by country and source, set them beside the grid on every deal you run, and confirm each slice lands on a row. Twenty minutes.
A payout is a grid. Know which square you are on, know what happens the moment you step off it, and make sure something is written under your feet before you do.
Frequently asked questions
My CPA on one brand dropped and nobody told me. What happened?
Most often a row was added, not removed. Resolution runs narrow to wide and the most specific matching row wins, so if your Brazilian traffic was paid $85 off the country row and the brand writes a paid social row for Brazil at $70, those conversions move to $70 the day it lands while everything else stays put. Nothing broke and nothing was taken off you. Set the current grid beside the one you signed, and read the source labels closely, because a placement being reclassified has exactly the same effect as a rate being changed.
Can I recover conversions that already resolved at zero?
Usually not, and plan on not. A conversion is priced against the rows that existed when it was recorded, so adding the missing row fixes the next one rather than the last one. Some brands will make a goodwill adjustment if you raise it inside the same period and the deposits are obviously real, but that is a favour rather than a right, and it gets much harder once a statement is closed and paid. Ask for the adjustment and the new row in the same message. Expect to get the row.
Does a matrix apply to revenue share as well as CPA?
Yes. A cell can carry a percentage of NGR instead of a fixed CPA, and resolution works identically, with the narrowest matching row winning. Two things change. The stake is bigger, because an unmatched CPA conversion costs you one payment while an unmatched revenue share player costs you that player's entire ongoing share. And the terms inside the cell matter more than the headline percentage, since carryover and deduction rules can differ from row to row in the same grid.
How do I get my own rates on top of a brand's matrix?
Per-affiliate overrides exist and sit above the program default, so a partner can be given their own rows. It is still a commercial decision and plenty of brands refuse. What works is one named cell with numbers behind it rather than a better rate in general: this country, this source, this many qualifying deposits last quarter, this much retention at month three. The cheapest version to ask for is a row for a market you are about to open. It costs the brand almost nothing and it stops real conversions resolving at zero.
