Get Data Out of 'Tautulli' (Formerly 'PlexPy')

'Tautulli' (<>) is a monitoring application for 'Plex' Media Servers (<>) which collects a lot of data about media items and server usage such as play counts. This package interacts with the 'Tautulli' API of any specified server to get said data into R. The 'Tautulli' API documentation is available at <>.

Travis buildstatus Coveragestatus CRANstatus lifecycle

This is tauturri version 0.3.0 (semver(ish)).
The goal of tauturri is to get data out of Tautulli (formerly PlexPy) as simply as possible.

The project is still pretty young, and while it’s reasonably functional, there might still be some issues. At least it passes all the tests, I guess?


Current stable version on CRAN:


Current development version on GitHub:

if (!("remotes" %in% installed.packages())){


To use this package, you’ll need a working instance of Tautulli, enable the API and store the URL and your API key.

In your ~/.Renviron, set the following:

# Tautulli
tautulli_url=<Tautulli URL (with port, if necessary)>
tautulli_apikey=<Tautilli API key>

That’s it.
Alternatively use Sys.setenv() to set the appropriate values in a script.

Server Info

info <- get_servers_info()
# Probably shouldn't show URL etc.
#> [1] "port"               "host"               "version"           
#> [4] "name"               "machine_identifier"
info[c("name", "version")]
#> # A tibble: 1 x 2
#>   name  version              
#>   <chr> <chr>                
#> 1 PPTH

get_plays_by [date|dayofweek|…]

All plays in the current year, per day:

plays <- get_plays_by_date(time_range = lubridate::yday(lubridate::now()))
plays %>% 
  gather(category, playcount, TV, Movies, Music) %>%
  ggplot(aes(x = date, y = playcount, fill = category)) +
  geom_col() +
  scale_fill_brewer(palette = "Set1", 
                    breaks = c("Movies", "TV", "Music")) +
  labs(title = "Plex Plays by Date",
       subtitle = "Showing Movie, TV and Music Categories",
       x = "Date", y = "Plays", fill = "Category") +
  theme_minimal() +
  theme(legend.position = "top")

… per day of week:

plays <- get_plays_by_dayofweek(time_range = lubridate::yday(lubridate::now()))
plays %>% 
  gather(category, playcount, TV, Movies, Music) %>%
  ggplot(aes(x = day, y = playcount, fill = category)) +
  geom_col() +
  scale_fill_brewer(palette = "Set1", 
                    breaks = c("Movies", "TV", "Music")) +
  labs(title = "Plex Plays by Day of Week",
       subtitle = "Showing Movie, TV and Music Categories",
       x = "Day", y = "Plays", fill = "Category") +
  theme_minimal() +
  theme(legend.position = "top")

… and per hour of day:

plays <- get_plays_by_hourofday(time_range = lubridate::yday(lubridate::now()))
plays %>% 
  gather(category, playcount, TV, Movies, Music) %>%
  ggplot(aes(x = hms::hms(hours = hour), y = playcount, fill = category)) +
  geom_col() +
  scale_fill_brewer(palette = "Set1", 
                    breaks = c("Movies", "TV", "Music")) +
  labs(title = "Plex Plays by Hour of Day",
       subtitle = "Showing Movie, TV and Music Categories",
       x = "Hour", y = "Plays", fill = "Category") +
  theme_minimal() +
  theme(legend.position = "top")

API Functions Not Yet Implemented

api_functions <- names(api_request(cmd = "docs")$data)
api_functions <- api_functions[grepl("^get_", api_functions)]
sort(api_functions[!(api_functions %in% getNamespaceExports("tauturri"))])
#>  [1] "get_apikey"              "get_date_formats"       
#>  [3] "get_geoip_lookup"        "get_logs"               
#>  [5] "get_metadata"            "get_new_rating_keys"    
#>  [7] "get_newsletter_config"   "get_newsletter_log"     
#>  [9] "get_newsletters"         "get_notification_log"   
#> [11] "get_notifier_config"     "get_notifier_parameters"
#> [13] "get_notifiers"           "get_old_rating_keys"    
#> [15] "get_plex_log"            "get_pms_token"          
#> [17] "get_server_pref"         "get_settings"           
#> [19] "get_stream_data"         "get_synced_items"       
#> [21] "get_user"                "get_whois_lookup"


Please note that this project is released with a Contributor Code of Conduct.
By participating in this project you agree to abide by its terms.


tauturri 0.3.0

  • Add search_server (search-API Method)
  • Add update_check and update_tautulli for Tautulli updates
  • Add get_pms_update for Plex Media Server updates
  • Minor documentation fixes
  • Fix issues due to changes in the API

tauturri 0.2.0

  • Add get_user_ips.
  • Add get_user_logins.
  • Add get_server_friendly_name.
  • Add get_server_id.
  • Add arnold(), probably the most crucial function of them all.

tauturri 0.1.1

  • Add get_home_stats. It was nasty.
  • Apply use_tidy_style().
  • Add GitHub links to DESCRIPTION.

tauturri 0.1.0

  • Added a file to track changes to the package.
  • Added CI (covr, travis).
  • Added basic API interaction.
  • Added more than basic API interaction.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.3.0 by Lukas Burk, a year ago

Report a bug at

Browse source code at

Authors: Lukas Burk [aut, cre]

Documentation:   PDF Manual  

MIT + file LICENSE license

Imports httr, magrittr, plyr, purrr, tibble

Suggests covr, dplyr, testthat, tidyr

See at CRAN