Taxes: VAT, GST, GGR and deductions
1) Concept map
VAT/GST - indirect consumption tax. In a number of countries, gambling bets are exempt/excluded from VAT, but are subject to separate gambling taxes (duty/levy). But services (PSP, affiliates, content providers, SaaS) - often under VAT/GST.
GGR tax (Gaming/Gambling Duty) - gross gaming profit tax:- 'GGR = Stakes (Turnover) − Payouts (payouts) '
- Often there are adjustments (jackpots, bonuses, void bets) - register in the policy.
- NGR - 'GGR − Bonuses − Provider revenue share − Platform fees − Taxes on rates (if applicable)' - management margin.
- Withholding Tax (WHT) - withholding tax for cross-border payments for services/royalties (affiliates, game providers, consultants). The rate depends on the double tax treaty (DTT) and recipient status (W-8/W-9/residency certificates).
- Place of Supply/Nexus - rules determining where to pay VAT/GST/GGR (player location, licenses, place of service).
2) When VAT/GST occurs and when it does not
2. 1. Player Operations (B2C)
In many jurisdictions betting/winnings are exempt from VAT: gambling tax (GGR/turnover duty) instead.
Bonuses and freespins: not a VAT object, but affect GGR/NGR and the game tax base (see local bonus offset rules).
2. 2. Counterparty Transactions (B2B)
PSP/Acquirer, anti-fraud, KYC, hosting, SaaS, affiliates - usually subject to VAT/GST under service rules.
Cross-border: reverse charge (self-payment from the recipient) and/or WHT for payments is possible.
Royalties/RevShare to studios - potential WHT facility (as royalties/services) + possible VAT at the recipient/vendor location.
2. 3. Border cases
DCC/conversion, FX spread: this is not a VAT per game, but the cost of a financial service (usually without VAT or with special modes) - take into account separately.
Fees for conclusions: B2C-fee can be subject to VAT as a payment for the service of the platform.
3) Place of Supply and settlement schemes
Gaming activity: Often tied to the jurisdiction of the player's license and/or location. The key is where the gambling tax arises.
B2B services: place of sale - place of recipient, reverse charge is applied (recipient charges and accepts for deduction).
B2C digital services (not games): OSS/One-Stop Shop (EU) or local GST registration at the customer's place is valid.
Practice: Segment flows by player country, counterparty country, service type and tax regime (GGR, VAT, WHT).
4) Accounting formulas and policies
4. 1. GGR and GGR tax
GGR = Σ Stakes_settled − Σ Payouts_settled
Tax_GGR = GGR × rate_GGR
Determine whether bonuses, jackpots, canceled bets are included in the base.
4. 2. VAT/GST by service (example with reverse charge)
VAT_due (supplier side) = 0 (если reverse charge)
VAT_due (receiver side) = Net × rate_VAT
VAT_recoverable = VAT_due (if eligible for deduction)
4. 3. WHT (Source Hold)
WHT = Gross_Payment × rate_WHT(DTT/ domestic)
Net_to_Partner = Gross_Payment − WHT
Keep the basis of the bet: contract, DTT article, certificates.
4. 4. NGR and "taxes included"
NGR = GGR − Bonuses − Provider RevShare − Platform Fees − Gaming Taxes
Fix NGR policy and formula version (v1/v2) for period comparability.
5) Accounting and posting (simplified)
Game tax (GGR duty) accrued:- DT: Tax Expense (GGR)
- Kt: Tax liabilities
- JT: VAT expense (self-charge)
- Ct: VAT payable
- DT: VAT recoverable
- Ct: VAT expense (if eligible for deduction - set-off)
- Dt: Marketing expenses/royalties
- Credit: Partner creditor (gross)
- On payment: Dt: Partner creditor (gross) → Kt: Bank (net), Kt: Taxes payable (WHT)
6) Data model (minimum)
ref. tax_regimes (
regime_id PK, name, type -- VAT GST GGR WHT
, country, rate, basis -- GGR Net Gross Service
, effective_from, effective_to, meta
)
ref. place_rules (
rule_id PK, flow -- B2C_GAME B2B_SERVICE B2C_SERVICE
, country_source, country_destination, place, vat_mode -- STANDARD REVERSE_CHARGE EXEMPT
, meta
)
finance. tax_events (
id PK, tx_id, user_id, counterparty_id, flow_type,
base_amount_reporting, tax_type, tax_rate, tax_amount_reporting,
country_source, country_destination, place_rule_id,
evidence -- geoip, KYC country, billing country, ip logs, etc.
, occurred_at, created_at, version, meta
)
finance. withholding_ledger (
id PK, partner_id, country_source, country_dest,
gross_amount, wht_rate, wht_amount, treaty_article, certificate_ref,
period, paid_at, meta
)
dw. ggr_rollup (
d, geo, product, stakes, payouts, bonuses, jackpots, ggr, ggr_tax
)
7) ETL/Processing
1. Segmentation of events: 'flow _ type' (game B2C, service B2B, payouts, affiliate).
2. Mode assignment: by'ref. place_rules` → VAT mode (standard/reverse/exempt).
3. Calculation of bases and taxes: GGR, VAT/GST, WHT; formula version logging.
4. Dock trail: store evidence of the implementation site (KYC country, IP, billing, BIN, geo PSP).
5. Aggregations: 'dw. ggr_rollup`, `withholding_ledger`, `vat_subledger`.
6. Reconciliation: reports with the regulator/tax, acts with partners (WHT gross↔net).
8) SQL templates
8. 1. GGR by day/country
sql
SELECT
DATE(settled_at) AS d,
country_player AS geo,
SUM(stake_amount_reporting) AS stakes,
SUM(payout_amount_reporting) AS payouts,
SUM(stake_amount_reporting) - SUM(payout_amount_reporting) AS ggr
FROM dw. game_settled
WHERE settled_at BETWEEN:from AND:to
GROUP BY 1,2;
8. 2. GGR tax calculation
sql
INSERT INTO finance. tax_events (tx_id, flow_type, base_amount_reporting, tax_type, tax_rate, tax_amount_reporting, occurred_at, version)
SELECT
NULL, 'B2C_GAME', g. ggr, 'GGR', r. rate, g. ggr r. rate, g. d, 'ggr_v1'
FROM dw. ggr_rollup g
JOIN ref. tax_regimes r
ON r. type='GGR' AND r. country=g. geo
AND g. d BETWEEN r. effective_from AND r. effective_to;
8. 3. VAT for services with reverse charge (B2B)
sql
SELECT s. invoice_id, s. partner_country, s. our_country,
s. net_amount_reporting AS base,
r. rate AS vat_rate,
s. net_amount_reporting r. rate AS vat_due_rc
FROM dw. supplier_invoices s
JOIN ref. place_rules p
ON p. flow='B2B_SERVICE' AND p. country_source=s. partner_country AND p. country_destination=s. our_country
JOIN ref. tax_regimes r
ON r. type='VAT' AND r. country=s. our_country
WHERE p. vat_mode='REVERSE_CHARGE'
AND s. invoice_date BETWEEN r. effective_from AND r. effective_to;
8. 4. WHT Partner List
sql
SELECT partner_id, country_source, country_dest,
SUM(gross_amount) AS gross,
AVG(wht_rate) AS rate_applied,
SUM(wht_amount) AS wht_total,
SUM(gross_amount - wht_amount) AS net_paid
FROM finance. withholding_ledger
WHERE period BETWEEN:p_from AND:p_to
GROUP BY 1,2,3;
9) Dashboards and KPIs
GGR, GGR-Tax by country/product; NGR after taxes and royalties.
VAT Exposure: VAT amount according to reverse/standard, share to deduction.
WHT Map: withholdings by country/partner, treaty savings (DTT savings).
Effective Tax Rate: `(GGRTax + VAT_non_recoverable + WHT_borne) / Revenue`.
Evidence Coverage: The proportion of transactions with a full set of evidence of the place of implementation.
Variance Reports: discrepancies between settlements and filed returns.
10) Alerts and thresholds
Evidence gap: share of transactions without 2 + independent geo confirmations> X% - P1.
Rate drift: applied rate ≠ reference (version/period) - P1.
WHT misapplied: hold does not match DTT/certificate - P1.
GGR anomaly: GGR jump ± 3 σ d/d or incorrect share of bonuses in the database - investigation.
VAT non-recoverable spike: non-recoverable VAT growth> Y% w/w.
11) Best practices (short)
1. Separate game taxes (GGR/turnover) and VAT/GST by service: different bases, different reporting contour.
2. Enter the versioning of formulas and rate guides; do not change history without 'version'.
3. Store the evidence of the implementation location: KYC country, IP, billing, BIN, geo PSP.
4. Separate withholding-ledger with reference to contracts, DTT articles and certificates.
5. For B2B services, use reverse charge, where appropriate; Maintain the inbound VAT registry.
6. Do reconciliation: calculation base ↔ declarations ↔ payments to the budget/WHT certificates.
7. Separately, consider non-taxable and non-deductible VAT amounts.
8. Write NGR policy (what is deducted and what is not) for stable analytics.
12) Implementation checklist
- Directories' tax _ regimes', 'place _ rules' with validity dates and versions.
- Витрины `ggr_rollup`, `vat_subledger`, `withholding_ledger`.
- Логика reverse charge и evidence enrichment (KYC/IP/BIN/PSP GEO).
- Automatically generates tax_events and reports by period.
- variance and alert contours (evidence, rates, WHT).
- Docking procedures: collection of residency certificates, W-8/W-9, DTT positions.
- NGR/GGR policies and exception documentation (jackpots/bonuses).
13) FAQ
Q: If rates are exempt from VAT, does that mean there is no VAT at all?
A: No. Services (PSP, affiliates, SaaS) and part of B2C-paid options remain in the VAT/GST zone.
Q: How not to "overpay" WHT?
A: Prepare a DTT package (residency certificate, W-8/W-9 forms, apostilles), fix the base of the rate and the validity period.
Q: Bonuses reduce GGR base?
A: Subject to jurisdiction. We need a bonus policy and binding to the regulator's standards.
Q: What course to apply for the tax base?
A: Historical at base recognition date (settled_at for GGR; date of invoice/service - for VAT). For reporting - fix 'fx _ rate _ at _ tax _ point'.
Summary
Taxes in iGaming are three different worlds: gaming taxes (GGR/turnover), indirect taxes (VAT/GST), and withholding taxes (WHT). Clear segmentation of flows, versions of bets and formulas, separate ledgers for VAT/WHT, evidence base of the implementation site and automated reconciliation turn the "minefield" into a manageable process - without surprises for P&L and cash flow.