# ShopGoodwill Scraper: Sold Comps & Auction Monitor (`getascraper/shopgoodwill-scraper`) Actor

Search active ShopGoodwill auctions and source-published sold comps. Export prices, bids, shipping, end times, seller data, and meaningful auction changes for resale sourcing. Built for n8n, Make, Zapier, and API workflows. $0.00199 per lot.

- **URL**: https://apify.com/getascraper/shopgoodwill-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 9 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.49 / 1,000 item scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🔨 ShopGoodwill Scraper: Sold Comps & Auction Monitor

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td colspan="3" style="padding:12px 16px;background:#78350F;border:1px solid #FCD34D;border-top:4px solid #B45309;border-radius:10px 10px 0 0"><span style="font-size:14px;font-weight:800;color:#FFFFFF;letter-spacing:0.4px">ONLINE AUCTIONS SUITE</span><br><span style="font-size:13px;color:#FEF3C7">Find source-backed inventory, comparable sales, and change signals across related marketplaces.</span></td>
</tr>
<tr style="width:100%">
<td width="33%" style="width:33.333%;padding:12px;background:#FFFFFF;border:1px solid #FCD34D;border-top:none;border-radius:0 0 0 10px;vertical-align:top"><a href="https://apify.com/getascraper/auctionninja-scraper" style="color:#1C1917;text-decoration:none;font-weight:700">AuctionNinja Scraper</a><br><span style="font-size:12px;color:#57534E">Estate-sale and auction listings</span></td>
<td width="33%" style="width:33.333%;padding:12px;background:#FFFFFF;border:1px solid #FCD34D;border-top:none;border-left:none;vertical-align:top"><a href="https://apify.com/getascraper/hibid-scraper" style="color:#1C1917;text-decoration:none;font-weight:700">HiBid Scraper</a><br><span style="font-size:12px;color:#57534E">Auction-house inventory</span></td>
<td width="33%" style="width:33.333%;padding:12px;background:#FFFBEB;border:1px solid #FCD34D;border-top:none;border-left:none;border-radius:0 0 10px 0;vertical-align:top"><b style="color:#92400E">ShopGoodwill Scraper</b><br><span style="font-size:12px;color:#92400E;font-weight:700">➜ You are here</span></td>
</tr>
</tbody>
</table>

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FFFBEB;border:1px solid #FCD34D;border-top:4px solid #B45309;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Find ShopGoodwill sold comps before you commit to a bid.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search active auctions, compare source-published sold prices, and schedule change-only watchlists for resale sourcing and market research.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td width="25%" style="padding:14px 12px;background:#FFFFFF;border:1px solid #FCD34D;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#92400E">💰 Sold comps</span><br><span style="font-size:12px;color:#57534E">Compare recent source-published closed-auction prices.</span></td>
<td width="25%" style="padding:14px 12px;background:#FFFFFF;border:1px solid #FCD34D;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#92400E">🎯 One sourcing scope</span><br><span style="font-size:12px;color:#57534E">Combine keywords, sellers, categories, and item IDs.</span></td>
<td width="25%" style="padding:14px 12px;background:#FFFFFF;border:1px solid #FCD34D;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#92400E">📦 Lot context</span><br><span style="font-size:12px;color:#57534E">Add published shipping, pickup, seller, and bid details.</span></td>
<td width="25%" style="padding:14px 12px;background:#FFFFFF;border:1px solid #FCD34D;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#92400E">🔔 Meaningful changes</span><br><span style="font-size:12px;color:#57534E">Watch new lots, price or bid changes, and verified endings.</span></td>
</tr>
</table>

Use an initial snapshot to validate a sourcing scope. Then schedule the same scope to return meaningful auction changes only.

### 🔍 What it does

ShopGoodwill Scraper collects source-published active auction listings and recent sold-auction records when the source returns them. Every source in one run is combined under one exact global result cap, then deduplicated by item ID.

Use it to compare prices, bid counts, shipping, end times, category context, and lot details. Detail enrichment adds source-published fields only when they are available. Derived landed cost and price per unit appear only when every required source value exists.

