I can second Plaid. I use it with a read-only account on my bank, and it works great. I have a daily cron that grabs the data and pulls it into a database on my home network.
It's free (since I only have one use -- me), which is great.
I pull the transactions into SQLite, and have a custom web frontend I use to categorize them. Then for reporting, I export the whole database into a Ledger (https://www.ledger-cli.org/) file. Works great, although it's a lot of moving pieces.
It's free (since I only have one use -- me), which is great.