{
  "openapi": "3.0.1",
  "info": {
    "title": "Furas Radar — Saudi Municipal Investment Opportunities (فرص)",
    "description": "Saudi municipal investment and rental opportunities from Furas (فرص), the Ministry of Municipalities and Housing platform. Clean JSON: type, activity, amana, baladya, city, area, booklet price in SAR, sell and envelope-opening dates, contract duration, coordinates and a link to the opportunity page.",
    "version": "0.1",
    "x-build-id": "TeegcKcRhjJOtPy8j"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dottti~furas-opportunities/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dottti-furas-opportunities",
        "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/dottti~furas-opportunities/runs": {
      "post": {
        "operationId": "runs-sync-dottti-furas-opportunities",
        "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/dottti~furas-opportunities/run-sync": {
      "post": {
        "operationId": "run-sync-dottti-furas-opportunities",
        "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": {
          "status": {
            "title": "Status",
            "enum": [
              "open",
              "announced",
              "all"
            ],
            "type": "string",
            "description": "open: announced opportunities whose booklet (RFP) can still be bought, the same filter the Furas map uses by default. announced: every announced opportunity, including ones whose sell date has passed. all: every record in the layer, including cancelled and old ones.",
            "default": "open"
          },
          "amanaIds": {
            "title": "Amanas (municipal authorities)",
            "type": "array",
            "description": "Keep only opportunities from these amanas. Filtered on the server by amana code. Leave empty for all of Saudi Arabia.",
            "items": {
              "type": "string",
              "enum": [
                "002",
                "003",
                "004",
                "005",
                "006",
                "007",
                "008",
                "009",
                "010",
                "011",
                "012",
                "013",
                "014",
                "015",
                "016",
                "017",
                "018"
              ],
              "enumTitles": [
                "002 — أمانة العاصمة المقدسة (Makkah)",
                "003 — أمانة منطقة المدينة المنورة (Madinah)",
                "004 — أمانة منطقة الرياض (Riyadh)",
                "005 — أمانة محافظة جدة (Jeddah)",
                "006 — أمانة المنطقة الشرقية (Eastern Province)",
                "007 — أمانة منطقة عسير (Asir)",
                "008 — أمانة منطقة القصيم (Qassim)",
                "009 — أمانة منطقة جازان (Jazan)",
                "010 — أمانة منطقة الجوف (Al Jouf)",
                "011 — أمانة منطقة تبوك (Tabuk)",
                "012 — أمانة منطقة حائل (Hail)",
                "013 — أمانة منطقة الحدود الشمالية (Northern Borders)",
                "014 — أمانة منطقة الباحة (Al Baha)",
                "015 — أمانة منطقة نجران (Najran)",
                "016 — أمانة محافظة الطائف (Taif)",
                "017 — أمانة محافظة الأحساء (Al Ahsa)",
                "018 — أمانة محافظة حفر الباطن (Hafr Al Batin)"
              ]
            }
          },
          "opportunityTypeIds": {
            "title": "Opportunity types",
            "type": "array",
            "description": "Filtered on the server. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "01",
                "02",
                "05",
                "07"
              ],
              "enumTitles": [
                "01 — الفرص الاستثمارية (Investment)",
                "02 — التأجير المؤقت (Temporary Rental)",
                "05 — الفرص التأهيلية (Qualifying)",
                "07 — التأجير المباشر (Direct Rental)"
              ]
            }
          },
          "cityContains": {
            "title": "City or municipality contains",
            "type": "string",
            "description": "Keep only opportunities whose city, baladya (municipality), district or region contains this text. Arabic spelling variants match (أ/إ/ا, ة/ه, ى/ي). Example: الرياض"
          },
          "activityContains": {
            "title": "Activity contains",
            "type": "string",
            "description": "Keep only opportunities whose activity, sub-activity or location type contains this text. Examples: التجارية, السياحية, العربات المتنقلة, الحدائق"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words matched against the description, activity, location type, municipality, city, district and street, after Arabic normalisation. Examples: مطعم, مقهى, محطة وقود.",
            "items": {
              "type": "string"
            }
          },
          "matchMode": {
            "title": "Keyword match mode",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any: keep an opportunity when at least one keyword matches. all: keep it only when every keyword matches.",
            "default": "any"
          },
          "minArea": {
            "title": "Minimum area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only opportunities with a published site area of at least this many square metres. Records without an area are dropped when this is set."
          },
          "maxArea": {
            "title": "Maximum area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only opportunities with a published site area of at most this many square metres."
          },
          "publishedAfter": {
            "title": "Announced on or after",
            "type": "string",
            "description": "YYYY-MM-DD. Keep only opportunities whose announcement date (STARTDATE) is on or after this date. This is the field the Furas site uses for its 'last week' and 'last month' filters. Records without an announcement date are excluded when this is set."
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "newest",
              "closingSoon"
            ],
            "type": "string",
            "description": "newest: most recently added records first. closingSoon: earliest booklet sell date first.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Maximum opportunities to return",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap on delivered opportunities. You pay per opportunity delivered, so this is also your cost cap.",
            "default": 100
          },
          "includeGeometry": {
            "title": "Include coordinates",
            "type": "boolean",
            "description": "Return latitude and longitude (WGS84) for each opportunity.",
            "default": true
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Pause before every request to the Furas service. Keep it at 1000 or more.",
            "default": 1000
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries with exponential backoff on network errors, HTTP 429 and 5xx.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}