Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the ShopGoodwill API page →
E-commerce & Marketplaces

ShopGoodwill API & Scraper

ShopGoodwill is Goodwill's own auction marketplace: 163 regional Goodwill organisations list second-hand lots, most of them as bid auctions.

8 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

This API returns a listing row with the facts an auction actually turns on — current high bid, bid count, minimum next bid and the resolved end time — plus full detail, the public bid log, the 268-node category tree, the seller directory and closed-auction sold prices going back up to 30 days. Timestamps are the part most integrations get wrong: the source publishes them with no timezone at all, so every row carries both ends_at_local (the untouched source string) and ends_at (ISO-8601 with the US Pacific offset, daylight saving applied).

Reference

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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/shopgoodwill/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "vintage camera",
    "sort": "most_bids",
    "page": 1
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "shopgoodwill",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 825.6,
    "record_count": 40,
    "bytes": 137359,
    "cache_hit": false,
    "upstream_requests": 1,
    "time_zone": "America/Los_Angeles",
    "charged_credits": 1,
    "version": "1.0.0",
    "request_id": "1d4e60d09e3e435a",
    "queue_ms": 1.2,
    "fetched_at": "2026-10-06T14:47:19.477Z"
  },
  "data": {
    "total": 2040,
    "page": 1,
    "page_size": 40,
    "last_page": 51,
    "has_more": true,
    "page_beyond_last": false,
    "listings": [
      {
        "item_id": "278978809",
        "title": "*AUTHENTIC* Vintage Gucci GG Monogram Canvas Crossbody Camera Bag w/COA",
        "url": "https://shopgoodwill.com/item/278978809",
        "listing_type": "auction",
        "listing_type_code": 0,
        "is_auction": true,
        "current_price": 426,
        "price_basis": "current_high_bid",
        "currency": "USD",
        "bid_count": 26,
        "starting_price": 16.75,
        "minimum_next_bid": 16.75,
        "buy_now_price": null,
        "shipping_price": 0,
        "ends_at": "2026-10-07T20:13:00-07:00",
        "ends_at_local": "2026-10-07T20:13:00",
        "ends_at_is_placeholder": false,
        "starts_at": "2026-09-30T12:08:53-07:00",
        "starts_at_local": "2026-09-30T12:08:53",
        "seconds_remaining": 131141,
        "ended": false,
        "source_remaining_time": "1d 12h",
        "seller_id": 137,
        "category_id": 103,
        "category_name": "Purses",
        "category_full_name": "Clothing > Women's Clothing > Purses",
        "quantity": 1,
        "is_stock_item": false,
        "part_number": null,
        "image_url": "https://shopgoodwillimages.azureedge.net/production/137\\Items\\2026-09-30\\0d114c05-62ba-4f5a-9826-6f4f75dba9e5nt21_0930t1.jpeg"
      },
      {
        "item_id": "278833445",
        "title": "Vintage Nikon FE2 35mm SLR Film Camera",
        "url": "https://shopgoodwill.com/item/278833445",
        "listing_type": "auction",
        "listing_type_code": 0,
        "is_auction": true,
        "current_price": 201,
        "price_basis": "current_high_bid",
        "currency": "USD",
        "bid_count": 15,
        "starting_price": 9.99,
        "minimum_next_bid": 9.99,
        "buy_now_price": null,
        "shipping_price": 0,
        "ends_at": "2026-10-06T18:04:00-07:00",
        "ends_at_local": "2026-10-06T18:04:00",
        "ends_at_is_placeholder": false,
        "starts_at": "2026-09-29T08:25:59-07:00",
        "starts_at_local": "2026-09-29T08:25:59",
        "seconds_remaining": 37001,
        "ended": false,
        "source_remaining_time": "10h 16m",
        "seller_id": 135,
        "category_id": 172,
        "category_name": "Film Cameras",
        "category_full_name": "Cameras & Camcorders > Film Cameras",
        "quantity": 1,
        "is_stock_item": false,
        "part_number": null,
        "image_url": "https://shopgoodwillimages.azureedge.net/production/135\\Items\\2026-09-29\\71ac90b7-f68b-4a65-a77e-e8ba907798daward_0929t1.jpeg"
      },
      {
        "item_id": "278868112",
        "title": "Vintage Minolta XD-S SLR 35mm Film Camera w/ 50mm Lens",
        "url": "https://shopgoodwill.com/item/278868112",
        "listing_type": "auction",
        "listing_type_code": 0,
        "is_auction": true,
        "current_price": 127.9,
        "price_basis": "current_high_bid",
        "currency": "USD",
        "bid_count": 13,
        "starting_price": 10,
        "minimum_next_bid": 10,
        "buy_now_price": null,
        "shipping_price": 0,
        "ends_at": "2026-10-06T20:23:00-07:00",
        "ends_at_local": "2026-10-06T20:23:00",
        "ends_at_is_placeholder": false,
        "starts_at": "2026-09-29T13:33:43-07:00",
        "starts_at_local": "2026-09-29T13:33:43",
        "seconds_remaining": 45341,
        "ended": false,
        "source_remaining_time": "12h 35m",
        "seller_id": 155,
        "category_id": 175,
        "category_name": "Vintage Cameras",
        "category_full_name": "Cameras & Camcorders > Vintage Cameras",
        "quantity": 1,
        "is_stock_item": false,
        "part_number": null,
        "image_url": "https://shopgoodwillimages.azureedge.net/production/155\\Items\\2026-09-29\\e7696b39-98d8-481d-a15c-939dbda96aaawine_0929t1.jpeg"
      }
    ],
    "query": "vintage camera"
  }
}
Actions

