CGC Comics APIcgccomics.com ↗
Search CGC-graded comics, magazines, and pulps. Retrieve Population Report census data: grade counts per issue and label category across all CGC collectible types.
What is the CGC Comics API?
The CGC Comics API provides 5 endpoints for querying CGC's graded-collectible catalog and Population Report census data. Use search_comics to find issues by title, issue number, year, or publisher, then call get_comic_grades to retrieve the full grade distribution — counts at every CGC grade step from 0.5 to 10.0 — broken down by label category (Universal, Signature Series, Restored, and others) for that specific issue.
curl -X GET 'https://api.parse.bot/scraper/3a2cb4f8-561b-43c2-92a6-3986d587afd8/search_comics?query=amazing+spider-man+300' \ -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 cgccomics-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: CGC Comics Grades API — browse publishers, search issues, inspect grade censuses."""
from parse_apis.cgccomics_com_api import CgcComics, ComicNotFound
client = CgcComics()
# Search for a famous key issue by title and number
hit = client.comic_summaries.search(query="amazing spider-man 300", limit=3).first()
if hit is not None:
print(hit.title, f"#{hit.issue_number}", hit.publisher)
# Navigate from the search summary to the full grade census
comic = hit.details()
print(f"Year: {comic.year}, Key comments: {comic.key_comments}")
for cat in comic.label_categories:
print(f" {cat.label_category}: {cat.total_graded} graded, 9.8 count: {cat.grades.get('9.8', 0)}")
# Browse publishers for the default collectible type (comics)
publisher = client.publishers.list(limit=3).first()
if publisher is not None:
print(f"\n{publisher.name} ({publisher.total_graded} total graded)")
# Walk titles under this publisher
for title in publisher.titles.list(limit=5):
print(f" {title.name}: {title.total_graded} graded")
# Drill into issues of the first title
first_title = publisher.titles.list(limit=1).first()
if first_title is not None:
for issue in first_title.issues.list(limit=3):
print(f" #{issue.issue_number} ({issue.year}) — {issue.total_graded} graded")
# Point lookup by master_id discovered from the earlier search
if hit is not None:
try:
comic = client.comics.get(master_id=hit.master_id)
print(f"\n{comic.title} #{comic.issue_number}: {len(comic.label_categories)} label categories")
except ComicNotFound:
print("Comic not found")
print("exercised: comic_summaries.search / details / publishers.list / titles.list / issues.list / comics.get")
Searches CGC's graded-collectible catalog by free text (title, issue number such as #300, year, variant, publisher) and returns matching issue records that have population data. Each result carries master_id and collectible_type, which together identify one issue for get_comic_grades. Returns a single unpaginated list of up to roughly 40 best matches as ranked by the site; an empty results list is a valid response when nothing matches. When collectible_type is omitted, all five collectible types are searched.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text search, e.g. a title with issue number. |
| collectible_type | string | Restrict results to one collectible type. Omitted = search all types. |
{
"type": "object",
"fields": {
"query": "echo of the search text",
"results": "array of matching issues: master_id (string, zero-padded), collectible_type (slug), title, issue_number, issue_date (site's short form, e.g. 5/88), year, volume, variant (null when none), publisher, country, description (full display string)",
"result_count": "number of results returned"
},
"sample": {
"data": {
"query": "amazing spider-man 300",
"results": [
{
"year": 1988,
"title": "Amazing Spider-Man",
"volume": null,
"country": null,
"variant": null,
"master_id": "0000273",
"publisher": "Marvel Comics",
"issue_date": "5/88",
"description": "Marvel Comics Amazing Spider-Man #300 5/88",
"issue_number": "300",
"collectible_type": "comics"
}
],
"result_count": 42
},
"status": "success"
}
}About the CGC Comics API
Search and Issue Lookup
The search_comics endpoint accepts a free-text query (title, issue number, year, variant description, or publisher) and an optional collectible_type filter. Each result in the results array carries a master_id (zero-padded numeric string), collectible_type slug, title, issue_number, and issue_date. These identifiers feed directly into get_comic_grades, which returns the full CGC Population Report census for that issue: grade counts at every step from 0.5 through 10.0 plus no_grade, page_quality_only, and cover_only, with counts split across each label category. The issue record also includes publisher, art_comments, variant, volume, country, and a title_id that links into the title-browsing endpoints.
Browsing the Population Report Hierarchy
For bulk or hierarchical access, three endpoints mirror the Population Report's navigation tree. list_publishers returns the ~20 publisher groupings for a given collectible_type, each with a publisher_id, total_graded count, and is_featured flag. Pass a publisher_id to list_titles to retrieve series titles under that publisher; the response is paginated at 50 titles per page and supports a keywords text filter and sort ordering. Each title entry carries a title_id and total_graded count.
Issue-Level Census Browsing
Once you have a title_id — either from list_titles or from the title_id field in a get_comic_grades response — pass it to list_title_issues. This returns paginated issue records including master_id, issue_number, issue_date, year, variant, total_graded, and a grades object mapping every CGC grade step to a combined (all-label) count. The keywords parameter filters within the title, useful for locating a specific issue number in a long run.
Collectible Types and Coverage
The API covers all collectible types CGC grades and tracks in its Population Report: comics, magazines, pulps, concert posters, lobby cards, and others. The collectible_type parameter is optional on most endpoints; omitting it searches or lists across all types. Pagination throughout uses 1-based page numbers, and has_more, page_count, and total_count fields let you iterate full result sets reliably.
The CGC Comics API is a managed, monitored endpoint for cgccomics.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cgccomics.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 cgccomics.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?+
- Build a collection tracker that shows the total number of CGC-graded copies at each grade for any comic issue using get_comic_grades.
- Generate rarity scores for investment research by comparing a specific grade's population to the total_graded count from list_title_issues.
- Enumerate every issue CGC has graded for a given publisher by chaining list_publishers → list_titles → list_title_issues.
- Monitor population changes over time for high-value keys like first appearances by periodically polling get_comic_grades for target master_ids.
- Power an autocomplete or search feature for a comic marketplace by querying search_comics with partial title and issue number inputs.
- Produce census reports for a specific series title using list_title_issues grade-step breakdowns across all CGC grading tiers.
- Cross-reference Signature Series vs. Universal label populations for variant issues using the per-label data in get_comic_grades.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 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.