DEALERFLOW

A multi-tenant SaaS platform that automates vehicle inventory posting across Facebook Marketplace at scale.

Visit Site

4

Job Types

Multi-Tenant

SaaS Platform

3

Billing Tiers

Real-Time

SSE Delivery

The Problem

Car dealerships post hundreds of vehicles to Facebook Marketplace manually. Every listing means opening a browser, filling out a form, uploading images, selecting categories — then repeating across multiple accounts. Scaled across a lot with 200+ units and a team managing several profiles, it eats hours every single day.

On top of the time cost: Facebook freezes accounts, resets posting limits, requires 2FA prompts, and throttles activity if it detects anything non-human. Managing all of that while trying to actually sell cars is a full-time job in itself.

The dealerships we built this for needed a system that handled the entire posting lifecycle — automatically, reliably, and without triggering account issues.


What We Built

DealerFlow is a multi-tenant SaaS platform that automates vehicle inventory posting across Facebook Marketplace at scale. Dealerships manage their entire inventory, Facebook accounts, and posting schedule from a single dashboard. The system handles everything from posting to price updates to reposts — without anyone touching a browser.

Inventory Management

Dealers input their full vehicle inventory — VIN, year, make, model, trim, mileage, price, specs, images. The system stores and tracks each unit across its entire lifecycle: in stock, listed, pending, sold, or removed. Every listing is tied back to the vehicle record, so status updates flow automatically.

Automated Posting Engine

The core of DealerFlow is a distributed worker system built on BullMQ and Redis. When a posting job is queued, a Puppeteer-driven browser worker picks it up, logs into the correct Facebook account, navigates the Marketplace listing form, fills all fields, uploads images, and publishes — all without human input. The worker handles four job types: post, update price, delete, and repost.

We built browser fingerprinting directly into the session management layer. Each Facebook account gets a consistent user agent, session cookies, and optionally a dedicated proxy — making each session indistinguishable from a real user.

Cruise Control

Cruise Control is the autonomous scheduling layer. Dealers set their active hours, days of the week, and posting intervals. The system then runs continuously within those parameters — posting inventory, updating prices, and reposting aged listings on its own. Enable it once and it runs indefinitely.

Auto-repost is built in: listings older than a configurable number of days are automatically deleted and reposted to stay at the top of Marketplace search results.

Account Health Monitoring

Every Facebook account has a live health score. The system tracks consecutive errors, last successful post, frozen status, and suspension state. Frozen accounts are flagged immediately with the reason and timestamp. Dealers see which accounts are healthy, which need attention, and which are offline — at a glance, without digging through individual listings.

Real-Time Job Monitoring

Job status streams live to the dashboard via Server-Sent Events. Dealers watch posting jobs move from queued to active to completed in real time. Failed jobs include the error and a screenshot of the browser state at failure — making debugging fast.

Team & Billing

DealerFlow is fully multi-tenant. Each dealership is a team with role-based access (owner, admin, member). Subscription tiers (Starter, Professional, Enterprise) gate vehicle limits, Facebook account limits, and team size through Stripe billing, with webhook-driven status updates keeping the subscription state current.


Architecture Decisions

The web app and worker service are fully decoupled. The Next.js app handles all user interaction and queues jobs to Redis. The worker service — running in Docker — pulls jobs from the queue and executes browser automation independently. This means the web app stays fast and responsive regardless of how many posting jobs are in flight.

Each Facebook account has its own browser session, user agent, and optionally a dedicated proxy. Sessions are encrypted at rest. This isolation is what prevents one account's activity from affecting another's health score.

We chose BullMQ over simpler job runners for its retry logic, job prioritization, and visibility. When a post fails, the job retries up to three times with exponential backoff. The failure reason and browser screenshot are stored against the job record — which feeds directly into the rep's troubleshooting view.


Tech Stack

Frontend / API

Next.js 15TypeScriptTailwind CSS v4NextAuth.jsRechartsServer-Sent Events

Backend / Infrastructure

BullMQRedisPuppeteerBrowser FingerprintingProxy RotationPrismaPostgreSQLDocker

Billing & Auth

StripeNextAuth.js

My Role

Co-founder and sole technical architect. Designed the full-stack architecture, built the web platform, and developed the automation worker from scratch. This included the Puppeteer automation layer, the BullMQ queue infrastructure, browser fingerprinting logic, the real-time SSE pipeline, and the Stripe billing integration.

SOME PROBLEMS DESERVE AN ENGINEER.

Not a template. Not a prompt. A system built to last.

Start a Project