Card Ladder APIcardladder.com ↗
Access Card Ladder pricing data, CL values, confidence scores, and aggregated sales history for trading cards via 4 endpoints. Search by name, set, or cert number.
What is the Card Ladder API?
The Card Ladder API exposes 4 endpoints covering sports card search, valuation, and transaction history from cardladder.com. Use search_cards to query by player name, set, year, or category and get back current values and market data. From there, get_card_value returns the CL computed value alongside a 1–5 confidence score, price movement, and period summaries, while get_card_sales delivers day-by-day aggregated sales records sorted newest first.
curl -X GET 'https://api.parse.bot/scraper/97d5f4bc-6c65-4546-8f71-76149a5533cb/search_cards?page=0&sort=score&limit=5&query=Michael+Jordan&category=Basketball' \ -H 'X-API-Key: $PARSE_API_KEY'
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 cardladder-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: Card Ladder SDK — bounded, re-runnable; every call capped."""
from parse_apis.Card_Ladder_API import CardLadder, Category, GradingCompany, CardNotFound
client = CardLadder()
# Search for trading cards by player name, capped at 3 results.
for card in client.cards.search(query="Michael Jordan", category=Category.BASKETBALL, limit=3):
print(card.label, card.current_value, card.condition)
# Look up a card by its PSA cert number.
cert_result = client.cert_cards.search(grading_company=GradingCompany.PSA, cert_number="122040380", limit=1).first()
if cert_result:
print(cert_result.label, cert_result.cl_value, cert_result.confidence)
# Fetch detailed value and sales history for a card found via search.
card = client.cards.search(query="LeBron James", limit=1).first()
if card:
value = client.card_values.get(card_id=card.id)
print(value.label, value.cl_value, value.confidence, value.cert_number)
history = client.sales_histories.get(card_id=card.id)
print(history.label, history.total_sales, "total sales")
for sale in history.sales[:3]:
print(sale.date, sale.price, sale.count)
# Typed error handling: catch when a card ID doesn't exist.
try:
client.card_values.get(card_id="nonexistent_id")
except CardNotFound as e:
print("not found:", e.card_id)
print("exercised: cards.search / cert_cards.search / card_values.get / sales_histories.get")
Full-text search across Card Ladder's trading card database. Returns cards matching the query with current values, market data, and price trends. Results are ranked by relevance score by default. Each card includes its unique ID for use with get_card_value and get_card_sales.
| Param | Type | Description |
|---|---|---|
| page | integer | Zero-based page index for pagination. |
| sort | string | Sort order for results. |
| limit | integer | Maximum number of results per page. |
| queryrequired | string | Search query for card name, player, set, year, or any combination (e.g. 'Michael Jordan', '1986 Fleer', 'Pikachu PSA 10'). |
| category | string | Filter results by card category. Omitted returns all categories. |
{
"type": "object",
"fields": {
"page": "integer current page index",
"cards": "array of card objects with id, label, slug, player, year, set, number, variation, condition, category, current_value, market_value, num_sales, pop, last_sold_date, and percent change metrics",
"limit": "integer page size",
"total_hits": "integer total number of matching cards"
},
"sample": {
"data": {
"page": 0,
"cards": [
{
"id": "JvbEFar2vAm92D23yFXU",
"pop": 131,
"set": "Star",
"slug": "1984-star-michael-jordan-base-101-psa-6",
"year": "1984",
"label": "1984 Star Michael Jordan Base #101 PSA 6",
"number": "101",
"player": "Michael Jordan",
"category": "Basketball",
"condition": "PSA 6",
"num_sales": 95,
"variation": "Base",
"market_value": 102023,
"current_value": 102023,
"last_sold_date": "2026-07-19T10:00:00.000Z",
"annual_percent_change": 2.52,
"monthly_percent_change": 0.045,
"quarterly_percent_change": 0.64
}
],
"limit": 5,
"total_hits": 1847
},
"status": "success"
}
}About the Card Ladder API
Search and Identify Cards
The search_cards endpoint accepts a free-text query parameter — player name, card set, year, or any combination like '1986 Fleer Michael Jordan' — and returns an array of card objects each containing id, label, player, year, set, number, variation, condition, category, current_value, and market_value. Results support zero-based pagination via page and limit, a sort parameter, and an optional category filter. The total_hits field tells you how many cards matched across all pages. The id returned here is the card_id required by the other two detail endpoints.
Card Valuation Details
get_card_value takes a card_id and returns Card Ladder's computed cl_value in dollars alongside a confidence integer on a 1–5 scale, indicating how much sales data underlies the estimate. The response also includes market_value, the gap between CL and market values, price_movement, and a newest_sale object with the price and date of the most recent recorded transaction. Where applicable, grading_company (e.g. psa, bgs) and cert_number are included.
Sales History
get_card_sales returns aggregated daily sales for a card. Each entry in the sales array carries a date (MM/DD/YYYY format), a price in dollars representing that day's total, and a count of individual transactions. Results are sorted newest first, and the total_sales integer gives the full count of recorded transactions for that card across all dates.
Certificate Lookup
search_by_cert lets you find a graded card directly by its cert_number and grading_company — the values printed on the physical slab label — bypassing free-text search entirely. The response mirrors the search_cards card shape, including identification fields and current pricing.
The Card Ladder API is a managed, monitored endpoint for cardladder.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cardladder.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 cardladder.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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track real-time market value changes for a specific graded PSA or BGS card using
get_card_value - Build a portfolio tracker that monitors
cl_valueandconfidencescores across multiple card IDs - Identify undervalued cards by comparing
cl_valueagainstmarket_valuevia thegapfield - Analyze daily price volatility for a card by charting aggregated
priceandcountdata fromget_card_sales - Look up a card's identity and current value directly from a slab's cert number using
search_by_cert - Filter search results by
categoryto scope queries to a specific sport or card type - Populate a card database with structured metadata —
year,set,variation,condition— fromsearch_cards
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Card Ladder offer an official developer API?+
What does the `confidence` score in `get_card_value` represent?+
gap field showing the dollar difference between the computed CL value and the current market value.Does the sales history endpoint return individual transaction records?+
get_card_sales returns aggregated daily records, not individual transactions. Each entry in the sales array represents one calendar day, with a combined price total and a count of how many sales occurred on that date. Individual sale-level records (buyer, seller, platform) are not exposed. You can fork this API on Parse and revise it to add an individual-transaction endpoint if that granularity is needed.Can I filter `search_cards` results by grading company or card condition?+
search_cards endpoint supports filtering by category and sorting via sort, but grading company and condition are not available as standalone filter parameters — though condition does appear as a field on each returned card object. You can fork this API on Parse and revise it to add those filter parameters to the endpoint.How fresh is the pricing data returned by these endpoints?+
newest_sale field in get_card_value includes the date of the most recent recorded transaction, which gives a direct indicator of data freshness for any individual card. Cards with low trading volume may have older newest_sale dates and correspondingly lower confidence scores.