# Heritage Auctions Scraper — Lots, Bids & Archive (`crawloop/heritage-auctions-scraper`) Actor

Scrape Heritage Auctions live lots and archive cards: title, grade, auction number, current bid, and image. Keyword or category search. Sold prices behind sign-in are marked, not guessed.

- **URL**: https://apify.com/crawloop/heritage-auctions-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 heritage lots

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Heritage Auctions Scraper — Lots, Bids & Archive

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Heritage Auctions or its affiliates. Data is read from publicly accessible search and lot pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Heritage Auctions scraper** for live lots and archive cards across coins, comics, sports, currency, art, and other departments. Each row has the lot title, auction number, grade when the card shows it, the public current bid, and an image. It works as a **Heritage Auctions API alternative** from Python, Node.js, or MCP. Archive “Sold For” lines that require sign-in stay empty and are marked `priceVisibility: sign-in`.

### Collectibles suite

| Actor | Role |
| --- | --- |
| [Goldin Auctions Scraper](https://apify.com/crawloop/goldin-scraper) | High-end sports and TCG live lots and sold comps |
| [Fanatics Collect Scraper](https://apify.com/crawloop/fanatics-collect-scraper) | Weekly and Premier auctions, Buy Now, sold comps |
| Heritage Auctions Scraper ◄── you are here | Heritage live bids and archive cards |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Marketplace completed sales |
| [Whatnot Listings Scraper](https://apify.com/crawloop/whatnot-listings-scraper) | Live-commerce listings and shops |
| [PriceCharting Scraper](https://apify.com/crawloop/pricecharting-scraper) | Guide prices for games, TCG, and comics |

**Suite next step:** Heritage archive cards often hide the hammer behind sign-in. For a realized price on the same title, run [Goldin Auctions Scraper](https://apify.com/crawloop/goldin-scraper), then [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) for marketplace volume.

### When to use

- Pull **Heritage live bids** for coins, comics, or sports cards before a session closes
- List **archive lots** (title, grade, sale date, image) when the public card is enough
- Open a handful of **lot URLs** for the public description and buyer’s premium percent
- Feed a pricing sheet that also uses Goldin and eBay sold comps

**When not to use:** realized Heritage hammers that the site shows only after sign-in. This Actor does not log in. Goldin or eBay sold is the next step for a public hammer.

### Key features

- **Live and archive** — keyword search or a Heritage search URL
- **Departments** — coins, currency, sports, comics, jewelry, fine art, entertainment, historical, or all
- **Public bid** — `currentBid` when the card prints a dollar amount
- **Sign-in prices marked** — `priceVisibility` is `sign-in` instead of a guessed hammer
- **Grade** — service and grade from the card (NGC, PCGS, and similar)
- **Optional lot page** — description and buyer’s premium percent when `fetchDetails` is on

### Input

| Field | Description |
| --- | --- |
| `searchQueries` | Keywords. Each query is walked until `maxItems` |
| `startUrls` | Heritage search URLs or lot URLs |
| `mode` | `live` or `archive` |
| `category` | Department host used for keyword search |
| `maxItems` | Cap (1–200, default 25) |
| `maxPages` | Pages per search (default 1, about 25 lots) |
| `fetchDetails` | Open each lot page for description and premium. Default off |
| `proxyConfiguration` | US residential. Required for a real result page |

#### Example — live coin bids

```json
{
  "searchQueries": ["morgan dollar"],
  "mode": "live",
  "category": "coins",
  "maxItems": 25,
  "maxPages": 1
}
```

#### Example — sports archive cards

```json
{
  "searchQueries": ["mickey mantle"],
  "mode": "archive",
  "category": "sports",
  "maxItems": 25
}
```

### Output

| Field | Meaning |
| --- | --- |
| `lotId` | `{auctionId}-{lotNumber}` |
| `title` | Lot title |
| `auctionId` / `lotNumber` | Sale and lot |
| `currentBid` | Public dollar amount, or null |
| `priceVisibility` | `public`, `sign-in`, or `unknown` |
| `grade` / `service` | From the card when present |
| `saleLabel` | Time left or the ended date |
| `imageUrl` | Thumbnail |
| `url` | Canonical lot URL |
| `description` | Only when a lot page was opened |
| `buyersPremiumPct` | Only when a lot page states it |

```json
{
  "lotId": "60575-54064",
  "auctionId": "60575",
  "lotNumber": "54064",
  "title": "2024 $1 Morgan Dollar, Advance Release, MS70 NGC.",
  "category": "Modern Commemoratives",
  "service": "NGC",
  "grade": "MS70",
  "currentBid": 55,
  "minimumBid": 60,
  "priceVisibility": "public",
  "currency": "USD",
  "status": "Live Auction in",
  "url": "https://coins.ha.com/itm/modern-commemoratives/2024-1-morgan-dollar-advance-release-ms70-ngc-pcgs-957343-/a/60575-54064.s"
}
```

### Use cases

- A coin desk checks **Heritage current bids** on Morgan dollars before the session
- A card shop lists **archive Mantle lots** (grade, date, image) and prices the hammer from eBay sold
- A comic buyer drops specific lot URLs and keeps the public description

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/heritage-auctions-scraper').call({
  searchQueries: ['morgan dollar'],
  mode: 'live',
  category: 'coins',
  maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 3));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/heritage-auctions-scraper").call(run_input={
    "searchQueries": ["mickey mantle"],
    "mode": "archive",
    "category": "sports",
    "maxItems": 25,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item.get("currentBid"), item.get("priceVisibility"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~heritage-auctions-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["morgan dollar"],"mode":"live","category":"coins","maxItems":20}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by name.

Example prompts:

- "Run Heritage Auctions Scraper in live mode for 'morgan dollar' in coins and return title, grade, and current bid"
- "List Heritage sports archive cards for 'mickey mantle' and flag rows whose price requires sign-in"
- "After Heritage live bids, run Goldin Auctions Scraper sold mode for the same titles"

### FAQ

**Is this a Heritage Auctions API alternative?**\
Yes for public search cards and public lot pages. There is no login and no partner API key.

**Why is currentBid null on archive lots?**\
The public archive card often prints “Sold For” as a sign-in link. `priceVisibility` is `sign-in`. The Actor does not guess the hammer.

**Does it need a proxy?**\
Yes. Use Apify Residential in the US. A datacenter IP gets a block page and zero rows.

**What does fetchDetails add?**\
One extra page per lot: the public description and the buyer’s premium percent when the lot page states it. Leave it off for a faster bid list.

# Actor input Schema

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

Keywords searched on Heritage Auctions (player, coin, comic, card). Each query is walked until maxItems.

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

Heritage search result URLs or lot URLs (https://coins.ha.com/itm/.../a/60575-54064.s). Other hosts are ignored.

## `mode` (type: `string`):

live = open auctions with the public current bid. archive = past lots. Sold-for amounts that require sign-in are marked priceVisibility=sign-in.

## `category` (type: `string`):

Department label saved on each row. Keyword search runs on the main Heritage site.

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

Maximum lots saved in this run.

## `maxPages` (type: `integer`):

Search result pages to open per query or start URL. One page is about 25 lots.

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

Visit each lot page for the public description and buyer's premium percent. Slower. Default reads the search card only.

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

Apify Residential in the US. Datacenter IPs receive a block page.

## Actor input object example

```json
{
  "searchQueries": [],
  "startUrls": [],
  "mode": "live",
  "category": "all",
  "maxItems": 25,
  "maxPages": 1,
  "fetchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Default dataset lot 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/heritage-auctions-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/heritage-auctions-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 '{}' |
apify call crawloop/heritage-auctions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/heritage-auctions-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/RiOh1pdGpQDoEA8zz/builds/sFz9CfRdNfyRyJYXD/openapi.json