Monitoring mode remembers a stable scope. Later successful runs return only `NEW`, `PRICE_CHANGED`, `BID_CHANGED`, `CLOSING_SOON`, or source-verified `ENDED` events. An item is never marked ended merely because it is missing from a capped or failed search.

### 💡 Who it helps

- Professional resellers building sourcing queues across several searches or regional sellers.
- Vintage, camera, jewelry, collectible, and electronics operators comparing acquisition cost with recent sold comps.
- Reseller-tool builders creating watchlists, inventory research, or valuation workflows.
- Market researchers studying source-backed auction supply, bidding, and closing prices.

This Actor does not place bids, buy lots, or provide a historical archive beyond the selected source window and your own monitoring history.

### 🚀 How it works

<table width="100%">
<tr>
<td width="33%" style="padding:16px 14px;background:#FFFBEB;border:1px solid #FCD34D;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 1</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Build a sourcing scope</span><br><span style="font-size:12px;color:#57534E">Combine searches, supported URLs, categories, sellers, or item IDs.</span></td>
<td width="33%" style="padding:16px 14px;background:#FFFBEB;border:1px solid #FCD34D;border-left:none;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 2</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Choose auction data</span><br><span style="font-size:12px;color:#57534E">Collect active auctions, recent sold comps, or both with filters.</span></td>
<td width="33%" style="padding:16px 14px;background:#FFFBEB;border:1px solid #FCD34D;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 3</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Monitor changes</span><br><span style="font-size:12px;color:#57534E">Reuse a state key to return new and changed lot events only.</span></td>
</tr>
</table>

### ⚙️ Input

| Field                                             | Type                   | Required | Description                                                                 |
| ------------------------------------------------- | ---------------------- | -------- | --------------------------------------------------------------------------- |
| `searchQueries`                                   | array of text          | No       | Keywords to search. All supplied sources are combined.                      |
| `startUrls`                                       | array of URLs          | No       | Supported ShopGoodwill search, category, seller, or item URLs.              |
| `categoryIds`, `sellerIds`, `itemIds`             | array of integers      | No       | Direct numeric source selectors that can be combined in one run.            |
| `auctionState`                                    | enum                   | No       | Choose active auctions, recent sold comps, or both.                         |
| `closedAuctionDaysBack`                           | integer                | No       | Sold-comps lookback window, from 1 to 90 days.                              |
| `minPrice`, `maxPrice`, `sortBy`                  | number, enum           | No       | Filter source price and choose the source ordering.                         |
| `buyNowOnly`, `pickupOnly`, `oneCentShippingOnly` | boolean                | No       | Keep lots with the selected listing or shipping conditions.                 |
| `searchDescriptions`                              | boolean                | No       | Include listing-description text in source keyword matching when available. |
| `fetchDetails`                                    | boolean                | No       | Request available source-published lot details.                             |
| `maxItems`                                        | integer                | No       | Exact global cap across every supplied source and page.                     |
| `runMode`                                         | enum                   | No       | Choose a one-time snapshot or a change-only auction monitor.                |
| `stateKey`, `resetState`, `closingSoonMinutes`    | text, boolean, integer | No       | Configure a stable monitoring scope and closing-soon threshold.             |
| `proxyConfiguration`                              | proxy                  | No       | Connection settings required for cloud collection.                          |

Supply at least one search query, supported URL, category ID, seller ID, or item ID.

### 📊 Data table

