Weekly eBay listing triage: fix, relist, or stop promoting
Every Monday, get a per-listing worklist of your dead eBay listings and the ones burning ad spend, with a recommended action on every row.
Every Monday at 8am, on a cron trigger, triage the dead weight in my eBay store and tell me exactly which listings to fix, relist, or stop paying to promote. Make these configurable inputs: the eBay marketplace (EBAY_US, EBAY_GB, EBAY_DE, EBAY_AU and so on), the Google Sheets spreadsheet ID, the Slack channel, the stale threshold in weeks (default 8), and the ad spend threshold in store currency above which a non-converting listing counts as a money pit (default 10 per month). Most eBay Sell API calls need the X-EBAY-C-MARKETPLACE-ID header, so pass the configured marketplace on every call that accepts it.
Start by building the listing inventory. Use eBay Get Inventory Items to page through every inventory item on the account, then use eBay Get Offers per SKU to retrieve that SKU's offers, which give me the listingId, current price, listing format, listing status and the date the listing went live. Keep only offers that are currently published and live. Hold on to the SKU to listingId mapping, because the traffic and ad data key off listingId while the spreadsheet output keys off SKU.
Next pull engagement. Call eBay Get Traffic Report twice, once covering the last 30 days and once covering the last 60 days. Request it with the listing-level dimension so the metrics come back per listing rather than as store-wide totals, and ask for impressions, views, sales conversion rate and transaction count. Join each row back to a listing through listingId.
Then pull Promoted Listings ad performance so I can see which of those same listings are quietly accruing ad fees. Use eBay Get Campaigns to find the seller's active campaigns and eBay Get Ads to determine which of my listings are actually enrolled in them. For spend and attributed sales, use eBay Create Report Task to request a listing-level performance report covering the last 30 days. This report is asynchronous, so do not expect inline JSON: after creating the task, poll eBay Get Report Task by report task id until the status is COMPLETED, backing off between attempts with a sensible overall timeout, then download the output with eBay Get Report and parse the returned file. If the report never completes, continue with the rest of the triage and state in both outputs that ad data was unavailable this week.
Before bucketing, build an exclusion set of listings that are still converting and should be left alone. Call eBay Find Eligible Items, which returns the listings eBay considers eligible for a seller-initiated offer to interested buyers. eBay bases that eligibility on recent buyer interest such as watchers, so use it as the recent-watcher proxy signal. Also exclude any listing with at least one transaction in the last 30 days according to the traffic report. Listings in the exclusion set are never flagged, regardless of how they otherwise score.
Sort every remaining live listing into buckets. Stale: zero views and zero impressions across the entire stale window, 8 weeks by default. Key this off engagement rather than age, because a listing that is 60, 90 or even 180 days old still sells if it keeps getting recent engagement, so age alone must never be the trigger. High impressions but no conversion: meaningful impressions over the last 30 days combined with effectively no clicks through to views, or views with no sales, which points at a price, title or photo problem. Money pit: Promoted Listings ad fees over the last 30 days above my configured threshold with zero or near-zero attributed sales, so show the fees against attributed sales rather than a raw spend number. Each listing appears once only. If it qualifies for more than one bucket, take the most expensive problem first: money pit, then high impressions with no conversion, then stale.
Write the results to Google Sheets using Append Values into a tab called Listing Triage, one row per flagged listing, with these columns: run date, bucket, SKU, listing title, listing ID, days live, impressions in the last 30 days, views in the last 30 days, views in the last 60 days, sales in the last 30 days, Promoted Listings ad spend in the last 30 days, attributed ad sales, recommended action, and a one-line reason. The recommended action must be one specific instruction chosen from revise title and photos, reprice, end and relist, or pull out of the Promoted Listings campaign, and it has to match the actual reason the listing was flagged. If the tab does not exist yet, create it and write a header row before appending.
Then post a short summary to my chosen Slack channel using Send a Message as the bot. Include the count in each bucket, the total monthly Promoted Listings spend going to non-converting listings, and the five listings worth fixing first, ranked by how much money is at stake so the biggest ad waste and the highest impressions with no sales come ahead of the quietly stale ones. Give each of the five one line with the title, its bucket and the action. Keep it short enough to read on a phone, format it with Slack mrkdwn, and link to the spreadsheet for the full worklist.
Keep the entire workflow read-only and recommendation-only. Do not revise listings, do not end or relist anything, do not change prices, and do not pause, delete or re-bid ads. Nothing on my store should change without me approving it, so every output is a suggestion for me to action myself in Seller Hub.
What does this prompt do?
- Checks every active listing in your store each Monday and pulls the last 30 and 60 days of impressions, views and sales for each one individually.
- Sorts your problem listings into three buckets: stale (no interest for eight weeks or more), lots of impressions but no sales (usually a price, title or photo issue), and money pits that keep charging you ad fees without selling anything.
- Skips any listing with recent buyer interest or a recent sale, so items that are still warm never get flagged just for being old.
- Writes one row per flagged listing into a Google Sheets tab called Listing Triage with the SKU, title, days live, views, ad spend and a specific recommended action, then posts a short Slack summary with the count in each bucket, the monthly ad spend going to non-converting listings, and the five listings worth fixing first.
What do I need to use this?
- An eBay seller account with listings managed through eBay's inventory tools
- A Google Sheets spreadsheet where the triage rows should be written
- A Slack workspace and the channel you want the weekly summary posted to
- Optional: an active Promoted Listings campaign. If you do not advertise, the ad spend bucket simply comes back empty
- The eBay marketplace you sell on (for example United States or United Kingdom) and the monthly ad spend figure you consider wasteful
How can I customize it?
- Change the day and time it runs, or move it to every two weeks if your inventory turns over slowly.
- Set your own thresholds: how many weeks of silence counts as stale, and how much ad spend with no sales makes a listing a money pit.
- Point it at a different spreadsheet or Slack channel, or narrow it to listings above a certain price so cheap stock does not crowd the worklist.
FAQs
Will this change or end any of my listings?
What if I do not use Promoted Listings?
How does it decide a listing is dead?
Does this work outside the United States?
Why write to a spreadsheet and post to Slack instead of sending one email?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Stop paying to promote listings that never sell.
Get a weekly worklist of exactly which eBay listings to fix, relist, or pull out of your ad campaign.