Replay the form, not the browser.
Browser automation was the first approach and it flaked; replaying the ASP.NET form flow directly proved far more reliable. The cost: every marketplace is its own integration project with its own failure modes.
On Czech and Slovak second-hand marketplaces, listing age decides visibility. InzerPro writes the listing once and posts, re-posts and deletes it across every marketplace on schedule, unattended.
Resellers, small e-shops and car dealers were deleting and re-posting dozens of ads by hand every day, and competitors still buried them overnight. The marketplaces sell paid promotion but give small sellers no automation at all: none of them has a public API.
A seller writes a listing once, picks marketplaces, and InzerPro posts, re-posts on schedule and deletes across all of them. One canonical category picker (about 165 categories) resolves to the right category on every marketplace through a database crosswalk; photos are re-encoded per platform to fit each site's rules.
Every feature is free up to 10 active listings, then one plan, 19 EUR / 479 Kč per month, for unlimited listings. The limit is enforced in the app and by a Postgres trigger, so it holds even if the client misbehaves.
A React dashboard on Supabase (auth, Postgres with row-level security on all 41 tables, 34 edge functions) runs post, relist and delete as scheduled jobs per user. All marketplace traffic goes through a small Node relay with a residential proxy, because Bazos blocks datacenter IPs outright, including the ones edge functions run from. Each marketplace is its own reverse-engineered integration: replaying the real HTTP flows proved far more reliable than driving a browser.
Browser automation was the first approach and it flaked; replaying the ASP.NET form flow directly proved far more reliable. The cost: every marketplace is its own integration project with its own failure modes.
A check that fails for six hours sends one email, not six. Alert fatigue is a real risk when one person is the whole on-call rotation.
The credit-based tier model confused users. Now everything is free to 10 active listings, then 19 EUR / 479 Kč for unlimited: simple to explain, and enforced in Postgres, not just the UI.
Each of these replaced a version that was already built and worked worse.
The system is built to run unattended and to tell one person that something broke before a customer does: scheduled jobs, an hourly canary, Sentry on every function, and a nightly end-to-end suite against the real marketplaces.
The screens shown here are illustrative mockups with invented example data; the real dashboards live behind the app login.
| ID | Action | Marketplace | Listing | Time | Status |
|---|---|---|---|---|---|
| 9312 | relist | Bazos.cz | iPhone 13, 128 GB | 06:00 | done |
| 9311 | relist | Bazos.sk | iPhone 13, 128 GB | 06:00 | done |
| 9310 | post | Bazar.cz | Skoda Octavia III 2.0 TDI | 05:45 | done |
| 9309 | relist | Bazar.sk | Detsky bicykel 16" | 05:30 | retrying |
| 9308 | delete | Bazos.cz | Herna konzole PS5 (sold) | 05:15 | done |
| 9307 | relist | Bazos.sk | Sedaci souprava, rohova | 05:00 | done |
Every post, relist and delete is a job with per-marketplace status and retries; the queue is the product.
| Check | Detail | Status |
|---|---|---|
| Relay reachable | POST /health via residential proxy | pass |
| Proxy exit country | CZ (required for Bazos) | pass |
| Credentials valid | 4 of 4 marketplace logins | pass |
| Image acceptance | test upload passed pixel dedup | pass |
Hourly probe of relay health, proxy exit country, credentials and image acceptance, alerting on transitions only.
Post, relist and delete are verified green across all enabled marketplaces after every change.
InzerPro is my own product: a manual daily workflow automated end to end, running in production with paying customers. If your team burns hours on work like this, I build the system that takes it over and the monitoring that proves it keeps working.
A workflow that runs itself, with the monitoring to prove it.