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.

Installation

You can install the latest development version of fmp from Github with:

remotes::install_github('jpiburn/fmpapi')

Getting Started

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')

Company Information and Financials

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

Discounted Cash Flow Valuation


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"
  )

Key Metrics

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

Balance Sheets

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

Form 13-F Statements

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

Earnings Calendar

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

SEC RSS Feed

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

Quoting Cryptocurrencies

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