The bid count and the real end time, not just a price
ShopGoodwill is Goodwill's own auction marketplace: 163 regional Goodwill organisations list second-hand lots, most of them as bid auctions.
8 active endpoints, on 1 and 2 credit tiers.
- POST/shopgoodwill/v1/search
- POST/shopgoodwill/v1/sold
- POST/shopgoodwill/v1/detail
- POST/shopgoodwill/v1/bids
- POST/shopgoodwill/v1/categories
- POST/shopgoodwill/v1/sellers
- POST/shopgoodwill/v1/seller
- +1 more
What ShopGoodwill endpoints does ReefAPI ship?
8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
ShopGoodwill API
5 of 8 endpoints, ready to run
Live lots, most-contested first
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the ShopGoodwill API works
ShopGoodwill is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 438 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Price a lot before you bid on it
Find what is open now, then check what the same thing closed at.
Keep one item_id and read ends_at — it already carries the US Pacific offset.
Read minimum_next_bid, bid_increment, handling_price and the pickup address.
Thirty days of hammer prices for the same keyword, with the bid count beside each.
A live lot, the exact second it closes, the smallest bid that will be accepted, and a month of comparable sold prices.
curl -X POST https://api.reefapi.com/shopgoodwill/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"vintage camera","sort":"most_bids","page":1}'{
"ok": true,
"data": { … },
"meta": {
"api": "shopgoodwill",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What one listing row carries
Measured on 373 rows across ten keyword and category searches.
| Field | Fill | What it is |
|---|---|---|
| current_price + price_basis | 373/373 | On an auction this is the live high bid, not an asking price. price_basis says which, so you never have to guess. |
| bid_count | 373/373 | Bids placed so far. Matched the detail endpoint's bid log exactly on 16 of 16 round trips. |
| minimum_next_bid | 373/373 | The smallest bid the source will currently accept. |
| ends_at / ends_at_local | 373/373 | Resolved ISO-8601 with offset, and the raw source string beside it. |
| seconds_remaining | 373/373 | Derived from the resolved end time, so it is exact to the second — the source's own countdown rounds to its coarsest unit. |
| buy_now_price | 100/373 | Only the two buy-now formats carry one; the source's 0.0 is returned as null, never as a price of zero. |
| seller_id + category_id | 373/373 | Feed either straight back into search as a filter. |
| part_number | 13/373 | Published only when the Goodwill that listed the lot typed one in. |
The source serves a fixed 40 rows per page and ignores any page-size request, so no page_size parameter is offered. There is no condition or grade field anywhere upstream — condition is described in free text only.
Measured coverage
Two live cohorts on 2026-10-06, 101 of 101 calls on the expected result each time.
655,516 open listings on an unfiltered search; 163 regional Goodwill sellers.
Fixed 40 rows per page. A 21,062-result search paged to 527, the last page holding 22 rows; last_page, has_more and page_beyond_last are returned.
1 to 30 days back from any end date. Measured: lego 14,466 closed lots over 14 days, nike 9,916 over 3 days.
Public for live and closed auctions. Example: 31 bids from 4 distinct bidders on one coin lot; 42-bid and 37-bid closed lots verified against their final price.
29 departments, 239 subcategories, 268 nodes, every one with the ID search accepts. No third level exists upstream.
Resolved to ISO-8601 with the US Pacific offset, daylight saving applied, and cross-checked against the source's own server clock to within 0.5 s. The raw source string ships alongside.
No condition or grade field (the source has none), no seller rating or feedback score (the source publishes none), no paging on the seller storefront (it returns 5 rows and takes no page handle), and no page_size parameter because the source ignores one.
Watchlist, saved searches, your own bids and orders, pickup scheduling and address-specific shipping quotes are outside this API — they need a signed-in buyer.
What people build with ShopGoodwill
The jobs this data is most often used for.
endpoints
credits per call
Snipe and bid-timing tools that need the end time right to the second, in a real timezone.
Resale and arbitrage research: pull 30 days of closed-auction hammer prices for a keyword or category.
Collectible price tracking across coins, cameras, Pyrex, jewellery, Lego and vinyl with the bid count as a demand signal.
Bid-competition analysis from the public bid log: how many distinct bidders, how fast the price climbed.
What ShopGoodwill data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 438 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/shopgoodwill/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"vintage camera","sort":"most_bids","page":1}'import requests
r = requests.post(
"https://api.reefapi.com/shopgoodwill/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "vintage camera",
"sort": "most_bids",
"page": 1
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up ShopGoodwill.
Get a free key →What timezone are the auction end times in?▾
US Pacific (America/Los_Angeles). The source publishes a naive string with no offset and no Z, which is how integrations end up an hour out. ends_at is ISO-8601 with the offset applied by the US daylight-saving rule (October rows resolve -07:00, December rows -08:00), and ends_at_local is the untouched source value so you can always check our arithmetic. The resolved clock was checked against the source's own server time on every detail call and agreed to 0.5 seconds.
Can I get sold prices, not just live asks?▾
Yes. The sold action returns closed auctions over a window of 1 to 30 days back, where current_price is the final hammer price and bid_count is the bidding that got it there. On three closed lots we checked the sold-row price, the detail price and the highest row in the bid log and all three agreed: 566.00, 311.00 and 1702.00.
Is the bid log really public?▾
Yes, for live and closed auctions alike. You get every bid with its amount, the resulting price, the timestamp and a retracted flag, plus one standing-bid row per bidder. Bidder handles arrive masked by ShopGoodwill itself (for example m****n) and we never unmask them.
How deep can I page?▾
As deep as the result goes. For a 21,062-result search the last page carrying rows was 527 (40 rows per page, the final page holding 22). The response tells you last_page, has_more and page_beyond_last, so overrunning the end is reported as an overrun and never as zero results.
Which filters actually work?▾
Ten, and each was verified against two independent control searches rather than trusted: sale format, min and max price, local-pickup-only, exclude-pickup-only, one-cent-shipping, ships-to-Canada, international-shipping-only, description search, plus category and seller. Example on 21,065 nike lots: buy-now 10,571, auctions 15,362, pickup-only 5, one-cent shipping 2,241. Six sorts are offered and all six were proven to reorder; four more sort codes the site accepts do nothing, so they are not published.
How many sellers and categories are there?▾
163 regional Goodwill organisations, each with its numeric seller_id, US state and city — Ohio 17, California 13, Texas 12, Pennsylvania 11. The category tree is two levels: 29 departments and 239 subcategories, 268 nodes in all. There is no third level upstream.
What needs a ShopGoodwill account and is therefore not here?▾
Watchlist, saved searches, your own bids and orders, pickup scheduling, and a shipping quote to a specific address — all of those require a signed-in buyer. Everything this API returns is what a visitor can see without logging in.
Is every lot an auction?▾
No, and the row tells you which: auction (bid only), buy_now (fixed price) or auction_with_buy_now (bidding plus a buy-now price). Of 373 rows measured, 100 carried a real buy-now price.
What is the ShopGoodwill API?▾
ShopGoodwill API is a ReefAPI endpoint group for goodwill's charity auctions with the bid count and the real end time, not just a price. It returns live JSON through POST requests under /shopgoodwill/v1.
Is the ShopGoodwill API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. ShopGoodwill calls use the same shared credit balance as every other ReefAPI engine.
Do I need a ShopGoodwill login or account?▾
No login to ShopGoodwill is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the ShopGoodwill data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the ShopGoodwill API use?▾
ShopGoodwill actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call ShopGoodwill from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call shopgoodwill actions with the same key, credit pool and JSON envelope used by normal REST requests.
191 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling ShopGoodwill, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 437 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-06.