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...