Discover/SCP Auctions API
live

SCP Auctions APIcatalogs.scpauctions.com

Search and retrieve past SCP Auctions lot data: final prices, bid counts, grades, graders, sale dates, and sold/unsold status via 2 endpoints.

Endpoint health
verified 2h ago
get_lot
search_sales
2/2 passing latest checkself-healing
Endpoints
2
Updated
2h ago

What is the SCP Auctions API?

The SCP Auctions Catalog API gives programmatic access to completed sports card and memorabilia auction lots on catalogs.scpauctions.com through 2 endpoints. Use search_sales to query past lots by keyword with filtering by sold/unsold status and sorting that mirrors the site's own order, or use get_lot to pull the full record for any individual lot URL — including final price, bid count, parsed grader and grade, and lot close date.

This call costs5 credits / call— charged only on success
Try it
1-based page of `limit` records over the search result stream.
Result ordering, mirroring the site's Sort By menu.
Number of lot records to return, 1 to 5; larger values are clamped to 5.
Free-text keyword search over lot titles and descriptions (one shape: a player name plus set or grade words).
Restricts results to past lots that sold, went unsold, or either.
api.parse.bot/scraper/e55ab4c1-095c-4aac-987a-d141bd1b8fda/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/e55ab4c1-095c-4aac-987a-d141bd1b8fda/search_sales?sort=relevance&query=Michael+Jordan+PSA+10&status=any' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace catalogs-scpauctions-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: SCP Auctions SDK — search past lots, drill into detail."""
from parse_apis.catalogs_scpauctions_com_api import (
    ScpAuctions, SearchSort, SaleStatusFilter, LotNotFound,
)

client = ScpAuctions()

# Search sold Jordan rookie cards, sorted by price descending.
for lot in client.lots.search(
    query="Michael Jordan rookie",
    status=SaleStatusFilter.SOLD,
    sort=SearchSort.PRICE_DESC,
    limit=5,
):
    print(f"{lot.title}  —  ${lot.final_amount:,.0f}" if lot.final_amount else lot.title)

# Drill into the top result for full detail via its URL.
top = client.lots.search(
    query="Michael Jordan PSA 10",
    sort=SearchSort.RELEVANCE,
    limit=1,
).first()

if top is not None:
    detail = client.lots.get(url=top.url)
    print(detail.title, detail.status, detail.grade)
    print("Bids:", detail.bid_count, "| Auction:", detail.auction_name)

    # Refresh to re-fetch the same lot.
    refreshed = detail.refresh()
    print("Refreshed price:", refreshed.final_amount)

# Typed error handling for an invalid lot URL.
try:
    client.lots.get(url="https://catalogs.scpauctions.com/online-auctions/scp-auctions-inc/nonexistent-0")
except LotNotFound as e:
    print("Lot not found:", e.message)

print("exercised: lots.search / lots.get / lot.refresh / LotNotFound")
All endpoints · 2 totalmissing one? ·

Searches SCP Auctions' catalog of past (ended) lots by keyword and returns up to 5 fully resolved lot records per call, in the site's own order for the chosen sort. One search request plus one lot-page request per returned record (max 6 requests). Each record has the same shape as get_lot: status is exactly one of sold, not_sold, ended_unknown (auction ended but the site shows neither a sold price nor an Unsold label), or not_ended; an ended auction alone never yields sold. final_amount, currency, price_basis and buyer_premium_included are populated only for sold lots and are null otherwise; buyer_premium_rate is always null because the site does not publish the rate on lot pages. sale_date/sale_datetime is the lot page's own close time (with UTC offset) and is never taken from the site's current headline dates; sale_date_precision is datetime when it is present. grader/grade are parsed from the lot title (grade_source is title) and null when the title carries no recognizable grade. Pagination: page selects the next block of `limit` records; has_more is true while the site's total_results exceeds the records consumed so far. total_results is the site's own count for the query and status filter. failed_lots lists any lot pages that could not be fetched or parsed for this page. A query with no matches returns an empty results list.