What the ShopGoodwill API does

ActionDescriptionConcrete use caseKey params
searchSearch LIVE ShopGoodwill listings — the US Goodwill charity auction marketplace, 650k+ open lots across 163 regional Goodwill sellers. Every row carries the auction facts that matter more than the price: current high bid, bid count, resolved end time and minimum next bid. Give query, or category_id, or seller_id (at least one of the three). The source serves a fixed 40 rows per page.Pricing teams call search to search LIVE ShopGoodwill listings.query, category_id, seller_id, listing_type, min_price, ...
soldClosed ShopGoodwill auctions — the same rows after the hammer, where current_price is the FINAL price the lot sold for and bid_count is the bidding that got it there. A sold-price comparable set for second-hand pricing. Covers a window of up to 30 days back from ending_before.Marketplace operators call sold to get closed ShopGoodwill auctions.query, category_id, seller_id, days_back, ending_before, ...
detailFull public detail for one lot by the item_id search returns: description, every gallery image, the auction clock, the reserve state, the bid increment, shipping and handling, the pickup address of the Goodwill that listed it, and the complete public bid log.Catalog enrichment teams call detail to get full public detail for one lot by the item_id search returns.item_id
bidsThe public bid log for one lot on its own: every bid placed with the source-masked bidder handle, the amount, the resulting price and the timestamp, plus the reserve state and whether the auction has closed. Works on live auctions as well as closed ones.Retail analysts call bids to get the public bid log for one lot on its own.item_id
categoriesThe ShopGoodwill category taxonomy as the site's own search publishes it: two levels, 29 top-level departments and 239 subcategories, each with the numeric category_id the search action takes.Pricing teams call categories to get the ShopGoodwill category taxonomy as the site's own search publishes it.top_level_only
sellersThe directory of regional Goodwill organisations selling on the site (163 measured), with the numeric seller_id the search action takes and the US state and city each one ships and allows pickup from.Marketplace operators call sellers to get the directory of regional Goodwill organisations selling on the site (163 measured), with the….state, query
sellerThe public profile of one regional Goodwill seller: organisation name, mailing address, mission statement, return policy and customer service note.Catalog enrichment teams call seller to get the public profile of one regional Goodwill seller.seller_id
seller_itemsThe listings one regional Goodwill seller currently has open, as the site's own seller storefront shows them.Retail analysts call seller_items to get the listings one regional Goodwill seller currently has open, as the site's own seller storef….seller_id
Code samples

