Card-supply and merchandise catalog monitoring
Use PSAStore endpoints to turn card-supply and merchandise catalog monitoring into repeatable API requests with documented inputs and JSON responses.
The PSA Team Store (store.psacard.com) sells the physical side of card grading -- submission holders, top-loaders, sleeves, display cases, and PSA-branded apparel and collectibles -- through a public Shopify storefront. Crawlora's PSAStore group reads that storefront directly: its full inventory with pagination, collection groupings, static informational pages, related-item suggestions, and typeahead search, with PSA's own store URL fixed server-side so nothing needs to be passed in. Credential-free.
Pull the PSA Team Store's card-grading-supply catalog, collections, static pages, and recommendations as structured JSON — no url parameter needed.
Endpoint families
6
Documented params
30
Examples
11
Live catalog snapshot
Active endpoints
11
Methods
GET
Required params
16
Schema refs
11
{
"platform": "PSAStore",
"endpoint": "psastore-store",
"method": "GET",
"path": "/psastore/store",
"auth": "apiKey"
}Use cases
Pull the PSA Team Store's card-grading-supply catalog, collections, static pages, and recommendations as structured JSON — no url parameter needed.
Use PSAStore endpoints to turn card-supply and merchandise catalog monitoring into repeatable API requests with documented inputs and JSON responses.
Use PSAStore endpoints to turn collection coverage research into repeatable API requests with documented inputs and JSON responses.
Use PSAStore endpoints to turn storefront recommendation tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live PSAStore endpoint catalog — 11 endpoints, 30 documented request parameters, and 11 published response schemas — the same catalog Docs and Playground run against.
11 documented PSAStore endpoints, grouped into 7 request families — Products, Collections and Pages, plus 4 more.
30 request parameters are documented across those PSAStore endpoints, 16 of them required — the full input contract is public before you write any integration code.
11 of the 11 PSAStore endpoints ship a recorded example response, and 11 carry a documented response schema — you can code against the real JSON before the first request.
PSAStore endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
11 hosted MCP tools back the PSAStore endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
/psastore/products
/psastore/collections
/psastore/pages
/psastore/search/suggest
/psastore/sitemap/urls
/psastore/sitemaps
Endpoint catalog
/psastore/storeReturns storefront metadata for the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.
Response notes
- Returns the resolved source URL used for JSON requests. - Includes `myshopify_domain`, store name, currency, country, and published product/collection counts when `/meta.json` exposes them. - Blocked pages, malformed JSON, missing Shopify roots, and unavailable fallback domains return upstream errors. - For some storefronts, `transport_mode` is `ssr_embedded`; it is omitted entirely for other stores. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
Sampled 14 Oct 2026: 12 of 12 fields returned with a value. published_products_count: 47; domain: “store.psacard.com”.
MCP tool psastore_store
/psastore/productsReturns products from the PSA Team Store's (https://store.psacard.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.
Response notes
- Valid empty result pages return `200` with an empty `products` array. - Product prices are normalized to decimal currency units. - Blocked pages, malformed JSON, and missing `products` roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`, `total_items`, and `total_pages`, plus additive per-product fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`). `limit` is honored as an upper bound; the underlying page size is fixed by the storefront and cannot be requested larger. All of the above are omitted entirely for other stores. - When the `ssr_embedded` fallback was used, the response may also include `facets` and `facets_stats`, mirroring the storefront's own filter sidebar for that listing. - This brand-pinned endpoint does not accept `sortBy` or facet-filter query parameters (out of scope -- use the generic `/shopify/products` endpoint with `url` set to this brand's storefront for sort/filter support). The response reuses the same shared DTO as the generic family, which carries `sort`/`filters` fields for that feature; they are always omitted here since this endpoint never populates them. `sort` allowed values (never actually returned by this endpoint, listed for schema completeness): `sortLTH`, `sortHTL`, `newest`. This brand-pinned endpoint also does not accept the generic family's `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`option_*` Storefront Filtering params (same out-of-scope reasoning -- use the generic `/shopify/products` endpoint with `url` set to this brand's storefront). The response DTO carries the matching `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`variant_options` fields for that feature; they are always omitted here since this endpoint never populates them. `sort_by` allowed values (never actually returned by this endpoint, listed for schema completeness): `manual`, `best-selling`, `title-ascending`, `title-descending`, `price-ascending`, `price-descending`, `created-ascending`, `created-descending`. `transport_mode` allowed values: `ssr_embedded`, `storefront_filtered` (only ever these two values; omitted for the classic transport).
Sampled 14 Oct 2026: 40 items, 10 fields filled in every item, 6 not. published_at: 2024-11-05 to 2026-10-11; vendor: PSA (21), Ultra PRO International (16), Vaulted (3).
MCP tool psastore_products
/psastore/products/{handle}Returns product detail for one PSA Team Store (https://store.psacard.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.
Response notes
- Product prices are returned in decimal currency units rather than cent values. - Missing product handles return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing product fields return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"` and additive fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`). `transport_mode` is omitted entirely for other stores. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
Sampled 14 Oct 2026: 4 items, 12 fields filled in every item, 1 not. created_at: 2026-09-21; price: 179.99 to 199.99, median 179.99.
MCP tool psastore_product
/psastore/products/{handle}/recommendationsReturns recommended products for one PSA Team Store (https://store.psacard.com) product handle. The storefront URL is fixed server-side.
Response notes
- Missing product handles return `404` when Shopify returns not found while resolving the seed product. - Valid empty recommendation arrays return `200` with an empty `products` array. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`, with the same additive product fields documented for the products endpoint. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
Sampled 14 Oct 2026: 10 items, 14 fields filled in every item, 1 not. published_at: 2023-12-04 to 2026-08-04; vendor: PSA (5), Ultra PRO International (3), Vaulted (2).
MCP tool psastore_product_recommendations
/psastore/collectionsReturns collections from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.
Response notes
- Valid empty result pages return `200` with an empty `collections` array. - Blocked pages, malformed JSON, and missing `collections` roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`, and `title` is a best-effort derivation from the handle -- **not** the storefront's real display name. `products_count` and other fields not available for these storefronts are omitted, never fabricated. - In fallback mode, `handle` is derived from the last path segment of the collection URL and is not guaranteed unique across nested sub-collections; use the item's own `url` to identify a specific one. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
Sampled 14 Oct 2026: 27 items, 6 fields filled in every item, 1 not. published_at: 2024-02-29 to 2026-10-08; products_count: 1 to 115, median 6.
MCP tool psastore_collections
/psastore/collections/{handle}/productsReturns products from one PSA Team Store (https://store.psacard.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.
Response notes
- Valid empty result pages return `200` with an empty `products` array. - Missing collections return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing `products` roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`, `total_items`, `total_pages`, plus additive per-product fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`) and may include `facets`/`facets_stats`. `limit` is honored as an upper bound only; underlying page size is fixed by the storefront. - This brand-pinned endpoint does not accept `sortBy` or facet-filter query parameters (out of scope -- use the generic `/shopify/collections/{handle}/products` endpoint with `url` set to this brand's storefront for sort/filter support). The response reuses the same shared DTO as the generic family, which carries `sort`/`filters` fields for that feature; they are always omitted here since this endpoint never populates them. `sort` allowed values (never actually returned by this endpoint, listed for schema completeness): `sortLTH`, `sortHTL`, `newest`. This brand-pinned endpoint also does not accept the generic family's `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`option_*` Storefront Filtering params (same out-of-scope reasoning -- use the generic `/shopify/collections/{handle}/products` endpoint with `url` set to this brand's storefront). The response DTO carries the matching `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`variant_options` fields for that feature; they are always omitted here since this endpoint never populates them. `sort_by` allowed values (never actually returned by this endpoint, listed for schema completeness): `manual`, `best-selling`, `title-ascending`, `title-descending`, `price-ascending`, `price-descending`, `created-ascending`, `created-descending`. `transport_mode` allowed values: `ssr_embedded`, `storefront_filtered` (only ever these two values; omitted for the classic transport).
Sampled 14 Oct 2026: 24 items, 14 fields filled in every item, 3 not. published_at: 2023-12-04 to 2026-09-01; vendor: Ultra PRO International (16), PSA (5), Vaulted (3).
MCP tool psastore_collection_products
/psastore/search/suggestReturns products, collections, and query suggestions from the PSA Team Store's (https://store.psacard.com) predictive search. The storefront URL is fixed server-side.
Response notes
- Products and collections use the same shapes as the product and collection endpoints. - Query suggestions include text and a storefront search URL when the storefront provides one. - Valid empty suggestion arrays return `200` with empty arrays. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors.
Sampled 14 Oct 2026: 5 items, 8 fields filled in every item, 2 not. vendor: PSA (4), Vaulted (1); price: 5,400 to 29,000, median 5,700.
MCP tool psastore_search_suggest
/psastore/pagesLists static pages from the PSA Team Store, 50 per page by default (`limit` up to 250, `page` starts at 1). Each page has its `handle`, `title`, `url`, plain-text `content` and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.
Response notes
- Page content is cleaned text from Shopify `body_html`; raw HTML is not returned. - Valid empty page arrays return `200` with an empty `pages` array. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`, and each item only carries `handle`, `url`, and `updated_at` -- no `title`, `id`, or `content`. Call the single-page endpoint per handle for full content. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
Sampled 14 Oct 2026: 3 of 4 fields returned with a value. store_url: store.psacard.com.
MCP tool psastore_pages
/psastore/pages/{handle}Returns one PSA Team Store static page by its `handle`: title, URL, plain-text `content` (HTML is stripped), and created, published and updated times. An unknown handle returns 404. When the store's standard page data is unavailable, `transport_mode` is `ssr_embedded` and `id` is omitted.
Response notes
- Page content is cleaned text from Shopify `body_html`; raw HTML is not returned. - Missing page handles return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - For some storefronts, the response includes `transport_mode: "ssr_embedded"`; `content` is plain text rendered from the page's rich-text blocks, and `id` is omitted (it is not a Shopify numeric id). `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool psastore_page
/psastore/sitemapsReturns child sitemap URLs from the PSA Team Store's (https://store.psacard.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.
Response notes
- Sitemap `type` is inferred from the child sitemap URL. - Inferred sitemap types are `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, and `other`. - Blocked pages, malformed XML, and missing sitemap entries return upstream errors.
Sampled 14 Oct 2026: 6 items, 2 fields filled in every item. type: “agentic_discovery” and 5 other values; loc: store.psacard.com.
MCP tool psastore_sitemaps
/psastore/sitemap/urlsReturns capped URL entries from the PSA Team Store's (https://store.psacard.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.
Response notes
- The service fetches matching child sitemaps from `/sitemap.xml` until `limit` URL entries is reached. - URL entries include `loc`, inferred `type`, `handle`, `lastmod`, `changefreq`, and optional `images`. - Blocked pages, malformed XML, and missing sitemap entries return upstream errors.
Sampled 14 Oct 2026: 40 items, 3 fields filled in every item, 3 not. lastmod: 2026-10-13; loc: store.psacard.com.
MCP tool psastore_sitemap_urls
Related APIs
Marketplaces & Retail
Research new, used, and vintage instruments across Reverb listings, seller shops, and the Price Guide. Keep current asking prices separate from historical sales, and preserve model, finish, year, condition, and currency when comparing gear.
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
How to scrape PSAStore
Every PSAStore endpoint talks to store.psacard.com specifically -- the URL is baked into the server side of each call, so a request only needs a Crawlora key, never a storefront address. That is what separates this group from the general-purpose /shopify/* family: same underlying data shape, one storefront hardcoded.
/psastore/products pages through every item PSA currently stocks; /psastore/collections lists how PSA groups them (holders, apparel, seasonal drops), and appending {handle}/products to a collection filters the catalog down to just that group.
Take a handle off a catalog row and call /psastore/products/{handle} for that item's images, resolved Shopify product id, and its price already converted out of the cents Shopify natively reports.
/psastore/search/suggest takes a partial string and returns matching products, collections, and query completions in one response, mirroring what typing into the store's own search box would surface.
/psastore/pages and /psastore/pages/{handle} cover static content like shipping and returns policy; /psastore/products/{handle}/recommendations surfaces items PSA pairs with a given product; /psastore/sitemaps and /psastore/sitemap/urls enumerate every URL the storefront itself has indexed.
For store.psacard.com on 2026-10-30 collections returned 27 of a 40 limit, the accessories collection returned 24 products, and the all-products list returned 40 at limit=40.
Agent skills
Install a Crawlora agent skill and your agent can pull PSAStore data as JSON through the documented API, without writing a scraper. These skills cover PSAStore:
Researches public trading-card and sports-collectible markets through the Crawlora API — card identity, PSA certification and price-guide evidence…
npx skills add github.com/Crawlora-org/crawlora-skills --skill collectibles-market-researchFAQ
No -- store.psacard.com sells physical goods: submission supplies (holders, top-loaders, sleeves), display cases, and PSA-branded apparel and collectibles. It does not submit cards for grading or return grading results; that's a separate part of psacard.com covered by Crawlora's PSA group.
No. store.psacard.com is fixed server-side for every /psastore/* call. If you need a different Shopify storefront, /shopify/* accepts any url and returns the same response shape.
No account of any kind -- a Crawlora API key is the only credential these endpoints check, since the underlying data comes from store.psacard.com's own public storefront JSON.
That's what /psastore/products/{handle}/recommendations is for -- it returns the other items PSA's own storefront surfaces alongside the one you passed in.
Whole dollars. Shopify's underlying .js feed reports cents, so Crawlora divides that out before /psastore/products/{handle} and its siblings return a price.