{
  "openapi": "3.0.1",
  "info": {
    "title": "Apartments.com Rental Scraper - Apartments & Houses",
    "description": "Scrape Apartments.com rentals by US city. Extract apartment, house, condo, and townhome prices, phones, addresses, amenities, floorplans, and units. An Apartments.com API alternative for Excel, CSV, or JSON.",
    "version": "0.5",
    "x-build-id": "36zFQHioitdOihlPb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~apartments-com-rental-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-apartments-com-rental-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/lentic_clockss~apartments-com-rental-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-apartments-com-rental-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/lentic_clockss~apartments-com-rental-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-apartments-com-rental-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": {
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City and state, e.g. Austin, TX or New York, NY. Used to build the search URL when startUrls are empty. Still kept as a label for sticky proxy sessions and RUN_SUMMARY when startUrls are provided.",
            "default": "Austin, TX"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "apartments",
              "houses",
              "condos",
              "townhomes",
              "all"
            ],
            "type": "string",
            "description": "Rental vertical. apartments and all use the API channel only. For houses, condos and townhomes the worker's remote browsers read the vertical's search pages (the only filtered source) and the API channel then fills in each listing's details. If the browser finds nothing, the API channel returns every rental type in the area and the run says so.",
            "default": "apartments"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional Apartments.com URLs: listing pages (/{name}-{city}-{st}/{key}/), search pages (/austin-tx/, /houses/austin-tx/) or sitemaps (robots.txt, sitemap index, .xml.gz leaves). Other hosts are rejected.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max rows per location or URL",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum Dataset rows collected for each location or Start URL. Default 70. Larger numbers are collected in parts of 70. Listings, floorplans, units, and reviews all count together. The run stops at your maximum total charge. Free Apify plan: 200 rows per run and 10 runs.",
            "default": 70
          },
          "maxPages": {
            "title": "Max search pages",
            "minimum": 1,
            "maximum": 18,
            "type": "integer",
            "description": "Search pages for houses / condos / townhomes runs (~40 listings per page); raised automatically to cover maxItems. Ignored for apartments and all: the API channel reads up to 750 listings per area.",
            "default": 1
          },
          "scrapeDetails": {
            "title": "Scrape detail pages",
            "type": "boolean",
            "description": "Browser channel: open each listing's detail page. API channel (default): every row already carries its detail document (name, address, phone, management company, rents, amenities, schools); this switch only arms maxDetailFailRatio.",
            "default": false
          },
          "includeUnits": {
            "title": "Include unit/floorplan details",
            "type": "boolean",
            "description": "Emit each floorplan and available unit as its own billed Dataset row. Child rows copy the parent listing ID, name, URL, and location. unitCount is always the building's total.",
            "default": false
          },
          "maxDetailFailRatio": {
            "title": "Max detail failure ratio",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "When scrapeDetails is true and at least 2 detail reads happen, fail the run if failed/attempted exceeds this ratio (rows whose detail failed still carry detailError).",
            "default": 0.5
          },
          "requestDelayMillis": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Pause after each listing's requests (API channel, per parallel slot) or before each page navigation (browser channel).",
            "default": 500
          },
          "blockImages": {
            "title": "Block heavy resources",
            "type": "boolean",
            "description": "Browser channel only: block images, media and fonts to speed up page loads.",
            "default": true
          },
          "deepCoverage": {
            "title": "Deep coverage enumeration",
            "type": "boolean",
            "description": "BFF provider only. When a market's total exceeds the 750-pin cap, split coverage by OptionFlag bitmask buckets and geog bounding-box quadrants. Costs extra API calls; keep off for small runs.",
            "default": false
          },
          "optionMask": {
            "title": "OptionFlag bitmask (criteria.o)",
            "type": "integer",
            "description": "BFF provider only. OptionFlag bitmask filter passed to criteria.o (e.g. 32=no broker fee, 64=new construction, 2048=3D tour). Advanced use; leave empty for unfiltered search."
          },
          "sitemapSince": {
            "title": "Sitemap incremental since (YYYY-MM-DD)",
            "type": "string",
            "description": "API channel only. With sitemap startUrls, keep only entries whose lastmod is on/after this date (YYYY-MM-DD)."
          },
          "includePhotos": {
            "title": "Include photos & web-enriched fields",
            "type": "boolean",
            "description": "Add the listing's photos (images, imageUrl) plus web-only fields (neighborhood, county, profileType, languagesSpoken, leadFormConfig) from the listing web page: 2 extra web requests per listing. The web page stops answering one egress after ~8-12 listings for about an hour; the worker then switches to its backup proxy, so use it for small runs.",
            "default": false
          },
          "includeFees": {
            "title": "Include fee details",
            "type": "boolean",
            "description": "BFF fees v2: propertyFee, modelFees, unitFees, expenses.",
            "default": false
          },
          "includeWalkscore": {
            "title": "Include Walk/Transit/Bike scores",
            "type": "boolean",
            "description": "Walk Score family (walk/transit/bike + descriptions).",
            "default": false
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Emit each listing review as its own billed Dataset row, sharing the maxItems budget with listings, floorplans, and units.",
            "default": false
          },
          "includeFeatures": {
            "title": "Include features",
            "type": "boolean",
            "description": "BFF features endpoint output (community/unit feature lists).",
            "default": false
          },
          "includePropertyMap": {
            "title": "Include property boundary map",
            "type": "boolean",
            "description": "GeoJSON property boundary from the BFF property-map endpoint.",
            "default": false
          },
          "includeRentCalendar": {
            "title": "Include rent calendar",
            "type": "boolean",
            "description": "Per-day move-in rent calendar via unit leaseterms for up to rentCalendarMaxUnits units per listing.",
            "default": false
          },
          "includeSubmarket": {
            "title": "Include submarket enrichment",
            "type": "boolean",
            "description": "PDS submarket/detail lookup (submarket id, bbox, name) for each listing.",
            "default": false
          },
          "includeTours": {
            "title": "Include tour availability",
            "type": "boolean",
            "description": "Tour settings/types/open dates plus per-unit virtual-tour links.",
            "default": false
          },
          "rentCalendarMaxUnits": {
            "title": "Rent calendar max units",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Cap on units per listing for the rent-calendar (leaseterms) chain.",
            "default": 3
          },
          "fields": {
            "title": "Fields to collect (array)",
            "type": "array",
            "description": "Optional list of output field names (catalog: worker GET /v1/fields, e.g. [\"propertyName\",\"telephone\",\"walkScore\",\"units\"]). Requesting a field turns on the endpoint that produces it, no include* switch needed. [\"*\"] or empty returns every field."
          },
          "commute": {
            "title": "Commute isochrone (object)",
            "type": "object",
            "description": "BFF provider only. {latitude, longitude, commuteMinutes(1-60,default 30), transportationMethod(1 CAR/2 TRANSIT/3 BIKE/4 WALK), term(default \"work\")} — returns a travel-time isochrone polygon in diagnostics and filters pins to its bounding box."
          },
          "geog": {
            "title": "Geog override (object)",
            "type": "object",
            "description": "BFF provider only. Direct {type,id,box,c} geog criteria for listing/search — skips typeahead resolution. Advanced use."
          },
          "sort": {
            "title": "Sort order",
            "type": "string",
            "description": "BFF provider only. BFF sort key for listing/search (e.g. price, rating). Leave empty for default ordering."
          },
          "workerBaseUrl": {
            "title": "Worker base URL (optional)",
            "type": "string",
            "description": "Optional per-run override of the Cloud Run worker origin. Leave empty to use Actor env WORKER_BASE_URL (recommended for production)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}