GH GambleHub

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
VAT from counterparty services (reverse charge):
  • JT: VAT expense (self-charge)
  • Ct: VAT payable
  • DT: VAT recoverable
  • Ct: VAT expense (if eligible for deduction - set-off)
WHT withholding on affiliate/studio payment:
  • 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.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.