{
  "openapi": "3.0.1",
  "info": {
    "title": "Kijiji Scraper",
    "description": "[💰 $0.9 / 1K] Extract Canadian classified listings from Kijiji — cars, real estate, jobs, electronics, services, and more. Paste search URLs or just type keywords and a location.",
    "version": "1.0",
    "x-build-id": "f9CmRBSmMYyJiIVsz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~kijiji-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-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/solidcode~kijiji-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-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/solidcode~kijiji-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-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": {
          "searchUrls": {
            "title": "Search or Category URLs",
            "type": "array",
            "description": "Paste one or more Kijiji search, category, or listing URLs. For example: https://www.kijiji.ca/b-cars-vehicles/canada/c27l0 or any URL you copied from kijiji.ca after applying your own filters. URLs carry their own filters and location.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Plain-text search terms — for example 'iPhone 15 Pro' or 'Toyota Camry'. Combined with the Location field below. Leave empty if you only want URL-based scraping.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City or province to search in (e.g. 'Toronto', 'Calgary, AB', 'British Columbia'). Use 'Canada' to search all provinces. Kijiji only covers the cities and regions in its own location menu, so pick the nearest one — an unrecognised place searches all of Canada and the run says so. A postal code narrows to its province only, never to a single city. Only applies to keyword searches above — URLs carry their own location."
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total number of listings to collect across all URLs and queries. This is one shared budget, spent in the order your URLs and queries are listed — if the first search alone reaches the limit, the ones after it will not run, and the run tells you which were skipped. Give each search its own run, or raise the limit, to collect from every one. Set to 0 for no limit (capped at 100,000 listings per run as a runaway-loop guard). Each single search or URL paginates up to 100 pages (~4,600 listings) — for larger pulls, split by city or category URL. Tip: start with 50-100 to test, then increase."
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "dateDesc",
              "priceAsc",
              "priceDesc"
            ],
            "type": "string",
            "description": "Choose the order in which listings are collected. Only applies to keyword searches — URLs carry their own sort. Ads with nothing to sort on go last: on 'Newest First' that is ads syndicated from other job sites, which carry no posting date, and on a price sort it is ads priced 'Please contact'."
          },
          "minPrice": {
            "title": "Minimum Price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings priced at or above this amount in Canadian dollars. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum Price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings priced at or below this amount in Canadian dollars. Leave empty for no maximum."
          },
          "adType": {
            "title": "Ad Type",
            "enum": [
              "any",
              "offering",
              "wanted"
            ],
            "type": "string",
            "description": "Show ads where someone is offering an item or wanting to buy one."
          },
          "sellerType": {
            "title": "Seller Type",
            "enum": [
              "any",
              "private",
              "business"
            ],
            "type": "string",
            "description": "Filter by who is posting the ad — private individuals or registered businesses. Applied to listings that expose this attribute (most common on cars and electronics); ads without a seller-type attribute pass through unfiltered."
          },
          "excludeExternalListings": {
            "title": "Kijiji-Hosted Ads Only",
            "type": "boolean",
            "description": "Kijiji's job pages mix in ads syndicated from other job sites (ZipRecruiter). Their links open that other site, and they carry no posting date, no map location and no salary. Because they have no posting date, a newest-first export lists them after the dated ads rather than mixed in. They are included by default, and every row is marked with 'isExternalListing' so you can tell them apart. Turn this on to keep only ads posted on Kijiji itself."
          },
          "fetchFullDetails": {
            "title": "Fetch Full Listing Details",
            "type": "boolean",
            "description": "When enabled, the scraper visits each listing's detail page to capture extra fields (view count, the complete ad description instead of the search-page excerpt, seller phone, website, business/dealer flag) and to fill in the posting date, which Kijiji leaves off most dealer-posted ads in search results. This makes the scrape roughly twice as slow and twice as costly in compute. Leave off for fast, lightweight runs."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}