Input
ParamTypeDescription
pageinteger1-based page of `limit` records over the search result stream.
sortstringResult ordering, mirroring the site's Sort By menu.
limitintegerNumber of lot records to return, 1 to 5; larger values are clamped to 5.
queryrequiredstringFree-text keyword search over lot titles and descriptions (one shape: a player name plus set or grade words).
statusstringRestricts results to past lots that sold, went unsold, or either.
Response
{
  "type": "object",
  "fields": {
    "page": "page number served",
    "limit": "effective page size after clamping to 5",
    "query": "echo of the search keywords",
    "results": "array of lot records, same shape as get_lot data",
    "has_more": "true when more records exist beyond this page",
    "failed_lots": "array of {url, status_code, error?} for lot pages that could not be fetched or parsed",
    "status_filter": "status filter applied (any, sold, unsold)",
    "total_results": "site-reported total matching lots for the query and status filter; null if the site omitted it"
  },
  "sample": {
    "data": {
      "page": 1,
      "limit": 2,
      "query": "Michael Jordan PSA 10",
      "results": [
        {
          "id": "9394841",
          "url": "https://catalogs.scpauctions.com/online-auctions/scp-auctions-inc/1986-fleer-57-michael-jordan---psa-gem-mint-10-9394841",
          "grade": "GEM MINT 10",
          "title": "1986 Fleer #57 Michael Jordan - PSA GEM MINT 10",
          "grader": "PSA",
          "status": "sold",
          "currency": "USD",
          "bid_count": 15,
          "image_url": "https://s1.img.bidsquare.com/item/xl/3810/38105385.jpeg",
          "sale_date": "2026-07-26",
          "auction_id": "23246",
          "lot_number": "3",
          "auction_url": "https://catalogs.scpauctions.com/auctions/scp-auctions-inc/2026-summer-premier-23246",
          "description": "This 1986 Fleer #57 Michael Jordan rookie card grades PSA GEM MINT 10, the highest grade on the PSA scale.",
          "price_basis": "sold_price_including_buyer_premium",
          "auction_name": "2026 Summer Premier",
          "final_amount": 360000,
          "grade_source": "title",
          "status_label": "Sold for",
          "sale_datetime": "2026-07-26T22:30:00-04:00",
          "currency_symbol": "$",
          "sale_date_source": "lot_page_auction_close_time",
          "auction_dates_text": "Thu, Jul 9, 2026 12:00PM CDT - Sun, Jul 26, 2026 09:30PM CDT",
          "buyer_premium_note": "Sold Price includes BP",
          "buyer_premium_rate": null,
          "final_amount_label": "Sold for",
          "sale_date_precision": "datetime",
          "buyer_premium_included": true
        },
        {
          "id": "6742678",
          "url": "https://catalogs.scpauctions.com/online-auctions/scp-auctions-inc/sensational-1984-star-101-xrc-michael-jordan-autographed-true-rookie---bgs-nm-mt-8-5-beckett-9-auto-one-of-highest-dual-grades-in-hobby-6742678",
          "grade": "NM-MT+ 8.5",
          "title": "Sensational 1984 Star #101 XRC Michael Jordan Autographed True Rookie - BGS NM-MT+ 8.5, Beckett 9 Auto. (One of Highest Dual Grades in Hobby!)",
          "grader": "BGS",
          "status": "sold",
          "currency": "USD",
          "bid_count": 19,
          "image_url": "https://s1.img.bidsquare.com/item/xl/2823/28233694.jpeg",
          "sale_date": "2024-11-23",
          "auction_id": "16485",
          "lot_number": "4",
          "auction_url": "https://catalogs.scpauctions.com/auctions/scp-auctions-inc/2024-fall-premier-16485",
          "description": "Presented here is one of the finest signed versions of MJ's first rookie card you will find in the hobby.",
          "price_basis": "sold_price_including_buyer_premium",
          "auction_name": "2024 Fall Premier",
          "final_amount": 312000,
          "grade_source": "title",
          "status_label": "Sold for",
          "sale_datetime": "2024-11-23T22:30:00-05:00",
          "currency_symbol": "$",
          "sale_date_source": "lot_page_auction_close_time",
          "auction_dates_text": "Wed, Nov 6, 2024 12:00PM CST - Sat, Nov 23, 2024 09:30PM CST",
          "buyer_premium_note": "Sold Price includes BP",
          "buyer_premium_rate": null,
          "final_amount_label": "Sold for",
          "sale_date_precision": "datetime",
          "buyer_premium_included": true
        }
      ],
      "has_more": true,
      "failed_lots": [],
      "status_filter": "sold",
      "total_results": 280
    },
    "status": "success"
  }
}

