{
  "openapi": "3.0.1",
  "info": {
    "title": "Kijiji Scraper & Tracker - Cars, Rentals, Price Drops & MCP",
    "description": "Kijiji scraper, tracker and API for cars, rentals and real estate by keyword, city, category or link: price, price drops, owner or dealer, photos, car details, rental amenities. Only changes returns new listings, price drops and gone listings, with Slack, Discord or Teams alerts and MCP.",
    "version": "0.1",
    "x-build-id": "abj3aVfkvMH7Uns0r"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/akhil_rajesh~kijiji-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-akhil_rajesh-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/akhil_rajesh~kijiji-scraper/runs": {
      "post": {
        "operationId": "runs-sync-akhil_rajesh-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/akhil_rajesh~kijiji-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-akhil_rajesh-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": {
          "searches": {
            "title": "Searches",
            "type": "array",
            "description": "Keywords to search on Kijiji ('iphone 15', 'honda civic', '2 bedroom'), or Kijiji search page links (kijiji.ca/b-city-of-toronto/iphone/k0l1700273). A link's own filters (price, sort, radius) aren't read: use the filters below. Leave empty to read a whole category.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where to search: a city ('Ottawa', 'London, ON'), a region ('Toronto (GTA)', 'Greater Vancouver Area'), a province ('Alberta'), or Canada. Leave empty for all of Canada. Kijiji links carry their own place."
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Kijiji's category, as Kijiji names it or in plain words: 'Cars & Trucks' (or 'cars'), 'Apartments & Condos' ('apartments', 'rentals'), 'Cell Phones', 'Furniture', 'Buy & Sell', 'Jobs', 'Free Stuff'. Leave empty for every category."
          },
          "listings": {
            "title": "Listings",
            "type": "array",
            "description": "Specific listings to read from their own pages: Kijiji listing links (kijiji.ca/v-.../1745158989) or listing ids. Each gives the full description, views, status, end date and the seller's profile. A listing that is gone is answered as not found (free).",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Most listings (rows) a run returns, shared between searches. With Only changes: most changes a run returns (price drops first; the rest come with the next run).",
            "default": 1000
          },
          "onlyChanges": {
            "title": "Only changes since the last run",
            "type": "boolean",
            "description": "Track your searches: each run returns only what changed since the last run with the same searches and filters (new listings, price drops and increases, listings gone). The first run saves the listings there now as the baseline and returns them as firstRun. Each search is read whole, up to Max listings per search, so no change is missed."
          },
          "changeTypes": {
            "title": "Changes to return",
            "type": "array",
            "description": "Which changes Only changes returns. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "newListing",
                "priceDrop",
                "priceIncrease",
                "removed",
                "relisted"
              ],
              "enumTitles": [
                "New listings",
                "Price drops",
                "Price increases",
                "Gone (sold or taken down)",
                "Relisted (the seller posted it again)"
              ]
            }
          },
          "alertWebhookUrl": {
            "title": "Alert webhook URL",
            "type": "string",
            "description": "Post each run's changes to Slack, Discord or Microsoft Teams (their incoming-webhook URL), or to any HTTPS endpoint that takes JSON (Zapier, Make, n8n). Switches on Only changes. The first run posts a short 'alerts are set up' message."
          },
          "alertChangeTypes": {
            "title": "Alert on",
            "type": "array",
            "description": "Which changes are posted. Leave empty for new listings and price drops.",
            "items": {
              "type": "string",
              "enum": [
                "newListing",
                "priceDrop",
                "priceIncrease",
                "removed",
                "relisted"
              ],
              "enumTitles": [
                "New listings",
                "Price drops",
                "Price increases",
                "Gone (sold or taken down)",
                "Relisted (the seller posted it again)"
              ]
            }
          },
          "historyName": {
            "title": "History name",
            "type": "string",
            "description": "Keep a separate history for this tracker (a-z, 0-9 and hyphens). Leave empty to share the default one: histories are kept per search and filters anyway."
          },
          "minPrice": {
            "title": "Minimum price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty or 0 for no minimum. Listings without a price (contact, swap) are left out when a price limit is set."
          },
          "maxPrice": {
            "title": "Maximum price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty or 0 for no maximum. For rentals: monthly rent."
          },
          "sellerTypes": {
            "title": "Seller types",
            "type": "array",
            "description": "Only listings by these sellers, as Kijiji marks them. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "owner",
                "dealer",
                "professional"
              ],
              "enumTitles": [
                "Owner (private seller or landlord)",
                "Dealer or business",
                "Professional (property manager, agent)"
              ]
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only listings posted at most this many days ago. Leave empty or 0 for any."
          },
          "onlyPriceDrops": {
            "title": "Only listings with a price drop",
            "type": "boolean",
            "description": "Only listings Kijiji shows with an earlier, higher price (the seller lowered it)."
          },
          "withPhotosOnly": {
            "title": "Only listings with photos",
            "type": "boolean",
            "description": "Leave out listings without a photo."
          },
          "excludeWords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Leave out listings whose title has any of these words ('wanted', 'case', 'broken'). Kijiji's keyword search also matches descriptions, so this cleans up a search fast.",
            "items": {
              "type": "string"
            }
          },
          "minYear": {
            "title": "Minimum year (cars)",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars and trucks: only this model year or newer. Leave empty or 0 for any."
          },
          "maxMileageKm": {
            "title": "Maximum kilometres (cars)",
            "minimum": 0,
            "type": "integer",
            "description": "Cars and trucks: only up to this mileage. Leave empty or 0 for any."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms (rentals)",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Rentals and real estate: only this many bedrooms or more. Leave empty or 0 for any."
          },
          "includeTopAds": {
            "title": "Include paid top ads",
            "type": "boolean",
            "description": "Kijiji shows up to 6 paid top ads above each page, which repeat from page to page. Off: only the search's own listings, in Kijiji's order."
          },
          "excludePromoted": {
            "title": "Leave out promoted listings",
            "type": "boolean",
            "description": "Leave out the listings Kijiji promotes inside the results (paid placements, mostly dealers: about a third of a Cars & Trucks page). Each row says whether it was promoted (isPromoted)."
          },
          "maxListingDetails": {
            "title": "Listing pages to read",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Read each listing's own page for this many listings per run (at most 200, about 2 seconds each): the full description, views, status, end date, and the seller's profile and listing count (a business's name). With Only changes, the changes are read first, most important first. 0 for the fastest runs.",
            "default": 0
          },
          "maxListingsPerSearch": {
            "title": "Max listings read per search",
            "minimum": 1,
            "maximum": 4000,
            "type": "integer",
            "description": "Each search is read up to this many listings, in Kijiji's order (keyword searches by relevance, as on the site; a category without a keyword newest first), 40 a page, about 2 seconds a page. Kijiji itself shows at most about 4,000 per search: narrow a bigger one with a category or a smaller place.",
            "default": 1000
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: Kijiji answers Apify's servers directly. You can use your own proxies; residential proxies aren't available in this Actor."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}