{
  "openapi": "3.0.1",
  "info": {
    "title": "Nettimoto Scraper: Motorcycle Listings Finland",
    "description": "Scrape nettimoto.com, Finland's largest motorcycle marketplace: motorcycles, scooters, mopeds, ATVs and snowmobiles with EUR prices, make, model, year, mileage or hours, engine size, photos and dealers, plus the dealer directory and sold archive. No login, no proxy. Export JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "Wm8DguqJHswAQW8ue"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~nettimoto-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-nettimoto-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~nettimoto-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-nettimoto-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~nettimoto-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-nettimoto-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": "What to collect",
            "enum": [
              "search",
              "urls",
              "dealers"
            ],
            "type": "string",
            "description": "search = vehicle listings for the filters below (one row per ad). urls = ad, dealer-inventory, saved-search or newest-ads addresses (or ad numbers) you provide, always with full detail. dealers = the motorcycle-dealer directory (one row per company).",
            "default": "search"
          },
          "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": 50
          },
          "vehicleTypes": {
            "title": "Vehicle types",
            "type": "array",
            "description": "Which kinds of vehicle to read. Empty means motorcycles. Pick \"All vehicle types\" to search the whole site (snowmobiles, ATVs, scooters, mopeds and the rest).",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "motorcycle",
                "moped",
                "scooter",
                "atv",
                "snowmobile",
                "moped-car",
                "karting-car",
                "minimoto",
                "motorized-bicycle",
                "crosskart",
                "senior-vehicle",
                "trike-l5e",
                "electric-vehicle",
                "quad-l7e",
                "motor-sleigh"
              ],
              "enumTitles": [
                "All vehicle types",
                "Motorcycle",
                "Moped",
                "Scooter",
                "ATV / quad",
                "Snowmobile",
                "Moped car",
                "Karting car",
                "Minimoto",
                "Motorised bicycle",
                "Crosskart",
                "Senior vehicle (mobility)",
                "Three-wheeler L5e",
                "Electric vehicle",
                "Four-wheeler L7e",
                "Motor sleigh"
              ]
            },
            "default": [
              "motorcycle"
            ]
          },
          "listingStatus": {
            "title": "Listing status",
            "enum": [
              "for-sale",
              "sold"
            ],
            "type": "string",
            "description": "for-sale = ads that are live now. sold = ads the seller marked as sold (kept in the site archive; the asking price is no longer shown, so sold rows have no price).",
            "default": "for-sale"
          },
          "makes": {
            "title": "Makes",
            "type": "array",
            "description": "Optional. One or more makes as nettimoto.com writes them, for example Honda, Yamaha, Harley-Davidson, Ski-Doo. Common short names such as HD or Guzzi are understood; an unknown name returns close matches. Empty means every make. Several makes cannot be combined with models.",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "title": "Models",
            "type": "array",
            "description": "Optional. Models of the single make above, for example CBR or MT. Needs exactly one make. Empty means every model of the make.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Optional. Regions (maakunta) of Finland to search in. Empty means all of Finland. In dealer mode it narrows the dealer directory.",
            "items": {
              "type": "string",
              "enum": [
                "Ahvenanmaa",
                "Etelä-Karjala",
                "Etelä-Pohjanmaa",
                "Etelä-Savo",
                "Kainuu",
                "Kanta-Häme",
                "Keski-Pohjanmaa",
                "Keski-Suomi",
                "Kymenlaakso",
                "Lappi",
                "Pirkanmaa",
                "Pohjanmaa",
                "Pohjois-Karjala",
                "Pohjois-Pohjanmaa",
                "Pohjois-Savo",
                "Päijät-Häme",
                "Satakunta",
                "Uusimaa",
                "Varsinais-Suomi",
                "Outside Finland"
              ],
              "enumTitles": [
                "Ahvenanmaa",
                "Etelä-Karjala",
                "Etelä-Pohjanmaa",
                "Etelä-Savo",
                "Kainuu",
                "Kanta-Häme",
                "Keski-Pohjanmaa",
                "Keski-Suomi",
                "Kymenlaakso",
                "Lappi",
                "Pirkanmaa",
                "Pohjanmaa",
                "Pohjois-Karjala",
                "Pohjois-Pohjanmaa",
                "Pohjois-Savo",
                "Päijät-Häme",
                "Satakunta",
                "Uusimaa",
                "Varsinais-Suomi",
                "Outside Finland"
              ]
            }
          },
          "towns": {
            "title": "Towns",
            "type": "array",
            "description": "Optional. Towns inside the single region chosen above, for example Espoo or Helsinki. Needs exactly one region in search mode.",
            "items": {
              "type": "string"
            }
          },
          "bodyTypes": {
            "title": "Vehicle styles",
            "type": "array",
            "description": "Optional. Keep only these styles (the site calls it the vehicle type: cruiser, enduro, touring, snowmobile touring and so on). Each style belongs to one vehicle type, which must be among the vehicle types above. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "custom-cruiser",
                "enduro-cross",
                "street-touring-sport",
                "racing",
                "trial",
                "trike",
                "sidecar",
                "snowmobile-crossover",
                "snowmobile-deep-snow",
                "snowmobile-sport",
                "snowmobile-touring",
                "snowmobile-work",
                "snowmobile-watercross",
                "atv-cross",
                "atv-off-road",
                "atv-road",
                "atv-tractor",
                "tubular-frame",
                "e-bike",
                "e-scooter",
                "self-balancing",
                "unicycle"
              ],
              "enumTitles": [
                "Custom / chopper / cruiser",
                "Enduro / cross / all road / off road",
                "Street / touring / sport",
                "Racing vehicle",
                "Trial",
                "Trike",
                "Combination / sidecar",
                "Snowmobile: crossover",
                "Snowmobile: deep snow",
                "Snowmobile: sport",
                "Snowmobile: touring",
                "Snowmobile: work",
                "Snowmobile: watercross",
                "ATV: cross",
                "ATV: off-road traffic",
                "ATV: road traffic",
                "ATV: tractor registered",
                "Crosskart: tubular frame",
                "Electric bicycle",
                "Electric kick scooter",
                "Self-balancing scooter",
                "Electric unicycle"
              ]
            }
          },
          "engineType": {
            "title": "Engine type",
            "enum": [
              "any",
              "2-stroke",
              "4-stroke",
              "diesel",
              "electric"
            ],
            "type": "string",
            "description": "Optional. Two-stroke, four-stroke, diesel or electric engine. any means all.",
            "default": "any"
          },
          "transmission": {
            "title": "Transmission",
            "enum": [
              "any",
              "automatic",
              "manual",
              "semi-automatic"
            ],
            "type": "string",
            "description": "Optional. Gearbox type. any means all.",
            "default": "any"
          },
          "driveTypes": {
            "title": "Drive types",
            "type": "array",
            "description": "Optional. Keep only these drive layouts (chain, belt, shaft, front, rear, four-wheel, six-wheel). Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "chain",
                "belt",
                "shaft",
                "front-wheel",
                "rear-wheel",
                "four-wheel",
                "six-wheel"
              ],
              "enumTitles": [
                "Chain drive",
                "Belt drive",
                "Shaft drive",
                "Front-wheel drive",
                "Rear-wheel drive",
                "Four-wheel drive",
                "Six-wheel drive"
              ]
            }
          },
          "colors": {
            "title": "Colors",
            "type": "array",
            "description": "Optional. Keep only these colors. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "beige",
                "grey",
                "silver",
                "yellow",
                "copper",
                "black",
                "orange",
                "red",
                "brown",
                "blue",
                "turquoise",
                "white",
                "green",
                "purple",
                "other"
              ],
              "enumTitles": [
                "Beige",
                "Grey",
                "Silver",
                "Yellow",
                "Copper",
                "Black",
                "Orange",
                "Red",
                "Brown",
                "Blue",
                "Turquoise",
                "White",
                "Green",
                "Purple",
                "Other"
              ]
            }
          },
          "powerClass": {
            "title": "Power class",
            "enum": [
              "any",
              "under-11kw",
              "under-35kw",
              "under-70kw",
              "other"
            ],
            "type": "string",
            "description": "Optional. The power classes of the site (kW): up to 11, up to 35, up to 70, or its other class. Each class includes the smaller ones. Only ads that state a class are matched. The site prints no power on its ads, so this narrows the search but adds no column. any means all.",
            "default": "any"
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Lowest advertised price in euros. 0 means no limit."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Highest advertised price in euros. 0 means no limit."
          },
          "onlyWithPrice": {
            "title": "Only ads with a price",
            "type": "boolean",
            "description": "On: skip ads that carry no price (\"Ei hinnoiteltu\", about 1 in 6 motorcycle ads). Off (default): keep them, price left empty.",
            "default": false
          },
          "minYear": {
            "title": "Minimum model year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Optional. Oldest model year. 0 means no limit."
          },
          "maxYear": {
            "title": "Maximum model year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Optional. Newest model year. 0 means no limit."
          },
          "minMileage": {
            "title": "Minimum mileage (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Lowest odometer reading in kilometres. Ads that count engine hours instead are not matched. 0 means no limit."
          },
          "maxMileage": {
            "title": "Maximum mileage (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Highest odometer reading in kilometres. Ads that count engine hours instead are not matched. 0 means no limit."
          },
          "minHours": {
            "title": "Minimum engine hours",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Lowest engine-hour reading (ATVs, snowmobiles, crosskarts and some motorcycles count hours instead of kilometres). 0 means no limit."
          },
          "maxHours": {
            "title": "Maximum engine hours",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Highest engine-hour reading. 0 means no limit."
          },
          "minEngineSize": {
            "title": "Minimum engine size (cm3)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Smallest engine displacement in cubic centimetres, for example 125. 0 means no limit."
          },
          "maxEngineSize": {
            "title": "Maximum engine size (cm3)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Largest engine displacement in cubic centimetres, for example 650. 0 means no limit."
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "any",
              "dealer",
              "private"
            ],
            "type": "string",
            "description": "Optional. dealer = motorcycle dealers only. private = private persons only (flagged with isPrivateSeller, never named, no contact details). any means both.",
            "default": "any"
          },
          "roadWorthy": {
            "title": "Road-worthiness",
            "enum": [
              "any",
              "yes",
              "no"
            ],
            "type": "string",
            "description": "Optional. yes = vehicles the seller lists as roadworthy. no = vehicles the seller marks as not roadworthy (project bikes, off-road and race machines). The site prints only the negative on its ads, so a roadWorthy column appears only on \"not roadworthy\" ads. any means both.",
            "default": "any"
          },
          "maxAgeDays": {
            "title": "Updated within",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "28"
            ],
            "type": "string",
            "description": "Optional. Keep only ads created or changed within this many days.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "oldest",
              "price-asc",
              "price-desc",
              "year-desc",
              "year-asc",
              "mileage-asc",
              "mileage-desc",
              "make-model-asc"
            ],
            "type": "string",
            "description": "Order of the results. Newest first is the default and the best choice for monitoring.",
            "default": "newest"
          },
          "startUrls": {
            "title": "Addresses",
            "type": "array",
            "description": "Ad addresses (https://www.nettimoto.com/honda/cbr/12345678), dealer pages (https://www.nettimoto.com/yritys/1234), saved-search results (https://www.nettimoto.com/hakutulokset?haku=...) or the newest ads (https://www.nettimoto.com/uusimmat).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingIds": {
            "title": "Ad numbers",
            "type": "array",
            "description": "Ad numbers (the number at the end of an ad address), for example 3447120.",
            "items": {
              "type": "string"
            }
          },
          "dealerIds": {
            "title": "Dealer numbers",
            "type": "array",
            "description": "Dealer numbers (the number in a dealer page address, https://www.nettimoto.com/yritys/1234). Empty means walk the directory with the regions and towns above.",
            "items": {
              "type": "string"
            }
          },
          "dealerQuery": {
            "title": "Dealer name search",
            "type": "string",
            "description": "Optional. Keep only dealers whose name contains these words, for example \"Moto\".",
            "default": ""
          },
          "fetchDetails": {
            "title": "Read ad pages",
            "type": "boolean",
            "description": "On (default): every ad page is read for the full record (description, equipment, seller, update date, dealer address) and billed as a detail record. Off: only the list card is read (title, price, year, mileage, engine, drive, city, photos), billed as a standard record. For dealers: on adds the profile (website, logo, description, address).",
            "default": true
          },
          "includeContactDetails": {
            "title": "Dealer contact details (phone, texts)",
            "type": "boolean",
            "description": "Off (default): phone numbers and e-mail addresses written into dealer texts are replaced by a marker and no phone is read. On: dealer texts are kept as written, ad rows of dealers get sellerPhone and dealer rows get phone, the business line behind the call button (one extra request each). Named sales people and private persons never get contact data, whatever this says.",
            "default": false
          },
          "includeRaw": {
            "title": "Include raw data",
            "type": "boolean",
            "description": "Adds a \"raw\" column with the unprocessed data blocks of the site (list card and ad page analytics data).",
            "default": false
          },
          "onlyNew": {
            "title": "Only new listings (monitor mode)",
            "type": "boolean",
            "description": "Schedule the Actor and receive only ads you have not been given before. The first run returns everything and builds the memory. Use together with sort \"Newest first\".",
            "default": false
          },
          "stateKey": {
            "title": "Monitor label",
            "type": "string",
            "description": "Optional name of the monitor memory. Same label plus same filters = same memory. Empty derives the label from the filters.",
            "default": ""
          },
          "resetSeen": {
            "title": "Reset monitor memory",
            "type": "boolean",
            "description": "Forget everything seen before and start the memory again. Use after changing what you want to track.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Ad pages read at the same time. The site answers slowly; 2 is the polite default.",
            "default": 2
          },
          "maxScanSeconds": {
            "title": "Time limit (seconds)",
            "minimum": 10,
            "maximum": 86400,
            "type": "integer",
            "description": "Stops reading after this many seconds and delivers what was collected.",
            "default": 3000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}