Card-supply and merchandise catalog monitoring
PSAStoreエンドポイントを使えば、「Card-supply and merchandise catalog monitoring」をドキュメント化された入力とJSONレスポンスによる再現可能なAPIリクエストに変えられます。
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.
エンドポイントファミリー
6
ドキュメント化されたパラメータ
30
サンプル数
11
ライブカタログスナップショット
稼働エンドポイント
11
メソッド
GET
必須パラメータ
16
スキーマ参照
11
{
"platform": "PSAStore",
"endpoint": "psastore-store",
"method": "GET",
"path": "/psastore/store",
"auth": "apiKey"
}ユースケース
Pull the PSA Team Store's card-grading-supply catalog, collections, static pages, and recommendations as structured JSON — no url parameter needed.
PSAStoreエンドポイントを使えば、「Card-supply and merchandise catalog monitoring」をドキュメント化された入力とJSONレスポンスによる再現可能なAPIリクエストに変えられます。
PSAStoreエンドポイントを使えば、「Collection coverage research」をドキュメント化された入力とJSONレスポンスによる再現可能なAPIリクエストに変えられます。
PSAStoreエンドポイントを使えば、「Storefront recommendation tracking」をドキュメント化された入力とJSONレスポンスによる再現可能なAPIリクエストに変えられます。
マネージド実行
以下の数値はすべて、稼働中のPSAStoreエンドポイントカタログから取得しています(エンドポイント11件、ドキュメント化されたリクエストパラメータ30個、公開レスポンススキーマ11件)。DocsとPlaygroundが参照しているカタログと同じものです。
PSAStoreのエンドポイントは11件、7つのリクエストファミリーに分類されています(Products、Collections、Pagesほか4件)。
これらのPSAStoreエンドポイントには30個のリクエストパラメータがドキュメント化されており、うち16個が必須です。統合コードを書く前に入力仕様をすべて確認できます。
11件のPSAStoreエンドポイントのうち11件が実際のサンプルレスポンスを、11件がドキュメント化されたレスポンススキーマを備えています。最初のリクエストの前に実データの形に合わせて実装できます。
PSAStoreのエンドポイントは成功時のスキーマに加えてエラーレスポンス(400、404、429、503)もドキュメント化しています。ブロック、レート制限、レコード欠損は空データではなく型付きのエラーとして返ります。
PSAStoreのエンドポイントは11個のホスト型MCPツールとして提供されており、エージェントは同じパラメータと同じJSON契約のまま、追加の実装なしに同じルートを呼び出せます。
カバレッジマップ
これらのカードは稼働中のエンドポイントカタログから生成されるため、このページはDocsとPlaygroundが使うAPIサーフェスをそのまま反映します。
/psastore/products
/psastore/collections
/psastore/pages
/psastore/search/suggest
/psastore/sitemap/urls
/psastore/sitemaps
エンドポイントカタログ
/psastore/storeReturns normalized storefront metadata for the PSA Team Store (https://store.psacard.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.
レスポンスに関する注記
- 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. - If the classic `/products.json` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to fetching the storefront's own pages directly and parsing their embedded structured data. When this fallback was used, `transport_mode` is `ssr_embedded`; it is omitted entirely for stores served by the classic catalog JSON. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport). Example response: ```json { "code": 200, "msg": "OK", "data": { "requested_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "domain": "store.psacard.com", "source_domain": "store.psacard.com", "name": "PSA Team Store", "currency": "USD", "country": "US", "published_products_count": 638 } } ```
MCPツール psastore_store
/psastore/productsReturns normalized 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.
レスポンスに関する注記
- 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. - If the classic `/products.json` endpoint and `*.myshopify.com` domain resolution are both unavailable (some headless storefronts on a Shopify catalog do not expose either), the service falls back to the storefront's own conventional "all products" collection page and parses its embedded search-result payload. When this fallback was used, 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 in fallback mode. All of the above are omitted entirely for stores served by the classic catalog JSON. - 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). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "page": 1, "limit": 2, "products": [ { "id": "7188363542608", "handle": "example-product-handle", "title": "Example Product", "url": "https://store.psacard.com/products/example-product-handle", "price": 45, "available": true } ] } } ```
MCPツール psastore_products
/psastore/products/{handle}Returns normalized 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.
レスポンスに関する注記
- Product prices from `.js` responses are normalized from cent values to decimal currency units. - Missing product handles return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing product fields return upstream errors. - If the classic product `.js` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to fetching the product detail page directly and parsing its embedded structured data (a richer Next.js data block when the storefront exposes one, otherwise the page's schema.org JSON-LD `ProductGroup`/`Product` block). When this fallback was used, 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 stores served by the classic transport. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "product": { "id": "7188363542608", "handle": "example-product-handle", "title": "Example Product", "price": 45, "images": [{"url": "https://cdn.shopify.com/example.jpg"}] } } } ```
MCPツール psastore_product
/psastore/products/{handle}/recommendationsReturns normalized recommended products for one PSA Team Store (https://store.psacard.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.
レスポンスに関する注記
- 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. - If the classic recommendations endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to fetching the seed product's own detail page (recommendations are embedded there). When this fallback was used, 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). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "handle": "example-product-handle", "product_id": "6616124981328", "intent": "related", "limit": 10, "products": [{"handle": "example-related-product", "title": "Example Related Product"}] } } ```
MCPツール psastore_product_recommendations
/psastore/collectionsReturns normalized 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.
レスポンスに関する注記
- Valid empty result pages return `200` with an empty `collections` array. - Blocked pages, malformed JSON, and missing `collections` roots return upstream errors. - If the classic `/collections.json` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to enumerating collections from the storefront's own `collections` sitemap. When this fallback was used, 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 classic-only fields 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). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "page": 1, "limit": 2, "collections": [ { "id": "278435758160", "handle": "example-collection", "title": "Example Collection", "url": "https://store.psacard.com/collections/example-collection", "products_count": 24 } ] } } ```
MCPツール psastore_collections
/psastore/collections/{handle}/productsReturns normalized 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.
レスポンスに関する注記
- 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. - If the classic collection `/products.json` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to fetching the collection listing page directly and parsing its embedded search-result payload. When this fallback was used, 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 in fallback mode. - 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). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "collection": "example-collection-handle", "page": 1, "limit": 2, "products": [ {"handle": "example-product", "title": "Example Product", "price": 45} ] } } ```
MCPツール psastore_collection_products
/psastore/search/suggestReturns products, collections, and query suggestions from the PSA Team Store's (https://store.psacard.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.
レスポンスに関する注記
- Products and collections are normalized to the same shapes used by 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. Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "query": "wool", "types": ["product", "collection", "query"], "limit": 10, "products": [{"handle": "example-product", "title": "Example Product"}], "collections": [{"handle": "example-collection", "title": "Example Collection"}], "queries": [{"text": "wool", "url": "https://store.psacard.com/search?q=wool"}] } } ```
MCPツール psastore_search_suggest
/psastore/pagesReturns normalized static pages from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side.
レスポンスに関する注記
- 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. - If the classic `/pages.json` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to enumerating page handles from the storefront's own `pages` sitemap. When this fallback was used, 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). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "page": 1, "limit": 50, "pages": [ { "id": "54831906896", "handle": "example-page", "title": "Example Page", "url": "https://store.psacard.com/pages/example-page", "content": "Example page content" } ] } } ```
MCPツール psastore_pages
/psastore/pages/{handle}Returns normalized static page detail for one PSA Team Store (https://store.psacard.com) page handle. The storefront URL is fixed server-side.
レスポンスに関する注記
- 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. - If the classic `/pages/{handle}.json` endpoint and `*.myshopify.com` domain resolution are both unavailable, the service falls back to fetching the page's own HTML and parsing an embedded Contentful CMS entry. When this fallback was used, the response includes `transport_mode: "ssr_embedded"`; `content` is plain text rendered from the page's rich-text blocks, and `id` is omitted (the source id is a Contentful entry id, not a Shopify numeric id). `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport). Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "page": { "id": "54831906896", "handle": "example-page-handle", "title": "Example Page", "url": "https://store.psacard.com/pages/example-page-handle", "content": "Example page content" } } } ```
MCPツール 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.
レスポンスに関する注記
- 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. Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "sitemaps": [ { "loc": "https://store.psacard.com/sitemap_products_1.xml", "type": "products" } ] } } ```
MCPツール 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.
レスポンスに関する注記
- 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. Example response: ```json { "code": 200, "msg": "OK", "data": { "store_url": "https://store.psacard.com", "source_url": "https://store.psacard.com", "type": "products", "limit": 2, "urls": [ { "loc": "https://store.psacard.com/products/example-product-handle", "type": "products", "handle": "example-product-handle", "lastmod": "2026-05-31T23:31:08-07:00", "changefreq": "daily" } ] } } ```
MCPツール psastore_sitemap_urls
関連API
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.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
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.
FAQ
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.