Package: bank-scrapers
Table of ContentsIntroductionGetting StartedInstallationUsageDriversBECUChaseFidelity NetBenefitsRoundPointSMBC PrestiaUHFCUVanguardZillowAPI WrappersKrakenDisclaimerQuick Startpipinstallbank_scrapersbank-scrape{subcommand}$LOGIN_USER$LOGIN_PASSIntroductionbank_scrapersis a library containing drivers for scraping account information from various financial websites.Since most traditional financial institutions don't provide an API for accessing one's account data, most of these
drivers utilizeSeleniumto impersonate the user using the provided credentials.Getting StartedInstallationstablepipinstallbank_scrapersexperimentalpipinstallgit+https://github.com/eebette/bank_scrapers.gitUsage💡 Usage examples for each driver are listed in that driver's documentationCLIFor general info and complete usage documentationbank-scrape-hGeneral usage patternbank-scrape{subcommand}$LOGIN_USER$LOGIN_PASSAPIAPI results are returned as a Python list of pandas dataframes, containing relevant data scraped from the site. See each
driver's section for info on what is in that driver's return tables.frombank_scrapers.scrapers.becu.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Drivers that need a tmp directorySome drivers download the accounts data and process the downloaded file. This requires the use of a temp directory to
use as Chromium's downloads folder, andthe location of this folder must be specified inget_accounts_info().❗️Selenium often has issues writing to/tmp/in Linux distributions, hence this requirement in the code.❗️NOTEtmp_dirMUST be empty for this function to workfrombank_scrapers.scrapers.fidelity_netbenefits.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}",tmp_dir="~/tmp")fortintables:print(t.to_string())DriversThese are all written in Python using the Selenium driver and, for the most part, try to simulate the real user
experience/workflow as seen in the eyes of the website provider.BECUBoeing Enterprises Credit UnionAboutThis is a Selenium driver that logs in using provided credentials and reads account info from the landing page.❗️Driver does NOT currently support MFAExample UsageCLIbank-scrapebecu$LOGIN_USER$LOGIN_PASSAPIfrombank_scrapers.scrapers.becu.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Example ResultAccount  YTD Interest  Current Balance  Available Balance
##########          #.##          ####.##            ####.##
##########         ##.##         #####.##           #####.##
##########        ###.##         #####.##           #####.##
 Account  Current Balance  Available Credit
    ####           ###.##           #####.#Return SchemaFor non-loan AccountColumn NameAccountYTD InterestCurrent BalanceAvailable BalanceFor Credit AccountColumn NameAccountCurrent BalanceAvailable CreditChaseChase BankingAboutThis is a Selenium driver that logs in using provided credentials, navigates 2FA, navigates to the detail account info
from the landing page, and reads the account info from the page.✔️ Driver supports handling of 2FA❗️This driver is designed to crawl and pull data for Chase credit card servicesonly. Chase shared bank accounts
are currently not in the scope of this projectExample UsageCLIbank-scrapechase$LOGIN_USER$LOGIN_PASSAPIfrombank_scrapers.scrapers.chase.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Example 2FA Workflow>>> # Example 2FA workflow>>> tables = get_accounts_info(username="{username}", password="{password}")0: TEXT ME1: xxx-xxx-####2: xxx-xxx-####3: CALL ME4: xxx-xxx-####5: xxx-xxx-####6: Call us - 1-877-242-7372Please select one: {user_choose_2fa_option}Enter 2FA Code: {user_enters_2fa_code}Example ResultCurrent balance Pending charges Available credit Total credit limit Next closing date Balance on last statement Remaining statement balance Payments are due on the
        ####.##          ###.##         #####.##           #####.##             ####              ####.#######                     ####.##                      #.
Last payment Minimum payment Automatic Payments
####.#######      ##.#######                   
Points available
          ######
Cash advance balance Available for cash advance Cash advance limit
                #.##                    ####.##            ####.##
Purchase APR Cash advance APR
       ##.##            ##.##
