{
  "openapi": "3.0.1",
  "info": {
    "title": "MySlabs Graded Card Scraper: PSA/BGS/CGC Sold Comps & Listings",
    "description": "Scrapes MySlabs.com graded card listings and sold comps: PSA, BGS, CGC, SGC, HGA, and TAG slabs across sports cards, Pokemon, and TCG. Structured JSON with price, availability, condition, images, and parsed grade. Built-in diffMode tracks new listings for scheduled price monitoring.",
    "version": "0.3",
    "x-build-id": "wXYj2KJWsOBlg7WJf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~myslabs-graded-cards-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-myslabs-graded-cards-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~myslabs-graded-cards-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-myslabs-graded-cards-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~myslabs-graded-cards-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-myslabs-graded-cards-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "all",
              "auction",
              "bin",
              "private-deals",
              "archive",
              "sitemap",
              "urls"
            ],
            "type": "string",
            "description": "Which MySlabs listing surface to crawl. \"all\"/\"auction\"/\"bin\"/\"private-deals\" crawl the matching live search grid directly (fastest: full Product/Offer data is already embedded there). \"archive\" crawls the Sold Archive for sold comps: every record is a completed sale with its sold price and the date it sold. \"sitemap\" walks /sitemap-slabs-*.xml for full-inventory discovery, visiting every /slab/view/<id>/ page. \"urls\" scrapes only the URLs you provide below.",
            "default": "all"
          },
          "query": {
            "title": "Keyword search",
            "type": "string",
            "description": "Optional keyword to search MySlabs by player, set, card number, team, or any title text (e.g. \"michael jordan psa 10\"). Filters the live search grids and the Sold Archive on the site's own search; leave empty to crawl the whole surface. Ignored by sitemap and Specific URLs modes."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "MySlabs listing URLs to scrape directly (e.g. https://myslabs.com/slab/view/1784776/). Only used when Search mode is \"Specific URLs\".",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxPages": {
            "title": "Max listing pages",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper bound on how many paginated listing-grid pages (~75 listings/page) are fetched before stopping. Only applies to all/auction/bin/private-deals search modes.",
            "default": 20
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Maximum number of card records to output in this run.",
            "default": 100
          },
          "diffMode": {
            "title": "Only new listings since last run (diff mode)",
            "type": "boolean",
            "description": "Track previously seen listing IDs (namespaced by Monitor Scope) and skip anything already captured. Listing-grid pages are newest-first, so the crawl stops early once it reaches a previously-seen ID, pair with a schedule to build an incremental new-listings feed instead of re-scraping the whole surface every run.",
            "default": false
          },
          "since": {
            "title": "Since (informational, ISO date)",
            "type": "string",
            "description": "Optional ISO date to record in the run summary for your own bookkeeping (e.g. \"2026-08-01\"). MySlabs' JSON-LD does not expose a listing-date field, so this does NOT filter results server-side: use \"diffMode\" above for actual incremental behavior."
          },
          "monitorScope": {
            "title": "Monitor Scope",
            "type": "string",
            "description": "Namespace for the diff-mode seen-ID baseline, useful when running multiple watch configurations (e.g. per search mode) from the same Actor.",
            "default": "myslabs-default"
          },
          "resetBaseline": {
            "title": "Reset seen-listings baseline",
            "type": "boolean",
            "description": "Clear the stored seen-ID baseline for this Monitor Scope before this run, so the next run's diffMode comparison starts fresh.",
            "default": false
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Number of retry attempts for a failed page fetch before giving up on that request. Kept generous by default to avoid the timeout/abort failures seen on the competing MySlabs actor.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 180,
            "type": "integer",
            "description": "Per-request timeout before a fetch is considered failed and retried.",
            "default": 45
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "MySlabs is Tier 0 (confirmed 2026-08-24): plain requests get clean 200s, Cloudflare is present but passive with no JS challenge observed. Datacenter proxy is the default and should be sufficient; switch to RESIDENTIAL only if you see rate-based blocking at high volume.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}