A custom Python/Django based mini-app (mini — at least for now) that will allow me to import transactions sanely and safely to my local GnuCash install.
I’ve been doing tedious manual entry for a bit over two years now and after having missed three consecutive months, the only other option was to bail.
As a start it should help with 3 main things:
- Translation, categorization: my source documents aren’t in English but my GnuCash entries are. This is one of the reasons I don’t use the built-in imports. (This should shave off at least 90% of time spent entering data)
- Human-error prevention: there were at least 5 times where it took me over 15 minutes to reconcile a discrepancy because I entered some number or some account wrong somewhere.
I happen to use Paddle. Happen because Stripe isn’t available in my country and Lemon Squeezy wasn’t around / was very new back then. It’s OK but it really irks me that they don’t really fight chargebacks. (I haven’t had many but the fee they throw on you automatically is so hefty for a B2C.)
Their V1 API (not Paddle “Billing”) is…not the best I’ve used.
The fees come from the bank and are the same on stripe so, that part is just how the game works.
I see the 'not fighting disputes' from both sides; as a vendor it sucks, but for paddle fighting them is a loose loose game, it would cost them say 50-200$ in time to handle each one and they get some of the liability for it too, also imagine paddle gets really good at fighting chargebacks - where do you think the fraudsters will go to process payments?
Agreed on the chargeback fee they really dont give a shit. I have learned to deal with their V1 API, it has a lot of weird quirks. Kinda wish they offered a better upgrade path to the new billing.
Lemonsqueezy is a lot more expensive than Paddle especially if you are EU based. Hidden fees and things like they only payout USD so you are paying exchange fees multiple times.
Off topic: I’m halfway through the article and can’t help but notice the relatively high number of times a word is erroneously repeated twice; wondering if it was “edited” by AI.
Yeah, I also wondered how quick would it be to ~~rip off~~ replicate “diskprices.com for X” and took a weekend (ok more) to build https://tvpricesindex.com (Also using HTMX).
TVs are much less of a “commodity” of course, but it’s a nice experiment that I’ll iterate on a bit more with time. Also, first deploy on Railway (was nice enough, definitely compared to Heroku, but they have a way to go), and using other libraries I wanted to learn.
Will probably start grouping models better soon, and offer other filters.
BTW: If you plan to do something like this with PAAPI (Product Advertising API), know that Amazon has the constant axe of banning you if you don’t generate “qualified” sales for 30 days straight.
The Amazon PAAPI is "interesting" because to even access it, you need to have 3 qualified sales. But... I wanted to use the API to create a website where I'd post the affiliate links on. It's a chicken-and-egg problem. That's why I went with eBay.
Yep, I don't have much experience with affiliate programs (I like to build more SaaS-like apps[1]) but from my research Amazon have gotten really stingy circa 2019. Happy to see an alternative.
[1] I didn't know about the 3-sales precondition either. I guess some people bought albums on Amazon on my other music-related app.
Yep, I'm fighting this battle at the moment. I got the required 3 sales, but then they rejected me a few days later. From the rejection email "Your website/app did not meet our content standards as the content on your site is insufficient."
There's clearly precedent as I know Jeremies diskprices qualifies. Fingers crossed that Amazon play fair...
I don't understand their worries. What are they trying to achieve with this? I can understand e.g. not wanting to have affiliate links on fraudulent/deceptive websites, but how is a search interface hurting anybody?
Yeah, my first lines of Python (or code) were Selenium/BeautifulSoup. The problems with these are sensitivity for (DOM) changes, speed, and scale (not that I'm too concerned with those at the moment, it's just a fun refreshing project).
Hi. I’m the author. First off, happy to hear you find that refreshing - it’s a really nice compliment to hear!
I, like you, hate blanket statements. Perhaps I should I’ve emphasized a newbie like me in that sentence? I really knew next to nothing about how web development, and specifically serving your site from a server, works.
Unfortunately it’s abandonware now. It was called Showhopping and it would use the Scrobbler API and a list of your favorite bands and find out if any bands you might like (including the ones you listed) were playing in a given area any time soon. You could give it a location and a time range and it would give a list of shows playing on a map with a percentage back based on the likelihood that you’d enjoy the show. It was very lightweight with no sign up and I had it in mind people could use it like Yelp essentially, just ad-hoc.
OP here: that’s a good idea that did come up to mind (specifically rotating the Redis queue credentials). I was just sure Heroku’s gonna take care of this shit by now.
BTW, I’m not 100% sure it’ll work: if Heroku updates that zombie dyno’s environment variables, it may still have access to the new credentials :/ (My Redis instance is also a Heroku add-on)
> BTW, I’m not 100% sure it’ll work: if Heroku updates that zombie dyno’s environment variables, it may still have access to the new credentials :/ (My Redis instance is also a Heroku add-on)
If the configuration only read once during startup, the celery process won't use the new configuration unless it's restarted, right?
Rotate a token, but also mangle it and change to the correct one in code. eg: change database url from `postgres://` to `invalid://` and replace it in code.
I’ve been doing tedious manual entry for a bit over two years now and after having missed three consecutive months, the only other option was to bail.
As a start it should help with 3 main things:
- Translation, categorization: my source documents aren’t in English but my GnuCash entries are. This is one of the reasons I don’t use the built-in imports. (This should shave off at least 90% of time spent entering data)
- Human-error prevention: there were at least 5 times where it took me over 15 minutes to reconcile a discrepancy because I entered some number or some account wrong somewhere.