Call search from your stack

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}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.shopgoodwill.search with {"query":"vintage camera","sort":"most_bids","page":1}.
Use cases

Who uses this API and why

  • 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.
  • Regional sourcing: filter 163 Goodwill sellers by state to find lots you can collect in person.
FAQ

Questions developers ask before integrating

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.

docs / shopgoodwill

ShopGoodwill

Goodwill's charity auctions with the bid count and the real end time, not just a price.

base /shopgoodwill/v18 endpoints
post/shopgoodwill/v1/sold2 credits

Closed ShopGoodwill auctions — the same rows after the hammer, where current_price is the FINAL price the lot sold for and bid_count is the bidding that got it there. A sold-price comparable set for second-hand pricing. Covers a window of up to 30 days back from ending_before.

ParameterAllowed / rangeDescription
queryoptional—Keyword text, 1-200 characters. At least one of query, category_id or seller_id is required.
category_idoptional1–999999Numeric category ID from the categories action.
seller_idoptional1–999999Numeric seller ID from the sellers action.
days_back = 7optional1–30How many days before ending_before to include. The source accepts 1 to 30.
ending_beforeoptional—Latest auction end date to include, as YYYY-MM-DD. Defaults to today in US Pacific, the source's own clock.
listing_typeoptionalauction · buy_now · auction_with_buy_nowRestrict to one sale format.
min_priceoptional0–999999Lowest final price in USD, inclusive.
max_priceoptional0–999999Highest final price in USD, inclusive.
search_descriptions = falseoptional—Widen the keyword match into the listing description.
sort = ending_soonestoptionalending_soonest · ending_latest · most_bids · fewest_bids · price_low · price_highResult ordering.
page = 1optional1–2000One-based result page; 40 rows per page.
Try in playground →
post/shopgoodwill/v1/detail1 credit

Full public detail for one lot by the item_id search returns: description, every gallery image, the auction clock, the reserve state, the bid increment, shipping and handling, the pickup address of the Goodwill that listed it, and the complete public bid log.

ParameterAllowed / rangeDescription
item_idrequired—Numeric ShopGoodwill item ID as returned by search or sold.
Try in playground →
post/shopgoodwill/v1/bids1 credit

The public bid log for one lot on its own: every bid placed with the source-masked bidder handle, the amount, the resulting price and the timestamp, plus the reserve state and whether the auction has closed. Works on live auctions as well as closed ones.

ParameterAllowed / rangeDescription
item_idrequired—Numeric ShopGoodwill item ID as returned by search or sold.
Try in playground →
post/shopgoodwill/v1/categories2 credits

The ShopGoodwill category taxonomy as the site's own search publishes it: two levels, 29 top-level departments and 239 subcategories, each with the numeric category_id the search action takes.

ParameterAllowed / rangeDescription
top_level_only = falseoptional—Return only the 29 departments without their subcategories.
Try in playground →
post/shopgoodwill/v1/sellers1 credit

The directory of regional Goodwill organisations selling on the site (163 measured), with the numeric seller_id the search action takes and the US state and city each one ships and allows pickup from.

ParameterAllowed / rangeDescription
stateoptional—Two-letter US state code; filtered by this engine over the source's full directory, which carries no state parameter of its own.
queryoptional—Case-insensitive substring of the city or the organisation name; filtered by this engine over the source's full directory.
Try in playground →
post/shopgoodwill/v1/seller1 credit

The public profile of one regional Goodwill seller: organisation name, mailing address, mission statement, return policy and customer service note.

ParameterAllowed / rangeDescription
seller_idrequired1–999999Numeric seller ID from the sellers action.
Try in playground →
post/shopgoodwill/v1/seller_items1 credit

The listings one regional Goodwill seller currently has open, as the site's own seller storefront shows them.

ParameterAllowed / rangeDescription
seller_idrequired1–999999Numeric seller ID from the sellers action.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.