ShopGoodwill Sold Prices & New Listing Alerts avatar

ShopGoodwill Sold Prices & New Listing Alerts

Pricing

from $1.50 / 1,000 item row returneds

Go to Apify Store
ShopGoodwill Sold Prices & New Listing Alerts

ShopGoodwill Sold Prices & New Listing Alerts

ShopGoodwill sold prices: closed auctions with their final price, bids and end time for any search, plus an optional median / quartile comps summary and new-listing alerts to Discord, Slack or Telegram. No login. Searches that find nothing are free.

Pricing

from $1.50 / 1,000 item row returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Search ShopGoodwill and get what the items really sold for. For each search you get one row per item (title, category, final price, bids, end time, a link) from the site's closed auctions, an optional comps summary (median, quartiles, low, high), and, if you schedule it, alerts to Discord, Slack or Telegram when a new listing appears. It uses ShopGoodwill's public search data, so there is no login and no API key. A search that finds nothing is free.

Typical uses: price a lot before you bid on it, check what a brand or model sells for, or watch a search for new listings under a price.

How to use

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~shopgoodwill-sold-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"searches":["pyrex"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"searches": [
"pyrex"
]
}

One search per line, the words you would type into ShopGoodwill's search box, such as "pyrex" or "vintage camera". Each search reads up to the number of items set below, 40 per page. Accepted formats: pyrex, vintage camera, le creuset.

Example

Price pyrex from the last 30 days, add a summary row, and get a Discord message for every new live listing under $25 on later runs:

{
"searches": ["pyrex"],
"mode": "sold",
"maxItems": 40,
"includeCompsSummary": true
}

Sold prices come back as item rows (saleStatus: "sold") plus one comps-summary row with count, soldWithBidsCount, medianUsd, p25Usd, p75Usd, lowUsd, highUsd, medianBids and newestEndTime.

For the alert, save this as a Task and schedule it daily:

{
"searches": ["pyrex"],
"mode": "live",
"maxPrice": 25,
"maxItems": 100,
"deltaMode": true,
"deltaName": "pyrex-under-25",
"skipFirstRun": true,
"alertOnChangeOnly": true,
"notifyUrl": "https://discord.com/api/webhooks/<id>/<token>"
}

The first run remembers what is listed now (skipFirstRun, nothing returned or billed). Each later run returns, bills and posts only the listings it has not seen before.

Output

Rows are item rows, plus one comps-summary row per search when you ask for it. For example:

queryfoundstatusrowTypesearchModeitemIdurltitlecategorycategoryIdpriceUsdbidssaleStatusendTimestartTimesellerIdshippingUsdtotalMatchingkeywordMatchchangeTypealertReasonpreviousPriceUsdpriceChangePctcheckedAtcountsoldWithBidsCountmedianUsdp25Usdp75UsdlowUsdhighUsdmedianBidsnewestEndTimewindowDaysscrapedAt
pyrextrueOK<searched: sold (closed auctions) or live> <category path><final price (sold) or current bid (live), usd><sold, no-bids or live><auction end time (shopgoodwill site time)><auction start time (shopgoodwill site time)><seller (goodwill store) id><shipping price shown in the listing, usd><since last run: new or seen (monitoring only)><alert reason: new-listing or price-below (monitoring only)><price the last run saw, usd (monitoring only)><price change since the last run, % (monitoring only)><checked at (iso time)><summary: items read><summary: items with at least one bid><summary: median price, usd><summary: 25th percentile price, usd><summary: 75th percentile price, usd><summary: lowest price, usd><summary: highest price, usd><summary: median number of bids><summary: newest end time read><summary: days of closed auctions searched>1970-01-01T00:00:00.000Z

A miss comes back as a row with "found": false and is never charged.

Fields

FieldMeaning
itemId, urlShopGoodwill's item number and the item page link.
title, category, categoryIdThe listing title and its category path.
priceUsdSold mode: the final price. Live mode: the current bid.
bidsNumber of bids.
saleStatussold (closed with at least one bid), no-bids (closed with none, only if you ask for them) or live.
endTime, startTimeShopGoodwill's own clock, with no time zone attached.
sellerIdThe seller's number. ShopGoodwill does not return the shop name in search results.
shippingUsdThe shipping price the listing shows (often 0 or a token amount; check the item page).
totalMatchingHow many items ShopGoodwill matched for the search, which can be far more than you asked for.
changeType, alertReason, previousPriceUsd, priceChangePctMonitoring only (empty otherwise).
keywordMatchWhich of your "only keep titles containing" words matched.

Limits

  • Sold mode reads closed auctions as ShopGoodwill's search returns them: newest end time first, 40 per page, 10 pages (400 items) per search, and at most 365 days back (30 days when you do not set a date).
  • An auction that closed with no bids is not a sale, so it is left out unless you tick the box. The summary prices use only auctions that had a bid.
  • A closed auction's price is the last bid. It does not include shipping, ShopGoodwill's buyer's premium or tax.
  • Live mode lists the items that end last first, which is roughly newest first. A broad search can have more live items than you ask for, so new-listing alerts only see what was read; keep alert searches narrow or raise the item limit.
  • The price filters and the category filter are applied by ShopGoodwill. The date, title and no-bid filters are applied after the fetch.
  • Requests are spaced two seconds apart, so a 400-item search takes under a minute. The actor does not log in and never opens cart, account or checkout pages.
  • Monitoring remembers up to 20,000 items per watchlist in a named store on your account; the oldest are forgotten first.

Pricing

Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed per item only when data is actually found and returned — see .actor/pay_per_event.json for exact prices. A miss is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~shopgoodwill-sold-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"searches":["pyrex"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~shopgoodwill-sold-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["pyrex"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~shopgoodwill-sold-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "ShopGoodwill Sold Prices & New Listing Alerts | Apify" — the agent will find and run this actor.