Program detailsReturn SchemaProvides int-ified values for each of the columns.❗️Dates will be converted to their spreadsheet friendly int-representation❗️Any text values are dropped. Most notably this affectsAutomatic PaymentsandProgram detailscolumns, which are
currently out of the scope of this projectBalance InfoColumn NameCurrent balancePending chargesAvailable creditTotal credit limitNext closing dateBalance on last statementRemaining statement balancePayments are due on thePayment InfoColumn NameLast paymentMinimum paymentAutomatic PaymentsPoints InfoColumn NamePoints availableAPR InfoColumn NamePurchase APRCash advance APRProgram DetailsColumn NameProgram detailsFidelity NetBenefitsFidelity NetBenefits❗️This driver is designed to work on the webpage for Fidelity NetBenefits, which is Fidelity's net interface for
401(k) holders and stock plan participants for various companies. It is not designed to work for general brokerage
account holders, though I suspect it would work with minimal effort️✔️ This driver will pull holdings info for all Fidelity accounts for the account holder, including general brokerage
accountsAboutThis is a Selenium driver that logs in using provided credentials, navigates 2FA, navigates to the detail account info
from the landing page for Fidelity NetBenefits.Instead of scraping the user's account info from the page, this driver will navigate to the user's positions summary and
download the accounts info provided by Fidelity using a folder of the user's choice✔️ Driver supports handling of 2FAExample UsageCLIbank-scrapefidelity-nb$LOGIN_USER$LOGIN_PASS💡 The CLI backend handles the creation of a tmp directory in the user's home directory by default. The API doesn't
have this functionalityAPIfrombank_scrapers.scrapers.fidelity_netbenefits.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}",tmp_dir="~/tmp")fortintables:print(t.to_string())❗️NOTEtmp_dirMUST be empty for this function to workExample 2FA Workflow>>> # Example 2FA workflow>>> tables = get_accounts_info(username="{username}", password="{password}")0: Use *...*@*****.***1: Use *...*@**.**2: Use *...*@******.***Please select one: {user_choose_2fa_option}Enter 2FA Code: {user_enters_2fa_code}Example ResultAccount Number        Account Name     Symbol           Description  Quantity Last Price Last Price Change Current Value Today's Gain/Loss Dollar Today's Gain/Loss Percent Total Gain/Loss Dollar Total Gain/Loss Percent Percent Of Account Cost Basis Total Average Cost Basis  Type
     *########    ********** - ***    *******                  ****    ##.###      $#.##             $#.##        $##.##                    $#.##                     #.##%                    ***                     ***              #.##%              ***                ***  ****
     *########    ********** - ***       ****        ******.*** ***   ###.###    $###.##            -$#.##     $#####.##                 -$###.##                    -#.##%              -$####.##                 -##.##%             ##.##%        $#####.##            $###.##  ****
         #####  ****** ###(*) ****        ***    **** ** *** ******  ####.###     $##.##            -$#.##     $#####.##                 -$###.##                    -#.##%              +$####.##                 +##.##%             ##.##%        $#####.##             $##.##   ***
         #####  ****** ###(*) ****  #####*###  ******** ****** ####   ###.###    $###.##            -$#.##     $#####.##                  -$##.##                    -#.##%               +$###.##                  +#.##%             ##.##%        $#####.##            $###.##   ***
         #####  ****** ###(*) ****       ****      ******.*** *****    ##.###    $###.##            -$#.##     $#####.##                 -$###.##                    -#.##%              -$####.##                 -##.##%              #.##%        $#####.##            $###.##   ***
         #####  ****** ###(*) ****      *****  **** **** *** *** **  ####.###     $##.##            -$#.##     $#####.##                       --                        --              +$####.##                 +##.##%             ##.##%        $#####.##             $##.##   ***Return SchemaBalance InfoColumn NameAccount NumberAccount NameSymbolDescriptionQuantityLast PriceLast Price ChangeCurrent ValueToday's Gain/Loss DollarToday's Gain/Loss PercentTotal Gain/Loss DollarTotal Gain/Loss PercentPercent Of AccountCost BasisTotal Average Cost BasisTypeRoundPointRoundPoint MortgageAboutThis is a Selenium driver that logs in using provided credentials, navigates 2FA, navigates to the detail account info
from the landing page for a mortgage serviced by Roundpoint Mortgage.✔️ Driver supports handling of 2FAExample UsageCLIbank-scraperoundpoint$LOGIN_USER$LOGIN_PASSAPIfrombank_scrapers.scrapers.roundpoint.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Example 2FA Workflow>>> # Example 2FA workflow>>> # TBDExample ResultBalance
 #####.##
Monthly Payment Amount Actual Due Date Next Draft Date
                ###.##   **** ##, ####   **** ##, ####Return SchemaBalance InfoColumn NameBalancePayment InfoColumn NameMonthly Payment AmountActual Due DateNext Draft DateSMBC PrestiaSumitomo Mitsui Banking Corporation PRESTIAAboutThis is a Selenium driver that logs in using provided credentials, navigates to the detail account info and scrapes
account info for a member account of SMBC Prestia.❗️Driver does NOT currently support MFAExample UsageCLIbank-scrapesmbc-prestia$LOGIN_USER$LOGIN_PASSAPIfrombank_scrapers.scrapers.smbc_prestia.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Example ResultAccount Number  Available Amount
       #######           #######
      ########                 #Return SchemaBalance InfoColumn NameAccount NumberAvailable AmountUHFCUUniversity of Hawaii Federal Credit UnionAboutThis is a Selenium driver that logs in using provided credentials, navigates 2FA, navigates to the detail account info
from the landing page for UHFCU account. It will also navigate to the credit card management system used by UHFCU and
pull info for each credit card on the dashboard✔️ Driver supports handling of 2FA🚦 This driver acts slightly differently than the others: it will create 1 table in the return list per account in the
user's dashboard. Said differently,this driver does not produce a static amount of tablesExample UsageCLIbank-scrapeuhfcu$LOGIN_USER$LOGIN_PASSAPIfrombank_scrapers.scrapers.uhfcu.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}")fortintables:print(t.to_string())Example 2FA Workflow>>> # Example 2FA workflow>>> tables = get_accounts_info(username="{username}", password="{password}")0: #********#@#####.###1: ###-***-**##Please select one: {user_choose_2fa_option}Enter 2FA Code: {user_enters_2fa_code}Example ResultAccount Type               Account Desc Available Current Balance
     *******  **** ***** - *** ##-*####    $##.##          $##.##
