{
  "openapi": "3.0.1",
  "info": {
    "title": "Domclick RU Property Scraper - Listings, Prices & Agent Data",
    "description": "Extract property listings from domclick.ru, one of Russia’s largest real estate portals. Search by city or use listing/search URLs. Returns 70+ fields including price, area, rooms, floor, address, GPS, metro info, photos, seller and agency details, developer data, discounts, and mortgage flags.",
    "version": "1.1",
    "x-build-id": "2F8OyZybwvtwgVC0b"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~domclick-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-domclick-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/abotapi~domclick-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-domclick-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/abotapi~domclick-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-domclick-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Pick how to start: build a search from filters, or paste Domclick URLs.",
            "default": "search"
          },
          "locations": {
            "title": "Cities or regions",
            "type": "array",
            "description": "City or region names to search, for example \"Москва\", \"Санкт-Петербург\", \"Сочи\". Each name is resolved automatically. You can also paste an address GUID directly. Only applies in Search mode.",
            "default": [
              "Москва"
            ],
            "items": {
              "type": "string"
            }
          },
          "dealType": {
            "title": "Deal type",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Sale or rent.",
            "default": "sale"
          },
          "category": {
            "title": "Category",
            "enum": [
              "living",
              "commercial",
              "garage"
            ],
            "type": "string",
            "description": "Property category.",
            "default": "living"
          },
          "offerType": {
            "title": "Property type",
            "enum": [
              "flat",
              "layout"
            ],
            "type": "string",
            "description": "Flat (secondary market) or layout (new building plan).",
            "default": "flat"
          },
          "rooms": {
            "title": "Rooms",
            "type": "array",
            "description": "Filter by number of rooms. Choose any combination. 4 or more includes five and above; 5 or more means five and above only.",
            "items": {
              "type": "string",
              "enum": [
                "studio",
                "1",
                "2",
                "3",
                "4+",
                "5+"
              ],
              "enumTitles": [
                "Studio",
                "1",
                "2",
                "3",
                "4 or more",
                "5 or more"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price (₽)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in rubles."
          },
          "maxPrice": {
            "title": "Max price (₽)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in rubles."
          },
          "minArea": {
            "title": "Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum total area in square meters."
          },
          "maxArea": {
            "title": "Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total area in square meters."
          },
          "minFloor": {
            "title": "Min floor",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum floor."
          },
          "maxFloor": {
            "title": "Max floor",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum floor."
          },
          "minBuildYear": {
            "title": "Built in or after (year)",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Only listings in buildings built in or after this year, for example 2015."
          },
          "maxBuildYear": {
            "title": "Built in or before (year)",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Only listings in buildings built in or before this year, for example 1990."
          },
          "minBuildingFloors": {
            "title": "Min floors in building",
            "minimum": 1,
            "type": "integer",
            "description": "Only listings in buildings with at least this many floors."
          },
          "maxBuildingFloors": {
            "title": "Max floors in building",
            "minimum": 1,
            "type": "integer",
            "description": "Only listings in buildings with at most this many floors."
          },
          "minKitchenArea": {
            "title": "Min kitchen area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum kitchen area in square metres."
          },
          "minPricePerM2": {
            "title": "Min price per m² (RUB)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per square metre in rubles."
          },
          "maxPricePerM2": {
            "title": "Max price per m² (RUB)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per square metre in rubles."
          },
          "maxMetroWalkMinutes": {
            "title": "Max walk to metro (minutes)",
            "minimum": 1,
            "type": "integer",
            "description": "Only listings within this many minutes on foot of a metro station."
          },
          "wallType": {
            "title": "Wall material",
            "type": "array",
            "description": "Filter by building wall material. Choose any combination; leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "brick",
                "monolith",
                "panel",
                "block"
              ],
              "enumTitles": [
                "Brick",
                "Monolith",
                "Panel",
                "Block"
              ]
            },
            "default": []
          },
          "notFirstFloor": {
            "title": "Exclude first floor",
            "type": "boolean",
            "description": "Skip listings on the first floor.",
            "default": false
          },
          "notLastFloor": {
            "title": "Exclude top floor",
            "type": "boolean",
            "description": "Skip listings on the top floor of the building.",
            "default": false
          },
          "onlyWithPhoto": {
            "title": "Only with photos",
            "type": "boolean",
            "description": "Skip listings that have no photos.",
            "default": false
          },
          "apartments": {
            "title": "Apartments (non-residential units)",
            "enum": [
              "include",
              "only",
              "exclude"
            ],
            "type": "string",
            "description": "The site lists legally non-residential apartment units next to ordinary flats. Include both, show apartments only, or leave them out.",
            "default": "include"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "updated",
              "price_asc",
              "price_desc",
              "price_per_m2_asc",
              "price_per_m2_desc"
            ],
            "type": "string",
            "description": "Result ordering.",
            "default": "relevance"
          },
          "urls": {
            "title": "Domclick URLs",
            "type": "array",
            "description": "Paste Domclick search links (domclick.ru/search?...), including filtered, sorted and paged links (offset=N or page=N start at that page), or listing links (domclick.ru/card/...). Multi-URL supported. Filter fields above are ignored in URL mode. Only applies in URL mode.",
            "default": [
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553",
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553&offset=30",
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553&page=3",
              "https://domclick.ru/search?deal_type=rent&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553&rooms=1&sort=price&sort_dir=asc",
              "https://domclick.ru/search?deal_type=sale&category=commercial&address=1d1463ae-c80f-4d19-9331-a1b68a85b553",
              "https://domclick.ru/search?deal_type=sale&category=garage&address=1d1463ae-c80f-4d19-9331-a1b68a85b553",
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=layout&address=1d1463ae-c80f-4d19-9331-a1b68a85b553",
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553&sale_price__gte=5000000&sale_price__lte=9000000&total_area__gte=40&floor__gte=3",
              "https://domclick.ru/search?deal_type=sale&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553&sort=price&sort_dir=desc",
              "https://domclick.ru/card/sale__flat__2068743510"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch extra details (valuation, nearby places, agent stats)",
            "type": "boolean",
            "description": "Adds a market valuation estimate, nearby points of interest count, and agent deal stats to each listing. This loads each listing's full card page, so it is significantly slower and bills a per-listing surcharge. Best-effort: a listing whose card does not load in time keeps its base fields and is not charged for enrichment.",
            "default": false
          },
          "maxPages": {
            "title": "Max pages per target",
            "minimum": 0,
            "type": "integer",
            "description": "How many result pages (about 30 listings each) to walk per city or URL. Leave empty to walk every result page (the item cap and end-of-catalogue detection still bound the run)."
          },
          "maxListings": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Overall cap across all targets. 0 means unlimited.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Residential with country RU is the default and the connection tested for this site (Starter plan or higher). The site rejects some connections in waves, so the actor retries on a fresh exit; other proxy groups and countries have not been verified.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "RU"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (optional)",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by listing id) are skipped, so this run only saves the new ones. Leave empty for a normal fresh run. See also Incremental mode below."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "For scheduled/recurring runs against the SAME search: remembers what this actor saw last time and only returns NEW, UPDATED, or (if enabled below) EXPIRED listings on later runs, instead of the full result set every time. Off by default so a one-off run behaves exactly as before. See also resumeFromRunId above, which continues one specific interrupted run instead.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Only used when Incremental mode is on. Identifies which saved baseline this run compares against. Leave empty to derive it automatically from your search filters (so two different searches never share a baseline); set it manually to reuse or separate a baseline explicitly."
          },
          "emitUnchanged": {
            "title": "Include unchanged listings (optional)",
            "type": "boolean",
            "description": "Only used when Incremental mode is on. By default, listings with no changes since the last run are skipped and not returned or billed. Turn this on to also return them (marked changeType: UNCHANGED) — this returns and bills every listing every run, not just the changes.",
            "default": false
          },
          "emitExpired": {
            "title": "Include expired listings (optional)",
            "type": "boolean",
            "description": "Only used when Incremental mode is on. Turn this on to also return a row for a previously-seen listing that is no longer found (marked changeType: EXPIRED) — this returns and bills an extra row per removed listing. Only fires after a run that scans every result page with no page/item cap and no resume in effect; otherwise it is safely skipped so a partial run never wrongly marks a listing as gone.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Only used when Incremental mode is on. Field names (for example marketPrice) whose changes should NOT mark a listing as UPDATED. Use dotted paths for nested fields. The fields stay in the output; they just stop triggering updates. Always ignored: scrapedAt (changes on every scrape). The description, photos, subways, sellerRaw and seoRaw fields are never compared.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}