{
  "openapi": "3.0.1",
  "info": {
    "title": "MotoSport Scraper: Powersports Parts, Tires and Gear",
    "description": "Scrape motosport.com, the US powersports store: aftermarket parts, tires by size, riding gear and OEM parts with part numbers, USD prices, sale and stock status, vehicle fitment and brands, plus monitoring of new items and price changes. No login, no proxy. Export JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "yYb5gFKYbJ53ofCbm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~motosport-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-motosport-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/recordsdata~motosport-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-motosport-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/recordsdata~motosport-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-motosport-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": {
          "mode": {
            "title": "Where to read from",
            "enum": [
              "lookup",
              "brand",
              "catalog"
            ],
            "type": "string",
            "description": "Lookup reads the product pages, OEM part numbers and brand pages you list in Addresses and Part numbers. Brand reads every product of the brands you list in Brands. Catalog scans the whole store in sitemap order (about 29,000 aftermarket products or about 500,000 OEM parts) and keeps what passes your filters.",
            "default": "lookup"
          },
          "startUrls": {
            "title": "Addresses",
            "type": "array",
            "description": "Used in lookup mode. Product pages (motosport.com/dunlop-american-elite-front-tire), OEM part pages (motosport.com/oem-parts/part-number/704900813) or brand pages (motosport.com/fox-racing). A bare product slug works too. Pages that the site only serves to a full browser (the /motorcycle/, /atv/ or /dirtbike/ storefront pages) return a free error row.",
            "items": {
              "type": "string"
            }
          },
          "partNumbers": {
            "title": "OEM part numbers",
            "type": "array",
            "description": "Used in lookup mode. Manufacturer part numbers of the OEM catalog, for example 704900813 or 23461-166-600. A number the store does not carry returns a free error row.",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Used in brand mode, and as a filter on the brand of each row in the other modes. A name (Fox Racing), the store slug (fox-racing) or the address (motosport.com/fox-racing). An unknown brand returns a free error row with close matches.",
            "items": {
              "type": "string"
            }
          },
          "recordTypes": {
            "title": "What to collect",
            "type": "array",
            "description": "Products (one row per aftermarket or OEM part, and one row per tire size), fitments (one row per part and vehicle model it fits) and brands (one row per brand with its product count, riding styles and product lines). Several choices are read in the order listed here.",
            "items": {
              "type": "string",
              "enum": [
                "products",
                "fitments",
                "brands"
              ],
              "enumTitles": [
                "Products: parts, tires, gear and OEM parts",
                "Fitments: one row per part and vehicle model",
                "Brands: brand name, product count and product lines"
              ]
            },
            "default": [
              "products"
            ]
          },
          "maxItems": {
            "title": "Maximum items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stops after this many rows (all record types together). Free plans are limited to 10 items per run.",
            "default": 10
          },
          "searchQueries": {
            "title": "Search text",
            "type": "array",
            "description": "Optional. Words to look for, for example dunlop tire, 120/70-17 or fox gloves. Every word of one text must appear (any order, case ignored; numbers match as whole numbers) in the brand or product name; a row passes when any of the texts matches. In catalog mode the list is first narrowed by the words in each product address, then confirmed on the product page.",
            "items": {
              "type": "string"
            }
          },
          "productKinds": {
            "title": "Product kinds",
            "type": "array",
            "description": "Optional. Keep only aftermarket parts and gear, tires (one row per size) or OEM parts. Empty keeps all kinds the source holds. In catalog mode, tires are found by the word tire in the product address.",
            "items": {
              "type": "string",
              "enum": [
                "part",
                "tire",
                "oem"
              ],
              "enumTitles": [
                "Aftermarket parts, gear and accessories",
                "Tires (one row per size)",
                "OEM parts"
              ]
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional. Words of the product category the store assigns, for example Helmets, Gloves, Tire, Brakes. A product passes when its category or category path contains the word. Needs the product page, so brand mode reads each page.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Lowest price in US dollars. A product with several prices passes when its price range overlaps the wanted range."
          },
          "maxPrice": {
            "title": "Maximum price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Highest price in US dollars."
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Skips products and tire sizes the store shows as out of stock. Needs the product page.",
            "default": false
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Keeps only products with a reduced price (a list price above the selling price). Needs the product page.",
            "default": false
          },
          "vehicleMake": {
            "title": "Vehicle make",
            "type": "string",
            "description": "Optional. Only parts the store lists for this vehicle make, for example Honda, Yamaha, Polaris, Can-Am, KTM. Parts without a published fitment list are left out. Needs one extra request per product.",
            "default": ""
          },
          "vehicleModel": {
            "title": "Vehicle model",
            "type": "string",
            "description": "Optional. Only parts listed for this model, for example CRF450R, Ranger 570 or YZ250F. Best together with the make.",
            "default": ""
          },
          "vehicleYear": {
            "title": "Vehicle year",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Optional. Only parts listed for this model year, for example 2022."
          },
          "catalogSection": {
            "title": "Catalog section",
            "enum": [
              "aftermarket",
              "oem"
            ],
            "type": "string",
            "description": "Used in catalog mode. Aftermarket reads the aftermarket product pages (parts, tires, gear). OEM reads the manufacturer part pages by part number.",
            "default": "aftermarket"
          },
          "catalogOffset": {
            "title": "Catalog start position",
            "minimum": 0,
            "type": "integer",
            "description": "Used in catalog mode. Skips this many entries of the sitemap before reading, so a later run can continue where an earlier run stopped.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include the product description",
            "type": "boolean",
            "description": "Adds the product description as plain text. Turn it off for smaller rows.",
            "default": true
          },
          "fetchDetails": {
            "title": "Read each product page (slower)",
            "type": "boolean",
            "description": "In brand mode the listing already gives title, brand, price range and rating. Turn this on to read every product page for stock, sizes, part numbers and description. Each product costs about 1 second more.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new items (monitor)",
            "type": "boolean",
            "description": "Skips every item seen in an earlier run with the same filters and monitor name, so scheduled runs return only what is new and you pay only for those.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "Also return price and stock changes",
            "type": "boolean",
            "description": "With only new items on, a product already seen comes back when its price or stock changed, with the previous price, the change and a price-drop, price-increase, out-of-stock or back-in-stock label.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the memory used by only new items. Use one name per saved search. Empty derives a name from your filters.",
            "default": ""
          },
          "resetSeen": {
            "title": "Forget what was seen",
            "type": "boolean",
            "description": "Clears the memory of this monitor before the run, so everything counts as new again.",
            "default": false
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many product pages are read at the same time. The default is safe; the actor also paces every request.",
            "default": 3
          },
          "maxScanSeconds": {
            "title": "Maximum scan time (seconds)",
            "minimum": 30,
            "maximum": 3300,
            "type": "integer",
            "description": "Stops reading after this time and keeps the rows found so far. A catalog scan reads about 1 product page per second at 256 MB of memory (about 3 per second at 1024 MB), so 30 minutes cover about 2,000 products at 256 MB.",
            "default": 1800
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Empty means direct requests, which work. Add a proxy only if your own network needs one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}