Telecom · Methodology, data & sources

How this was built, and what it cannot tell you.

Every figure in this programme resolves to a dataset below, every dataset carries its publisher and retrieval date, and every automated data-quality finding is published — including the ones that are inconvenient.

The pipeline

raw → processed → site
01 Ingestion The regulator publishes one HTML page per year; each is snapshotted with its retrieval date and SHA-256 so the parse is reproducible and a later revision is detectable. Metrics are keyed on (section, row label), never on row position, because the row order changes between years. scripts/ingest_cam.py
02 Filings Sixty-three operator filings harvested from the CMDA disclosure portal, indexed with their disclosure URL, publication date and file hash. Income statements parsed by line-item label, with the cash-flow block that shares the same physical rows cut away before any number is read. scripts/fetch_filings.py · scripts/extract_financials.py
03 Products Ooredoo's catalogue scraped from its published pages and its public rate-plan endpoint; Dhiraagu's read from its rendered plan pages, which reject scripted fetches. Every record carries its observation date. scripts/ingest_products.py · scripts/normalise_products.py
04 Quality Identity checks, completeness checks, outlier detection and external validation run on every processed dataset. Nothing is silently dropped or corrected; findings are published on this page. scripts/qc.py
05 Modelling Five candidate forecasting models, rolling-origin backtests, MASE-scored against the seasonal-naive baseline. scripts/forecast.py
06 Publication The site reads six JSON bundles and computes nothing analytical of its own beyond what a reader’s own slider inputs demand. scripts/build_site_data.py

Data sources

retrieved 2026-08-18
Maldives telecom subscriptions, monthly

Communications Authority of Maldives (CAM)

Tier 1
Source https://www.cam.gov.mv/stats.htm
Observation period 2012-01–2026-05
Frequency monthly
Retrieved 2026-08-18
Method Scraped from CAM's per-year HTML tables. Metrics are keyed on (section, row label) rather than row order, because the row order changes between years. Values are as published; no interpolation, smoothing or revision is applied at ingestion.
  • page header reads '2025 MONTHLY FIGURES' but the file is stats_monthly2026.htm; year taken from the URL
Quarterly and annual financial statements

Ooredoo Maldives Plc · Dhivehi Raajjeyge Gulhun Plc, via CMDA InformInvestor

Tier 1
Source https://informinvestor.cmda.gov.mv
Observation period 2022-Q4 – 2026-Q2 (quarterly); 2021–2025 (annual)
Frequency quarterly
Retrieved 2026-08-18
Method Income statements parsed from the filed PDFs, keyed on line-item label. Validated by reproducing both operators' separately published full-year revenue for 2024 and 2025 to the rounded million.
  • Primary filings for the two licensed Maldives telecom operators. The portal's coverage begins in 2023; earlier years are taken from the five-year summaries inside the annual reports, which is recorded on each derived series.
Published mobile and broadband products, both operators

Ooredoo Maldives Plc, Dhivehi Raajjeyge Gulhun Plc (Dhiraagu)

Tier 1
Source https://www.ooredoo.mv/ (sitemap-wide plan catalogue + public rate-plan endpoint)
Observation period point-in-time snapshot
Frequency point-in-time
Retrieved 2026-08-18
Method Ooredoo's catalogue scraped from its published pages and public rate-plan endpoint; Dhiraagu's read from its rendered plan pages. Unit economics derived, with the consumption assumption stated.
  • Ooredoo publishes rate plans on its website but sells most prepaid add-on packs through its app, USSD and self-care, which are not public. Dhiraagu publishes its full prepaid pack ladder. The two catalogues are therefore not symmetric, and any 'portfolio size' comparison between them measures disclosure, not product count.
  • A snapshot cannot describe a portfolio's history; no operator publishes withdrawn products or past prices.
  • Headline data allowances on very short-validity packs are fair-use ceilings, not volumes a customer can consume.
Resident population, medium-variant projection anchors

Maldives Bureau of Statistics, via Nyra People programme

Tier 2
Source https://statisticsmaldives.gov.mv/
Observation period 2022–2032
Frequency annual anchors, interpolated monthly
Retrieved 2026-08-18
Method Geometric interpolation between the 2022 and 2032 anchors.
  • Used only as a penetration denominator. Intercensal monthly population is a model; no official monthly series exists.
Monthly tourist arrivals

Ministry of Tourism, via the Nyra tourism pipeline

