{
  "openapi": "3.0.1",
  "info": {
    "title": "Kijiji Scraper: Listings, Cars, Rentals & Prices",
    "description": "Scrape Kijiji by keyword, category and city or postal code, in any sort: prices, places, photos, attributes, seller type. Cars with VIN, km, mileage analysis and history badges; rentals with bedrooms and walk scores. Similar listings, French labels, new listing monitor.",
    "version": "0.1",
    "x-build-id": "EV69Gpkz5SQEdXlPa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~kijiji-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-kijiji-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/automation_craft~kijiji-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-kijiji-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/automation_craft~kijiji-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-kijiji-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search words as you would type them on Kijiji, for example iphone 13, sectional sofa or honda civic. Up to 100 characters each.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Places",
            "type": "array",
            "description": "Kijiji locations by name from Kijiji's own list (City of Toronto, Toronto, Toronto (GTA), Calgary, Montreal, Ontario, ON, Canada), by location id (1700273) or by path (Ontario > Toronto (GTA)); a Canadian postal code (M5V 2T6 or its first three characters M5V); or coordinates (43.6532, -79.3832). A postal code or coordinates are searched around that point with the radius below. A name several Kijiji locations share, or a place Kijiji does not know, is answered with a free row, and its searches are not read.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Kijiji categories by id (174), by name (Cars & Trucks, Long Term Rentals, Cell Phones) or by full path (Buy & Sell > Phones > Cell Phones), from Kijiji's own list of 478 categories. A name several categories share (Other) is answered with a free row that lists their ids and paths. Leave empty to search every category.",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Radius in kilometres",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How far around a postal code or coordinates to search (1 to 1000 km; 10 when left empty). A Kijiji location is searched over its own area, so this setting needs a postal code or coordinates among the places."
          },
          "searchUrls": {
            "title": "Kijiji search links",
            "type": "array",
            "description": "Links of Kijiji results pages, such as https://www.kijiji.ca/b-cars-trucks/calgary/c174l1700199 or https://www.kijiji.ca/b-buy-sell/city-of-toronto/iphone-13/k0c10l1700273. Each link is read the way Kijiji reads it and searched newest first with the filters below. Paste the plain link of the first page: a link with filters in its query string or a page number is refused with a free row (use the settings below for filters). Through the API an item may also be {\"url\": \"...\"}.",
            "items": {
              "type": "string"
            }
          },
          "listingUrls": {
            "title": "Listing links",
            "type": "array",
            "description": "Kijiji listing links (https://www.kijiji.ca/v-<category>/<place>/<title>/<listing id>) or listing ids. Each one is read with its details and its seller's public profile and delivered as given, so each link is billed as a Listing and a Listing detail whatever \"Include listing details\" says; the search filters below do not apply to links. A removed listing or an unknown id is a free row. Through the API an item may also be {\"url\": \"...\"}.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (CAD)",
            "minimum": 0,
            "maximum": 9999999,
            "type": "integer",
            "description": "Lowest asking price in whole dollars. Listings without a price figure (contact, free, swap) do not pass a price filter."
          },
          "maxPrice": {
            "title": "Maximum price (CAD)",
            "minimum": 0,
            "maximum": 9999999,
            "type": "integer",
            "description": "Highest asking price in whole dollars."
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "any",
              "private",
              "business"
            ],
            "type": "string",
            "description": "Private sellers or businesses and dealers only, by Kijiji's own seller marks. Where the category has Kijiji's own For Sale By or For Rent By filter, Kijiji applies it; on every row the marks decide (Kijiji's dealer flag, a business account id, the For Sale By value, the record's seller type). A business that marks its listing by owner counts as private, as on Kijiji. A row that carries no seller mark does not pass this filter. Default: any seller."
          },
          "offerType": {
            "title": "Offering or wanted",
            "enum": [
              "offering",
              "wanted"
            ],
            "type": "string",
            "description": "Kijiji's searches show offers unless asked for wanted ads. Default: offering."
          },
          "filters": {
            "title": "Kijiji filters",
            "type": "object",
            "description": "Any filter of Kijiji's own filter list for a category, by Kijiji's own names and values: a list of values, or a range as {\"min\": n, \"max\": n}. Examples: cars {\"carmake\": [\"toyota\", \"honda\"], \"caryear\": {\"min\": 2018, \"max\": 2022}, \"carmileageinkms\": {\"max\": 80000}, \"cartransmission\": [\"2\"]}; rentals {\"numberbedrooms\": [\"2\"], \"unittype\": [\"apartment\"], \"petsallowed\": [\"1\"]}. A filter the category does not have, or a value Kijiji does not use there, is answered with a free row that lists what Kijiji offers. Price, seller and offer type have their own settings."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "oldest",
              "price_low",
              "price_high",
              "relevance",
              "nearest",
              "mileage_low",
              "mileage_high"
            ],
            "type": "string",
            "description": "The order Kijiji reads each search in, from the orders Kijiji itself offers (checked on every page: a search Kijiji does not sort as asked delivers nothing and gets a free row listing the orders it offers there; relevance needs keywords, kilometres need Cars & Trucks). Default: newest first. A monitor reads newest first only."
          },
          "descriptionLanguage": {
            "title": "Listing language",
            "enum": [
              "any",
              "en",
              "fr"
            ],
            "type": "string",
            "description": "Keep only listings whose title and description are written in English or in French, by the common words of each language (a listing whose language is not clear does not pass). Listings left out are free. Every row carries descriptionLanguage. Default: any."
          },
          "includeTopAds": {
            "title": "Include TOP ads",
            "type": "boolean",
            "description": "Also deliver the paid TOP ads Kijiji places at the head of each results page (flagged isTopAd, delivered once each). Off by default: TOP ads are not in newest first order and repeat across searches."
          },
          "language": {
            "title": "Labels language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "The language of Kijiji's own labels in the rows: category and place names and paths, car and rental values (Automatique, Propriétaire) and badge texts, as Kijiji shows them in French. Titles and descriptions stay as the seller wrote them; status messages stay in English. Default: English."
          },
          "includeDetails": {
            "title": "Include listing details",
            "type": "boolean",
            "description": "Read each delivered listing's own record and its seller's public profile: the full description (search rows carry about 200 characters), the status and end date, the offer type, every attribute, large photos, and for the seller the number of listings, member since and, for a business, its name and website. Reads add no view to the seller's ad. Billed as a Listing detail event per row. Off by default."
          },
          "includePrivateSellerDetails": {
            "title": "Include private sellers' names, contacts and addresses",
            "type": "boolean",
            "description": "Off by default (also when left out or empty). Off, a private seller's row, and a row whose seller kind Kijiji does not show, carries no person's name or Kijiji page (a business profile's name, page and website still come), no street address or nearest intersection, coordinates rounded to about 1 km (coordinatesRounded true) and a listing link by id alone, and phone numbers, e-mail addresses, street addresses with a house number, full postal codes and names written into titles, descriptions, attribute values (and the fields taken from them) and similar listing titles are masked with a wide rule that catches the usual writings, not every possible one. On, a private seller's row carries them as Kijiji shows them to a visitor who is not logged in: sellerName, sellerProfileUrl and sellerWebsite (with details on), address, nearestIntersection, exact latitude and longitude (coordinatesRounded false), Kijiji's full listing url, and the title, description, attributes and the fields taken from them (such as vehicleTrim and vehicleHistoryReportUrl) and similar listing titles and links as written, phone numbers and e-mail addresses included. Business and dealer sellers' contact details are delivered either way. Kijiji's own seller phone field is never delivered (it needs a reCAPTCHA check). You are responsible for a lawful use of personal data (GDPR and Canada's PIPEDA included).",
            "default": false
          },
          "includeMileageAnalysis": {
            "title": "Add mileage analysis (cars)",
            "type": "boolean",
            "description": "For Cars & Trucks listings, add Kijiji's own mileage analysis (low, average or high kilometres for the car's age, Kijiji's typical kilometres and the kilometres per year by Kijiji's rule) and its price insight (Kijiji's price rating and the average market price it shows, with the difference in percent). Billed as a Mileage analysis event per car Kijiji has one for; other rows carry the fields empty and are not billed. Off by default."
          },
          "includeVehicleHistory": {
            "title": "Add vehicle history badges (cars)",
            "type": "boolean",
            "description": "For Cars & Trucks listings, add Kijiji's vehicle history badges (such as No Reported Accidents, One Owner, Low Kilometres) and the CARFAX report link Kijiji shows (the CARFAX site itself is not read). Billed as a Vehicle history event per car that has at least one badge; others are not billed. Off by default."
          },
          "includeSimilarListings": {
            "title": "Add similar listings",
            "type": "boolean",
            "description": "Add Kijiji's own similar listings of each delivered listing (id, title, price, category, place, photo, link). Billed as one Similar listings event per row that gets at least one. Off by default."
          },
          "similarListingsPerListing": {
            "title": "Similar listings per listing",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many similar listings each row carries (1 to 50; 10 when left empty). Needs Add similar listings."
          },
          "splitLargeSearches": {
            "title": "Split large searches by price",
            "type": "boolean",
            "description": "Kijiji serves at most 4,040 listings (101 pages) of one search. With this on, a search that holds more is read band by band of price, each band small enough to be read whole; listings without a price figure are counted on the coverage row. Off by default. Not with a monitor."
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most listing rows this run delivers (and bills), over all searches. 100 when left empty."
          },
          "maxPagesPerSearch": {
            "title": "Pages per search",
            "minimum": 1,
            "maximum": 101,
            "type": "integer",
            "description": "How many results pages of 40 listings each search reads at most (1 to 101; Kijiji serves no page past the 101st). 10 when left empty. With splitLargeSearches it applies to each price band."
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name a monitor to run on a schedule: it remembers every listing it delivered (in a store this Actor keeps for this listing) and every later run delivers and bills only listings it has not delivered before. Each run reads the newest pages of each search (Pages per search). The same name with other searches or filters reads nothing. Up to 60 letters, digits, spaces and . _ , - : # ( )."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}