Telecom ARPU and churn: choose the subscriber base before you divide
In this article (6 sections)
Related programme: the Data Analytics with Generative AI course (3–4 months; ₹90,000 (inclusive of GST) · EMI from ₹4,000/month).
Telecom ARPU (average revenue per user) is a period's revenue divided by a subscriber count, and the count you choose decides the story. Dividing by the closing base, by the average of opening and closing, or only by revenue-generating subscribers can turn the same month into a small fall, a flat month or a steep drop. Choose the base that matches the question, print it beside the number, and check the like-for-like base of continuing subscribers before you explain any movement.
One month, three ARPUs
The synthetic prepaid circle below has 1,000 SIMs on the books through August. In September, 100 disconnect mid-month and 150 new SIMs activate on 22 September with a ₹99 starter pack. Every continuing customer spends exactly what they spent in August, and one in five SIMs on the books generates no revenue at all, a pattern often seen with secondary SIMs in dual-SIM handsets.
-- Synthetic prepaid circle: 1,150 SIM ids over Aug and Sep 2026 (not real operator data)
CREATE TABLE subs (sub_id INTEGER PRIMARY KEY, activated TEXT, disconnected TEXT);
CREATE TABLE usage (sub_id INTEGER, month TEXT, revenue REAL);
WITH RECURSIVE n(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM n WHERE i<1150)
INSERT INTO subs
SELECT i,
CASE WHEN i > 1000 THEN '2026-09-22' ELSE '2025-01-01' END, -- 150 late-month adds
CASE WHEN i <= 1000 AND i % 10 = 0 THEN '2026-09-15' END -- 100 disconnections
FROM n;
-- existing SIMs: 20% generate no revenue; payers spend 199 to 599 a month
-- leavers pay half a month in September; new SIMs buy a 99 starter pack
INSERT INTO usage
SELECT s.sub_id, m.month,
CASE WHEN s.sub_id > 1000 THEN 99
WHEN (s.sub_id * 37) % 100 < 80 THEN (199 + (s.sub_id % 5) * 100)
* CASE WHEN m.month = '2026-09' AND s.disconnected IS NOT NULL THEN 0.5 ELSE 1 END
ELSE 0 END
FROM subs s, (SELECT '2026-08' AS month UNION ALL SELECT '2026-09') m
WHERE s.activated <= date(m.month || '-01', '+1 month', '-1 day')
AND (s.disconnected IS NULL OR s.disconnected >= m.month || '-01');Compute the base three ways, month by month:
WITH m(month, m_start, m_end) AS (
VALUES ('2026-08', '2026-08-01', '2026-08-31'), ('2026-09', '2026-09-01', '2026-09-30')),
b AS (
SELECT m.month,
(SELECT COUNT(*) FROM subs WHERE activated < m.m_start
AND (disconnected IS NULL OR disconnected >= m.m_start)) AS opening,
(SELECT COUNT(*) FROM subs WHERE activated <= m.m_end
AND (disconnected IS NULL OR disconnected > m.m_end)) AS closing,
(SELECT COUNT(*) FROM usage u WHERE u.month = m.month AND revenue > 0) AS paying,
(SELECT SUM(revenue) FROM usage u WHERE u.month = m.month) AS revenue,
(SELECT COUNT(*) FROM subs WHERE disconnected BETWEEN m.m_start AND m.m_end) AS churned
FROM m)
SELECT month, opening, closing, paying, revenue, churned,
ROUND(revenue / closing, 2) AS arpu_closing,
ROUND(revenue / ((opening + closing) / 2.0), 2) AS arpu_avg_base,
ROUND(revenue / paying, 2) AS arpu_paying,
ROUND(100.0 * churned / ((opening + closing) / 2.0), 2) AS churn_pct
FROM b ORDER BY month;| Month | Opening | Closing | Paying SIMs | Revenue (₹) | ARPU on closing | ARPU on average base | ARPU on paying SIMs | Churn % of average base |
|---|---|---|---|---|---|---|---|---|
| Aug 2026 | 1,000 | 1,000 | 800 | 3,19,200 | 319.20 | 319.20 | 399.00 | 0.00 |
| Sep 2026 | 1,000 | 1,050 | 950 | 3,26,090 | 310.56 | 318.14 | 343.25 | 9.76 |
Revenue rose 2.2%. Yet ARPU on the closing base fell 2.7%, on the average base it fell 0.3%, and on paying SIMs it fell 14.0%. Nobody changed their spending. The movement is entirely in who was counted.
Opening, closing or average subscribers: pick per question
| Question being asked | Base to use | Why |
|---|---|---|
| How much does the network earn per SIM it carries? | average of opening and closing base | revenue accrues through the month, so the base should too |
| Are paying customers spending more or less? | revenue-generating SIMs, continuing customers only | removes silent SIMs and first-month starter packs |
| How does our circle compare with a published industry figure? | whatever the publisher uses | a mismatched definition makes the comparison meaningless |
| What is the revenue run-rate from today's base? | closing base | but label it a run-rate, not ARPU |
The closing base is the most common choice in internal dashboards because it is one number from one snapshot. It penalises every month with late activations and flatters every month with a disconnection drive, since disconnected SIMs vanish from the denominator on the last day.
TRAI publishes quarterly ARPU for the industry in its Performance Indicator Reports. Read the report's own notes for how its revenue and subscriber figures are defined before putting your circle's number beside it. An internal ARPU built on a different base is not wrong, but it is not comparable.
Look at continuing customers before explaining anything
-- SIMs on the books for the whole of both months: the like-for-like base
SELECT u.month, COUNT(*) AS sims, SUM(u.revenue) AS revenue,
ROUND(SUM(u.revenue) / COUNT(*), 2) AS arpu_continuing
FROM usage u JOIN subs s USING (sub_id)
WHERE s.activated < '2026-08-01' AND s.disconnected IS NULL
GROUP BY u.month;
-- where September's revenue came from
SELECT CASE WHEN s.activated >= '2026-09-01' THEN 'new SIMs'
WHEN s.disconnected IS NOT NULL THEN 'leavers'
ELSE 'continuing' END AS segment,
COUNT(*) AS sims, SUM(u.revenue) AS revenue
FROM usage u JOIN subs s USING (sub_id)
WHERE u.month = '2026-09' GROUP BY segment ORDER BY revenue DESC;| Segment in September | SIMs | Revenue (₹) |
|---|---|---|
| continuing | 900 | 3,03,280 |
| new SIMs | 150 | 14,850 |
| leavers | 100 | 7,960 |
The 900 SIMs on the books for both whole months have ARPU of ₹336.98 in August and ₹336.98 in September. That is the like-for-like view, and it says the base of existing customers is unchanged. Leavers earned ₹15,920 in August and ₹7,960 in their half-month of September; new SIMs added ₹14,850. Once revenue is split this way, "ARPU fell" becomes a specific, checkable sentence about acquisition and churn.
Churn has the same denominator problem
Churn in the table is 100 disconnections divided by the average base of 1,025, which is 9.76%. On the opening base it is exactly 10.00%. The gap is small here and larger in a circle that is growing or shrinking fast. The more serious churn question in prepaid is what counts as a disconnection at all:
- Operator-initiated removal. Many SIMs leave because they stop recharging and a validity or inactivity policy eventually removes them. The churn is recorded months after the customer actually stopped.
- Port-outs. Mobile number portability removes a paying customer on a known date. Report it separately; it is the churn that competitors caused.
- Silent SIMs. A SIM with no revenue for 60 days is on the books but not a customer in any commercial sense. Track it as "at risk" instead of waiting for the disconnection.
Telecom quirks that break the ratio
- 1Recharge date versus service period. A hypothetical ₹2,999 annual pack recharged in September is not September revenue for eleven twelfths of its value. If revenue comes from the recharge ledger rather than from recognised revenue, long-validity packs inflate the recharge month. The fix is covered in pack mix by validity-normalised revenue.
- 2Tax inside the price. Prepaid prices include GST. Decide whether your revenue is net of GST and say so; finance will compare your number with net revenue.
- 3Dual-SIM households. One person with two SIMs is two subscribers. That is correct for network ARPU and misleading for any per-customer claim.
- 4Mid-month activations counted as a whole month. A new SIM active for eight days should not be expected to produce a month of revenue. The average-base method partly corrects for this; pro-rating days on the books corrects it fully.
The note to the circle head
Keep it to three sentences and one table: "September revenue grew 2.2% to ₹3,26,090. ARPU on the average base was ₹318.14, against ₹319.20 in August; continuing customers were flat at ₹336.98, so the dip comes from 150 late-month activations on the ₹99 starter pack and 100 disconnections. The starter-pack cohort's second-month recharge is the number to watch in October." The circle head acts on the cohort, so name it.
Splitting a headline ratio into its population effects is a habit worth building early; it runs through the SQL and reporting modules of the Data Analyst course.
Frequently asked questions
How is ARPU calculated in telecom?
ARPU is revenue for a period divided by the number of subscribers in that period. The number that changes the answer is the subscriber count, which can be the closing base, the average of opening and closing, or only subscribers who generated revenue. State which one you used and keep it fixed across months.
Why can ARPU fall when revenue is growing?
If the subscriber base grows faster than revenue, ARPU falls. Late-month activations and low-value starter packs add subscribers who contribute little revenue in their first month, so closing-base ARPU drops even when existing customers spend exactly as before.
Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.
This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.
Explore Data Analytics with Generative AI