Account Type               Account Desc  Available Current Balance
    ********  **** ***** - *** ##-*####  $#,###.##       $#,###.##
Current Balance Pending Balance Statement Balance Available Credit Last Payment as of *** ##, #### Total Minimum Due Payment Due Date                Last Login
          $#.##           $#.##             $#.##       $##,###.##                          $##.##             $#.##     *** ##, ####  *** ##, ####, #:##:## **Return SchemaShared Accounts InfoColumn NameAccount TypeAccount DescAvailableCurrent BalanceLoan Accounts InfoColumn NameCurrent BalancePending BalanceStatement BalanceAvailable CreditLast Payment as ofMMM DD, YYYYTotal Minimum DuePayment Due DateLast LoginVanguardThe Vanguard Group️✔️ This driver will pull holdings info for all Vanguard accounts for the account holder, including general brokerage
accountsAboutThis is a Selenium driver that logs in using provided credentials, navigates 2FA, navigates to the detail account info
in the Downloads Center from the landing page.Instead of scraping the user's account info from the page, this driver will navigate to the user's positions summary and
download the accounts info provided by Vanguard using a folder of the user's choice➖️ Driver has limited support for 2FA (only supports mobile app touch authentication)Example UsageCLIbank-scrapevanguard$LOGIN_USER$LOGIN_PASS💡 The CLI backend handles the creation of a tmp directory in the user's home directory by default. The API doesn't
have this functionalityAPIfrombank_scrapers.scrapers.vanguard.driverimportget_accounts_infotables=get_accounts_info(username="{username}",password="{password}",tmp_dir="~/temp/")fortintables:print(t.to_string())❗️NOTEtmp_dirMUST be empty for this function to workExample 2FA Workflow>>> # Example 2FA workflow>>> tables = get_accounts_info(username="{username}", password="{password}")Waiting for 2FA...Example ResultAccount Number    Investment Name             Symbol    Shares   Share Price  Total Value
      ########    ***** **** ***  *** ** *    ***       ##.###   ##.####      ####.##
      ########    ******** ***                ****      ##.###   ##.####      ####.##
      ########    **** ********* *** ** *     ****      #.###    ###.####     ###.##
      ########    ******** **** ** * ***      ***       #.###    ##.####      ##.##
      ########    ********* ****              ****      #.###    ###.####     ###.##Return SchemaProvides int-ified values for each of the columns.Balance InfoColumn NameAccount NumberInvestment NameSymbolSharesShare PriceTotal ValueZillowZillowAboutThis is a Selenium driver that finds a property's Zestimate from a user-provided url suffix (the part afterhttps://www.zillow.com/homedetails/).Example UsageCLIbank-scrapezillow$URL_SUFFIX_FOR_PROPERTY💡 The suffix of the Zillow URL (the part after 'homedetails'. Note that you only need to provide the part that ends
with "zpid"💡 For example, this is a valid suffix argument (provided#was replaced by actual digits):########_zpidAPIfrombank_scrapers.scrapers.zillow.driverimportget_accounts_infotables=get_accounts_info(suffix="{house_num}-{street_name}-{street_type}-{city}-{state_code}-{5_digit_zip}/########_zpid")fortintables:print(t.to_string())Example Resultzestimate
0  $###,###Return SchemaBalance InfoColumn NamezestimateAPI WrappersThese are wrappers written around API endpoints provided by providers and are generally purposed around making these
processes of getting accounts info cohesive across this library.KrakenKrakenAboutThis is an API wrapper for pulling Kraken account holdings based on Kraken'sdocumentation.The main purpose of this wrapper is to provide an even simpler interface for pulling account holdings and to align the
data provided by Kraken with the rest of the financial data pulled by this package.Example UsageCLIbank-scrapekraken$API_KEY$SECRET_KEYAPIfrombank_scrapers.api_wrappers.kraken.driverimportget_accounts_infotables=get_accounts_info(api_key="*****************/**************************************",api_sec="********+*************************+****+********//******************/**************+**==",)fortintables:print(t.to_string())Example Resultsymbol      quantity
  ****  #.##########
  ****     #.#######
  ****        #.####
  ****  #.##########Return SchemaBalance InfoColumn NamesymbolquantityDisclaimerThe intended purpose of this code is purely academic in nature, and it IS NOT intended to be used for any real life
production use, nefarious or otherwise.Usage of this code is potentially against your bank's terms of service and could result in you or your IP getting
flagged, listed, or blocked as bad actors. I don't take any responsibility for any effects this code may have on your
bank accounts or your relationships with your banking institutions.Please don't try to learn anything about me or my life based on the banks that I've arbitrarily decided to write
drivers for.