{
  "openapi": "3.0.1",
  "info": {
    "title": "Lennar Scraper - New Homes, Prices, Floor Plans & Communities",
    "description": "Scrape Lennar (lennar.com) new-home communities, move-in-ready homes and floor plans by state or URL. Extract 50+ fields including prices, monthly payments, price drops, beds, baths, square footage, GPS coordinates, amenities and virtual tours.",
    "version": "1.0",
    "x-build-id": "KZQIx5kjUN17ApPga"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~lennar-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-lennar-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~lennar-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-lennar-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~lennar-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-lennar-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": "Search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to choose what to scrape. 'search' iterates the states you pick; 'url' scrapes specific lennar.com/new-homes pages you paste (a state landing page, or a community page for its floor plans).",
            "default": "search"
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "One or more US states to scrape. Each state returns every community and move-in-ready home Lennar lists there. Only applies in 'search' mode.",
            "items": {
              "type": "string",
              "enum": [
                "Alabama",
                "Arizona",
                "Arkansas",
                "California",
                "Colorado",
                "Delaware",
                "Florida",
                "Georgia",
                "Idaho",
                "Illinois",
                "Indiana",
                "Iowa",
                "Kansas",
                "Maryland",
                "Minnesota",
                "Missouri",
                "Nebraska",
                "Nevada",
                "New Jersey",
                "New York",
                "North Carolina",
                "Oklahoma",
                "Oregon",
                "Pennsylvania",
                "South Carolina",
                "Tennessee",
                "Texas",
                "Utah",
                "Virginia",
                "Washington",
                "West Virginia",
                "Wisconsin"
              ]
            },
            "default": [
              "Florida"
            ]
          },
          "markets": {
            "title": "Markets (metro areas, optional)",
            "type": "array",
            "description": "Narrow each selected state to one or more metro areas, by name (for example Miami, Tampa, Pensacola), lennar.com metro slug or market code (MIA). Names are resolved from Lennar's own market list for the selected state; if nothing matches the run stops with an error listing the available markets. Leave empty for the whole state. Search mode only.",
            "items": {
              "type": "string"
            }
          },
          "expandToWholeState": {
            "title": "Expand to whole state",
            "type": "boolean",
            "description": "When on, the markets list is ignored and every community in the selected states is collected. Off (default): only the markets you list. Search mode only.",
            "default": false
          },
          "startUrls": {
            "title": "URLs",
            "type": "array",
            "description": "lennar.com URLs to scrape. Supported: a state page (lennar.com/new-homes/florida, also with trailing slash or http://lennar.com) collects that whole state; a product-type state page (florida-singlefamily) collects the whole state (filter not applied, warning logged); a metro page (florida/miami) collects that metro's communities and homes; a community page (incl. -active-adult) returns its floor plans and community detail; a home/plan page is fetched and extracted if it carries data. Promo/offer pages are skipped with a warning. Only applies in 'url' mode.",
            "default": [
              "https://www.lennar.com/new-homes/texas",
              "https://www.lennar.com/new-homes/arizona-singlefamily",
              "https://www.lennar.com/new-homes/florida/miami",
              "https://www.lennar.com/new-homes/florida/tampa-manatee/land-o-lakes/angeline",
              "https://www.lennar.com/new-homes/florida/tampa-manatee/land-o-lakes/angeline-active-adult",
              "https://www.lennar.com/new-homes/florida/miami/miami/villas-de-san-diego/azure/25118601302",
              "https://www.lennar.com/new-homes/florida/jacksonville-st-augustine/green-cove-springs/russell-retreat/trinidad-ii",
              "https://www.lennar.com/new-homes/florida/jacksonville-st-augustine/promo/jaxlen_bf26"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeCommunities": {
            "title": "Include communities",
            "type": "boolean",
            "description": "Output one record per community / master-planned community with price, bed, bath, sqft ranges, badge, brand, status, and coordinates. Applies in BOTH 'search' and 'url' mode: in url mode it controls the community records from a pasted state page and the community record built from a pasted community page.",
            "default": true
          },
          "includeHomesites": {
            "title": "Include move-in-ready homes",
            "type": "boolean",
            "description": "Output one record per available home with a firm price, full estimated monthly payment breakdown (principal & interest, taxes, insurance, HOA), beds, baths, square footage, plan, and status. Applies in BOTH 'search' and 'url' mode: in url mode it covers the state pages you paste (a single community page lists no move-in-ready homes of its own).",
            "default": true
          },
          "enrichDetails": {
            "title": "Include floor plans (detail crawl)",
            "type": "boolean",
            "description": "Output one record per floor plan offered in each community (plan name, specs, elevation images, virtual tour, walkthrough) plus community amenities, and sales consultants. This fetches one extra page per community, so it is slower and billed separately. Leave off for the fast, cheap community + home overview. Applies in BOTH 'search' and 'url' mode: it turns the extra per-community crawl on for the state pages you paste. A community page pasted directly in url mode always returns its floor plans, whatever this is set to.",
            "default": false
          },
          "maxItems": {
            "title": "Max records",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many records across the whole run. The default (20) keeps a trial run small and cheap; set 0 for no limit (full coverage of every selected state, which can be thousands of records per state).",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Connection settings. This source applies edge filtering that rejects datacenter ranges, so Apify Proxy with the RESIDENTIAL group (the default) is required for reliable results.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "maxResidentialMB": {
            "title": "Residential traffic budget (MB)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on residential traffic. After this many MB, the run stops to avoid extra premium traffic. 0 means no budget cap.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (run ID)",
            "type": "string",
            "description": "Optional. Paste the ID of an earlier run of this actor that stopped early; its records are skipped so this run continues where it ended and nothing is collected twice. Leave empty for a normal run."
          },
          "incrementalMode": {
            "title": "Incremental mode (only new, changed and removed records)",
            "type": "boolean",
            "description": "Remember what earlier runs collected and label every record NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED. UNCHANGED records are not output (and not billed) unless you switch on 'Output unchanged records'. A change is detected by comparing every extracted field except the raw payload and review text, minus the fields you list below. State is kept per search scope, so schedule the same input daily.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Name of the saved baseline. Leave empty to derive it from your search scope (mode, states, markets, links and what-to-collect switches). Set the same key on several differently-shaped runs to share one baseline."
          },
          "emitUnchanged": {
            "title": "Output unchanged records",
            "type": "boolean",
            "description": "Incremental mode only. Also output records that did not change since the last run (labelled UNCHANGED).",
            "default": false
          },
          "emitExpired": {
            "title": "Output removed records (EXPIRED)",
            "type": "boolean",
            "description": "Incremental mode only. When a run completes its whole scope, output a record (labelled EXPIRED) for every tracked record that is no longer listed. Skipped when the run stopped early at the item limit.",
            "default": true
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Top-level field names (for example pageViews) that must not make a record count as UPDATED. They stay in the output.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}