{
  "openapi": "3.0.1",
  "info": {
    "title": "Egypt Real Estate Scraper: PropertyFinder, Aqarmap, Nawy, OLX",
    "description": "Scrape Egyptian property listings from PropertyFinder, Aqarmap, Nawy and Dubizzle (OLX) in one run: normalized EGP/USD prices, price per m², developer payment plans, compound & developer mapping, agent phone/WhatsApp, coordinates and a deal score.",
    "version": "6.0",
    "x-build-id": "Bj0EADYv63wDomvK1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/wonderful_beluga~egypt-real-estate-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-wonderful_beluga-egypt-real-estate-aggregator",
        "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/wonderful_beluga~egypt-real-estate-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-wonderful_beluga-egypt-real-estate-aggregator",
        "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/wonderful_beluga~egypt-real-estate-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-wonderful_beluga-egypt-real-estate-aggregator",
        "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": {
          "targetPortals": {
            "title": "Portals",
            "type": "array",
            "description": "Real estate portals to aggregate. PropertyFinder, Aqarmap and Nawy are fast HTTP scrapes; Dubizzle needs a headless browser and is slower/more expensive per page.",
            "items": {
              "type": "string",
              "enum": [
                "propertyfinder",
                "aqarmap",
                "nawy",
                "dubizzle"
              ],
              "enumTitles": [
                "PropertyFinder Egypt (propertyfinder.eg)",
                "Aqarmap (aqarmap.com.eg)",
                "Nawy — primary market & developer payment plans (nawy.com)",
                "Dubizzle Egypt / OLX (dubizzle.com.eg) — browser"
              ]
            },
            "default": [
              "propertyfinder",
              "aqarmap",
              "nawy",
              "dubizzle"
            ]
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Egyptian regions to search. Each region is mapped to the correct location on every portal. Ignored when a Search keyword is provided.",
            "items": {
              "type": "string",
              "enum": [
                "new-cairo",
                "sheikh-zayed",
                "6th-of-october",
                "new-capital",
                "mostakbal-city",
                "madinaty",
                "north-coast",
                "ain-sokhna",
                "red-sea",
                "alexandria",
                "maadi",
                "heliopolis"
              ],
              "enumTitles": [
                "New Cairo / Fifth Settlement",
                "Sheikh Zayed",
                "6th of October",
                "New Administrative Capital",
                "Mostakbal City",
                "Madinaty",
                "North Coast (Sahel, Ras El Hekma, Alamein)",
                "Ain Sokhna",
                "Red Sea (El Gouna, Hurghada, Sahl Hasheesh)",
                "Alexandria",
                "Maadi",
                "Heliopolis / Nasr City"
              ]
            },
            "default": [
              "new-cairo",
              "sheikh-zayed",
              "6th-of-october",
              "new-capital",
              "north-coast"
            ]
          },
          "searchQuery": {
            "title": "Search keyword (optional)",
            "type": "string",
            "description": "Free-text keyword such as a compound name (\"Mivida\", \"Marassi\", \"Hyde Park\"). When set, it overrides the Regions selection. Aqarmap does not support keyword search and is skipped for keyword runs."
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "sale",
              "rent",
              "both"
            ],
            "type": "string",
            "description": "Properties for sale, for rent, or both.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "all",
              "apartment",
              "villa",
              "townhouse",
              "duplex",
              "chalet",
              "commercial",
              "land"
            ],
            "type": "string",
            "description": "Filter by property category. Applied as a portal-side filter where supported and as a post-filter everywhere.",
            "default": "all"
          },
          "minPrice": {
            "title": "Minimum price (EGP)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings priced at or above this amount in EGP. 0 = no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price (EGP)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings priced at or below this amount in EGP. 0 = no maximum.",
            "default": 0
          },
          "maxResults": {
            "title": "Maximum listings",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many unique listings have been saved to the dataset.",
            "default": 500
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many result pages to follow for each portal x region x listing-type combination (roughly 12-45 listings per page depending on the portal).",
            "default": 5
          },
          "minDealScore": {
            "title": "Minimum deal score (0-100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only keep listings whose heuristic deal score is at least this value. The score compares price per m² with regional benchmarks and rewards flexible payment plans, ready delivery and owner-direct deals. 0 = keep everything.",
            "default": 0
          },
          "egpPerUsd": {
            "title": "EGP per USD exchange rate",
            "minimum": 1,
            "type": "integer",
            "description": "Used to compute the priceUsd field. Update to the current market rate.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. All four portals currently respond fine from the Apify platform without a proxy (recommended default). If you start seeing 403 blocks or run very large crawls, enable Apify Proxy — RESIDENTIAL group gives the best success rate; datacenter IPs are partially blocked by Aqarmap and PropertyFinder.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}