{
  "openapi": "3.0.1",
  "info": {
    "title": "Apartments.com Scraper - Rentals, Prices & Leads",
    "description": "Scrape Apartments.com by city: rent prices, floor plans with per-unit rents, beds/baths/sqft, amenities, pet policy, ratings & reviews, walk score, photos, the leasing-office phone and the property-management company. Turn every property into a B2B lead. No login, no key, no browser.",
    "version": "0.2",
    "x-build-id": "iWVaGbQyAzgwNvcKU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~apartments-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-apartments-com-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/scrapesage~apartments-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-apartments-com-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/scrapesage~apartments-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-apartments-com-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": {
          "locations": {
            "title": "Locations (City, ST or ZIP)",
            "type": "array",
            "description": "US cities to search, as `City, ST` (e.g. `Austin, TX`, `Denver, CO`, `Miami, FL`) or a 5-digit ZIP code (e.g. `78701`). Each location is searched for every selected property type. Leave empty when you use Start URLs.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Which rental types to search for each location.",
            "items": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "condos",
                "townhomes"
              ],
              "enumTitles": [
                "Apartments",
                "Houses for rent",
                "Condos",
                "Townhomes"
              ]
            },
            "default": [
              "apartments"
            ]
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Apartments.com URLs to scrape directly: a results page (e.g. `https://www.apartments.com/austin-tx/`, or one with Apartments.com's own filters such as `https://www.apartments.com/austin-tx/2-bedrooms/` or `https://www.apartments.com/austin-tx/under-1500/`) or a single property page (e.g. `https://www.apartments.com/edison-austin-austin-tx/40n18nj/`). Results pages are followed page by page.",
            "items": {
              "type": "string"
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of Apartments.com URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Total number of properties to return across all searches. 0 = no limit (up to 5,000 per run). When several searches run, the limit is shared fairly between them.",
            "default": 100
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap per search (one location x property type, or one Start URL). Leave at 120 to split \"Max results\" fairly across searches automatically.",
            "default": 120
          },
          "includeListingDetails": {
            "title": "Include full property details",
            "type": "boolean",
            "description": "Open each property page for the full record: every floor plan and available unit with its rent and availability date, fees, pet policy, lease options, the property-management company and its Apartments.com profile, the property's own website, office hours, ratings & resident reviews, walk/transit/bike/sound scores, nearby schools, transit and airport, neighborhood rent averages, all photos and the full description. Adds one page per property (billed as \"Full property detail\"). Turn off for a fast list of search results only.",
            "default": true
          },
          "minPrice": {
            "title": "Min rent (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep properties whose highest advertised rent is at least this. Uses the base rent when Apartments.com shows it, otherwise the advertised total monthly price."
          },
          "maxPrice": {
            "title": "Max rent (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep properties whose lowest advertised rent is at most this. Uses the base rent when Apartments.com shows it, otherwise the advertised total monthly price."
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only keep properties that have units with at least this many bedrooms (0 = studio)."
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only keep properties that have units with at most this many bedrooms (0 = studio)."
          },
          "petFriendlyOnly": {
            "title": "Pet-friendly only",
            "type": "boolean",
            "description": "Only keep properties that allow pets.",
            "default": false
          },
          "maxPhotosPerListing": {
            "title": "Max photos per property",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "Limit the number of photo URLs kept per property (the total available is in photoCount).",
            "default": 25
          },
          "deduplicateListings": {
            "title": "Deduplicate properties",
            "type": "boolean",
            "description": "Skip a property that already appeared earlier in the run (the same property can show up in several searches or property types).",
            "default": true
          },
          "enrichContactEmails": {
            "title": "Enrich management contact emails",
            "type": "boolean",
            "description": "When a property links its own website, read it (home + contact/about, max 3 pages) for the management company's emails, phones and social links. Apartments.com itself never shows emails. Charged as \"Enriched management contact\" only when at least one email or social profile is found.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (only new / rent-changed)",
            "type": "boolean",
            "description": "Remember properties between runs in a named key-value store and return ONLY properties that are new or whose rent changed (tagged with `monitorReason` new / priceDrop / priceChange and `previousRentMin`). The first run sets the baseline: it returns up to Max results and remembers every property it scans, so nothing that already exists is reported as new later. Every monitor run scans all result pages of each search. Rent moves smaller than $5 or 0.5% are ignored. Works with Apify Schedules.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store used to remember properties across runs. Use a distinct name per monitored search.",
            "default": "apartments-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Default: Apify Proxy (US). The actor starts on the shared datacenter pool and switches to Apify Residential automatically if Apartments.com refuses it, so most runs need no change here. Selecting Residential uses residential from the start. Your own proxy URLs are used as given.",
            "default": {
              "useApifyProxy": true
            }
          },
          "debugDump": {
            "title": "Debug: save raw pages",
            "type": "boolean",
            "description": "Diagnostic only - saves the raw HTML of the first results page and the first property pages to the key-value store. Leave off for normal runs.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}