The goal of fmpapi
is to provide a simple and consistent interface to the Financial Modeling Prep Financial Data API that can be used along side and integrated with other common R resources for collecting and analyzing financial data, such as tidyquant
, xts
, TTR
, and quantmod
.
You can install the latest development version of fmp from Github with:
remotes::install_github('jpiburn/fmpapi')
Before getting started with fmpapi
you first must obtain an API key for the Financial Modeling Prep Financial Data API. For details, see here.
Once you sign up, you can add your API key to your .Renviron
file by using fmp_api_key()
. This will add a FMP_API_KEY
entry to your .Renviron
file so it will automatically be available in future sessions. When first installed however, you will need to reload your .Renviron file by either restarting R or running readRenviron('~/.Renviron')
library(fmpapi)
api_key <- 'my_api_key'
fmp_api_key(api_key)
# reload
readRenviron('~/.Renviron')
library(fmpapi)
library(tidyverse)
my_stocks <- c("AAPL", "GE")
d <- fmp_profile(my_stocks)
glimpse(d)
#> Rows: 2
#> Columns: 26
#> $ symbol <chr> "AAPL", "GE"
#> $ price <dbl> 462.25, 6.44
#> $ beta <dbl> 1.228499, 1.177065
#> $ vol_avg <dbl> 36667309, 94472273
#> $ mkt_cap <dbl> 1.976410e+12, 5.637119e+10
#> $ last_div <dbl> 3.18, 0.04
#> $ range <chr> "201.0-464.35", "5.48-13.26"
#> $ changes <dbl> 3.82, -0.03
#> $ company_name <chr> "Apple Inc.", "General Electric Company"
#> $ exchange <chr> "Nasdaq Global Select", "New York Stock Exchange"
#> $ exchange_short_name <chr> "NASDAQ", "NYSE"
#> $ industry <chr> "Consumer Electronics", "Specialty Industrial M...
#> $ website <chr> "http://www.apple.com", "http://www.ge.com"
#> $ description <chr> "Apple Inc. designs, manufactures, and markets ...
#> $ ceo <chr> "Mr. Timothy D. Cook", "Mr. H. Lawrence Culp Jr."
#> $ sector <chr> "Technology", "Industrials"
#> $ country <chr> "United States", "United States"
#> $ full_time_employees <dbl> 137000, 205000
#> $ phone <chr> "408-996-1010", "617-443-3000"
#> $ address <chr> "One Apple Park Way", "5 Necco Street"
#> $ city <chr> "One Apple Park Way", "5 Necco Street"
#> $ state <chr> "CA", "MA"
#> $ zip <chr> "95014", "02210"
#> $ dcf_diff <dbl> 89.92, 21.63
#> $ dcf <dbl> 297.11, 30.90
#> $ image <chr> "https://financialmodelingprep.com/image-stock/...
fmp_dcf(my_stocks, historical = TRUE, quarterly = TRUE) %>%
ggplot(
aes(x = date, y = dcf, colour = symbol)
) +
geom_line(size = 1) +
theme_minimal() +
labs(
title = "Historical Discounted Cash Flow Valuation",
y = "Discounted Cash Flow Value"
)
d <- fmp_key_metrics(my_stocks)
glimpse(d)
#> Rows: 73
#> Columns: 59
#> $ symbol <chr> "AAPL", "AAPL", "AAPL",...
#> $ date <date> 2019-09-28, 2018-09-29...
#> $ revenue_per_share <dbl> 55.964480, 53.117842, 4...
#> $ net_income_per_share <dbl> 11.885789216, 11.905940...
#> $ operating_cash_flow_per_share <dbl> 14.92628492, 15.4864624...
#> $ free_cash_flow_per_share <dbl> 12.668767946, 12.823920...
#> $ cash_per_share <dbl> 10.5065421, 5.1824870, ...
#> $ book_value_per_share <dbl> 19.4643350, 21.4289328,...
#> $ tangible_book_value_per_share <dbl> 72.816162, 73.143405, 6...
#> $ shareholders_equity_per_share <dbl> 19.4643350, 21.4289328,...
#> $ interest_debt_per_share <dbl> 21.80359151, 21.7873250...
#> $ market_cap <dbl> 1.157812e+12, 1.061223e...
#> $ enterprise_value <dbl> 1.206755e+12, 1.141009e...
#> $ pe_ratio <dbl> 20.953594, 17.826395, 1...
#> $ price_to_sales_ratio <dbl> 4.4501441, 3.9956442, 3...
#> $ pocfratio <dbl> 16.685331, 13.704873, 1...
#> $ pfcf_ratio <dbl> 19.658581, 16.550321, 1...
#> $ pb_ratio <dbl> 12.795197, 9.904366, 6....
#> $ ptb_ratio <dbl> 12.795197, 9.904366, 6....
#> $ ev_to_sales <dbl> 4.6382605, 4.2960490, 4...
#> $ enterprise_value_over_ebitda <dbl> 14.741690, 13.108117, 1...
#> $ ev_to_operating_cash_flow <dbl> 17.390653, 14.735247, 1...
#> $ ev_to_free_cash_flow <dbl> 20.489588, 17.794625, 1...
#> $ earnings_yield <dbl> 0.047724510, 0.05609659...
#> $ free_cash_flow_yield <dbl> 0.050868372, 0.06042178...
#> $ debt_to_equity <dbl> 2.7410043, 2.4133014, 1...
#> $ debt_to_assets <dbl> 0.7326921, 0.7070285, 0...
#> $ net_debt_to_ebitda <dbl> 0.59788664, 0.91659582,...
#> $ current_ratio <dbl> 1.540126, 1.132926, 1.2...
#> $ interest_coverage <dbl> 18.38283, 22.50093, 27....
#> $ income_quality <dbl> 1.2558093, 1.3007341, 1...
#> $ dividend_yield <dbl> 0.012194555, 0.01292094...
#> $ payout_ratio <dbl> 0.25551976, 0.23033378,...
#> $ sales_general_and_administrative_to_revenue <dbl> 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ research_and_ddevelopement_to_revenue <dbl> 0.06233136, 0.05360041,...
#> $ intangibles_to_total_assets <dbl> 0.00000000, 0.00000000,...
#> $ capex_to_operating_cash_flow <dbl> -6.6118152, -5.8164200,...
#> $ capex_to_revenue <dbl> -24.79028, -19.95005, -...
#> $ capex_to_depreciation <dbl> -1.1955217, -0.8189739,...
#> $ stock_based_compensation_to_revenue <dbl> 0.023322853, 0.02010580...
#> $ graham_number <dbl> 72.1481262, 75.7658298,...
#> $ roic <dbl> 0.28237786, 0.29185015,...
#> $ return_on_tangible_assets <dbl> 0.163230098, 0.16277530...
#> $ graham_net_net <dbl> -27.58139376, -34.58114...
#> $ working_capital <dbl> 5.7101e+10, 1.5410e+10,...
#> $ tangible_asset_value <dbl> NA, NA, 1.26032e+11, 1....
#> $ net_current_asset_value <dbl> -8.52090e+10, -1.27239e...
#> $ invested_capital <dbl> NA, NA, NA, NA, NA, NA,...
#> $ average_receivables <dbl> 23056000000, 2318600000...
#> $ average_payables <dbl> 51062000000, 5588800000...
#> $ average_inventory <dbl> 4031000000, 3956000000,...
#> $ days_sales_outstanding <dbl> 32.16305, 31.86389, 28....
#> $ days_payables_outstanding <dbl> 104.31408, 124.57021, 1...
#> $ days_of_inventory_on_hand <dbl> 9.263639, 8.817631, 12....
#> $ receivables_turnover <dbl> 11.348425, 11.454973, 1...
#> $ payables_turnover <dbl> 3.499048, 2.930074, 3.1...
#> $ inventory_turnover <dbl> 39.401364, 41.394338, 2...
#> $ roe <dbl> 0.610644505, 0.55560118...
#> $ capex_per_share <dbl> -2.257516972, -2.662541...
d <- fmp_balance_sheet(my_stocks, quarterly = TRUE)
glimpse(d)
#> Rows: 252
#> Columns: 46
#> $ date <date> 2020-06-27, 2020-03-28...
#> $ symbol <chr> "AAPL", "AAPL", "AAPL",...
#> $ filling_date <dttm> 2020-07-31, 2020-05-01...
#> $ accepted_date <dttm> 2020-07-30 19:29:09, 2...
#> $ period <chr> "Q3", "Q2", "Q1", "Q4",...
#> $ cash_and_cash_equivalents <dbl> 3.3383e+10, 4.0174e+10,...
#> $ short_term_investments <dbl> 5.9642e+10, 5.3877e+10,...
#> $ cash_and_short_term_investments <dbl> 9.30250e+10, 9.40510e+1...
#> $ net_receivables <dbl> 1.7882e+10, 1.5722e+10,...
#> $ inventory <dbl> 3.978e+09, 3.334e+09, 4...
#> $ other_current_assets <dbl> 1.0987e+10, 1.5691e+10,...
#> $ total_current_assets <dbl> 1.40065e+11, 1.43753e+1...
#> $ property_plant_equipment_net <dbl> 4.3851e+10, 4.3986e+10,...
#> $ goodwill <dbl> 0.000e+00, 0.000e+00, 0...
#> $ intangible_assets <dbl> 0.000e+00, 0.000e+00, 0...
#> $ goodwill_and_intangible_assets <dbl> 0.000e+00, 0.000e+00, 0...
#> $ long_term_investments <dbl> 1.00592e+11, 9.87930e+1...
#> $ tax_assets <dbl> 0.0000e+00, 0.0000e+00,...
#> $ other_non_current_assets <dbl> 3.2836e+10, 3.3868e+10,...
#> $ total_non_current_assets <dbl> 1.77279e+11, 1.76647e+1...
#> $ other_assets <dbl> 4.3823e+10, 4.9559e+10,...
#> $ total_assets <dbl> 3.17344e+11, 3.20400e+1...
#> $ account_payables <dbl> 3.5325e+10, 3.2421e+10,...
#> $ short_term_debt <dbl> 1.1166e+10, 1.0029e+10,...
#> $ tax_payables <dbl> 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ deferred_revenue <dbl> 6.313e+09, 5.928e+09, 5...
#> $ other_current_liabilities <dbl> 3.9945e+10, 4.2048e+10,...
#> $ total_current_liabilities <dbl> 9.53180e+10, 9.60940e+1...
#> $ long_term_debt <dbl> 9.46780e+10, 8.97150e+1...
#> $ deferred_revenue_non_current <dbl> 0.000e+00, 0.000e+00, 0...
#> $ deferred_tax_liabilities_non_current <dbl> 0.000e+00, 0.000e+00, 0...
#> $ other_non_current_liabilities <dbl> 5.5066e+10, 5.6166e+10,...
#> $ total_non_current_liabilities <dbl> 1.49744e+11, 1.45881e+1...
#> $ other_liabilities <dbl> 5.5066e+10, 5.6166e+10,...
#> $ total_liabilities <dbl> 2.45062e+11, 2.41975e+1...
#> $ common_stock <dbl> 4.8696e+10, 4.8032e+10,...
#> $ retained_earnings <dbl> 2.41360e+10, 3.31820e+1...
#> $ accumulated_other_comprehensive_income_loss <dbl> -6.5230e+10, -6.2854e+1...
#> $ othertotal_stockholders_equity <dbl> -2.163e+09, -1.315e+09,...
#> $ total_stockholders_equity <dbl> 7.22820e+10, 7.84250e+1...
#> $ total_liabilities_and_stockholders_equity <dbl> 3.17344e+11, 3.20400e+1...
#> $ total_investments <dbl> 1.60234e+11, 1.52670e+1...
#> $ total_debt <dbl> 1.13373e+11, 1.10155e+1...
#> $ net_debt <dbl> 79990000000, 6998100000...
#> $ link <chr> "https://www.sec.gov/Ar...
#> $ final_link <chr> "https://www.sec.gov/Ar...
berkshire_cik <- '0001067983'
d <- fmp_13f(berkshire_cik)
glimpse(d)
#> Rows: 50
#> Columns: 12
#> $ date <date> 2020-03-31, 2020-03-31, 2020-03-31, 2020-03-31, 202...
#> $ filling_date <date> 2020-05-15, 2020-05-15, 2020-05-15, 2020-05-15, 202...
#> $ accepted_date <dttm> 2020-05-15 16:06:46, 2020-05-15 16:06:46, 2020-05-1...
#> $ cik <chr> "0001067983", "0001067983", "0001067983", "000106798...
#> $ cusip <chr> "57636Q104", "609207105", "615369105", "674599105", ...
#> $ tickercusip <chr> "MA", "MDLZ", "MCO", "OXY", "PNC", "PG", "RH", "QSR"...
#> $ name_of_issuer <chr> "MASTERCARD INC", "MONDELEZ INTL INC", "MOODYS CORP"...
#> $ shares <dbl> 4934756, 578000, 24669778, 18933054, 9197984, 315400...
#> $ title_of_class <chr> "CL A", "CL A", "COM", "COM", "COM", "COM", "COM", "...
#> $ value <dbl> 1192040000, 28946000, 5217658000, 219245000, 8804310...
#> $ link <chr> "https://www.sec.gov/Archives/edgar/data/1067983/000...
#> $ final_link <chr> "https://www.sec.gov/Archives/edgar/data/1067983/000...
d <- fmp_earnings_calendar()
glimpse(d)
#> Rows: 2,861
#> Columns: 3
#> $ symbol <chr> "NOVA", "CHNG", "DGSE", "AMCR", "WMT", "SE", "HMI", "...
#> $ date <dttm> 2020-08-18 00:00:00, 2020-08-18 00:00:00, 2020-08-18...
#> $ eps_estimated <dbl> -0.19, 0.00, 0.00, 0.19, 1.25, -0.42, 0.05, 0.00, -0....
d <- fmp_sec_filings()
glimpse(d)
#> Rows: 1,000
#> Columns: 6
#> $ title <chr> "6-K - Navios South American Logistics Inc. (0001506042) ...
#> $ date <dttm> 2020-08-18 16:46:29, 2020-08-18 16:44:29, 2020-08-18 16:...
#> $ link <chr> "https://www.sec.gov/Archives/edgar/data/1506042/00011931...
#> $ cik <chr> "0001506042", "0001803284", "0001372184", "0000057131", "...
#> $ form_type <chr> "6-K", "10-K", "10-Q", "10-Q", "10-Q", "6-K", "6-K", "10-...
#> $ ticker <chr> "None", "None", "NWYU", "LZB", "AAP", "ALC", "SNDL", "LRC...
d <- fmp_quote_cryptos()
glimpse(d)
#> Rows: 110
#> Columns: 22
#> $ symbol <chr> "VENUSD", "BLOCKUSD", "MAIDUSD", "GAMEUSD", "...
#> $ name <chr> "VeChain USD", "Blocknet USD", "MaidSafeCoin ...
#> $ price <dbl> 0.11546010, 1.35140470, 0.10211494, 0.0759092...
#> $ changes_percentage <dbl> -4.46, -16.34, -3.29, -3.19, -14.24, 0.00, 6....
#> $ change <dbl> -0.00539107, -0.26389560, -0.00347786, -0.002...
#> $ day_low <dbl> 0.11424368, 1.28605230, 0.10211494, 0.0720481...
#> $ day_high <dbl> 0.12176445, 1.64664470, 0.10807621, 0.0793961...
#> $ year_high <dbl> 0.25831330, 4.37321000, 0.23715703, 0.1187331...
#> $ year_low <dbl> 0.04083622, 0.53095210, 0.03609427, 0.0136530...
#> $ market_cap <dbl> 8270951, 9501057, 46212364, 7526038, 3270747,...
#> $ price_avg50 <dbl> 0.09785710, 1.35970580, 0.10136195, 0.0738029...
#> $ price_avg200 <dbl> 0.08679361, 1.41440920, 0.09546266, 0.0550806...
#> $ volume <dbl> 206088, 22293, 278380, 174828, 102556, 0, 253...
#> $ avg_volume <dbl> 137852, 27533, 243177, 123968, 62513, 93337, ...
#> $ exchange <chr> "CRYPTO", "CRYPTO", "CRYPTO", "CRYPTO", "CRYP...
#> $ open <dbl> 0.12085117, 1.61530030, 0.10559280, 0.0784081...
#> $ previous_close <dbl> 0.12085117, 1.61530030, 0.10559280, 0.0784081...
#> $ eps <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ pe <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ earnings_announcement <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ shares_outstanding <dbl> 71634712, 7030505, 452552428, 99145190, 97259...
#> $ timestamp <dbl> 1597783638, 1597783638, 1597783638, 159778363...