{"id":4163,"date":"2023-04-26T11:11:40","date_gmt":"2023-04-26T18:11:40","guid":{"rendered":"https:\/\/jeremywhittaker.com\/?p=4163"},"modified":"2023-04-26T14:52:28","modified_gmt":"2023-04-26T21:52:28","slug":"automating-the-management-of-hundreds-of-treasurydirect-gov-accounts","status":"publish","type":"post","link":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/","title":{"rendered":"Automating the Management of Hundreds of TreasuryDirect.gov accounts"},"content":{"rendered":"\n<p>If you manage multiple accounts through <a href=\"https:\/\/www.treasurydirect.gov\/\" target=\"_blank\" rel=\"noreferrer noopener\">TreasuryDirect.gov<\/a> to purchase T-bills, T-notes, T-bonds, TIPS, FRNs, or C of I certificates then you know how antiquated and difficult it can be to manage all of your accounts at the <a href=\"https:\/\/www.treasurydirect.gov\/\" target=\"_blank\" rel=\"noreferrer noopener\">United States Treasury<\/a>. I&#8217;ve written a Python program to aggregate all of these accounts into a single summary Excel document. This program can be expanded to buy and sell securities. However, in its published state is simply aggregates all the data and returns it to a CSV file. <\/p>\n\n\n\n<p>The program is written in Python and uses the Selenium WebDriver to interact with the TreasuryDirect.gov website. The program is designed to work with multiple accounts, and it reads the account information from a CSV file. It also has a feature to bypass the one-time password by logging in to your email and extracting the OTP. The program works by logging in to each account, checking the account details, and updating the account information as needed. It currently returns the following data:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"574\" data-src=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png\" alt=\"\" class=\"wp-image-4173 lazyload\" data-srcset=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png 1024w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-300x168.png 300w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-768x431.png 768w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-500x280.png 500w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1.png 1229w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/574;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Automating the login to each account<\/h2>\n\n\n\n<p>To do this, the program reads a CSV file containing all of your TreasuryDirect.gov account numbers and other relevant information, such as LLC names and purchase amounts. It then loops through each account, retrieves the necessary information from the TreasuryDirect.gov website using Selenium, and saves the data into a new column of the CSV file.<\/p>\n\n\n\n<p>Here&#8217;s an example of the code that performs this task:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pandas as pd\nfrom treasury_direct import process_account\n\nif __name__ == '__main__':\n    df = pd.read_csv('accounts.csv')\n    url = \"https:\/\/www.treasurydirect.gov\/RS\/UN-Display.do\"\n\n    for index, row in df.iterrows():\n        account_number = row&#91;'Treasury Direct']\n\n        # Check if the row is already complete\n        if not pd.isna(row&#91;'LLC Name']) and not pd.isna(row&#91;'Original Purchase Amount']) \\\n                and not pd.isna(row&#91;'Current Value']) and not pd.isna(row&#91;'Issue Date']) \\\n                and not pd.isna(row&#91;'Interest Rate']):\n            continue\n\n        success = process_account(account_number, df, index, url)\n\n        if success:\n            time.sleep(60)\n\n    df.to_csv('accounts.csv', index=False)\n\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Automatically retrieving one-time passcodes (OTPs) from emails<\/h2>\n\n\n\n<p>To log into each account, the program needs to retrieve OTPs from emails sent by TreasuryDirect.gov. It uses the Gmail API to search for unread emails from TreasuryDirect.gov containing the subject line &#8220;One Time Passcode&#8221; and retrieves the OTP from the email body. Once it has the OTP, the program enters it into the appropriate field on the TreasuryDirect.gov login page.<\/p>\n\n\n\n<p>Here&#8217;s an example of the code that retrieves OTPs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from gmail import get_otp\n\n# Perform the one-time password process here\n# Enter the OTP in the input field\n# Continuously try to get OTP from the email until it's received\notp = None\nwhile otp is None:\n    otp = get_otp()\n    if otp is None:\n        # Sleep for 10 seconds before trying again\n        time.sleep(10)\notp_input = driver.find_element_by_name(\"otp\")\notp_input.send_keys(otp)\n\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Finding the OTP in the email<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>      else:\n            # Get the first unread email\n            message = messages&#91;0]\n            msg = service.users().messages().get(userId='me', id=message&#91;'id'], format='full').execute()\n            msg_str = base64.urlsafe_b64decode(msg&#91;'payload']&#91;'body']&#91;'data']).decode()\n            otp = msg_str.splitlines()&#91;6].split()&#91;0]\n            if otp:\n                one_time_passcode = otp\n                print(f\"{one_time_passcode}\")\n                return one_time_passcode\n            else:\n                print(\"No One Time Passcode found in the email.\")\n                return None\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Moving OTP emails to trash<\/h2>\n\n\n\n<p>To avoid cluttering your inbox, the program moves OTP emails to the trash folder after retrieving the OTPs. It uses the Gmail API to search for emails from TreasuryDirect.gov containing the subject line &#8220;One Time Passcode&#8221; and moves them to the trash folder.<\/p>\n\n\n\n<p>Here&#8217;s an example of the code that moves OTP emails to trash:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def move_otp_emails_to_trash():\n    try:\n        creds = get_credentials()\n        service = build('gmail', 'v1', credentials=creds)\n        results = service.users().messages().list(userId='me',\n                                                  q='from:Treasury.Direct@fiscal.treasury.gov subject:\"One Time Passcode\"').execute()\n        messages = results.get('messages', &#91;])\n        if not messages:\n            print('No messages found.')\n        else:\n            for message in messages:\n                service.users().messages().trash(userId='me', id=message&#91;'id']).execute()\n                print(f\"Moved message with ID {message&#91;'id']} to trash.\")\n    except HttpError as error:\n        print(f'An error occurred: {error}')\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Extracting Account Information<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>    try:\n        # Locate the elements containing the desired information\n        llc_and_account_number = driver.find_element_by_xpath('\/\/div&#91;@id=\"accountnumber\"]').text\n        original_purchase_amount = driver.find_element_by_xpath('\/\/p&#91;contains(text(), \"Series I current holdings total amount\")]\/span').text\n        current_value = driver.find_element_by_xpath('\/\/p&#91;contains(text(), \"Series I current holdings current value\")]\/span').text\n        issue_date = driver.find_element_by_xpath('(\/\/tr&#91;contains(@class, \"altrow\")]\/td)&#91;3]').text\n        interest_rate = driver.find_element_by_xpath('\/\/td&#91;contains(text(), \"%\")]').text\n\n        # Separate the LLC name and account number\n        llc_name, account_number = llc_and_account_number.split(':', 1)\n        llc_name = llc_name.strip().replace(\"LLC Name: \", \"\")\n        account_number = account_number.strip()\n\n        # Print the extracted information\n        print(f\"LLC Name: {llc_name}\")\n        print(f\"Account Number: {account_number}\")\n        print(f\"Original Purchase Amount: {original_purchase_amount}\")\n        print(f\"Current Value: {current_value}\")\n        print(f\"Issue Date: {issue_date}\")\n        print(f\"Interest Rate: {interest_rate}\")\n\n        # Save the extracted information as new columns for the current row\n        df.loc&#91;index, 'LLC Name'] = llc_name\n        df.loc&#91;index, 'Original Purchase Amount'] = original_purchase_amount\n        df.loc&#91;index, 'Current Value'] = current_value\n        df.loc&#91;index, 'Issue Date'] = issue_date\n        df.loc&#91;index, 'Interest Rate'] = interest_rate\n    except NoSuchElementException:\n        print(f\"Failed to extract ibond information for account {account_number}. Moving to the next account.\")\n\n\n    try:\n        bank_name = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;1]\/td&#91;3]\/strong').text\n        routing_number = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;2]\/td&#91;3]\/strong').text\n        account_number = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;3]\/td&#91;3]\/strong').text\n        names_on_account = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;4]\/td&#91;3]\/strong').text\n        account_type = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;5]\/td&#91;3]\/strong').text\n        return_code = driver.find_element_by_xpath('\/\/tr&#91;@class=\"altrow1\"]&#91;6]\/td&#91;3]\/strong').text\n\n        # Print the extracted information\n        print(\"Bank Name:\", bank_name)\n        print(\"Routing Number:\", routing_number)\n        print(\"Account Number:\", account_number)\n        print(\"Name(s) on Account:\", names_on_account)\n        print(\"Account Type:\", account_type)\n        print(\"Return Code:\", return_code)\n\n        # Save the extracted information as new columns for the current row\n        df.loc&#91;index, 'Bank Name'] = bank_name\n        df.loc&#91;index, 'Routing Number'] = routing_number\n        df.loc&#91;index, 'Account Number'] = account_number\n        df.loc&#91;index, 'Name(s) on Account'] = names_on_account\n        df.loc&#91;index, 'Account Type'] = account_type\n        df.loc&#91;index, 'Return Code'] = return_code\n\n    except NoSuchElementException:\n        print(f\"Failed to extract information for account {account_number}. Moving to the next account.\")\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Full Code:<\/h2>\n\n\n\n<p>Coming soon. <\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you manage multiple accounts through TreasuryDirect.gov to purchase T-bills, T-notes, T-bonds, TIPS, FRNs, or C of I certificates then you know how antiquated and difficult it can&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4163","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker\" \/>\n<meta property=\"og:description\" content=\"If you manage multiple accounts through TreasuryDirect.gov to purchase T-bills, T-notes, T-bonds, TIPS, FRNs, or C of I certificates then you know how antiquated and difficult it can...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\" \/>\n<meta property=\"og:site_name\" content=\"Jeremy Whittaker\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/WhittakerJeremy\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/WhittakerJeremy\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-26T18:11:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-26T21:52:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/treasury_direct.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"JeremyWhittaker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/treasury_direct-1.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"JeremyWhittaker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\"},\"author\":{\"name\":\"JeremyWhittaker\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"headline\":\"Automating the Management of Hundreds of TreasuryDirect.gov accounts\",\"datePublished\":\"2023-04-26T18:11:40+00:00\",\"dateModified\":\"2023-04-26T21:52:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\"},\"wordCount\":409,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"image\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\",\"url\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\",\"name\":\"Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker\",\"isPartOf\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png\",\"datePublished\":\"2023-04-26T18:11:40+00:00\",\"dateModified\":\"2023-04-26T21:52:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage\",\"url\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1.png\",\"contentUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1.png\",\"width\":1229,\"height\":689},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/new.jeremywhittaker.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automating the Management of Hundreds of TreasuryDirect.gov accounts\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/#website\",\"url\":\"https:\/\/new.jeremywhittaker.com\/\",\"name\":\"Jeremy Whittaker\",\"description\":\"Research, software, markets, housing, and energy\",\"publisher\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/new.jeremywhittaker.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\",\"name\":\"JeremyWhittaker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"caption\":\"JeremyWhittaker\"},\"logo\":{\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\"},\"sameAs\":[\"http:\/\/www.jeremywhittaker.com\",\"https:\/\/www.facebook.com\/WhittakerJeremy\",\"https:\/\/www.linkedin.com\/in\/jeremywhittaker\/\"],\"url\":\"https:\/\/new.jeremywhittaker.com\/index.php\/author\/jeremywhittaker\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker","og_description":"If you manage multiple accounts through TreasuryDirect.gov to purchase T-bills, T-notes, T-bonds, TIPS, FRNs, or C of I certificates then you know how antiquated and difficult it can...","og_url":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/","og_site_name":"Jeremy Whittaker","article_publisher":"https:\/\/www.facebook.com\/WhittakerJeremy","article_author":"https:\/\/www.facebook.com\/WhittakerJeremy","article_published_time":"2023-04-26T18:11:40+00:00","article_modified_time":"2023-04-26T21:52:28+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/treasury_direct.jpg","type":"image\/jpeg"}],"author":"JeremyWhittaker","twitter_card":"summary_large_image","twitter_image":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/treasury_direct-1.jpg","twitter_misc":{"Written by":"JeremyWhittaker","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#article","isPartOf":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/"},"author":{"name":"JeremyWhittaker","@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"headline":"Automating the Management of Hundreds of TreasuryDirect.gov accounts","datePublished":"2023-04-26T18:11:40+00:00","dateModified":"2023-04-26T21:52:28+00:00","mainEntityOfPage":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/"},"wordCount":409,"commentCount":0,"publisher":{"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"image":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage"},"thumbnailUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/","url":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/","name":"Automating the Management of Hundreds of TreasuryDirect.gov accounts - Jeremy Whittaker","isPartOf":{"@id":"https:\/\/new.jeremywhittaker.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage"},"image":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage"},"thumbnailUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1-1024x574.png","datePublished":"2023-04-26T18:11:40+00:00","dateModified":"2023-04-26T21:52:28+00:00","breadcrumb":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#primaryimage","url":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1.png","contentUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2023\/04\/image-1.png","width":1229,"height":689},{"@type":"BreadcrumbList","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2023\/04\/26\/automating-the-management-of-hundreds-of-treasurydirect-gov-accounts\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/new.jeremywhittaker.com\/"},{"@type":"ListItem","position":2,"name":"Automating the Management of Hundreds of TreasuryDirect.gov accounts"}]},{"@type":"WebSite","@id":"https:\/\/new.jeremywhittaker.com\/#website","url":"https:\/\/new.jeremywhittaker.com\/","name":"Jeremy Whittaker","description":"Research, software, markets, housing, and energy","publisher":{"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/new.jeremywhittaker.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c","name":"JeremyWhittaker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","caption":"JeremyWhittaker"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g"},"sameAs":["http:\/\/www.jeremywhittaker.com","https:\/\/www.facebook.com\/WhittakerJeremy","https:\/\/www.linkedin.com\/in\/jeremywhittaker\/"],"url":"https:\/\/new.jeremywhittaker.com\/index.php\/author\/jeremywhittaker\/"}]}},"_links":{"self":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts\/4163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/comments?post=4163"}],"version-history":[{"count":0,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts\/4163\/revisions"}],"wp:attachment":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/media?parent=4163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/categories?post=4163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/tags?post=4163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}