| Field                                                                      | Type                 | Description                                                       |
| -------------------------------------------------------------------------- | -------------------- | ----------------------------------------------------------------- |
| `itemId`, `listingUrl`, `title`                                            | text, URL            | Stable lot identity, direct source link, and source title.        |
| `status`, `auctionState`                                                   | text                 | Normalized active, sold, or ended state from the source response. |
| `currentPrice`, `finalPrice`, `minimumBid`, `startingPrice`, `buyNowPrice` | number               | Source-published auction and direct-purchase prices.              |
| `numBids`, `bidIncrement`, `bidHistory`                                    | number, array        | Source-published bid activity when available.                     |
| `shippingPrice`, `handlingPrice`, `landedCost`, `pricePerUnit`             | number               | Source prices and cautious derived acquisition metrics.           |
| `sellerId`, `sellerName`, `pickupCity`, `pickupState`                      | integer, text        | Source-published seller and pickup context when available.        |
| `categoryName`, `categoryPath`, `quantity`, `weight`                       | text, array, integer | Source category and item context when available.                  |
| `imageURL`, `images`, `description`                                        | URL, array, text     | Source-published lot detail when enrichment succeeds.             |
| `sourceId`, `sourceType`, `sourceLabel`, `sourceUrl`                       | text, URL            | Input-source provenance for multi-source runs.                    |
| `changeType`, `changedFields`, `previousPrice`, `previousNumBids`          | text, array, number  | Meaningful auction changes from monitoring runs.                  |
| `firstSeenAt`, `lastSeenAt`, `scrapedAt`                                   | date and time        | Collection and monitoring provenance.                             |

Unavailable source values are omitted. Failed detail enrichment keeps the verified listing record and does not add an enrichment charge.

### 💰 Pricing

This Actor uses pay-per-event pricing through its primary **Auction lot** event. Each active lot, sold comp, or meaningful monitoring change saved to the default dataset is billed once. Source-published detail fields are included when available with no separate event. Empty runs, unchanged lots, duplicates, invalid rows, and failed enrichment are free. There is no subscription.

### ⭐ Enjoying ShopGoodwill Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFFBEB;border:1px solid #FCD34D;border-left:5px solid #B45309;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Make every sourcing decision with better auction context.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating helps resellers and market researchers find this ShopGoodwill workflow.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#B45309;border:1px solid #FCD34D;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/shopgoodwill-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Can I collect recent ShopGoodwill sold comps?** Yes. Choose recent sold comps or both auction states, then set a lookback window supported by the source.

**Can I combine several searches and sellers?** Yes. Every supplied source is processed under one global cap, and duplicate item IDs are saved once.

**Will monitoring bill unchanged auction lots?** No. Monitoring emits and charges only new or meaningful changed records.

**Does this Actor place bids or make purchases?** No. It collects public auction data for sourcing and research. Bidding and purchasing are outside its scope.

### 🔗 Other actors

