ShopGoodwill API

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a ShopGoodwill endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
S
/shopgoodwill/v1

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.

8 endpoints

search

2 cr

Search LIVE ShopGoodwill listings.

required
—
optional
query, category_id, seller_id, listing_type, min_price, max_price, pickup_only, exclude_pickup_only, one_cent_shipping_only, ships_to_canada, international_shipping_only, search_descriptions, sort, page

sold

2 cr

Closed ShopGoodwill auctions.

required
—
optional
query, category_id, seller_id, days_back, ending_before, listing_type, min_price, max_price, search_descriptions, sort, page

detail

1 cr

Full public detail for one lot by the item_id search returns.

required
item_id
optional
—

bids

1 cr

The public bid log for one lot on its own.

required
item_id
optional
—

categories

2 cr

The ShopGoodwill category taxonomy as the site's own search publishes it.

required
—
optional
top_level_only

sellers

1 cr

The directory of regional Goodwill organisations selling on the site (163 measured), with the…

required
—
optional
state, query

seller

1 cr

The public profile of one regional Goodwill seller.

required
seller_id
optional
—

seller_items

1 cr

The listings one regional Goodwill seller currently has open, as the site's own seller storef…

required
seller_id
optional
—

Every parameter, every allowed value →

ShopGoodwill API

5 of 8 endpoints, ready to run

View docs ↗

Live lots, most-contested first

2 credits1 required · 2 optional
POST/shopgoodwill/v1/search
idle
// 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.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 438 engines.

02
Call
POST /shopgoodwill/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01search?query=vintage%20camera&sort=most_bids
POSTsearch?query=vintage%20camera&sort=most_bids

Keep one item_id and read ends_at — it already carries the US Pacific offset.

02detail?item_id=279091159
POSTdetail?item_id=279091159

Read minimum_next_bid, bid_increment, handling_price and the pickup address.

03sold?query=vintage%20camera&days_back=30&sort=price_high
POSTsold?query=vintage%20camera&days_back=30&sort=price_high

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.

request
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}'
response envelope
{
  "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.

FieldFillWhat it is
current_price + price_basis373/373On an auction this is the live high bid, not an asking price. price_basis says which, so you never have to guess.
bid_count373/373Bids placed so far. Matched the detail endpoint's bid log exactly on 16 of 16 round trips.
minimum_next_bid373/373The smallest bid the source will currently accept.
ends_at / ends_at_local373/373Resolved ISO-8601 with offset, and the raw source string beside it.
seconds_remaining373/373Derived from the resolved end time, so it is exact to the second — the source's own countdown rounds to its coarsest unit.
buy_now_price100/373Only 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_id373/373Feed either straight back into search as a filter.
part_number13/373Published 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.

Live lots

655,516 open listings on an unfiltered search; 163 regional Goodwill sellers.

Page shape

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.

Sold window

1 to 30 days back from any end date. Measured: lego 14,466 closed lots over 14 days, nike 9,916 over 3 days.

Bid log

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.

Taxonomy

29 departments, 239 subcategories, 268 nodes, every one with the ID search accepts. No third level exists upstream.

Timestamps

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.

Not published

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.

Account-only

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.

8

endpoints

1/2

credits per call

01

Snipe and bid-timing tools that need the end time right to the second, in a real timezone.

02

Resale and arbitrage research: pull 30 days of closed-auction hammer prices for a keyword or category.

03

Collectible price tracking across coins, cameras, Pyrex, jewellery, Lego and vinyl with the bid count as a demand signal.

04

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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}'
python
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"])
FAQ

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.

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.

0/4000

No account needed · we reply from [email protected]

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.