{
  "openapi": "3.0.1",
  "info": {
    "title": "MahaRERA Scraper - Maharashtra RERA Projects, Complaints, Sales",
    "description": "Scrape the official MahaRERA registry: every registered project in Maharashtra with developer, address, GPS, completion dates and delays, complaints, court cases, construction progress, loans and sold apartments with prices. By RERA number, MagicBricks / 99acres URL or registry scan.",
    "version": "0.0",
    "x-build-id": "NYLyNv3nuL9hnFkLW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~maharera-projects-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-maharera-projects-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/nice_dev~maharera-projects-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-maharera-projects-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/nice_dev~maharera-projects-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-maharera-projects-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": {
          "registrationNumbers": {
            "title": "RERA registration numbers",
            "maxItems": 10000,
            "uniqueItems": true,
            "type": "array",
            "description": "MahaRERA project numbers, one per line: `P51800028936` (P + 11 digits, until 2025) or `PR1260002502426` / `PM1170002501242` / `PC1260002602029` (P + a letter + 13 digits, since October 2025). Case and spaces are ignored. When this list or **Start URLs** is not empty, the registry is not scanned: only these projects are read. Max 10 000.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "Pages that name a MahaRERA project: a MagicBricks or 99acres property, project or search page (every RERA number printed on it is read, pagination of a search page is followed), or a MahaRERA project page (`https://maharerait.maharashtra.gov.in/public/project/view/<id>`). Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "query": {
            "title": "Name contains",
            "maxLength": 200,
            "type": "string",
            "description": "Keep only the projects whose project name or developer name contains this text (case and accents ignored), e.g. `Lodha`. The registry has no search box: this filter is applied to every project read."
          },
          "searchQueries": {
            "title": "More names",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several names in one run: a project is kept when it matches any of them. Added to **Name contains**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "District, taluka, village, locality or 6-digit PIN code of the project land, e.g. `Pune`, `Mumbai Suburban`, `Kharadi`, `411014` — whole names (`Wardha` does not find `Wardhaman Nagar`; the road a project is on, like `Pune Mumbai Highway`, does not count unless you type the road). Empty = all of Maharashtra (and Dadra & Nagar Haveli, Daman & Diu, also registered with MahaRERA)."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several locations in one run: a project is kept when it is in any of them (and matches a name above, when names are given). Added to **Location**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max projects",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of projects to save for the whole run (after filters). 0 = no limit (a full registry scan reads about 67 000 project files).",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max projects per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH start URL and for the registry scan, so that the first one cannot use up the whole **Max projects** budget. Names and locations filter the same scan: this cap is shared by all of them. 0 = no per-search cap.",
            "default": 0
          },
          "includeDetails": {
            "title": "Project details",
            "type": "boolean",
            "description": "Land and plan (area, FSI, planning authority, plot numbers), buildings (floors, units), every completion-date extension with its reason, construction progress (% of work done per building and per task), court cases, loans on the project (lender, secured amount), means of finance, project bank, developer company (office address, directors, CREDAI / NAREDCO membership). Off by default.",
            "default": false
          },
          "includeComplaints": {
            "title": "Complaints and appeals",
            "type": "boolean",
            "description": "Every complaint filed against the project at MahaRERA (number, date, type, status, order file and date) and every appeal at the Appellate Tribunal (number, date, status, parties). Off by default.",
            "default": false
          },
          "includeComplainantNames": {
            "title": "Names of complainants",
            "type": "boolean",
            "description": "Add the names of the private persons who filed a complaint or an appeal, and the file names of the orders (named after the parties), as shown by the registry. Off = these are left empty (companies, the developer first, are always named).",
            "default": false
          },
          "includeUnits": {
            "title": "Sold, booked and unsold apartments",
            "type": "boolean",
            "description": "Apartment by apartment, as declared by the developer: building, floor, unit number, carpet area, agreement price and amount received for the sold and booked ones; ready-reckoner value for the unsold ones. Also gives the min / max / average sold price per sq ft. Large projects: several hundred rows. Off by default.",
            "default": false
          },
          "includeAgents": {
            "title": "Registered agents",
            "type": "boolean",
            "description": "Real estate agents registered on the project: name, MahaRERA agent number (A5…), type (individual / company), registration and expiry dates. Off by default.",
            "default": false
          },
          "includeProfessionals": {
            "title": "Architects, engineers, accountants",
            "type": "boolean",
            "description": "Professionals declared on the project: role, name, firm, Council of Architecture / licence / ICAI number. Off by default.",
            "default": false
          },
          "projectStatuses": {
            "title": "Project status",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these statuses. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "New",
                "Ongoing"
              ],
              "enumTitles": [
                "New (started after RERA, 2017)",
                "Ongoing (started before RERA)"
              ]
            },
            "default": []
          },
          "registrationStatuses": {
            "title": "Registration status",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only projects in these registration states. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "active",
                "completed",
                "lapsed",
                "deregistered",
                "abeyance"
              ],
              "enumTitles": [
                "Active (under construction)",
                "Completed",
                "Lapsed (registration expired)",
                "Deregistered (revoked)",
                "In abeyance (suspended)"
              ]
            },
            "default": []
          },
          "propertyTypes": {
            "title": "Project type contains",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only projects whose type contains one of these words, e.g. `Residential`, `Commercial`, `Mixed`, `Plotted`. Empty = all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postedAfter": {
            "title": "Registered after",
            "type": "string",
            "description": "Only projects whose MahaRERA registration date is on or after this date: `2026-01-01`, or a period before now such as `30 days`, `6 months`. Projects not registered yet (no date) are dropped."
          },
          "postedBefore": {
            "title": "Registered before",
            "type": "string",
            "description": "Only projects registered on or before this date (the whole day is included), or longer ago than a period such as `1 year`."
          },
          "latitude": {
            "title": "Around latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "With **Around longitude** and **Radius**: keep only the projects within the radius of this point (decimal degrees, e.g. `18.5204`). Projects without GPS are dropped."
          },
          "longitude": {
            "title": "Around longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Decimal degrees, e.g. `73.8567`."
          },
          "radiusKm": {
            "title": "Radius",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Distance around the point, in km. 0 = no distance filter.",
            "default": 0
          },
          "delayedOnly": {
            "title": "Delayed projects only",
            "type": "boolean",
            "description": "Keep only the projects whose completion date the developer had pushed back (an extension it asked for). The 4-month extension MahaRERA gave to nearly every project in August 2026 (Order 66/2026) does not count as a delay.",
            "default": false
          },
          "withComplaintsOnly": {
            "title": "Projects with complaints only",
            "type": "boolean",
            "description": "Keep only the projects with at least one complaint at MahaRERA. The complaints are read for this check even when **Complaints and appeals** is off (then they are neither returned nor charged).",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the projects whose project name contains one of these words (case and accents ignored).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new projects",
            "type": "boolean",
            "description": "Skip the projects that a previous run (same **Memory key**) already delivered: they are not saved and not charged. First run = everything is new. A registry scan goes down from the newest files, but a file may be registered a year after it was opened: without **Also projects that changed**, set **Registered after** (e.g. `30 days`) so that the scan reads the whole period and misses no new registration.",
            "default": false
          },
          "alsoChanged": {
            "title": "Also projects that changed",
            "type": "boolean",
            "description": "With **Only new projects**: also save a project already delivered when it changed since (new complaint, court case, appeal or extension, completion date revised, registration or certificate status, units sold, % of work done, agents). The result lists what changed, before and after.",
            "default": true
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new projects**. Give each schedule / task its own key (e.g. `pune-delayed`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every project again. Untick it afterwards.",
            "default": false
          },
          "projectIdFrom": {
            "title": "Scan from registry id",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Registry scan only (no numbers and no start URLs given): lowest internal project id to read. Empty = 1."
          },
          "projectIdTo": {
            "title": "Scan up to registry id",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Registry scan only: highest internal project id to read. Empty = up to the newest project (found at each run). The scan goes from the newest to the oldest."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Keep the default (no proxy): the MahaRERA registry is public and answers fastest directly. MagicBricks / 99acres pages always go through our own residential proxy, charged as an option. Your own proxies (custom URLs) are used for every request instead. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel. The registry slows down above 8-16.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests in any 60 seconds, all of them counted (one project with every option = about 25 requests). A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the log shows HTTP 429 / 403.",
            "default": 600
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}