About the SCP Auctions API

What the API Covers

Both endpoints return the same lot record shape: title, id, url, status, sale_date, bid_count, image_url, currency, grade, and grader. The status field is one of four values — sold, not_sold, ended_unknown, or not_ended — distinguishing between a confirmed sale, a lot that went unsold, an ended auction where the page shows neither outcome, and an auction that has not yet closed. final_amount reflects the hammer price on which buyer premium is calculated, and currency is only populated when status is sold.

search_sales Endpoint

search_sales accepts a required query string (player name, set name, grade keywords, or any combination), an optional status filter (any, sold, or unsold), a sort parameter matching the site's Sort By menu options, and page/limit parameters for pagination. Up to 5 fully resolved lot records are returned per call. The response includes total_results (the site-reported count of matching lots, or null if omitted), has_more to detect additional pages, and failed_lots — an array of lot URLs that could not be fetched or parsed in that call, each with a status_code and optional error message.

get_lot Endpoint

get_lot takes a single url input — a full lot page URL on catalogs.scpauctions.com — and returns one lot record. This is useful when you already have a URL from a prior search_sales result or from the site itself. The grader field parses grading company abbreviations such as PSA, SGC, BGS, or CGC directly from the lot title, and grade captures the grade text including any descriptor (for example, GEM MINT 10). Both fields are null when grading information is absent from the title.

Limitations

Results are limited to past (ended) lots in SCP Auctions' public catalog. The limit parameter is clamped to a maximum of 5, so retrieving large result sets requires sequential pagination using the page parameter. bid_count is null when the lot page does not display that figure.

Reliability & maintenanceVerified

The SCP Auctions API is a managed, monitored endpoint for catalogs.scpauctions.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when catalogs.scpauctions.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official catalogs.scpauctions.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
2h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track realized prices for graded PSA and BGS cards by querying search_sales with a player name and grade keywords
  • Build a comps database by collecting final_amount, sale_date, and bid_count across multiple paginated result pages
  • Identify unsold lots using the status filter to find items that failed to meet reserve
  • Parse grader and grade fields to compare average realized prices across different grading companies for the same card
  • Monitor individual lot outcomes by polling get_lot with a known URL until status changes from not_ended
  • Aggregate historical auction data by sport or player for collectibles valuation models
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does SCP Auctions offer an official developer API?+
SCP Auctions does not publish an official public developer API. The catalog at catalogs.scpauctions.com is intended for browsing, not programmatic access.
What does the `status` field in `get_lot` actually distinguish?+
status has four possible values. sold means a final price is confirmed. not_sold means the lot ended without a sale. ended_unknown means the auction ended but the page shows neither a price nor an Unsold label — the outcome cannot be determined from the available data. not_ended means the auction is still open. A lot appearing in the past catalog alone is not sufficient to mark it as sold.
Does the API cover active (live or upcoming) SCP Auctions lots?+
Not currently. Both endpoints are scoped to past, ended lots in SCP Auctions' completed catalog. You can fork this API on Parse and revise it to add an endpoint targeting active or upcoming auction lots.
How does pagination work across large result sets?+
Use the page parameter in search_sales to step through results, and check has_more to determine whether additional pages exist. The total_results field gives the site-reported total matching count, though it may be null if the site did not include that figure. Each call returns at most 5 records regardless of the limit input.
Are lot descriptions or condition notes included in the response?+
Not currently. The record shape covers title, grade, grader, status, final_amount, sale_date, bid_count, image_url, currency, id, and url, but does not include full lot description text or condition report fields. You can fork this API on Parse and revise it to extract those fields from the lot page.
Page content last updated . Spec covers 2 endpoints from catalogs.scpauctions.com.
Related APIs in MarketplaceSee all →