Rationale

First-level agenda-setting theory predicts that issues featured prominently in media content often become prominent in the minds of media audiences. Because media outlets have limited time and resources, they must make decisions about which stories receive the most attention. As a result, different issues compete for prominence on the media agenda. In college athletics, financial issues have become increasingly important as conferences negotiate television contracts, generate revenue, and navigate name, image, and likeness (NIL) opportunities for student-athletes. The Southeastern Conference (SEC) and the Big Ten are two of the most prominent conferences in college athletics, and their financial power has become an important part of discussions about the future of college sports.

Drawing on first-level agenda-setting theory, my project will compare the prominence of financial issues in media coverage of the SEC and the Big Ten. Specifically, the analysis will compare the number of stories per week collected by Media Cloud’s United States - National news archive that discuss money-related issues involving each conference during the selected study period. These issues may include conference revenue, television contracts, NIL, and other financial matters. I hypothesize that the SEC will receive more money-related media coverage than the Big Ten.

The results will contribute to an understanding of how financial issues involving major college athletic conferences compete for attention on the media agenda. Comparing the SEC and the Big Ten will help reveal whether media outlets devote different levels of attention to the financial aspects of these conferences and how their relative prominence changes over time. This analysis may also provide insight into how media attention shapes the public conversation surrounding the financial power and future of college athletics.

Hypothesis

Average weekly coverage volume of money talks between the SEC and Big Ten differed between July 19th 2026, and October 24th 2026.

Variables & method

Weekly coverage volume of the two conferences served as the dependent variable for the analysis. It was measured continuously as the number of stories published per week that included terms a MediaCloud.org query specified as indicating coverage of one war or the other.

The independent was conference measured categorically as either “SEC Conference” or “Big Ten Conference” and operationalized as containing keywords likely to be unique to stories about one conference or the other.

Stories about the Big Ten and money were operationalized as stories matching the MediaCloud query:

BigTen_query <-
  "((B1G Football OR Big Ten Football) AND
     (NIL OR Endorsements OR Donations) AND
     (money OR ads OR sponsor OR
      contract* OR deal*))"

Meanwhile, stories about the SEC and money were operationalized as stories matching this MediaCloud query:

SEC_query <-
  "((SEC OR South Eastern Conference) AND
     (NIL OR Endorsements OR Donations) AND
     (money OR ads OR sponsor OR
      contract* OR deal*))"

Eventually, I will use a paired-samples t-test to assess the statistical significance of coverage volume variation between the two story topics.

Results & discussion

Media Cloud Topic Summary Statistics
topic Total_Stories Weekly_Minimum Weekly_Maximum Weekly_Median Weekly_Mean Weekly_SD
SEC and Money 63 0 18 3 4.5 4.54
B1G and Money 7 0 3 0 0.5 0.94

One notable finding from the graph is that the SEC received more money-related media coverage than the Big Ten during most of the study period. The SEC’s weekly story count fluctuated considerably, with noticeable increases in late August, mid-September, and late September. The largest increase occurred around September 27, 2026, when coverage of the SEC reached approximately 18 stories in one week. In comparison, the Big Ten generally received little money-related coverage, recording zero stories in most weeks and reaching a maximum of approximately three stories in early September.

One possible explanation for the difference is that financial developments involving the SEC attracted greater media attention during this period. Discussions surrounding conference revenue, television contracts, NIL, and the financial implications of college football may have contributed to the SEC’s higher coverage volume. However, further examination of the stories published during the largest spikes would be necessary to determine which specific financial issues contributed to these increases.

Overall, the graph provides preliminary support for my hypothesis that the SEC receives more money-related media coverage than the Big Ten. The SEC consistently received more coverage in most weeks, although there were a few weeks when the conferences received similar amounts or the Big Ten received more coverage. These findings illustrate how financial issues involving different college athletic conferences compete for prominence on the media agenda. From the perspective of first-level agenda-setting theory, the greater volume of coverage devoted to the SEC may increase the visibility of its financial issues among audiences. However, this analysis measures media coverage rather than audience perceptions, so it cannot establish whether audiences actually consider the SEC’s financial issues more important.

Code:

Here is the code that produced the analysis.

############################################################
# RUN ONCE TO SAVE YOUR MEDIACLOUD API KEY
############################################################

key <- "7854dea1fba0c604fb12cbf1977e01e4c42b8ff1"

write(
  paste0("MEDIACLOUD_KEY=", key),
  file = "~/.Renviron",
  append = TRUE
)

readRenviron("~/.Renviron")
nzchar(Sys.getenv("MEDIACLOUD_KEY"))

############################################################

############################################################
# STEP 1: Install and Load Required Packages
############################################################

required_packages <- c(
  "tidyverse",
  "httr2",
  "lubridate",
  "plotly",
  "knitr",
  "kableExtra"
)

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

