Daily Craigslist repricing desk for used car dealers

By General Input

Open one screen each morning to see every live vehicle listing with its engagement, days on lot and cost per contact, then reprice or rewrite on the spot.

Integrations

  • Craigslist
  • Google Sheets

Type

App

Categories

  • Marketing
  • Operations

Build me an app I open every morning to run the Craigslist repricing desk for my used car dealership. I have bulk posting access in the For Sale By Dealer category and my vehicle inventory lives in a Google Sheet. This app is where I decide which listings to reprice, which to rewrite, and which to take down. It is a working surface I sit in front of, not an unattended automation, so nothing should run on a schedule and every change to a listing happens because I clicked something.

The main screen is a single table of all my live Craigslist postings. Build each row from Craigslist Get All Postings Stats for the 30 day engagement numbers (impressions, views, contacts, favorites) and Craigslist Get Posting Status so I only see postings that are actually live, with expired, removed, and deleted ones filtered out of the default view. Use Craigslist Get Single Posting Stats when I open a single row and want its numbers refreshed on their own rather than reloading the whole table.

Join that against my vehicle inventory in Google Sheets using Get Values. My sheet has one row per vehicle and includes the Craigslist posting ID, so match on that column. Every table row should also show VIN, days on lot, cost basis, and current asking price from the sheet. Let me configure the spreadsheet ID, the tab and range, and which column holds each field, and persist that configuration so I set it once. If a posting has no matching sheet row, or a sheet row points at a posting ID that is not live, show it in a small reconciliation section under the table instead of silently dropping it, because that mismatch is usually a data problem I want to fix.

Compute these columns on top of the joined data: contacts per day over the reporting window, days since the last contact, days on lot from the sheet, and an estimated cost per contact. Cost per contact is the per posting fee divided by contacts in the window, using a per posting fee I can set in app settings and change at any time, defaulting to something sensible like 5 dollars since dealer vehicle ads typically run a few dollars each. When a posting has zero contacts, do not divide by zero: show the full fee as spent with no contacts to show for it and sort those to the worst end. Highlight the cost per contact when it goes above a threshold I can configure, so I can see at a glance which vehicles are burning budget.

I need to sort and filter this table hard, because the whole point is to make stale units float to the top. Give me sortable columns for contacts per day, cost per contact, days on lot, and total contacts, plus quick filters for zero contacts in the last seven days and days on lot over 45. Let me combine filters, and give me a default view on open that surfaces the stale and expensive units first so my morning starts with the problem cars. Show a few summary tiles across the top: live postings, total contacts in the window, blended cost per contact, and how many units are over the days on lot threshold.

Clicking a row opens a detail panel for that vehicle. Populate it with Craigslist Get Posting Body, Get Posting Price, and Get Posting Images, alongside the engagement numbers and the inventory context already in the row so I can see cost basis and asking price while I decide. From that panel I want to drop the asking price with Edit Posting Price, rewrite the description with Edit Posting Body, add a photo with Upload Image, lead with the best shot using Reorder Images by dragging the images into the order I want, and take a sold unit down with Delete Posting. Ask me to confirm before deleting, and show the current price and the margin over cost basis next to the price field so I never cut below what the unit cost me without knowing it. After any edit, refresh that posting's data so the panel reflects what is actually live on Craigslist rather than what I typed.

Never let me edit the VIN. Craigslist locks the VIN after the original posting in the dealer category, so display it as read only text in both the table and the detail panel, and if I try to change it explain that fixing a VIN requires taking the listing down and posting the vehicle again. Do not build a VIN field into any edit form.

Two things about the engagement data that need to show up in the interface. Craigslist stats only cover a rolling 30 day window that runs through midnight UTC yesterday, so label the window on screen and never imply the numbers include today. And the counts are all requests rather than unique viewers, so note that these are relative signals for ranking listings against each other, not a count of individual shoppers.

Two hard constraints on scope. There is no create posting operation available, so this app manages existing postings only: do not build anything that creates, schedules, or reposts listings, and do not offer it in the interface. And a posting can hold at most 24 images, so block uploads past that limit with a clear message instead of letting the call fail.

Persist my settings across sessions: the per posting fee, the days on lot and no contact thresholds, the cost per contact highlight threshold, the sheet configuration, and my last used sort and filters, so the app opens the same way every morning.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads