# Shopgoodwill Product Search Scraper (`stealth_mode/shopgoodwill-product-search-scraper`) Actor

Scrape product listings from ShopGoodwill.com auction categories with precision. Collect titles, prices, bidding data, images, inventory status, and 34 key fields — perfect for resellers, price monitors, researchers, and e-commerce analytics.

- **URL**: https://apify.com/stealth\_mode/shopgoodwill-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Product Search Scraper: Extract Auction Listings at Scale

---

### What Is ShopGoodwill.com?

ShopGoodwill.com is Goodwill Industries' online auction platform, offering thousands of thrift and donated items across diverse categories — from jewelry and electronics to furniture and collectibles. Each listing includes dynamic auction data (current bids, time remaining, starting prices) that updates in real-time. Manually tracking product availability, pricing trends, and competitive landscape is inefficient; the **ShopGoodwill Product Search Scraper** automates data collection, delivering structured inventory records for analysis, resale, or market intelligence.

---

### Overview

The **ShopGoodwill Product Search Scraper** extracts product listings from ShopGoodwill.com category search pages, converting auction item data into clean, machine-readable records. It is ideal for:

- **Resellers & dropshippers** identifying profitable items and monitoring inventory
- **Price researchers** tracking auction trends and competitive pricing
- **Market analysts** studying secondhand goods valuations
- **Data aggregators** building product databases for comparison platforms
- **Business intelligence teams** monitoring Goodwill inventory patterns

Key strengths include support for paginated search results, configurable item limits, robust error handling via `ignore_url_failures`, and comprehensive auction metadata including bid history and shipping costs.

---

### Input Format

The scraper accepts a JSON configuration with three core parameters:

```json
{
  "urls": [
    "https://shopgoodwill.com/categories/jewelry-gemstones?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | Direct links to ShopGoodwill product search pages (e.g., category filtered results with pagination) |
| `max_items_per_url` | Integer | Maximum number of products to extract per URL (e.g., `200`) |
| `ignore_url_failures` | Boolean | If `true`, scraper continues even if individual URLs fail; if `false`, halts on first error |

**URL Examples:**

- `https://shopgoodwill.com/categories/jewelry-gemstones?p=1` (first page, jewelry category)
- `https://shopgoodwill.com/categories/electronics?p=3` (third page, electronics)

> **Tip:** Use pagination parameters (`?p=1`, `?p=2`) to scrape multiple pages of the same category sequentially.

***

### Output Format

**Sample output**

```json
{
  "item_id": 267760293,
  "category_id": 86,
  "category_name": "Necklaces",
  "title": "Vintage Tribal Silver-Tone Pendant Necklace with Colored Glass Inlays & Bells",
  "description": null,
  "current_price": 16.0,
  "num_bids": 2,
  "minimum_bid": 14.99,
  "start_time": "2026-06-17T21:51:17.05",
  "end_time": "2026-06-22T21:45:00",
  "buy_now_price": 24.99,
  "image_url": "https://shopgoodwillimages.azureedge.net/production/8\\Item\\2026-06-17\\d2db9a24-c76f-4037-841b-a1b42cb1012bnger_0617t1.jpeg",
  "gallery_url": "",
  "shipping_price": 4.99,
  "relist_id": 0,
  "image_status": 0,
  "image_purged": false,
  "itemfeatured": false,
  "itemgallery": false,
  "item_count": 63458,
  "views": 0,
  "is_stock": false,
  "discount": 0.0,
  "is_favorite": false,
  "remaining_time": "17m 47s ",
  "featured": false,
  "starting_price": 14.99,
  "gallery": false,
  "discounted_buy_now_price": 24.99,
  "part_number": "",
  "cat_parent_list": null,
  "seller_id": 8,
  "item_quantity": 1,
  "cat_full_name": "Jewelry & Gemstones > Necklaces",
  "cat_level_num": 2,
  "listing_type": 2,
  "from_url": "https://shopgoodwill.com/categories/jewelry-gemstones?p=2"
}
```

Each scraped product returns a rich record with 34 fields capturing auction state, pricing, and inventory details:

#### Item Identification & Categorization

| Field | Meaning |
|---|---|
| `Item ID` | Unique identifier for the product listing |
| `Category ID` | Numeric ID of the primary category |
| `Category Name` | Human-readable category name (e.g., "Jewelry & Gemstones") |
| `Category Full Name` | Full hierarchical category path |
| `Category Parent List` | Parent categories in the hierarchy |
| `Category Level Number` | Depth of category nesting |
| `Title` | Product name/auction title as displayed |
| `Description` | Full item description provided by seller |
| `Part Number` | Manufacturer part number (if applicable) |
| `Seller ID` | Identifier of the ShopGoodwill seller account |

#### Pricing & Bidding

| Field | Meaning |
|---|---|
| `Starting Price` | Initial asking price when auction began |
| `Current Price` | Current bid/active price (updates in real-time during auction) |
| `Minimum Bid` | Minimum acceptable bid amount |
| `Buy Now Price` | Immediate purchase price (if "Buy It Now" is available) |
| `Discounted Buy Now Price` | Reduced "Buy It Now" price (if applicable) |
| `Shipping Price` | Cost to ship the item |
| `Discount` | Any active discount percentage or amount |
| `Number of Bids` | Total bids placed on the item |

#### Auction Timeline

| Field | Meaning |
|---|---|
| `Start Time` | Timestamp when auction began |
| `End Time` | Timestamp when auction closes |
| `Remaining Time` | Time left in auction (calculated from current time to `End Time`) |

#### Inventory & Stock

| Field | Meaning |
|---|---|
| `Item Quantity` | Number of units available |
| `Item Count` | Total items in the lot (for multi-item auctions) |
| `In Stock` | Boolean flag indicating availability |
| `Relist ID` | ID if item is a relisted auction |

#### Media & Display

| Field | Meaning |
|---|---|
| `Image URL` | Primary product image URL |
| `Image Status` | Status of the primary image (e.g., active, pending) |
| `Image Purged` | Flag indicating if image was removed |
| `Gallery URL` | URL to full image gallery |
| `Gallery` | Additional gallery metadata |

#### Listing Features & Metrics

| Field | Meaning |
|---|---|
| `Item Featured` | Flag indicating premium/featured placement |
| `Featured` | Whether the listing has highlight status |
| `Item Gallery` | Whether item has multiple gallery images |
| `Is Favorite` | User favorite/watchlist status |
| `Views` | Number of times the listing was viewed |
| `Listing Type` | Type of sale format (auction, fixed price, etc.) |

***

### How to Use

1. **Navigate ShopGoodwill** — Go to `shopgoodwill.com` and filter by category (e.g., Jewelry, Electronics, Furniture).
2. **Copy search URLs** — Grab the category page URL, including pagination (`?p=1`, `?p=2`, etc.). You can add multiple URLs.
3. **Set parameters** —
   - Adjust `max_items_per_url` based on your needs (20–200 is typical)
   - Set `ignore_url_failures: true` for robust batch runs
4. **Run the scraper** — Start the actor and monitor progress in the run logs.
5. **Export & analyze** — Download results as JSON, CSV, or Excel for integration with your tools.

**Best practices:**

- Start with a low `max_items_per_url` (e.g., 50) to test, then scale up
- Use category-specific URLs to target product types relevant to your analysis
- Re-run periodically to capture new listings and price updates
- Filter results by `In Stock: true` or `Current Price` thresholds in post-processing

***

### Use Cases & Business Value

- **Retail reselling:** Identify underpriced items, trending categories, and profitable lot buys
- **Price intelligence:** Track how similar items appreciate or depreciate over auction cycles
- **Inventory monitoring:** Alert on new stock arrivals in your category of interest
- **Competitive analysis:** Benchmark your offerings against ShopGoodwill listings
- **Academic research:** Analyze consumer behavior, secondhand market valuation, or donation patterns

Automating ShopGoodwill scraping transforms hours of manual browsing into actionable datasets that feed pricing models, inventory systems, or business dashboards.

***

### Conclusion

The **ShopGoodwill Product Search Scraper** unlocks fast, reliable access to thousands of auction listings with comprehensive metadata. Whether you're a reseller scaling sourcing operations, a researcher studying thrift markets, or an analyst tracking pricing trends, this scraper delivers the structured data you need. Configure your search URLs, set your item limits, and start extracting auction intelligence today.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://shopgoodwill.com/categories/jewelry-gemstones?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://shopgoodwill.com/categories/jewelry-gemstones?p=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/shopgoodwill-product-search-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 = {
    "urls": ["https://shopgoodwill.com/categories/jewelry-gemstones?p=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://shopgoodwill.com/categories/jewelry-gemstones?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/shopgoodwill-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/shopgoodwill-product-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopgoodwill Product Search Scraper",
        "description": "Scrape product listings from ShopGoodwill.com auction categories with precision. Collect titles, prices, bidding data, images, inventory status, and 34 key fields — perfect for resellers, price monitors, researchers, and e-commerce analytics.",
        "version": "0.0",
        "x-build-id": "eMLeSDkBomWwPyeFj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~shopgoodwill-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-shopgoodwill-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~shopgoodwill-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-shopgoodwill-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~shopgoodwill-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-shopgoodwill-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the product search list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