library(tidyverse)
library(httr2)
library(lubridate)
library(plotly)
library(knitr)
library(kableExtra)

############################################################
# STEP 2: Verify Media Cloud API Key
############################################################

if (!nzchar(Sys.getenv("MEDIACLOUD_KEY"))) {
  stop(
    "No Media Cloud API key was found.\n",
    "Run the setup section once,\n",
    "then restart R and try again."
  )
}

mc_key <- Sys.getenv("MEDIACLOUD_KEY")

############################################################
# STEP 3: Define the Date Range
############################################################

start_date <- "2026-07-19"
end_date   <- "2026-10-24"

############################################################
# STEP 4: Define Search Queries
############################################################

BigTen_query <-
  "((B1G Football OR Big Ten Football) AND
     (NIL OR Endorsements OR Donations) AND
     (money OR ads OR sponsor OR
      contract* OR deal*))"

SEC_query <-
  "((SEC OR South Eastern Conference) AND
     (NIL OR Endorsements OR Donations) AND
     (money OR ads OR sponsor OR
      contract* OR deal*))"

############################################################
# STEP 5: Create Topic Definitions
############################################################

topics <- c(
  "B1G and Money" = BigTen_query,
  "SEC and Money" = SEC_query
)

############################################################
# STEP 6: Create a Function to Retrieve Daily
# Story Counts
############################################################

mc_counts_over_time <- function(
    query,
    start_date,
    end_date,
    collection_id = 34412234
) {
  
  resp <-
    request(
      "https://search.mediacloud.org/api/search/count-over-time"
    ) |>
    req_headers(
      Authorization = paste("Token", mc_key)
    ) |>
    req_url_query(
      q = query,
      start = start_date,
      end = end_date,
      platform = "onlinenews-mediacloud",
      cs = collection_id
    ) |>
    req_perform()
  
  results <- resp |>
    resp_body_json()
  
  map_dfr(
    results$count_over_time$counts,
    as_tibble
  ) |>
    mutate(
      date = as.Date(date)
    )
}

############################################################
# STEP 7: Download Daily Counts for All Topics
############################################################

topic_data <-
  imap_dfr(
    topics,
    function(search_string, topic_name) {
      
      message(
        "Downloading: ",
        topic_name
      )
      
      results <-
        mc_counts_over_time(
          query = search_string,
          start_date = start_date,
          end_date = end_date
        )
      
      Sys.sleep(35)
      
      results |>
        mutate(
          topic = topic_name
        )
    }
  )

############################################################
# STEP 8: Examine the Downloaded Daily Data
############################################################

head(topic_data)

glimpse(topic_data)

############################################################
# STEP 9: Convert Daily Counts to Weekly Counts
############################################################

weekly_counts <-
  topic_data |>
  mutate(
    week = floor_date(
      date,
      unit = "week"
    )
  ) |>
  group_by(
    topic,
    week
  ) |>
  summarise(
    stories = sum(count),
    .groups = "drop"
  )

############################################################
# STEP 10: Examine Weekly Counts
############################################################

weekly_counts

############################################################
# STEP 11: Summarize Coverage by Topic
############################################################

topic_summary <-
  weekly_counts |>
  group_by(topic) |>
  summarise(
    Total_Stories = sum(stories),
    Weekly_Minimum = min(stories),
    Weekly_Maximum = max(stories),
    Weekly_Median = median(stories),
    Weekly_Mean = round(
      mean(stories),
      2
    ),
    Weekly_SD = round(
      sd(stories),
      2
    ),
    .groups = "drop"
  ) |>
  arrange(
    desc(Total_Stories)
  )

Table <-
  topic_summary |>
  kbl(
    caption =
      "Media Cloud Topic Summary Statistics",
    align = "lrrrrrr"
  ) |>
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c(
      "striped",
      "hover",
      "condensed"
    )
  )

Table

############################################################
# STEP 12: Create an Interactive Plotly Graph
############################################################

weekly_counts <- weekly_counts |>
  mutate(
    stories_formatted = formatC(
      stories,
      format = "d",
      big.mark = ","
    )
  )

Graph <- plot_ly(
  data = weekly_counts,
  
  x = ~week,
  y = ~stories,
  
  color = ~topic,
  colors = "Set1",
  
  type = "scatter",
  mode = "lines+markers",
  
  customdata = ~topic,
  
  text = ~stories_formatted,
  
  hovertemplate =
    paste(
      "%{customdata}
",
      "Week: %{x|%Y-%m-%d}
",
      "Stories: %{text}
",
      ""
    )
) |>
  layout(
    title =
      "Weekly U.S. Coverage Volume",
    
    hovermode = "x unified",
    
    xaxis = list(
      title = "Week"
    ),
    
    yaxis = list(
      title = "Weekly Story Count",
      separatethousands = TRUE
    )
  )

Graph