{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com $0.9💰 Listings, Prices & Agent Details",
    "description": "From $0.9/1K. Extract property listings from realtor.com. Get comprehensive data, including prices, property details, agent contacts, coordinates, photos, and more. Supports for sale, rental, and recently sold listings across all US markets.",
    "version": "2.0",
    "x-build-id": "A2Kaxg7m7Deoakope"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~realtor-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-realtor-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/abotapi~realtor-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-realtor-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/abotapi~realtor-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-realtor-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": {
          "mode": {
            "title": "1. Search mode",
            "enum": [
              "location",
              "url"
            ],
            "type": "string",
            "description": "Location mode = pick city + state + filters below. URL mode = paste any realtor.com search URL already refined in a browser (recommended for complex filters).",
            "default": "location"
          },
          "locations": {
            "title": "Locations to search",
            "type": "array",
            "description": "Cities or neighborhoods to search. Add one or more locations — the scraper will search each one.",
            "items": {
              "type": "object",
              "properties": {
                "city": {
                  "title": "City or Neighborhood",
                  "type": "string",
                  "description": "City name (e.g. Portland, Austin) or neighborhood (e.g. Capitol Hill, Orenco). Use hyphens for multi-word names like 'New York' or 'San Francisco'.",
                  "editor": "textfield"
                },
                "state": {
                  "title": "State",
                  "type": "string",
                  "description": "Two-letter US state code",
                  "enum": [
                    "AL",
                    "AK",
                    "AZ",
                    "AR",
                    "CA",
                    "CO",
                    "CT",
                    "DE",
                    "FL",
                    "GA",
                    "HI",
                    "ID",
                    "IL",
                    "IN",
                    "IA",
                    "KS",
                    "KY",
                    "LA",
                    "ME",
                    "MD",
                    "MA",
                    "MI",
                    "MN",
                    "MS",
                    "MO",
                    "MT",
                    "NE",
                    "NV",
                    "NH",
                    "NJ",
                    "NM",
                    "NY",
                    "NC",
                    "ND",
                    "OH",
                    "OK",
                    "OR",
                    "PA",
                    "RI",
                    "SC",
                    "SD",
                    "TN",
                    "TX",
                    "UT",
                    "VT",
                    "VA",
                    "WA",
                    "WV",
                    "WI",
                    "WY",
                    "DC"
                  ],
                  "editor": "select"
                }
              }
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "for_sale",
              "for_rent",
              "sold"
            ],
            "type": "string",
            "description": "Type of listings to scrape.",
            "default": "for_sale"
          },
          "propertyType": {
            "title": "Property Type",
            "enum": [
              "any",
              "single_family",
              "condo",
              "townhome",
              "multi_family",
              "mobile",
              "farm",
              "land"
            ],
            "type": "string",
            "description": "Filter by property type.",
            "default": "any"
          },
          "bedsMin": {
            "title": "Minimum Bedrooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum number of bedrooms (1-5)."
          },
          "bathsMin": {
            "title": "Minimum Bathrooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum number of bathrooms (1-5)."
          },
          "priceMin": {
            "title": "Minimum Price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum listing price in USD."
          },
          "priceMax": {
            "title": "Maximum Price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listing price in USD."
          },
          "openHouseOnly": {
            "title": "Open House Only",
            "type": "boolean",
            "description": "Only return listings with open houses (for_sale only, ignored for rent/sold).",
            "default": false
          },
          "newConstructionOnly": {
            "title": "New Construction Only",
            "type": "boolean",
            "description": "Only return new construction listings (for_sale and sold only, ignored for rent).",
            "default": false
          },
          "urls": {
            "title": "Search URLs",
            "type": "array",
            "description": "One or more full realtor.com search URLs. Tip: open realtor.com in your browser, apply any filters (price, beds, property type), then paste the resulting URL here.",
            "items": {
              "type": "string"
            }
          },
          "maxListings": {
            "title": "Max Listings",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of listings to collect (0 = unlimited)",
            "default": 20
          },
          "maxPages": {
            "title": "Max Pages Per Location",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum pages to scrape per location (0 = unlimited)",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for realtor.com. Datacenter works (cheapest). Falls back to built-in proxy for free-tier users.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromCheckpoint": {
            "title": "Resume From Checkpoint",
            "type": "boolean",
            "description": "Resume a previous run from the last saved checkpoint",
            "default": true
          },
          "resumeFromRunId": {
            "title": "Resume from run/dataset ID",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID from this account to continue that interrupted crawl — listings it already collected are skipped so this run returns only the delta. Leave empty for a normal run. Different from Resume From Checkpoint above (which auto-continues via this actor's own internal state, no ID needed) and from Incremental mode below (which tracks a recurring search across runs on its own)."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Turn this ON when you run this actor on a SCHEDULE against the same search. Each listing is classified as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED compared to the last run of the same search (see State key below). OFF by default so existing runs are unaffected. See emitUnchanged/emitExpired below to control which of those extra rows are returned.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Only used when Incremental mode is ON. Identifies which saved baseline this search is compared against. Leave empty to auto-derive one from your location/URL and filter settings — two differently-configured searches never share a baseline either way. Set your own text here only if you want full control (e.g. to intentionally share one baseline across two different-looking searches)."
          },
          "emitUnchanged": {
            "title": "Emit UNCHANGED rows",
            "type": "boolean",
            "description": "Only used when Incremental mode is ON. OFF by default: a listing identical to the last run is not returned (and not billed). Turn ON to get every tracked listing back on every run, each tagged changeType — this bills a dataset item for every UNCHANGED row too, not just NEW/UPDATED ones.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit EXPIRED rows",
            "type": "boolean",
            "description": "Only used when Incremental mode is ON. OFF by default. Turn ON to get a tombstone row (changeType: EXPIRED) for any previously-tracked listing no longer found — only emitted after a run that scanned every configured search to its natural end (a resume, a block, or a Max Pages/Max Listings cap skips EXPIRED detection that run and keeps the previous state as-is). Each EXPIRED row bills a dataset item like any other row.",
            "default": false
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}