skills/mortgage-statement/SKILL.md
Process incoming Rocket Mortgage billing statements. Copies PDF from Dropbox Downloads to the Payments folder, extracts payment data, updates the Google Sheet tracker, adds Dropbox shareable link, and deletes the original. Use when a mortgage statement arrives or is mentioned in Downloads.
npx skillsauth add abhiroopb/synthetic-mind mortgage-statementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Process a Rocket Mortgage billing statement PDF and update the mortgage tracker spreadsheet.
Dropbox/Downloads/ — the statement PDF (e.g., "Client Mortgage Statement.pdf")Dropbox/Documents/2424 Tulare Ave/Mortgage/Payments/YYYY-MM-DD.pdf
C:\Users\basua\Dropbox1hu0tTq4xCq_O6HrHaDV8dWLi9gGUBQoEbg2xHC3jlvUMortgage (Refi) (sheetId: 37179790)c:\Users\basua\.agents\skills\gdrive\gdrive-cli.py (run via uv run gdrive-cli.py from that directory)~/.config/gdrive-skill/credentials.json| Col | Header | Type | Notes |
|-----|--------|------|-------|
| A | No. | Static | Payment number |
| B | Date | Static | Payment date (1-Mon-YYYY) |
| C | Paid to | Static | "Rocket Mortgage" |
| D | Principal | Enter | From "Next Payment Breakdown" |
| E | Interest | Enter | From "Next Payment Breakdown" |
| F | Taxes and Insurance | Enter | Usually $0.00 |
| G | Insurance | Enter | Usually $0.00 |
| H | Total | Formula | =sum(D:G) — do NOT overwrite |
| I | Link | Enter | Rich text hyperlink to Dropbox (see below) |
| J | Cumulative Principal | Formula | =J_prev+D — do NOT overwrite |
| K | Est. Home Value | Enter | Zillow Zestimate for 2424 Tulare Ave, El Cerrito CA |
| L | Home Equity | Formula | =K-$Q$6+J — do NOT overwrite |
The statement's Due Date and Payment History determine which rows to update:
Extract the following values:
YYYY-MM-DD.pdf).Dropbox/Downloads/ for any PDF matching "Mortgage".Dropbox/Documents/2424 Tulare Ave/Mortgage/Payments/.Extract data from the PDF (Principal, Interest, Due Date).
If the file was in Downloads:
/Documents/2424 Tulare Ave/Mortgage/Payments/YYYY-MM-DD.pdf.content_link or generate a shared link.Look up the current Zestimate for 2424 Tulare Ave, El Cerrito, CA 94530.
Update both the preceding month (backfill) and the upcoming month (due date) rows if values are missing or need correction.
For D, E, F, G, K columns (Values): Use the gdrive CLI via a Python script to write values to the identified rows.
For I column (Hyperlinks):
The Link column uses rich text hyperlinks. Use the Google Sheets batchUpdate API to insert "Link" as a clickable text, or use =HYPERLINK("URL", "Link") as a fallback.
import subprocess, json, os
os.chdir(r"c:\Users\basua\.agents\skills\gdrive")
SPREADSHEET_ID = "1hu0tTq4xCq_O6HrHaDV8dWLi9gGUBQoEbg2xHC3jlvU"
ROW = 64 # adjust to correct row
# Write payment values
result = subprocess.run(
["uv", "run", "gdrive-cli.py", "sheets", "write",
SPREADSHEET_ID,
"--range", f"'Mortgage (Refi)'!D{ROW}:G{ROW}",
"--values", json.dumps([[1306.08, 1289.33, 0, 0]])],
capture_output=True, text=True
)
# Write Zestimate
result2 = subprocess.run(
["uv", "run", "gdrive-cli.py", "sheets", "write",
SPREADSHEET_ID,
"--range", f"'Mortgage (Refi)'!K{ROW}",
"--values", json.dumps([[1108100]])],
capture_output=True, text=True
)
For I column (hyperlink) — the Link column uses rich text hyperlinks (NOT =HYPERLINK() formulas). Use the Google Sheets batchUpdate API directly:
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
TOKEN_PATH = os.path.join(os.path.expanduser("~"), ".config", "gdrive-skill", "credentials.json")
with open(TOKEN_PATH) as f:
token_data = json.load(f)
creds = Credentials(
token=token_data.get("token"),
refresh_token=token_data.get("refresh_token"),
token_uri=token_data.get("token_uri"),
client_id=token_data.get("client_id"),
client_secret=token_data.get("client_secret"),
scopes=token_data.get("scopes"),
)
service = build("sheets", "v4", credentials=creds)
request_body = {
"requests": [{
"updateCells": {
"rows": [{
"values": [{
"userEnteredValue": {"stringValue": "Link"},
"textFormatRuns": [{
"startIndex": 0,
"format": {"link": {"uri": DROPBOX_LINK}}
}]
}]
}],
"range": {
"sheetId": 37179790,
"startRowIndex": ROW - 1, # 0-based
"endRowIndex": ROW,
"startColumnIndex": 8, # Column I
"endColumnIndex": 9,
},
"fields": "userEnteredValue,textFormatRuns"
}
}]
}
service.spreadsheets().batchUpdate(
spreadsheetId=SPREADSHEET_ID, body=request_body
).execute()
Read back the updated row to confirm all values are correct:
uv run gdrive-cli.py sheets read <SPREADSHEET_ID> --range "'Mortgage (Refi)'!A<ROW>:L<ROW>"
cmd /c del "C:\Users\basua\Dropbox\Downloads\<original filename>.pdf"
--values arguments.testing
Track TV shows and movies with Trakt.tv. Search, get watchlist, history, up-next, recommendations, trending, calendar, ratings, stats, add/remove from watchlist, mark watched, rate, and check in. Use when asked about what to watch, TV shows, movies, watch history, or Trakt.
development
Send and receive SMS messages via Twilio API. Used for text message notifications, forwarding important alerts, and two-way SMS communication.
documentation
Organizes files in the local Downloads folder into proper folders. Use when asked to organize, sort, or file downloaded documents.
tools
Book and manage appointments on Sutter Health MyHealth Online portal. Uses browser automation via Playwright MCP to interact with the patient portal.