- [AuctionNinja Scraper](https://apify.com/getascraper/auctionninja-scraper) ↗: Collect estate-sale and auction listings.
- [HiBid Scraper](https://apify.com/getascraper/hibid-scraper) ↗: Collect auction-house inventory and live lot data.
- [Whatnot Scraper](https://apify.com/getascraper/whatnot-scraper) ↗: Collect public live-shopping products and seller data.
- [ThriftBooks Scraper](https://apify.com/getascraper/thriftbooks-scraper) ↗: Research book listings, condition, pricing, and inventory.

# Actor input Schema

## `searchQueries` (type: `array`):

Search terms such as vintage camera, sterling silver, or Nintendo. All supplied sources are combined and deduplicated.

## `startUrls` (type: `array`):

Supported search, category, seller, or item URLs. URLs are added to the other sources rather than replacing them.

## `categoryIds` (type: `array`):

Optional numeric ShopGoodwill category IDs. Combine several categories in one run.

## `sellerIds` (type: `array`):

Optional numeric IDs for regional Goodwill sellers or stores.

## `itemIds` (type: `array`):

Optional ShopGoodwill item IDs for direct item collection.

## `auctionState` (type: `string`):

Choose active listings, recent sold comps, or both when the source supports them.

## `closedAuctionDaysBack` (type: `integer`):

How far back to search when sold comps are selected.

## `minPrice` (type: `number`):

Keep lots at or above this source price.

## `maxPrice` (type: `number`):

Keep lots at or below this source price.

## `sortBy` (type: `string`):

Order source results before the global result cap is applied.

## `buyNowOnly` (type: `boolean`):

Keep lots with a source-published Buy It Now option.

## `pickupOnly` (type: `boolean`):

Keep lots marked for local pickup.

## `oneCentShippingOnly` (type: `boolean`):

Keep lots with a source-published shipping price of $0.01.

## `searchDescriptions` (type: `boolean`):

Ask the source to include listing-description text in keyword matching when available.

## `maxItems` (type: `integer`):

One hard global cap across every search, URL, category, seller, and item source in this run.

## `fetchDetails` (type: `boolean`):

Request available description, image gallery, seller, pickup, shipping, and bid-detail fields for each collected lot.

## `runMode` (type: `string`):

Use monitoring to save and charge only new or meaningful auction changes for the same state key.

## `stateKey` (type: `string`):

Optional name for this saved monitoring scope. Reuse it for every scheduled run of the same scope.

## `resetState` (type: `boolean`):

Forget previously seen lots for this monitoring scope before the run.

## `closingSoonMinutes` (type: `integer`):

Emit one closing-soon event when an active auction enters this time window.

## `proxyConfiguration` (type: `object`):

ShopGoodwill requires a working proxy connection for cloud collection.

## Actor input object example

```json
{
  "searchQueries": [
    "vintage camera"
  ],
  "startUrls": [],
  "categoryIds": [],
  "sellerIds": [],
  "itemIds": [],
  "auctionState": "active",
  "closedAuctionDaysBack": 30,
  "sortBy": "endingSoonest",
  "buyNowOnly": false,
  "pickupOnly": false,
  "oneCentShippingOnly": false,
  "searchDescriptions": false,
  "maxItems": 100,
  "fetchDetails": false,
  "runMode": "snapshot",
  "stateKey": "default",
  "resetState": false,
  "closingSoonMinutes": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Snapshot records or change-only monitoring events saved to the default dataset.

## `runSummary` (type: `string`):

Counts for source pages, deduplication, enrichment, monitoring changes, retries, and emitted records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "vintage camera"
    ],
    "startUrls": [],
    "categoryIds": [],
    "sellerIds": [],
    "itemIds": [],
    "auctionState": "active",
    "closedAuctionDaysBack": 30,
    "sortBy": "endingSoonest",
    "buyNowOnly": false,
    "pickupOnly": false,
    "oneCentShippingOnly": false,
    "searchDescriptions": false,
    "maxItems": 100,
    "fetchDetails": false,
    "runMode": "snapshot",
    "stateKey": "default",
    "resetState": false,
    "closingSoonMinutes": 60,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "BUYPROXIES94952"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/shopgoodwill-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["vintage camera"],
    "startUrls": [],
    "categoryIds": [],
    "sellerIds": [],
    "itemIds": [],
    "auctionState": "active",
    "closedAuctionDaysBack": 30,
    "sortBy": "endingSoonest",
    "buyNowOnly": False,
    "pickupOnly": False,
    "oneCentShippingOnly": False,
    "searchDescriptions": False,
    "maxItems": 100,
    "fetchDetails": False,
    "runMode": "snapshot",
    "stateKey": "default",
    "resetState": False,
    "closingSoonMinutes": 60,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["BUYPROXIES94952"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/shopgoodwill-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "vintage camera"
  ],
  "startUrls": [],
  "categoryIds": [],
  "sellerIds": [],
  "itemIds": [],
  "auctionState": "active",
  "closedAuctionDaysBack": 30,
  "sortBy": "endingSoonest",
  "buyNowOnly": false,
  "pickupOnly": false,
  "oneCentShippingOnly": false,
  "searchDescriptions": false,
  "maxItems": 100,
  "fetchDetails": false,
  "runMode": "snapshot",
  "stateKey": "default",
  "resetState": false,
  "closingSoonMinutes": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}' |
apify call getascraper/shopgoodwill-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/shopgoodwill-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lgGWxaF9gqLFLAjjg/builds/d9fbMQzB8Zmnsgacx/openapi.json
