1. Dataset Description
1.1 Source
Data is extracted from DraftKings Inc.’s 2025 Form 10-K filed with the SEC on February 13, 2026. DraftKings is a digital sports entertainment and gaming company offering a Sportsbook, iGaming, and other gambling products. The filing is available at: https://ir.aboutdraftkings.com/files/doc_financials/2025/q4/0001883685-26-000013.pdf
1.2 Variables and Observations
The dataset has 3 rows, one per fiscal year (2023, 2024, 2025). Each row represents one full fiscal year of DraftKings’ consolidated operations. Key variables include: Year, Total Revenue, Sales & Marketing Expense, Sportsbook Handle, Sportsbook Net Revenue Margin, combined Sportsbook+iGaming revenue share, Average Monthly Unique Payers (MUPs), and Average Revenue per MUP (RpC).
1.3 Data Construction and Summary
annual <- data.frame(
Year = c(2023L, 2024L, 2025L),
Revenue = c(3665.4, 4767.7, 6054.5),
SalesMarketing = c(1200.7, 1264.9, 1379.9),
CostRevenue = c(2292.2, 2950.6, 3556.9),
Handle_B = c(37.4, 48.1, 53.6),
NRM_pct = c(5.6, 6.0, 7.1),
SB_iG_pct = c(91, 93, 93),
MUPs = c(2.7, 3.7, 4.0),
RpC = c(113, 106, 125)
) %>%
mutate(
SB_Revenue = (Handle_B * 1000) * (NRM_pct / 100),
iG_Revenue = Revenue * (SB_iG_pct / 100) - SB_Revenue,
Other_Rev = Revenue - SB_Revenue - iG_Revenue,
Mktg_Pct = SalesMarketing / Revenue * 100
)
annual %>%
select(Year, Revenue, SalesMarketing, SB_Revenue, iG_Revenue, MUPs, RpC) %>%
kable(digits = 1, caption = "Key annual metrics (all $ in millions execpt RpC)")| Year | Revenue | SalesMarketing | SB_Revenue | iG_Revenue | MUPs | RpC |
|---|---|---|---|---|---|---|
| 2023 | 3665.4 | 1200.7 | 2094.4 | 1241.1 | 2.7 | 113 |
| 2024 | 4767.7 | 1264.9 | 2886.0 | 1548.0 | 3.7 | 106 |
| 2025 | 6054.5 | 1379.9 | 3805.6 | 1825.1 | 4.0 | 125 |
2. Question 1 — Is DraftKings becoming more efficient at marketing?
2.1 Objective
We want to examine whether DraftKings’ sales and marketing expense is growing in proportion to revenue, or whether the company is achieving more efficient marketing as its brand and customer base mature.
2.2 Visualization 1A — Revenue vs. Marketing Spend
bar_data <- annual %>%
select(Year, Revenue, SalesMarketing) %>%
pivot_longer(cols = c(Revenue, SalesMarketing),
names_to = "Metric", values_to = "Value") %>%
mutate(Metric = recode(Metric,
Revenue = "Total Revenue",
SalesMarketing = "Sales & Marketing Expense"))
ggplot(bar_data, aes(x = factor(Year), y = Value, fill = Metric)) +
geom_col(position = position_dodge(width = 0.65), width = 0.6, alpha = 0.92) +
geom_text(aes(label = paste0("$", comma(round(Value, 0)), "M")),
position = position_dodge(width = 0.65),
vjust = -0.4, size = 3, fontface = "bold") +
scale_fill_manual(values = c("Total Revenue" = dk_navy,
"Sales & Marketing Expense" = dk_green)) +
scale_y_continuous(labels = label_dollar(suffix = "M", scale = 1),
expand = expansion(mult = c(0, 0.14))) +
labs(title = "Revenue vs. Sales & Marketing Expense",
subtitle = "Revenue grows faster than marketing spend",
x = "Fiscal Year", y = "Amount ($ Millions)") +
dk_theme2.3 Visualization 1B — Marketing Efficiency Ratio
ggplot(annual, aes(x = factor(Year), y = Mktg_Pct, group = 1)) +
geom_line(color = dk_navy, linewidth = 1.2) +
geom_point(size = 5, shape = 21, fill = dk_green, color = dk_navy, stroke = 1.5) +
geom_text(aes(label = paste0(round(Mktg_Pct, 0), "%")),
vjust = -1.2, size = 3.8, fontface = "bold", color = dk_navy) +
scale_y_continuous(labels = label_percent(scale = 1),
limits = c(0, 40),
expand = expansion(mult = c(0, 0.05))) +
labs(title = "Sales & Marketing as % of Revenue",
subtitle = "A declining ratio signals improving marketing efficiency",
x = "Fiscal Year", y = "Marketing / Revenue (%)") +
dk_theme2.4 Interpretation
Revenue grew 65% from 2023 to 2025 ($3,665M to $6,055M), while sales and marketing expense grew only 15% ($1,201M to $1,380M). The marketing-to-revenue ratio fell from 33% in 2023 to 23% in 2025. This confirms that DraftKings is achieving strong marketing leverage and barely needs to raise the marketing budget to significantly increase revenue.
3. Question 2 — How has Sportsbook revenue compared to iGaming revenue?
3.1 Objective
We want to compare the revenue mix of DraftKings’ two core product lines: Sportsbook and iGaming. With this we can understand their relative importance and what the trend implies about future growth potential.
3.2 Visualization 2A — Revenue Mix by Product Line
rev_long <- annual %>%
select(Year, SB_Revenue, iG_Revenue, Other_Rev) %>%
pivot_longer(cols = c(SB_Revenue, iG_Revenue, Other_Rev),
names_to = "Segment", values_to = "Revenue") %>%
mutate(
Segment = recode(Segment,
SB_Revenue = "Sportsbook",
iG_Revenue = "iGaming",
Other_Rev = "Other"),
Segment = factor(Segment, levels = c("Other", "iGaming", "Sportsbook"))
) %>%
group_by(Year) %>%
mutate(Pct = Revenue / sum(Revenue) * 100) %>%
ungroup()
rev_labels <- rev_long %>%
group_by(Year) %>%
arrange(Year, desc(Segment)) %>%
mutate(midpoint = cumsum(Pct) - Pct / 2)
ggplot(rev_long, aes(x = factor(Year), y = Pct, fill = Segment)) +
geom_col(width = 0.55, alpha = 0.93) +
geom_text(data = filter(rev_labels, Pct > 3),
aes(y = midpoint, label = paste0(round(Pct, 0), "%")),
size = 3.2, fontface = "bold", color = "white") +
scale_fill_manual(values = c(
"Sportsbook" = dk_navy, "iGaming" = dk_green, "Other" = dk_orange)) +
scale_y_continuous(labels = label_percent(scale = 1),
expand = expansion(mult = c(0, 0.02))) +
labs(title = "DraftKings Revenue Mix by Product Line",
subtitle = "iGaming's share of revenue is growing year over year",
x = "Fiscal Year", y = "Share of Total Revenue (%)") +
dk_theme + theme(legend.position = "right")3.4 Interpretation
Sportsbook has grown from 57% to 63% of total revenue over the past 3 years. iGaming has shrunk from 34% to 30%, while Other products have shrunk from ~9% to ~7%. This shows that for the most part, the proportions of each sector has been staying the same size relative to each other but Sportsbook revenue has been slightly increasing more than the others though.
4. Question 3 — How much of DraftKings’ revenue growth is driven by customer base growth?
4.1 Objective
We want to decompose year-over-year revenue growth into two components: the volume effect (more paying customers) vs the monetization effect (more revenue per customer).
4.2 Visualization 3A — MUPs and RpC Over Time
RpC_scale <- 5.5 / 200
ggplot(annual, aes(x = factor(Year))) +
geom_col(aes(y = MUPs), fill = dk_navy, width = 0.5, alpha = 0.85) +
geom_line(aes(y = RpC * RpC_scale, group = 1),
color = dk_orange, linewidth = 1.4) +
geom_point(aes(y = RpC * RpC_scale),
color = dk_orange, fill = "white", size = 4, shape = 21, stroke = 2) +
scale_y_continuous(
name = "Avg Monthly Unique Payers (M)",
limits = c(0, 5.5),
breaks = seq(0, 5, by = 1),
sec.axis = sec_axis(~ . / RpC_scale,
name = "RpC ($)",
breaks = seq(0, 200, by = 50))
) +
labs(title = "Customer Base (MUPs) vs. Revenue per Customer (RpC)",
subtitle = "Bars = MUPs (left axis, navy) | Line = RpC (right axis, orange)",
x = "Fiscal Year") +
dk_theme +
theme(axis.title.y.left = element_text(color = dk_navy),
axis.text.y.left = element_text(color = dk_navy),
axis.title.y.right = element_text(color = dk_orange),
axis.text.y.right = element_text(color = dk_orange))4.3 Visualization 3B — Revenue Growth Decomposition
decomp <- annual %>%
arrange(Year) %>%
mutate(
dMUPs = MUPs - lag(MUPs),
dRpC = RpC - lag(RpC),
Vol_effect = dMUPs * lag(RpC) * 12,
Mon_effect = MUPs * dRpC * 12
) %>%
filter(!is.na(dMUPs)) %>%
select(Year, Vol_effect, Mon_effect) %>%
pivot_longer(cols = c(Vol_effect, Mon_effect),
names_to = "Driver", values_to = "Amount") %>%
mutate(Driver = recode(Driver,
Vol_effect = "Volume Effect (more customers)",
Mon_effect = "Monetization Effect (more $ per customer)"))
ggplot(decomp, aes(x = factor(Year), y = Amount, fill = Driver)) +
geom_col(position = position_dodge(width = 0.65), width = 0.6, alpha = 0.9) +
geom_text(aes(label = paste0(ifelse(Amount >= 0, "+", ""), round(Amount, 0), "M")),
position = position_dodge(width = 0.65),
vjust = ifelse(decomp$Amount >= 0, -0.4, 1.2),
size = 3.1, fontface = "bold") +
geom_hline(yintercept = 0, color = "grey40", linewidth = 0.5) +
scale_fill_manual(values = c(
"Volume Effect (more customers)" = dk_navy,
"Monetization Effect (more $ per customer)" = dk_orange)) +
scale_y_continuous(labels = label_dollar(suffix = "M", scale = 1),
expand = expansion(mult = c(0.12, 0.15))) +
labs(title = "Revenue Growth Decomposition: Volume vs. Monetization",
subtitle = "Volume drove 2024 growth; monetization drove 2025 growth",
x = "Fiscal Year (vs. prior year)",
y = "Incremental Revenue Contribution ($M)",
caption = paste0("Volume effect = dMUPs x prior RpC x 12. ",
"Monetization effect = new MUPs x dRpC x 12.")) +
dk_theme + theme(legend.position = "top")4.4 Interpretation
Number of Customers grew steadily from 2.7M to 4.0M, while Revenue per Customer dipped in 2024 before recovering in 2025. In 2024, volume drove +$1,598M in growth but a falling RpC offset -$319M of that. In 2025, customer growth slowed to +0.3M but RpC recovered to $125, adding +$701M through monetization alone. DraftKings grew in 2024 by getting bigger. DraftKings grew in 2025 by getting better.
5. Summary
DraftKings’ marketing-to-revenue ratio fell from 33% to 23% over three years, confirming it’s improving efficiency.
Sportsbook sector leads revenue at 63% of the mix. It’s very slowly eating away at the rest, increasing it’s importance to company success.
Revenue growth shifted from volume-driven in 2024 to monetization-driven in 2025, pointing to a maturing business.