Sign inSign up

iloveitaly/lunchmoney-assets

By iloveitaly

•Updated 8 months ago

Update Real Estate & Car Values in LunchMoney

Image
0

1.7K

iloveitaly/lunchmoney-assets repository overview

⁠Update Real Estate & Car Values in LunchMoney

Tool to update real estate and car values in LunchMoney⁠. Supports scraping values from Zillow, Redfin, and Kelly Bluebook.

Why build this tool rather than the existing scripts out there?

  • The Kelly Bluebook page structure changed and the existing logic wasn't working for me
  • I wanted a single tool to manage both real estate and cars
  • Wanted a good excuse to play around with puppeteer

⁠Usage

I wrote this using node 17, but I imagine it will work with much older versions. Use asdf install to setup node if you haven't already.

cp .env-example .env
# generate a API key and add it to .env

touch assets.json
# add your assets to assets.json

npm install
node dist/index.js

Or, if you have a docker container setup, you can run it directly:

docker exec -i ca32c16fa00e node dist/index.js
⁠assets.json File Path

The program first checks for the environment variable ASSET_PATH which should be a string path to the assets.json file to use. For example: /home/assets.json. If the environment variable doesn't exist, it then checks inside the current working directory of the node process. For docker deployments, this is inside the /app folder.

⁠assets.json Structure

Specify the assets to be updated in the assets.json file. The key of the hash is the LunchMoney asset ID.

{
  "23760": {
    "__comment": "you can specify a zillow and redfin link to set the balance as the average of the two",
    "url": "https://www.zillow.com/homes/your-home/123/",
    "redfin": "https://www.redfin.com/STATE/CITY/yourhome/home/123"
  },
  "23759": {
    "__comment": "kelly blue book link",
    "url": "https://www.kbb.com/your/car/year/model/?condition=good&intent=trade-in-sell&mileage=100000&modalview=false&options=6763005%7ctrue&pricetype=private-party",
    "mileageStart": 132800,
    "mileageDate": "11/29/23",
    "yearlyMileage": 8000
  },
  "23759": {
    "__comment": "a car that is more damaged than it looks",
    "url": "https://www.kbb.com/your/car/year/model/?condition=good&intent=trade-in-sell&mileage=100000&modalview=false&options=6763005%7ctrue&pricetype=private-party",
    "adjustment": -500
  }
}

Note that mileage can be optionally specified. If it is, the tool will calculate the depreciation based on the mileage and the date of the last update.

⁠Docker Deployment

https://hub.docker.com/r/iloveitaly/lunchmoney-assets⁠

Here's the docker-compose file I use:

lunchmoney_assets:
  container_name: lunchmoney-assets
  image: iloveitaly/lunchmoney-assets:latest
  restart: unless-stopped
  environment:
    - SCHEDULE=@monthly
    - LUNCH_MONEY_API_KEY=THE_KEY

Copy your assets config into the container:

docker compose cp ./lunch-money-assets.json lunchmoney_assets:./app/assets.json

Or, if you are using docker without compose:

docker cp ./lunch-money-assets.json lunchmoney_assets:./app/assets.json

Set a SCHEDULE environment variable when starting the container to update the assets at a regular interval. The value should be a cron expression⁠.

docker run -d --name lunchmoney-assets -e SCHEDULE="0 0 * * *" iloveitaly/lunchmoney-assets

⁠Development

Setup your env (I use direnv⁠):

cp .envrc-example .envrc

Compile typescript:

npm run dev

Get a list of all accounts in your lunchmoney account:

http GET https://dev.lunchmoney.app/v1/assets -A bearer -a $LUNCH_MONEY_API_KEY | jqp

# or match against a specific account
http GET https://dev.lunchmoney.app/v1/assets -A bearer -a $LUNCH_MONEY_API_KEY | jq '.assets | map(select(.name == "Camry"))'

⁠TODO

  • throw a user-friendly error if assets.json is not defined
  • It seems as though the KBB logic only works for private party priced URLs. Not sure why.
  • Automatically calculate additional mileage based on time passed

Tag summary

Content type

Image

Digest

sha256:ece7aa087…

Size

908.9 MB

Last updated

8 months ago

docker pull iloveitaly/lunchmoney-assets