{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com Scraper — Properties, Agents & Analytics",
    "description": "No-login realtor.com scraper: property search & detail (price, beds/baths, sqft, tax & price history, schools, AVM, mortgage estimate, flood risk, agent contact) plus full agent profiles (phones, license, reviews, stats). Deal analytics, dedup & monitoring.",
    "version": "0.0",
    "x-build-id": "lyedU2BnPt5fo3a7O"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/brilliant_gum~realtor-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-brilliant_gum-realtor-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/brilliant_gum~realtor-scraper/runs": {
      "post": {
        "operationId": "runs-sync-brilliant_gum-realtor-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/brilliant_gum~realtor-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-brilliant_gum-realtor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Modes",
            "type": "array",
            "description": "What to scrape. 'property-search' runs searchLocations x filters and returns one record per listing. 'property-detail' fetches full detail for propertyIds / startUrls. 'agent-search' returns agents for agentLocations / agentZipCodes. 'agent-detail' fetches full profiles for agentIds / agentUrls. Modes can be combined.",
            "items": {
              "type": "string",
              "enum": [
                "property-search",
                "property-detail",
                "agent-search",
                "agent-detail"
              ],
              "enumTitles": [
                "Property search",
                "Property details",
                "Agent search",
                "Agent details"
              ]
            },
            "default": [
              "property-search"
            ]
          },
          "searchLocations": {
            "title": "Search locations",
            "type": "array",
            "description": "Locations to search for properties: city+state, ZIP, county, neighborhood or a full street address (e.g. \"Austin, TX\", \"78701\", \"Travis County, TX\"). Each is resolved via realtor.com's location suggester. Property-search mode.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (realtor.com pages)",
            "type": "array",
            "description": "Ready-made realtor.com URLs: search result pages (realestateandhomes-search/...), property detail pages (realestateandhomes-detail/...) or agent pages (realestateagents/...). Detected and routed automatically. Advanced alternative to the location fields.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "propertyIds": {
            "title": "Property IDs",
            "type": "array",
            "description": "Realtor.com numeric property_id values (e.g. \"9565765912\") to fetch full details for. Property-detail mode.",
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Listing type / status",
            "type": "array",
            "description": "Which listing statuses to return in property search: for_sale, for_rent, sold, pending, ready_to_build (new construction). Combine as needed. Default: for sale.",
            "items": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "sold",
                "pending",
                "ready_to_build"
              ],
              "enumTitles": [
                "For sale",
                "For rent",
                "Recently sold",
                "Pending / contingent",
                "New construction"
              ]
            },
            "default": [
              "for_sale"
            ]
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Keep only these property types. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "single_family",
                "condos",
                "townhomes",
                "condo_townhome_rowhome_coop",
                "duplex_triplex",
                "multi_family",
                "farm",
                "land",
                "mobile",
                "apartment"
              ],
              "enumTitles": [
                "Single family",
                "Condo",
                "Townhome",
                "Condo/Townhome/Rowhome/Coop",
                "Duplex/Triplex",
                "Multi-family",
                "Farm",
                "Land",
                "Mobile",
                "Apartment"
              ]
            }
          },
          "priceMin": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum list price in USD. Empty = no minimum."
          },
          "priceMax": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum list price in USD. Empty = no maximum."
          },
          "bedsMin": {
            "title": "Min beds",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms. Empty = any."
          },
          "bedsMax": {
            "title": "Max beds",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms. Empty = any."
          },
          "bathsMin": {
            "title": "Min baths",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bathrooms. Empty = any."
          },
          "sqftMin": {
            "title": "Min sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum interior square footage. Empty = any."
          },
          "sqftMax": {
            "title": "Max sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum interior square footage. Empty = any."
          },
          "lotSqftMin": {
            "title": "Min lot sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum lot size in square feet. Empty = any."
          },
          "yearBuiltMin": {
            "title": "Min year built",
            "minimum": 1800,
            "type": "integer",
            "description": "Earliest year built. Empty = any."
          },
          "yearBuiltMax": {
            "title": "Max year built",
            "minimum": 1800,
            "type": "integer",
            "description": "Latest year built. Empty = any."
          },
          "radiusMiles": {
            "title": "Radius (miles, address search)",
            "minimum": 0,
            "type": "integer",
            "description": "When a searchLocation is a street address, return comparable listings within this radius (miles) instead of the single home. Empty = off."
          },
          "listedWithinDays": {
            "title": "Listed within N days",
            "minimum": 0,
            "type": "integer",
            "description": "For sale/for rent: keep only listings put on market within the last N days. Empty = any."
          },
          "soldWithinDays": {
            "title": "Sold within N days",
            "minimum": 0,
            "type": "integer",
            "description": "For sold listings: keep only homes sold within the last N days. Empty = any."
          },
          "foreclosure": {
            "title": "Foreclosures only",
            "type": "boolean",
            "description": "Return only foreclosure listings.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "",
              "list_date",
              "sold_date",
              "list_price",
              "price_reduced_date",
              "beds",
              "sqft"
            ],
            "type": "string",
            "description": "Sort order for property search. Default uses realtor.com's relevance (fractal) sort.",
            "default": ""
          },
          "sortDirection": {
            "title": "Sort direction",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Sort direction when Sort by is set.",
            "default": "desc"
          },
          "maxItems": {
            "title": "Max properties per location",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum property listings per search location. 0 = all available (realtor.com caps around a few thousand per query).",
            "default": 100
          },
          "includePropertyDetails": {
            "title": "Fetch full property details",
            "type": "boolean",
            "description": "For each search result, fetch the full detail record (tax & price history, schools, AVM estimates, mortgage payment estimate with tax/insurance/PMI breakdown, flood & noise risk, open houses, sub-type, pool, monthly fees, parking, popularity). Turn off for a faster/cheaper lightweight card (id, price, beds/baths/sqft, address, primary photo, agent).",
            "default": true
          },
          "includePhotos": {
            "title": "Include all photo URLs",
            "type": "boolean",
            "description": "Include the full photos array (all image URLs) per property. Turn off to keep only the primary photo and reduce record size.",
            "default": true
          },
          "agentLocations": {
            "title": "Agent locations",
            "type": "array",
            "description": "Locations to find agents in: 'City, ST' or 'city_st' (e.g. \"Austin, TX\"). Agent-search mode.",
            "items": {
              "type": "string"
            }
          },
          "agentZipCodes": {
            "title": "Agent ZIP codes",
            "type": "array",
            "description": "5-digit US ZIP codes to find agents in (e.g. \"78701\"). Agent-search mode.",
            "items": {
              "type": "string"
            }
          },
          "agentIds": {
            "title": "Agent IDs",
            "type": "array",
            "description": "Realtor.com agent advertiser IDs (the 24-char id, e.g. \"56a649a10fa417010073f11b\"). Agent-detail mode.",
            "items": {
              "type": "string"
            }
          },
          "agentUrls": {
            "title": "Agent profile URLs",
            "type": "array",
            "description": "Full realtor.com agent profile URLs (https://www.realtor.com/realestateagents/<id>). Agent-detail mode.",
            "items": {
              "type": "string"
            }
          },
          "maxAgents": {
            "title": "Max agents per location",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum agents per location/ZIP in agent search. 0 = all available.",
            "default": 40
          },
          "fetchAgentDetails": {
            "title": "Fetch full agent profiles",
            "type": "boolean",
            "description": "In agent search, fetch each agent's full profile page (bio, license, phones, website, social links, served areas, specializations, languages). One extra request per agent. Turn off for the lightweight search card only.",
            "default": true
          },
          "includeAgentReviews": {
            "title": "Include agent reviews & recommendations",
            "type": "boolean",
            "description": "Include the agent's public reviews (text, ratings, sub-scores, replies) and recommendations. Requires full profiles.",
            "default": true
          },
          "includeAnalytics": {
            "title": "Include analytics",
            "type": "boolean",
            "description": "Add computed analytics per record: price per sqft, days on market, price-drop amount/percent, AVM-vs-list gap, deal score (0-100 undervalued heuristic), new-listing flag, and agent 12-month deal counts.",
            "default": true
          },
          "deduplicate": {
            "title": "Deduplicate",
            "type": "boolean",
            "description": "Drop records whose dedupKey (property_id+status, or agent id) was already produced in this run (and across runs if a key store is set).",
            "default": true
          },
          "deduplicateKeyStore": {
            "title": "Cross-run dedup key store",
            "type": "string",
            "description": "Named key-value store to persist seen dedupKeys across scheduled runs. Empty = in-run dedup only."
          },
          "monitoringMode": {
            "title": "Monitoring mode (new/changed only)",
            "type": "boolean",
            "description": "Output only records not seen in the previous run (requires a dedup key store). Great for new-listing and price-change alerting.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Parallel detail/agent requests. Keep moderate to respect rate limits.",
            "default": 6
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 12,
            "type": "integer",
            "description": "Retries with fresh proxy sessions on block / 403 / 429 / 5xx / timeout.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy used for requests. US residential is recommended and used by default. A paid Apify Proxy plan is required.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}