Tier 1
Source https://www.tourism.gov.mv/statistics
Observation period 2009-01 – present
Frequency monthly
Retrieved 2026-08-18
Method Reused from the Nyra tourism programme's published artifacts.
  • Used to test whether the mobile subscription base moves with the visitor cycle. Arrivals count entries, not SIM purchases.

Source hierarchy: Tier 1 is the regulator, the operators' own filings and official statistics; Tier 2 is multilateral and industry bodies; Tier 3 is reputable press, used only for context and never as the source of a quantitative claim.

Data quality

5 warn · 4 info · 4 pass

These checks run over every processed dataset on every build. Suspicious observations are flagged and retained, never silently dropped — a reader should be able to see the same problems the analysis had to work around.

identity: mobile total = prepaid + postpaid

cam_monthly — 4 of 173 months do not reconcile

warn

February 2012 is the material case: the published total (508,971) is lower than its own components (538,174) and lower than both the month before and the month after, which is the signature of a transcription error in the Total row rather than a real 5% one-month collapse. The remaining breaks are small.

Action: flagged, not corrected; February 2012 is excluded from growth-rate calculations and marked on every chart that shows it

4 observations
  • 2012-01: gap +3,511
  • 2012-02: gap -29,203
  • 2013-02: gap +2,000
  • 2021-12: gap -9
identity: fixed lines = Malé region + other regions

cam_monthly — 9 of 173 months differ, all by 200 lines or fewer

warn

Small residuals of ±1 to 200 lines against a base of 11,000–26,000. Consistent with rounding or single-cell typos in a hand-maintained table.

Action: left as published; regional shares are computed on the components, not the total

9 observations
  • 2017-06: gap +1
  • 2017-07: gap +200
  • 2017-12: gap +1
  • 2020-05: gap +8
  • 2021-11: gap +1
  • 2022-08: gap +90
  • 2025-12: gap -1
  • 2026-03: gap -1
  • 2026-04: gap +1
definition: reported EBITDA vs EBITDA derived from the income statement

operator_quarterly — the two operators' reported EBITDA are not built the same way

warn

Adding depreciation and amortisation back to the reported operating result gives MVR 1,648m for Dhiraagu in 2025 against MVR 1,638m reported — a 0.6% difference. The same arithmetic gives MVR 1,167m for Ooredoo against MVR 1,263m reported — 8.3%. Ooredoo's reported EBITDA therefore excludes roughly MVR 96m of costs that its own income statement charges above the operating line, or is struck on a different consolidation. Comparing the two headline margins (57% and 58%) without saying so would be a like-for-unlike comparison.

Action: the site reports a consistently derived EBITDA for both operators alongside each operator's own reported figure, and never mixes the two in one comparison

2 observations
  • Dhiraagu 2025: derived 1,648 vs reported 1,638 (+0.6%)
  • Ooredoo 2025: derived 1,167 vs reported 1,263 (−7.6%)
coverage asymmetry

products — the two catalogues are not comparable on count

warn

