knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

nflverse-data

This repository holds automated data releases for nflverse projects (i.e. all of the data powered/scraped via GitHub Actions).

Usage

You can download data hosted here with the {nflreadr} package, or manually download and access the releases page. Releases are roughly organized along the main functions of nflreadr.

Automation Status

The following table reports on the status and last update times of nflverse data pipelines.

# piggyback::pb_list() |>
#   dplyr::filter(file_name %in% c("timestamp.json","")) |>
#   dplyr::distinct(tag,file_name) |>
#   saveRDS("man/data_releases.rds")

update_times <- readRDS("man/data_releases.rds") |> 
  dplyr::mutate(url = glue::glue("https://github.com/nflverse/nflverse-data/releases/download/{tag}/timestamp.json"),
         badge = glue::glue("[![{tag}](https://img.shields.io/badge/dynamic/json?color=blue&label={paste0('load_',tag)}&query=last_updated&style=flat-square&url={URLencode(url)})](https://github.com/nflverse/nflverse-data/releases/tag/{tag})")) |> 
  dplyr::select(
    Data = tag,
    `Last Updated` = badge
  ) |> 
  dplyr::bind_rows(
    list(Data = "pbp_raw", `Last Updated` = "[![raw pbp data](https://img.shields.io/github/last-commit/nflverse/nflfastR-raw?label=Raw%20PBP%20Updated&style=flat-square)]()")
  )

status <- tibble::tribble(
  ~Data, ~ Status,
  "pbp_raw", "",
  "pbp", "![pbp and ps](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-pbp/automated_pbp_update.yaml?label=pbp_status&style=flat-square)",
  "player_stats", "![pbp and ps](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-pbp/automated_pbp_update.yaml?label=ps_status&style=flat-square)",
  "rosters", "![rosters](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-rosters/update_rosters.yaml?label=rosters_status&style=flat-square)",
  "players", "![players](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-players/update_players.yaml?label=players_status&style=flat-square)",
  "snap_counts", "![snap_counts](https://img.shields.io/github/actions/workflow/status/nflverse/pfr_scrapR/update_snap_counts.yaml?label=snaps_status&style=flat-square)",
  "draft_picks", "![snap_counts](https://img.shields.io/github/actions/workflow/status/nflverse/pfr_scrapR/update_draft_picks.yaml?label=draft_status&style=flat-square)",
  "pfr_advstats", "![adv_stats](https://img.shields.io/github/actions/workflow/status/nflverse/pfr_scrapR/update_advanced_stats.yaml?label=advstats_status&style=flat-square)",
  "nextgen_stats", "![ngs](https://img.shields.io/github/actions/workflow/status/nflverse/ngs-data/update_ngs.yaml?label=ngs_status&style=flat-square)",
  "injuries", "![injuries](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-rosters/update_injuries.yaml?label=injuries_status&style=flat-square)",
  "depth_charts", "![depthcharts](https://img.shields.io/github/actions/workflow/status/nflverse/nflverse-rosters/update_depth_charts.yaml?label=depth_charts_status&style=flat-square)",
  "combine", "![combine](https://img.shields.io/github/actions/workflow/status/nflverse/pfr_scrapR/update_combine.yaml?label=combine_status&style=flat-square)",
  "nfl4th", "![nfl4th](https://img.shields.io/github/actions/workflow/status/nflverse/nfl4th/update_precompute.yaml?label=nfl4th_precompute&style=flat-square)",
  "ffverse player IDs", "![weekly-playerids](https://img.shields.io/github/actions/workflow/status/dynastyprocess/data/weekly-playerids.yml?label=ff_playerids&style=flat-square)",
  "ffverse rankings", "![weekly-fantasypros](https://img.shields.io/github/actions/workflow/status/dynastyprocess/data/weekly-fantasypros.yml?label=rankings&style=flat-square)",
  "contracts", "![contracts](https://img.shields.io/github/actions/workflow/status/nflverse/rotc/update_otc.yaml?label=contracts&style=flat-square)"
  ) |> 
  dplyr::left_join(update_times, by = "Data") |> 
  dplyr::mutate_all(tidyr::replace_na,"") |> 
  dplyr::mutate(Status = glue::glue("[{Status}]()"))
knitr::kable(status)

```{asis include = FALSE}

Play by Play

raw

Raw JSON should appear 1-2 hours after each game.

pbp and ps

PBP and PS are updated at 9:00 UTC each day from September to February

Rosters

rosters

Rosters are updated at 7:00 UTC each day.

Snap Counts

snap_counts

Snap counts are polled four times a day for new data.

Advanced Pass/Rush/Rec/Def Stats

adv_stats

Advanced Stats are polled four times a day for new data.

Next Gen Stats

ngs

NGS is polled every day at 7:00 UTC from September to February.

nfl4th

nfl4th

nfl4th's precomputed numbers are rebuilt each day at 7:00 UTC from September to February.

ffverse player IDs

weekly-playerids

This is updated on a weekly basis.

ffverse rankings

weekly-fantasypros

This is updated on Thursdays at 7:00 pm ET.

```



nflverse/nflverse-data documentation built on March 6, 2025, 3:05 a.m.