{
  "data": {
    "id": "9uN11LrG2PVZf7Dux",
    "actId": "mFIgbcgtT2iThpFWD",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-12T09:17:31.402Z",
    "finishedAt": "2026-11-12T09:17:34.835Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3328,
      "runTimeSecs": 3.328,
      "computeUnits": 0.0036977777777777777,
      "imageSizeBytes": 319186432
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Century 21 Real Estate Scraper Input\",\n  \"description\": \"Search homes for sale or rent on Century21.com by city/county/neighborhood/ZIP, look up a specific property by address, or fetch full details by listing ID.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch. `search` resolves a place and pages its listings; `byUrl` reads pasted Century 21 search or listing URLs; `byAddress` requires an exact street-address match; `byListingId` accepts IDs or listing URLs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byUrl\",\n        \"byAddress\",\n        \"byListingId\"\n      ],\n      \"enumTitles\": [\n        \"Search by location (city, county, neighborhood, ZIP, state)\",\n        \"Search or fetch from Century 21 URLs\",\n        \"Lookup by exact street address\",\n        \"Lookup by listing ID or listing URL\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"startUrls\": {\n      \"title\": \"Century 21 URLs (mode=byUrl)\",\n      \"type\": \"array\",\n      \"description\": \"Paste Century 21 search URLs (e.g. https://www.century21.com/homes/list/city/tx/austin) or listing URLs. Search URLs honour their type/state/area path and query filters; listing URLs fetch full details.\",\n      \"editor\": \"requestListSources\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"title\": \"URL\",\n            \"description\": \"Century 21 search or listing URL\"\n          }\n        },\n        \"required\": [\n          \"url\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"location\": {\n      \"title\": \"Location (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"City, county, neighborhood or ZIP code, e.g. `Austin, TX`, `Miami-Dade County, FL`, `78617`.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"Austin, TX\"\n    },\n    \"addresses\": {\n      \"title\": \"Street addresses (mode=byAddress)\",\n      \"type\": \"array\",\n      \"description\": \"Full street addresses to look up, e.g. `13521 Sea Biscuit Dr, Del Valle, TX`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"listingIds\": {\n      \"title\": \"Listing IDs (mode=byListingId)\",\n      \"type\": \"array\",\n      \"description\": \"Century 21 internal listing IDs (from a previous run's `listingId` field), e.g. `P00800000HF6cD2iLtM7DTj91VD8KUzhnfCsy0Wx`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"listingType\": {\n      \"title\": \"Listing type (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Search for-sale or for-rent listings. Rentals use Century 21's rental index.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"forSale\",\n        \"forRent\"\n      ],\n      \"enumTitles\": [\n        \"For sale\",\n        \"For rent\"\n      ],\n      \"prefill\": \"forSale\"\n    },\n    \"propertyTypes\": {\n      \"title\": \"Property types (mode=search, For sale only)\",\n      \"type\": \"array\",\n      \"description\": \"Restrict to these property types. Leave empty for all types.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"SFR\",\n          \"MFR\",\n          \"COOP\",\n          \"MFD\",\n          \"LAND\",\n          \"CONDO\",\n          \"TOWNHOUSE\",\n          \"FARM\"\n        ],\n        \"enumTitles\": [\n          \"Single family\",\n          \"Multi-family\",\n          \"Co-op\",\n          \"Mobile / Manufactured\",\n          \"Lots / Land\",\n          \"Condominium\",\n          \"Townhouse\",\n          \"Farm\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"statuses\": {\n      \"title\": \"Listing statuses (mode=search, For sale only)\",\n      \"type\": \"array\",\n      \"description\": \"Restrict to these listing statuses. Leave empty for Active + Pending + Coming soon. Sold, Expired and Inactive are also available from Century 21's public index. Applied to rentals too when set.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"ACTIVE\",\n          \"PENDING\",\n          \"COMING_SOON\",\n          \"EXPIRED\",\n          \"INACTIVE\",\n          \"WITHDRAWN\",\n          \"SOLD\",\n          \"RENTED\",\n          \"CANCELED\"\n        ],\n        \"enumTitles\": [\n          \"Active\",\n          \"Pending / Under contract\",\n          \"Coming soon\",\n          \"Expired\",\n          \"Inactive\",\n          \"Withdrawn\",\n          \"Sold\",\n          \"Rented\",\n          \"Canceled\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"hasOpenHouses\": {\n      \"title\": \"Has open house (mode=search)\",\n      \"type\": \"boolean\",\n      \"description\": \"Only listings with an upcoming open house.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"isNewConstruction\": {\n      \"title\": \"New construction only (mode=search)\",\n      \"type\": \"boolean\",\n      \"description\": \"Only new-construction listings.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"isVirtualTourAvailable\": {\n      \"title\": \"Has virtual tour (mode=search)\",\n      \"type\": \"boolean\",\n      \"description\": \"Only listings with a virtual tour.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"luxuryOnly\": {\n      \"title\": \"Luxury listings only (mode=search)\",\n      \"type\": \"boolean\",\n      \"description\": \"Only Century 21 Fine Homes & Estates luxury listings.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minPrice\": {\n      \"title\": \"Min price (USD)\",\n      \"type\": \"integer\",\n      \"description\": \"Only listings priced at or above this amount.\",\n      \"minimum\": 0,\n      \"maximum\": 500000000\n    },\n    \"maxPrice\": {\n      \"title\": \"Max price (USD)\",\n      \"type\": \"integer\",\n      \"description\": \"Only listings priced at or below this amount.\",\n      \"minimum\": 0,\n      \"maximum\": 500000000\n    },\n    \"daysOnMarket\": {\n      \"title\": \"Listed within (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Only listings added to the market within this many days.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1\",\n        \"7\",\n        \"14\",\n        \"30\",\n        \"60\",\n        \"90\"\n      ],\n      \"enumTitles\": [\n        \"1 day\",\n        \"1 week\",\n        \"2 weeks\",\n        \"1 month\",\n        \"2 months\",\n        \"3+ months\"\n      ]\n    },\n    \"minBedrooms\": {\n      \"title\": \"Min bedrooms\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with at least this many bedrooms (0 = studio).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"0\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\"\n      ],\n      \"enumTitles\": [\n        \"Studio\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5+\"\n      ]\n    },\n    \"maxBedrooms\": {\n      \"title\": \"Max bedrooms\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with at most this many bedrooms.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"0\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\"\n      ],\n      \"enumTitles\": [\n        \"Studio\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5+\"\n      ]\n    },\n    \"minBathrooms\": {\n      \"title\": \"Min bathrooms\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with at least this many bathrooms.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\"\n      ],\n      \"enumTitles\": [\n        \"1+\",\n        \"2+\",\n        \"3+\",\n        \"4+\",\n        \"5+\"\n      ]\n    },\n    \"minSqft\": {\n      \"title\": \"Min living area (sq ft)\",\n      \"type\": \"string\",\n      \"description\": \"Only listings at or above this living area.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"200\",\n        \"500\",\n        \"750\",\n        \"1000\",\n        \"1250\",\n        \"1500\",\n        \"1750\",\n        \"3000\",\n        \"3250\",\n        \"3500\",\n        \"4000\",\n        \"5000\",\n        \"6000\",\n        \"7000\",\n        \"8000\",\n        \"9000\",\n        \"10000\"\n      ],\n      \"enumTitles\": [\n        \"200\",\n        \"500\",\n        \"750\",\n        \"1,000\",\n        \"1,250\",\n        \"1,500\",\n        \"1,750\",\n        \"3,000\",\n        \"3,250\",\n        \"3,500\",\n        \"4,000\",\n        \"5,000\",\n        \"6,000\",\n        \"7,000\",\n        \"8,000\",\n        \"9,000\",\n        \"10,000\"\n      ]\n    },\n    \"maxSqft\": {\n      \"title\": \"Max living area (sq ft)\",\n      \"type\": \"string\",\n      \"description\": \"Only listings at or below this living area.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"200\",\n        \"500\",\n        \"750\",\n        \"1000\",\n        \"1250\",\n        \"1500\",\n        \"1750\",\n        \"3000\",\n        \"3250\",\n        \"3500\",\n        \"4000\",\n        \"5000\",\n        \"6000\",\n        \"7000\",\n        \"8000\",\n        \"9000\",\n        \"10000\"\n      ],\n      \"enumTitles\": [\n        \"200\",\n        \"500\",\n        \"750\",\n        \"1,000\",\n        \"1,250\",\n        \"1,500\",\n        \"1,750\",\n        \"3,000\",\n        \"3,250\",\n        \"3,500\",\n        \"4,000\",\n        \"5,000\",\n        \"6,000\",\n        \"7,000\",\n        \"8,000\",\n        \"9,000\",\n        \"10,000\"\n      ]\n    },\n    \"minAcreage\": {\n      \"title\": \"Min lot size (acres)\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with a lot size at or above this many acres.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"0.0229568\",\n        \"0.04591368\",\n        \"0.06887052\",\n        \"0.09182736\",\n        \"0.1147842\",\n        \"0.1492195\",\n        \"0.1836547\",\n        \"0.21809\",\n        \"0.25\",\n        \"0.5\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\",\n        \"10\",\n        \"20\",\n        \"50\",\n        \"100\"\n      ],\n      \"enumTitles\": [\n        \"1,000 sqft\",\n        \"2,000 sqft\",\n        \"3,000 sqft\",\n        \"4,000 sqft\",\n        \"5,000 sqft\",\n        \"6,500 sqft\",\n        \"8,000 sqft\",\n        \"9,500 sqft\",\n        \"0.25 acres\",\n        \"0.5 acres\",\n        \"1 acre\",\n        \"2 acres\",\n        \"3 acres\",\n        \"4 acres\",\n        \"5 acres\",\n        \"10 acres\",\n        \"20 acres\",\n        \"50 acres\",\n        \"100 acres\"\n      ]\n    },\n    \"maxAcreage\": {\n      \"title\": \"Max lot size (acres)\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with a lot size at or below this many acres.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"0.0229568\",\n        \"0.04591368\",\n        \"0.06887052\",\n        \"0.09182736\",\n        \"0.1147842\",\n        \"0.1492195\",\n        \"0.1836547\",\n        \"0.21809\",\n        \"0.25\",\n        \"0.5\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\",\n        \"10\",\n        \"20\",\n        \"50\",\n        \"100\"\n      ],\n      \"enumTitles\": [\n        \"1,000 sqft\",\n        \"2,000 sqft\",\n        \"3,000 sqft\",\n        \"4,000 sqft\",\n        \"5,000 sqft\",\n        \"6,500 sqft\",\n        \"8,000 sqft\",\n        \"9,500 sqft\",\n        \"0.25 acres\",\n        \"0.5 acres\",\n        \"1 acre\",\n        \"2 acres\",\n        \"3 acres\",\n        \"4 acres\",\n        \"5 acres\",\n        \"10 acres\",\n        \"20 acres\",\n        \"50 acres\",\n        \"100 acres\"\n      ]\n    },\n    \"minYearBuilt\": {\n      \"title\": \"Min year built\",\n      \"type\": \"string\",\n      \"description\": \"Only listings built in or after this year.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1960\",\n        \"1970\",\n        \"1980\",\n        \"1985\",\n        \"1990\",\n        \"1995\",\n        \"2000\",\n        \"2005\",\n        \"2010\",\n        \"2015\",\n        \"2020\",\n        \"2021\",\n        \"2022\",\n        \"2023\",\n        \"2024\",\n        \"2025\",\n        \"2026\"\n      ],\n      \"enumTitles\": [\n        \"1960\",\n        \"1970\",\n        \"1980\",\n        \"1985\",\n        \"1990\",\n        \"1995\",\n        \"2000\",\n        \"2005\",\n        \"2010\",\n        \"2015\",\n        \"2020\",\n        \"2021\",\n        \"2022\",\n        \"2023\",\n        \"2024\",\n        \"2025\",\n        \"2026\"\n      ]\n    },\n    \"maxYearBuilt\": {\n      \"title\": \"Max year built\",\n      \"type\": \"string\",\n      \"description\": \"Only listings built in or before this year.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1960\",\n        \"1970\",\n        \"1980\",\n        \"1985\",\n        \"1990\",\n        \"1995\",\n        \"2000\",\n        \"2005\",\n        \"2010\",\n        \"2015\",\n        \"2020\",\n        \"2021\",\n        \"2022\",\n        \"2023\",\n        \"2024\",\n        \"2025\",\n        \"2026\"\n      ],\n      \"enumTitles\": [\n        \"1960\",\n        \"1970\",\n        \"1980\",\n        \"1985\",\n        \"1990\",\n        \"1995\",\n        \"2000\",\n        \"2005\",\n        \"2010\",\n        \"2015\",\n        \"2020\",\n        \"2021\",\n        \"2022\",\n        \"2023\",\n        \"2024\",\n        \"2025\",\n        \"2026\"\n      ]\n    },\n    \"sortBy\": {\n      \"title\": \"Sort order (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Order in which listings are returned/paginated.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"newest\",\n        \"priceHighToLow\",\n        \"priceLowToHigh\"\n      ],\n      \"enumTitles\": [\n        \"Newest\",\n        \"Price: high to low\",\n        \"Price: low to high\"\n      ],\n      \"prefill\": \"newest\"\n    },\n    \"includeFullDetails\": {\n      \"title\": \"Include full listing details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the full property detail (description, taxes, HOA, schools, appliances, all photos) for every search result. Slower — makes one extra request per listing.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 30,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ],\n  \"additionalProperties\": true\n}",
    "readme": "# Century 21 Listings & Property Detail Finder\n\nFind homes on **Century21.com** by city, county, neighborhood, ZIP, state, or a pasted URL. The actor reads Century 21's own public listing API from a plain HTTP request — no login, cookie, proxy, or API key from you — and returns clean records for **for-sale, for-rent, pending, coming-soon, sold, expired, inactive, withdrawn, rented, and canceled** listings.\n\nIt covers the full listing lifecycle rather than only active inventory: price, beds/baths, living area, lot size, year built, photos, open houses, virtual tours, MLS number, listing office, agent contact details (when the MLS publishes them), taxes, HOA dues, schools, and optional room-by-room property details.\n\n## What this actor does\n\n- **Four modes:** `search` by place, `byUrl` from pasted Century 21 search/listing URLs, `byAddress` with exact-address matching, `byListingId` from an ID or listing URL\n- **Every public status:** active, pending, coming soon, sold, expired, inactive, withdrawn, rented, canceled\n- **For sale or for rent** with the site's own rental index\n- **Filters:** property type, status, price, min/max bedrooms, min bathrooms, days on market, sqft, lot size, year built, open houses, new construction, virtual tours, luxury, and sort order\n- **Pagination:** up to 300 listings per request, paged until your `maxItems` or the source runs out; results are deduplicated across pages\n- **Full detail enrichment:** description, taxes, HOA, schools, room descriptions, appliances, utilities, every photo, open-house windows, and agent email/phone/profile when available\n- **Omit-empty output:** a field appears only when Century 21 actually returned a real value\n\n## Output per listing\n\n**Identity and status**\n- `listingId`, `mlsNumber`, `listingUrl`, `mlsShortName`, `listingType` (For Sale / For Rent), `listingStatus`, `statusLabels[]`, `isLuxuryListing`, `isInBrand`, `daysOnMarket`, `lastUpdated`\n\n**Price and size**\n- `price`, `pricePerSquareFoot` *(details)*, `bedrooms`, `bathrooms`, `fullBathrooms`, `halfBathrooms`, `partialBathrooms`, `roomsTotal` *(details)*, `livingAreaSqFt`, `buildingAreaSqFt` *(details)*, `livingAreaUnits`, `lotSize`, `lotSizeUnits`, `yearBuilt` *(details)*\n\n**Location**\n- `address`, `city`, `state`, `stateCode`, `postalCode`, `neighborhood`, `subdivision`, `latitude`, `longitude`, `placeName`, `placeType`, `elementarySchool`, `middleSchool`, `highSchool`\n\n**Media and events**\n- `photoUrl`, `photoUrls[]`, `photosCount`, `virtualTourUrl`, `openHouses[]` (`startTime`, `endTime`)\n\n**People and office**\n- `listingOfficeName`, `listingOfficeAttribution`, `agentName`, `agentEmail`, `agentPhone`, `agentProfileUrl`, `agentId`, `agentLicense`, `agentRating`, `agentOfficeName`, `officePhone`\n\n**Property facts** *(details where marked)*\n- `description`, `taxAnnualAmount`, `taxYear`, `hoaDuesMonthly`, `numberOfUnitsInCommunity`, `heating`, `cooling`, `hasCentralAir`, `roof`, `flooring`, `foundationDetails`, `constructionMaterials`, `exteriorFeatures`, `levels`, `architectureStyle`, `basement`, `hasBasement`, `diningDescription`, `bathroomDescription`, `kitchenDescription`, `bedroomDescription`, `parkingTotal`, `garageSpaces`, `carportSpaces`, `otherParkingSpaces`, `hasGarage`, `appliances`, `amenities`, `lotFeatures`, `poolFeatures`, `laundryFeatures`, `isSmartHome`, `sewer`, `water`, `sourceUrl`\n\nEvery record also carries `recordType: \"listing\"` and `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` / `byUrl` / `byAddress` / `byListingId` |\n| `startUrls` | array | `[]` | Century 21 search or listing URLs (mode=byUrl); query filters in the URL are honoured |\n| `location` | string | – | City, county, neighborhood, ZIP, or state (mode=search); defaults to `Austin, TX` when omitted |\n| `addresses` | array | `[]` | Exact street addresses (mode=byAddress); nearby non-matches are rejected |\n| `listingIds` | array | `[]` | Listing IDs or listing URLs (mode=byListingId) |\n| `listingType` | string | – | `forSale` / `forRent`; falls back to `forSale` in code |\n| `propertyTypes` | array | `[]` | Single family, Multi-family, Co-op, Mobile/Manufactured, Lots/Land, Condominium, Townhouse, Farm; empty = all |\n| `statuses` | array | `[]` | Active, Pending, Coming soon, Expired, Inactive, Withdrawn, Sold, Rented, Canceled; empty = Active + Pending + Coming soon |\n| `hasOpenHouses` | bool | `false` | Only listings with an upcoming open house |\n| `isNewConstruction` | bool | `false` | Only new-construction listings |\n| `isVirtualTourAvailable` | bool | `false` | Only listings with a virtual tour |\n| `luxuryOnly` | bool | `false` | Only Century 21 Fine Homes & Estates luxury listings |\n| `minPrice` / `maxPrice` | integer | – | Price range in USD |\n| `daysOnMarket` | string | – | Listed within 1, 7, 14, 30, 60, or 90 days |\n| `minBedrooms` / `maxBedrooms` | string | – | Studio–5+ bedrooms |\n| `minBathrooms` | string | – | 1+–5+ bathrooms |\n| `minSqft` / `maxSqft` | string | – | Living-area range |\n| `minAcreage` / `maxAcreage` | string | – | Lot-size range |\n| `minYearBuilt` / `maxYearBuilt` | string | – | Year-built range |\n| `sortBy` | string | – | `newest` / `priceHighToLow` / `priceLowToHigh`; falls back to `newest` in code |\n| `includeFullDetails` | bool | `false` | Fetch full detail for every search result (one extra request per listing; search results already include the core fields) |\n| `maxItems` | integer | `30` | Hard cap (1–5000) |\n\n> Fields without a schema default show an example in the Console start form only. The actor falls back to the documented behaviour in code, so programmatic runs do not need to send every field.\n\n### Example: sold homes in Austin\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"Austin, TX\",\n  \"statuses\": [\"SOLD\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: open houses this weekend, under $600k\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"78704\",\n  \"hasOpenHouses\": true,\n  \"maxPrice\": 600000,\n  \"maxItems\": 50\n}\n```\n\n### Example: rentals with full details\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"Miami, FL\",\n  \"listingType\": \"forRent\",\n  \"includeFullDetails\": true,\n  \"maxItems\": 20\n}\n```\n\n### Example: paste a search URL and a listing URL\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    {\"url\": \"https://www.century21.com/homes/list/city/tx/austin?minPrice=500000&maxPrice=900000\"},\n    {\"url\": \"https://www.century21.com/homes/detail/tx/austin/803-herndon-ln/lid-P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\"}\n  ],\n  \"maxItems\": 50\n}\n```\n\n### Example: exact address lookup\n\n```json\n{\n  \"mode\": \"byAddress\",\n  \"addresses\": [\"803 Herndon Ln, Austin, TX 78704\"]\n}\n```\n\n### Example: listing ID or listing URL\n\n```json\n{\n  \"mode\": \"byListingId\",\n  \"listingIds\": [\n    \"P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\",\n    \"https://www.century21.com/homes/detail/tx/austin/803-herndon-ln/lid-P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\"\n  ]\n}\n```\n\n## Use cases\n\n- **Sold comparable research** — pull sold listings by ZIP or neighborhood and compare last list prices, size, and year built\n- **Open-house routing** — find every upcoming open house in a target area and hand the schedule to buyers or agents\n- **Agent lead lists** — export listing agent names, phones, emails, and brokerage offices with the property context attached\n- **Rental market monitoring** — compare rents, deposits, and unit sizes across neighborhoods\n- **Inventory and price tracking** — re-run the same search daily and diff price, status, and new listings\n- **Property underwriting** — filter by lot size, year built, and square footage, then enrich the shortlist with taxes, HOA, and room details\n\n## FAQ\n\n**Does this need a proxy, login, or API key?** No. Century21.com's own listing API is public and works from a plain HTTP request. The actor uses no proxy and never asks for cookies or credentials.\n\n**Can it scrape sold or off-market homes?** Yes. Century 21's public index exposes sold, expired, inactive, withdrawn, rented, and canceled statuses alongside active inventory. Select the statuses you want. A property that is not in the public index at all cannot be returned.\n\n**How are open houses returned?** When Century 21 publishes open-house windows, each record includes an `openHouses[]` array with ISO `startTime` and `endTime`. The `hasOpenHouses` filter limits results to listings with an upcoming open house.\n\n**What happens if I paste an address Century 21 does not list?** The actor rejects it instead of returning a nearby look-alike. Century 21's address suggestions include nearby properties even when the exact house number is missing; this actor requires the house number and street name to match, so a no-match run is empty rather than wrong data.\n\n**Can I paste a Century 21 URL?** Yes. Search URLs (`/homes/list/...`) honour their city/county/ZIP/state/neighborhood path and any filters in the query string. Listing URLs (`.../lid-...`) fetch the full detail record. Both can be mixed in one run.\n\n**How do I find a listing ID?** Every record from any mode includes `listingId`. You can also paste the listing's full URL.\n\n**Why does a search result have fewer fields than a detail lookup?** Century 21's search endpoint returns a lighter record. Set `includeFullDetails: true` to fetch the full detail (description, taxes, schools, room details, all photos) for every search result; this adds one request per listing. `byAddress`, `byListingId`, and listing URLs always return full details.\n\n**Why is an agent phone or email missing?** Contact details are published only when the listing's MLS supplies them. Most listings include an agent name and office; email and phone are less common and are omitted rather than fabricated.\n\n**Are sold prices the final sale price?** Century 21's public sold records show the MLS list/close price it publishes for the listing. It is not an independent deed or county-recorder sale price.\n\n**What area does this cover?** Century21.com's US market. Coverage depends on the MLS/IDX feed for each area; Century 21's country-specific sites (Canada, Portugal, Spain, France, etc.) use different systems and are not part of this actor.\n\n**How fresh is the data?** Records are pulled live from Century 21's current public feed on every run. There is no cache.\n\n## Limitations\n\n- US Century21.com only; other Century 21 country domains are not supported.\n- A listing must be present in Century 21's public index. Private/off-market listings are not reachable.\n- Status availability varies by MLS; some feeds omit expired, inactive, or sold records entirely.\n- Detail fields such as taxes, HOA, schools, room descriptions, agent email, and phone are conditional on what the listing MLS publishes. They are omitted when absent.\n- `byAddress` is intentionally strict: it requires an exact house-number and street match, so spelling variants that the suggestion service cannot normalise will return zero records.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "century-21-listings-and-property-detail-finder",
      "title": "Century 21 Listings & Property Detail Finder",
      "description": "Find Century 21 homes for sale or rent by city, county, neighborhood, ZIP, state, or URL — including sold/expired statuses — with price and size filters, open houses, agent contact, and full property details.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Century 21 Listings & Property Detail Finder\n\nFind homes on **Century21.com** by city, county, neighborhood, ZIP, state, or a pasted URL. The actor reads Century 21's own public listing API from a plain HTTP request — no login, cookie, proxy, or API key from you — and returns clean records for **for-sale, for-rent, pending, coming-soon, sold, expired, inactive, withdrawn, rented, and canceled** listings.\n\nIt covers the full listing lifecycle rather than only active inventory: price, beds/baths, living area, lot size, year built, photos, open houses, virtual tours, MLS number, listing office, agent contact details (when the MLS publishes them), taxes, HOA dues, schools, and optional room-by-room property details.\n\n## What this actor does\n\n- **Four modes:** `search` by place, `byUrl` from pasted Century 21 search/listing URLs, `byAddress` with exact-address matching, `byListingId` from an ID or listing URL\n- **Every public status:** active, pending, coming soon, sold, expired, inactive, withdrawn, rented, canceled\n- **For sale or for rent** with the site's own rental index\n- **Filters:** property type, status, price, min/max bedrooms, min bathrooms, days on market, sqft, lot size, year built, open houses, new construction, virtual tours, luxury, and sort order\n- **Pagination:** up to 300 listings per request, paged until your `maxItems` or the source runs out; results are deduplicated across pages\n- **Full detail enrichment:** description, taxes, HOA, schools, room descriptions, appliances, utilities, every photo, open-house windows, and agent email/phone/profile when available\n- **Omit-empty output:** a field appears only when Century 21 actually returned a real value\n\n## Output per listing\n\n**Identity and status**\n- `listingId`, `mlsNumber`, `listingUrl`, `mlsShortName`, `listingType` (For Sale / For Rent), `listingStatus`, `statusLabels[]`, `isLuxuryListing`, `isInBrand`, `daysOnMarket`, `lastUpdated`\n\n**Price and size**\n- `price`, `pricePerSquareFoot` *(details)*, `bedrooms`, `bathrooms`, `fullBathrooms`, `halfBathrooms`, `partialBathrooms`, `roomsTotal` *(details)*, `livingAreaSqFt`, `buildingAreaSqFt` *(details)*, `livingAreaUnits`, `lotSize`, `lotSizeUnits`, `yearBuilt` *(details)*\n\n**Location**\n- `address`, `city`, `state`, `stateCode`, `postalCode`, `neighborhood`, `subdivision`, `latitude`, `longitude`, `placeName`, `placeType`, `elementarySchool`, `middleSchool`, `highSchool`\n\n**Media and events**\n- `photoUrl`, `photoUrls[]`, `photosCount`, `virtualTourUrl`, `openHouses[]` (`startTime`, `endTime`)\n\n**People and office**\n- `listingOfficeName`, `listingOfficeAttribution`, `agentName`, `agentEmail`, `agentPhone`, `agentProfileUrl`, `agentId`, `agentLicense`, `agentRating`, `agentOfficeName`, `officePhone`\n\n**Property facts** *(details where marked)*\n- `description`, `taxAnnualAmount`, `taxYear`, `hoaDuesMonthly`, `numberOfUnitsInCommunity`, `heating`, `cooling`, `hasCentralAir`, `roof`, `flooring`, `foundationDetails`, `constructionMaterials`, `exteriorFeatures`, `levels`, `architectureStyle`, `basement`, `hasBasement`, `diningDescription`, `bathroomDescription`, `kitchenDescription`, `bedroomDescription`, `parkingTotal`, `garageSpaces`, `carportSpaces`, `otherParkingSpaces`, `hasGarage`, `appliances`, `amenities`, `lotFeatures`, `poolFeatures`, `laundryFeatures`, `isSmartHome`, `sewer`, `water`, `sourceUrl`\n\nEvery record also carries `recordType: \"listing\"` and `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` / `byUrl` / `byAddress` / `byListingId` |\n| `startUrls` | array | `[]` | Century 21 search or listing URLs (mode=byUrl); query filters in the URL are honoured |\n| `location` | string | – | City, county, neighborhood, ZIP, or state (mode=search); defaults to `Austin, TX` when omitted |\n| `addresses` | array | `[]` | Exact street addresses (mode=byAddress); nearby non-matches are rejected |\n| `listingIds` | array | `[]` | Listing IDs or listing URLs (mode=byListingId) |\n| `listingType` | string | – | `forSale` / `forRent`; falls back to `forSale` in code |\n| `propertyTypes` | array | `[]` | Single family, Multi-family, Co-op, Mobile/Manufactured, Lots/Land, Condominium, Townhouse, Farm; empty = all |\n| `statuses` | array | `[]` | Active, Pending, Coming soon, Expired, Inactive, Withdrawn, Sold, Rented, Canceled; empty = Active + Pending + Coming soon |\n| `hasOpenHouses` | bool | `false` | Only listings with an upcoming open house |\n| `isNewConstruction` | bool | `false` | Only new-construction listings |\n| `isVirtualTourAvailable` | bool | `false` | Only listings with a virtual tour |\n| `luxuryOnly` | bool | `false` | Only Century 21 Fine Homes & Estates luxury listings |\n| `minPrice` / `maxPrice` | integer | – | Price range in USD |\n| `daysOnMarket` | string | – | Listed within 1, 7, 14, 30, 60, or 90 days |\n| `minBedrooms` / `maxBedrooms` | string | – | Studio–5+ bedrooms |\n| `minBathrooms` | string | – | 1+–5+ bathrooms |\n| `minSqft` / `maxSqft` | string | – | Living-area range |\n| `minAcreage` / `maxAcreage` | string | – | Lot-size range |\n| `minYearBuilt` / `maxYearBuilt` | string | – | Year-built range |\n| `sortBy` | string | – | `newest` / `priceHighToLow` / `priceLowToHigh`; falls back to `newest` in code |\n| `includeFullDetails` | bool | `false` | Fetch full detail for every search result (one extra request per listing; search results already include the core fields) |\n| `maxItems` | integer | `30` | Hard cap (1–5000) |\n\n> Fields without a schema default show an example in the Console start form only. The actor falls back to the documented behaviour in code, so programmatic runs do not need to send every field.\n\n### Example: sold homes in Austin\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"Austin, TX\",\n  \"statuses\": [\"SOLD\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: open houses this weekend, under $600k\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"78704\",\n  \"hasOpenHouses\": true,\n  \"maxPrice\": 600000,\n  \"maxItems\": 50\n}\n```\n\n### Example: rentals with full details\n\n```json\n{\n  \"mode\": \"search\",\n  \"location\": \"Miami, FL\",\n  \"listingType\": \"forRent\",\n  \"includeFullDetails\": true,\n  \"maxItems\": 20\n}\n```\n\n### Example: paste a search URL and a listing URL\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    {\"url\": \"https://www.century21.com/homes/list/city/tx/austin?minPrice=500000&maxPrice=900000\"},\n    {\"url\": \"https://www.century21.com/homes/detail/tx/austin/803-herndon-ln/lid-P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\"}\n  ],\n  \"maxItems\": 50\n}\n```\n\n### Example: exact address lookup\n\n```json\n{\n  \"mode\": \"byAddress\",\n  \"addresses\": [\"803 Herndon Ln, Austin, TX 78704\"]\n}\n```\n\n### Example: listing ID or listing URL\n\n```json\n{\n  \"mode\": \"byListingId\",\n  \"listingIds\": [\n    \"P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\",\n    \"https://www.century21.com/homes/detail/tx/austin/803-herndon-ln/lid-P00800000HKJanssLAMoatfjovxY7QBWpsuLltxP\"\n  ]\n}\n```\n\n## Use cases\n\n- **Sold comparable research** — pull sold listings by ZIP or neighborhood and compare last list prices, size, and year built\n- **Open-house routing** — find every upcoming open house in a target area and hand the schedule to buyers or agents\n- **Agent lead lists** — export listing agent names, phones, emails, and brokerage offices with the property context attached\n- **Rental market monitoring** — compare rents, deposits, and unit sizes across neighborhoods\n- **Inventory and price tracking** — re-run the same search daily and diff price, status, and new listings\n- **Property underwriting** — filter by lot size, year built, and square footage, then enrich the shortlist with taxes, HOA, and room details\n\n## FAQ\n\n**Does this need a proxy, login, or API key?** No. Century21.com's own listing API is public and works from a plain HTTP request. The actor uses no proxy and never asks for cookies or credentials.\n\n**Can it scrape sold or off-market homes?** Yes. Century 21's public index exposes sold, expired, inactive, withdrawn, rented, and canceled statuses alongside active inventory. Select the statuses you want. A property that is not in the public index at all cannot be returned.\n\n**How are open houses returned?** When Century 21 publishes open-house windows, each record includes an `openHouses[]` array with ISO `startTime` and `endTime`. The `hasOpenHouses` filter limits results to listings with an upcoming open house.\n\n**What happens if I paste an address Century 21 does not list?** The actor rejects it instead of returning a nearby look-alike. Century 21's address suggestions include nearby properties even when the exact house number is missing; this actor requires the house number and street name to match, so a no-match run is empty rather than wrong data.\n\n**Can I paste a Century 21 URL?** Yes. Search URLs (`/homes/list/...`) honour their city/county/ZIP/state/neighborhood path and any filters in the query string. Listing URLs (`.../lid-...`) fetch the full detail record. Both can be mixed in one run.\n\n**How do I find a listing ID?** Every record from any mode includes `listingId`. You can also paste the listing's full URL.\n\n**Why does a search result have fewer fields than a detail lookup?** Century 21's search endpoint returns a lighter record. Set `includeFullDetails: true` to fetch the full detail (description, taxes, schools, room details, all photos) for every search result; this adds one request per listing. `byAddress`, `byListingId`, and listing URLs always return full details.\n\n**Why is an agent phone or email missing?** Contact details are published only when the listing's MLS supplies them. Most listings include an agent name and office; email and phone are less common and are omitted rather than fabricated.\n\n**Are sold prices the final sale price?** Century 21's public sold records show the MLS list/close price it publishes for the listing. It is not an independent deed or county-recorder sale price.\n\n**What area does this cover?** Century21.com's US market. Coverage depends on the MLS/IDX feed for each area; Century 21's country-specific sites (Canada, Portugal, Spain, France, etc.) use different systems and are not part of this actor.\n\n**How fresh is the data?** Records are pulled live from Century 21's current public feed on every run. There is no cache.\n\n## Limitations\n\n- US Century21.com only; other Century 21 country domains are not supported.\n- A listing must be present in Century 21's public index. Private/off-market listings are not reachable.\n- Status availability varies by MLS; some feeds omit expired, inactive, or sold records entirely.\n- Detail fields such as taxes, HOA, schools, room descriptions, agent email, and phone are conditional on what the listing MLS publishes. They are omitted when absent.\n- `byAddress` is intentionally strict: it requires an exact house-number and street match, so spelling variants that the suggestion service cannot normalise will return zero records.\n",
      "input": {
        "title": "Century 21 Real Estate Scraper Input",
        "description": "Search homes for sale or rent on Century21.com by city/county/neighborhood/ZIP, look up a specific property by address, or fetch full details by listing ID.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch. `search` resolves a place and pages its listings; `byUrl` reads pasted Century 21 search or listing URLs; `byAddress` requires an exact street-address match; `byListingId` accepts IDs or listing URLs.",
            "editor": "select",
            "enum": [
              "search",
              "byUrl",
              "byAddress",
              "byListingId"
            ],
            "enumTitles": [
              "Search by location (city, county, neighborhood, ZIP, state)",
              "Search or fetch from Century 21 URLs",
              "Lookup by exact street address",
              "Lookup by listing ID or listing URL"
            ],
            "default": "search",
            "prefill": "search"
          },
          "startUrls": {
            "title": "Century 21 URLs (mode=byUrl)",
            "type": "array",
            "description": "Paste Century 21 search URLs (e.g. https://www.century21.com/homes/list/city/tx/austin) or listing URLs. Search URLs honour their type/state/area path and query filters; listing URLs fetch full details.",
            "editor": "requestListSources",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL",
                  "description": "Century 21 search or listing URL"
                }
              },
              "required": [
                "url"
              ]
            },
            "default": [],
            "prefill": []
          },
          "location": {
            "title": "Location (mode=search)",
            "type": "string",
            "description": "City, county, neighborhood or ZIP code, e.g. `Austin, TX`, `Miami-Dade County, FL`, `78617`.",
            "editor": "textfield",
            "prefill": "Austin, TX"
          },
          "addresses": {
            "title": "Street addresses (mode=byAddress)",
            "type": "array",
            "description": "Full street addresses to look up, e.g. `13521 Sea Biscuit Dr, Del Valle, TX`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "listingIds": {
            "title": "Listing IDs (mode=byListingId)",
            "type": "array",
            "description": "Century 21 internal listing IDs (from a previous run's `listingId` field), e.g. `P00800000HF6cD2iLtM7DTj91VD8KUzhnfCsy0Wx`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "listingType": {
            "title": "Listing type (mode=search)",
            "type": "string",
            "description": "Search for-sale or for-rent listings. Rentals use Century 21's rental index.",
            "editor": "select",
            "enum": [
              "forSale",
              "forRent"
            ],
            "enumTitles": [
              "For sale",
              "For rent"
            ],
            "prefill": "forSale"
          },
          "propertyTypes": {
            "title": "Property types (mode=search, For sale only)",
            "type": "array",
            "description": "Restrict to these property types. Leave empty for all types.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "SFR",
                "MFR",
                "COOP",
                "MFD",
                "LAND",
                "CONDO",
                "TOWNHOUSE",
                "FARM"
              ],
              "enumTitles": [
                "Single family",
                "Multi-family",
                "Co-op",
                "Mobile / Manufactured",
                "Lots / Land",
                "Condominium",
                "Townhouse",
                "Farm"
              ]
            },
            "default": [],
            "prefill": []
          },
          "statuses": {
            "title": "Listing statuses (mode=search, For sale only)",
            "type": "array",
            "description": "Restrict to these listing statuses. Leave empty for Active + Pending + Coming soon. Sold, Expired and Inactive are also available from Century 21's public index. Applied to rentals too when set.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "ACTIVE",
                "PENDING",
                "COMING_SOON",
                "EXPIRED",
                "INACTIVE",
                "WITHDRAWN",
                "SOLD",
                "RENTED",
                "CANCELED"
              ],
              "enumTitles": [
                "Active",
                "Pending / Under contract",
                "Coming soon",
                "Expired",
                "Inactive",
                "Withdrawn",
                "Sold",
                "Rented",
                "Canceled"
              ]
            },
            "default": [],
            "prefill": []
          },
          "hasOpenHouses": {
            "title": "Has open house (mode=search)",
            "type": "boolean",
            "description": "Only listings with an upcoming open house.",
            "default": false,
            "prefill": false
          },
          "isNewConstruction": {
            "title": "New construction only (mode=search)",
            "type": "boolean",
            "description": "Only new-construction listings.",
            "default": false,
            "prefill": false
          },
          "isVirtualTourAvailable": {
            "title": "Has virtual tour (mode=search)",
            "type": "boolean",
            "description": "Only listings with a virtual tour.",
            "default": false,
            "prefill": false
          },
          "luxuryOnly": {
            "title": "Luxury listings only (mode=search)",
            "type": "boolean",
            "description": "Only Century 21 Fine Homes & Estates luxury listings.",
            "default": false,
            "prefill": false
          },
          "minPrice": {
            "title": "Min price (USD)",
            "type": "integer",
            "description": "Only listings priced at or above this amount.",
            "minimum": 0,
            "maximum": 500000000
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "type": "integer",
            "description": "Only listings priced at or below this amount.",
            "minimum": 0,
            "maximum": 500000000
          },
          "daysOnMarket": {
            "title": "Listed within (mode=search)",
            "type": "string",
            "description": "Only listings added to the market within this many days.",
            "editor": "select",
            "enum": [
              "1",
              "7",
              "14",
              "30",
              "60",
              "90"
            ],
            "enumTitles": [
              "1 day",
              "1 week",
              "2 weeks",
              "1 month",
              "2 months",
              "3+ months"
            ]
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "type": "string",
            "description": "Only listings with at least this many bedrooms (0 = studio).",
            "editor": "select",
            "enum": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "enumTitles": [
              "Studio",
              "1",
              "2",
              "3",
              "4",
              "5+"
            ]
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "type": "string",
            "description": "Only listings with at most this many bedrooms.",
            "editor": "select",
            "enum": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "enumTitles": [
              "Studio",
              "1",
              "2",
              "3",
              "4",
              "5+"
            ]
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "type": "string",
            "description": "Only listings with at least this many bathrooms.",
            "editor": "select",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "enumTitles": [
              "1+",
              "2+",
              "3+",
              "4+",
              "5+"
            ]
          },
          "minSqft": {
            "title": "Min living area (sq ft)",
            "type": "string",
            "description": "Only listings at or above this living area.",
            "editor": "select",
            "enum": [
              "200",
              "500",
              "750",
              "1000",
              "1250",
              "1500",
              "1750",
              "3000",
              "3250",
              "3500",
              "4000",
              "5000",
              "6000",
              "7000",
              "8000",
              "9000",
              "10000"
            ],
            "enumTitles": [
              "200",
              "500",
              "750",
              "1,000",
              "1,250",
              "1,500",
              "1,750",
              "3,000",
              "3,250",
              "3,500",
              "4,000",
              "5,000",
              "6,000",
              "7,000",
              "8,000",
              "9,000",
              "10,000"
            ]
          },
          "maxSqft": {
            "title": "Max living area (sq ft)",
            "type": "string",
            "description": "Only listings at or below this living area.",
            "editor": "select",
            "enum": [
              "200",
              "500",
              "750",
              "1000",
              "1250",
              "1500",
              "1750",
              "3000",
              "3250",
              "3500",
              "4000",
              "5000",
              "6000",
              "7000",
              "8000",
              "9000",
              "10000"
            ],
            "enumTitles": [
              "200",
              "500",
              "750",
              "1,000",
              "1,250",
              "1,500",
              "1,750",
              "3,000",
              "3,250",
              "3,500",
              "4,000",
              "5,000",
              "6,000",
              "7,000",
              "8,000",
              "9,000",
              "10,000"
            ]
          },
          "minAcreage": {
            "title": "Min lot size (acres)",
            "type": "string",
            "description": "Only listings with a lot size at or above this many acres.",
            "editor": "select",
            "enum": [
              "0.0229568",
              "0.04591368",
              "0.06887052",
              "0.09182736",
              "0.1147842",
              "0.1492195",
              "0.1836547",
              "0.21809",
              "0.25",
              "0.5",
              "1",
              "2",
              "3",
              "4",
              "5",
              "10",
              "20",
              "50",
              "100"
            ],
            "enumTitles": [
              "1,000 sqft",
              "2,000 sqft",
              "3,000 sqft",
              "4,000 sqft",
              "5,000 sqft",
              "6,500 sqft",
              "8,000 sqft",
              "9,500 sqft",
              "0.25 acres",
              "0.5 acres",
              "1 acre",
              "2 acres",
              "3 acres",
              "4 acres",
              "5 acres",
              "10 acres",
              "20 acres",
              "50 acres",
              "100 acres"
            ]
          },
          "maxAcreage": {
            "title": "Max lot size (acres)",
            "type": "string",
            "description": "Only listings with a lot size at or below this many acres.",
            "editor": "select",
            "enum": [
              "0.0229568",
              "0.04591368",
              "0.06887052",
              "0.09182736",
              "0.1147842",
              "0.1492195",
              "0.1836547",
              "0.21809",
              "0.25",
              "0.5",
              "1",
              "2",
              "3",
              "4",
              "5",
              "10",
              "20",
              "50",
              "100"
            ],
            "enumTitles": [
              "1,000 sqft",
              "2,000 sqft",
              "3,000 sqft",
              "4,000 sqft",
              "5,000 sqft",
              "6,500 sqft",
              "8,000 sqft",
              "9,500 sqft",
              "0.25 acres",
              "0.5 acres",
              "1 acre",
              "2 acres",
              "3 acres",
              "4 acres",
              "5 acres",
              "10 acres",
              "20 acres",
              "50 acres",
              "100 acres"
            ]
          },
          "minYearBuilt": {
            "title": "Min year built",
            "type": "string",
            "description": "Only listings built in or after this year.",
            "editor": "select",
            "enum": [
              "1960",
              "1970",
              "1980",
              "1985",
              "1990",
              "1995",
              "2000",
              "2005",
              "2010",
              "2015",
              "2020",
              "2021",
              "2022",
              "2023",
              "2024",
              "2025",
              "2026"
            ],
            "enumTitles": [
              "1960",
              "1970",
              "1980",
              "1985",
              "1990",
              "1995",
              "2000",
              "2005",
              "2010",
              "2015",
              "2020",
              "2021",
              "2022",
              "2023",
              "2024",
              "2025",
              "2026"
            ]
          },
          "maxYearBuilt": {
            "title": "Max year built",
            "type": "string",
            "description": "Only listings built in or before this year.",
            "editor": "select",
            "enum": [
              "1960",
              "1970",
              "1980",
              "1985",
              "1990",
              "1995",
              "2000",
              "2005",
              "2010",
              "2015",
              "2020",
              "2021",
              "2022",
              "2023",
              "2024",
              "2025",
              "2026"
            ],
            "enumTitles": [
              "1960",
              "1970",
              "1980",
              "1985",
              "1990",
              "1995",
              "2000",
              "2005",
              "2010",
              "2015",
              "2020",
              "2021",
              "2022",
              "2023",
              "2024",
              "2025",
              "2026"
            ]
          },
          "sortBy": {
            "title": "Sort order (mode=search)",
            "type": "string",
            "description": "Order in which listings are returned/paginated.",
            "editor": "select",
            "enum": [
              "newest",
              "priceHighToLow",
              "priceLowToHigh"
            ],
            "enumTitles": [
              "Newest",
              "Price: high to low",
              "Price: low to high"
            ],
            "prefill": "newest"
          },
          "includeFullDetails": {
            "title": "Include full listing details",
            "type": "boolean",
            "description": "Fetch the full property detail (description, taxes, HOA, schools, appliances, all photos) for every search result. Slower — makes one extra request per listing.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on emitted records.",
            "minimum": 1,
            "maximum": 5000,
            "default": 30,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ],
        "additionalProperties": true
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Century 21 Listings & Property Detail Finder Output",
        "description": "Century 21 listings across active, pending, sold and other public statuses — price, beds/baths, size, address, photos, open houses, agent contact and optional full property details.",
        "properties": {
          "listings": {
            "type": "string",
            "title": "Century 21 listings",
            "description": "Dataset containing Century 21 listings and property details.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Listings",
              "transformation": {
                "fields": [
                  "listingId",
                  "listingStatus",
                  "listingType",
                  "address",
                  "city",
                  "stateCode",
                  "postalCode",
                  "price",
                  "bedrooms",
                  "bathrooms",
                  "livingAreaSqFt",
                  "propertyTypeLabel",
                  "photosCount",
                  "agentName",
                  "listingUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "63c678fa789b615517907477bb4697a31153ea06bf76f3c0a484c44b28d8f6e0",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0036977777777777777
    }
  }
}