Dhiraagu publishes its complete prepaid pack ladder on its website; Ooredoo publishes rate plans but sells most prepaid add-ons through its app, USSD (*929#) and self-care, which are not public. A count of published products measures disclosure practice, not portfolio breadth.

Action: product-count comparisons are not made; price comparisons are restricted to segments where both operators publish

2 observations
  • Dhiraagu: 124 published products
  • Ooredoo Maldives: 80 published products
headline allowance is not a volume

products — 45 products advertise more data than the validity allows anyone to use

warn

Dhiraagu's FLEXIHOUR 20 advertises 100GB + 25GB with one hour of validity. On the headline it costs MVR 0.20 per GB, which would make it the cheapest data sold in the Maldives by a factor of fifty. It is an unlimited hour, priced as access.

Action: a consumption-capped price per GB is computed alongside the headline one, and the cap is stated as an assumption

outlier: month-on-month change in mobile_total

cam_monthly — 2 months move more than 5%

info

Large single-month moves in a subscription series are usually administrative (a base clean-up, a reclassification) rather than behavioural. April 2022's mobile-broadband reading is 22% below both neighbours and returns to trend the following month.

Action: retained; each is listed so a reader can judge it, and none is smoothed

2 observations
  • 2012-02: -5.4%
  • 2012-03: +6.1%
outlier: month-on-month change in broadband_mobile

cam_monthly — 34 months move more than 5%

info

Large single-month moves in a subscription series are usually administrative (a base clean-up, a reclassification) rather than behavioural. April 2022's mobile-broadband reading is 22% below both neighbours and returns to trend the following month.

Action: retained; each is listed so a reader can judge it, and none is smoothed

34 observations
  • 2012-02: -8.0%
  • 2012-06: +5.6%
  • 2012-08: +6.2%
  • 2012-11: +7.4%
  • 2012-12: -15.1%
  • 2013-01: +13.7%
  • 2013-05: +9.4%
  • 2013-06: +6.6%
  • 2013-07: +7.6%
  • 2013-12: -21.0%
  • 2014-01: +33.3%
  • 2014-03: +11.2%
  • 2014-04: +5.8%
  • 2014-09: -5.7%
  • 2014-10: +12.1%
  • 2014-12: +14.5%
  • 2015-03: +9.1%
  • 2015-04: +5.7%
  • 2015-07: +6.0%
  • 2015-12: +6.4%
  • 2016-03: +7.6%
  • 2022-04: -22.0%
  • 2022-05: +32.3%
  • 2022-09: +10.4%
  • 2022-10: +8.3%
  • 2023-01: +10.8%
  • 2023-02: -6.2%
  • 2023-03: +16.8%
  • 2023-04: +9.5%
  • 2023-05: -13.0%
  • 2023-06: -6.6%
  • 2024-03: +14.8%
  • 2024-05: +14.1%
  • 2025-01: -15.5%
structural break

cam_monthly — two regime changes are visible and are handled explicitly

info

Mobile subscriptions peaked at 907,763 in September 2017 and then fell for four years. The 2018 decline is gradual — prepaid falls month after month while postpaid rises — so it reads as substitution, not a one-off base clean-up. The 2020 fall is abrupt and coincides with the border closure and the departure of migrant workers and tourists. Neither is a data error.

Action: the forecasting work fits from 2022 onward and reports what happens when the pre-COVID period is included instead

3 observations
  • peak 2017-09: 907,763
  • trough 2021-12: 706,034
  • 2026-05: 839,615
completeness of derived economics

products — 81 of 204 products lack a stated allowance or validity

info

Voice, SMS and roaming packs often state minutes rather than gigabytes, and recurring rentals have no expiry. Those products have no price-per-GB and are excluded from data-price charts rather than given a zero.

Action: excluded from the affected metric, retained everywhere else

completeness

cam_monthly — 173 consecutive months, 2012-01 to 2026-05

pass

CAM publishes one page per year; a missing month means the page cell was blank.

Action: none required

identity: mobile broadband = data-with-voice + data-only + LTE fixed

cam_monthly — identity holds exactly in all 101 months where components are published

pass

This is a definitional finding, not just a check. CAM's 'Broadband (Mobile)' series includes LTE fixed-wireless broadband — a household product sold on a router, not a mobile subscription. Anyone reading the headline as mobile-only data users overstates them by the LTE component (13,284 of 342,800 in December 2025).

Action: the analysis reports mobile broadband excluding LTE fixed wherever the distinction matters, and says which is being used

identity: revenue = mobile + fixed/broadband/enterprise + other

operator_quarterly — 30 of 30 operator-quarters reconcile to within MVR 1,000

pass

The revenue split is the analytically valuable part of these filings and it reconciles, which is the main evidence that the extraction read the right columns.

Action: any break is listed and re-read from the filing

external validation against published annual figures

operator_quarterly — quarterly extraction reproduces both operators' published full-year revenue

pass

The quarterly income statements are parsed out of PDFs; the annual reports state the year total independently. Agreement to the rounded million is the strongest available evidence that the parse is right.

Action: no adjustment

4 observations
  • ooredoo 2025: quarters sum to MVR 2,216m; annual report states 2,216m
  • ooredoo 2024: quarters sum to MVR 2,203m; annual report states 2,203m
  • dhiraagu 2025: quarters sum to MVR 2,838m; annual report states 2,838m
  • dhiraagu 2024: quarters sum to MVR 2,787m; annual report states 2,787m

Forecasting method

fit from 2022-01 · 6 origins · h=12
Why the estimation window starts in 2022

The monthly subscription series contains two regime changes: a four-year decline from the September 2017 peak, driven by prepaid, and an abrupt fall in 2020 when the border closed and migrant workers and visitors left. Fitting a trend model across either produces a confident and wrong answer. The published models are estimated from January 2022 forward; the full-sample backtest is computed too and stored alongside, so the choice of window is visible rather than assumed. This follows the house rule on structural breaks: they are handled explicitly, never silently fitted over.

Seasonal naive (baseline)
What it does Repeat the value from twelve months ago.
Why it is here Every forecast on this site is scored against it. A model that cannot beat it does not ship.
What it assumes That the series has a stable annual pattern and no trend.
Where it fails Ignores trend entirely, which in a growing base means it drifts steadily low.
Naive with drift
What it does Extend the average slope of the estimation window.
Why it is here It won. On every series here, over six rolling origins, it produced the lowest MASE.
What it assumes That the recent trend continues and there is no meaningful seasonality left.
Where it fails Cannot turn. It will be wrong at exactly the moment a turning point matters most, which is why the interval and the scenarios are shown with it.
Holt's linear trend
What it does Exponentially weighted level and trend.
Why it is here The natural refinement of drift, weighting recent observations more heavily.
What it assumes A locally linear trend with no seasonality.
Where it fails On these series it added parameters without adding accuracy.
Holt-Winters, additive
What it does Level, trend and an additive seasonal component.
Why it is here The standard choice for a monthly series with a season.
What it assumes A stable additive annual pattern.
Where it fails Subscription counts are administrative rather than seasonal; the seasonal term fits noise. It was competitive on total mobile and clearly worse on broadband.
SARIMA(1,1,1)(0,1,1)₁₂
What it does Seasonal ARIMA with one seasonal difference.
Why it is here Included because it is what a reader would expect to see tried.
What it assumes Stationarity after differencing, and enough history to identify the parameters.
Where it fails On a four-year estimation window a seasonal difference leaves very little to fit. On postpaid it diverged outright — its backtest MASE runs into the thousands. That result is published rather than hidden, because a diverging model is a finding about the data, not an embarrassment.
Scoring, intervals and scenarios

Models are scored on MAE, RMSE, MAPE and MASE across a rolling origin with a twelve-month horizon. MASE is scaled by the in-sample seasonal-naive error, so below 1.0 means the model beats repeating last year's month. Prediction intervals are empirical — the 80th percentile of the model's own backtest errors at each horizon step, widened with the square root of time beyond the backtested horizon — rather than the model's parametric interval, because a model selected by backtest should report the uncertainty it actually produced. Bull and bear scenarios are not separate models: they are the base path shifted by a stated ±2 percentage points of annual growth, so the reader can see exactly which assumption creates the spread.

Definitions and derived metrics

Metric Definition Basis
Market mobile ARPU Both operators' mobile service revenue ÷ average CAM mobile subscriptions for the same year, expressed monthly. Derived
Penetration Mobile subscriptions ÷ interpolated resident population × 100. Exceeds 100% because of multi-SIM holding, migrant workers and visitor SIMs. Derived
EBITDA (derived) Results from operating activities + depreciation and amortisation, from the filed income statement. Computed identically for both operators. Derived
EBITDA (reported) As stated by each operator in its annual report. Not the same construction — see the data-quality finding above. Operator
Price per day Product price ÷ stated validity in days. Derived
Price per GB, headline Product price ÷ advertised data allowance. Derived
Price per GB, consumption-capped Product price ÷ min(advertised allowance, 3 GB × validity days). The cap is an analyst assumption, stated here and on every chart that uses it. Derived, assumption
Mobile broadband, excl. LTE fixed CAM's mobile broadband series less LTE fixed-wireless broadband, which is a household router product rather than a mobile subscription. Derived
What this programme cannot do
  • No market shares. The operators' customer counts and the regulator's subscription counts are different concepts, and no operator publishes its own definition.
  • No churn. Not disclosed by either operator, not required by the regulator or the exchange.
  • No product volumes. Which means no measured elasticity, no revenue mix by product, and no cannibalisation measurement — only frameworks with stated assumptions.
  • No usage data. CAM counts subscriptions, not traffic. There is no published Maldivian series for data volume per subscriber.
  • No product history. Operators publish what is on sale today. A snapshot cannot describe last year's portfolio, so the product data on this site is explicitly a point-in-time observation.
  • Almost no geography. The only geographic split the regulator publishes is fixed telephone lines, Malé region against everywhere else.

Where a section needed one of these and could not have it, the site builds the framework, labels it, and names the dataset that would make it real. That is the difference between a gap and a fabrication, and it is the only defensible way to do this work from outside.