When There's No API, Be the User
I've written before that when a vendor won't hand you an API, it still hands you an inbox, and that some systems will only tell you what's happening by putting it on a screen. Both of those are ways of getting data out of a system that never meant to give it to you. This is about the harder direction: getting data in.
Reading is the easy half. Plenty of platforms will let you look. Far fewer will let you act—create a listing, cancel an order, upload a file—without a sanctioned way to do it. And some of the ones I depend on have no API at all. When that happens there is exactly one path left, the same one every customer uses: the website.
The Vendor That Gives You Nothing
My card business lists across four marketplaces. eBay has a real API I can write to. Two of the others don't: TCGplayer has no seller API, and Loupe's listings go through a third-party tool. For those there is no endpoint to send a sold card to—there's a login page, a dashboard, and a human who's supposed to sit there clicking.
So I became the human, in software. A headless browser logs in, exports the current inventory, builds a file that zeroes out the quantity on anything that just sold, uploads it, and publishes. Every step is a click or a keystroke a person would have made. The platform can't tell the difference, because from its side there isn't one.
Automate Intent, Not Positions
The temptation is to treat this like recording a macro—capture the clicks, play them back. That falls apart by the second day. A real page shifts under you: a button moves, a modal appears, a slow network leaves you clicking something that hasn't loaded yet. Playback automation assumes the page is a photograph. It's a weather system.
So I don't automate positions, I automate intent. Wait for a thing to exist before touching it. Find the upload control by what it is, not where it sits. Confirm the page actually advanced before assuming the click landed. It's slower to write, and it's the only version that survives contact with a real website nobody promised to keep stable for me.
The UI Is a Contract Nobody Signed
An API is a promise. A vendor who publishes one is telling you these fields will keep meaning this, and if they break it, that's on them. A UI is no such promise. The marketplace can redesign its seller dashboard on a Tuesday and owe me nothing—I was never supposed to be reading it with a robot in the first place.
That reality sets the whole design. I assume the page will change out from under me, so every run verifies it did what it meant to instead of trusting that it did. If the export comes back empty or the publish screen never confirms, the job stops and says so, loudly, rather than cheerfully marking a card sold that's still live on the site. A silent success on a broken UI is how you oversell a one-of-one.
Make It Boring
Driving a browser is the least reliable thing I do, so it gets the most forgiving plumbing. A session dies mid-run and the job relaunches it and starts over—every run is safe to repeat, because it re-derives the right state from scratch instead of picking up where it left off. A transient failure gets one quiet retry. Only after it fails twice in a row does it reach for me, so a slow page at 2am never becomes a notification.
The reconciliation loop sits above all of it as the backstop. Every few minutes it checks one rule—a card may only be listed on a secondary marketplace if it still has an active primary listing—and delists anything that fails. If the browser automation ever misses, the loop catches it on the next pass. I don't need the clicking to be perfect. I need it to be self-correcting.
The Front Door Always Works
There's nothing elegant here. The sanctioned path is an API, and when a vendor offers one I take it every time. But plenty of the tools a small business depends on will never offer one, and waiting for them to is just a slower way of doing the work by hand.
The website is the one interface every vendor commits to keeping alive, because their actual customers use it. That makes it the integration of last resort that's never actually unavailable. When there's no door built for machines, there's still the front door—and a script can walk through it the same as anyone.