{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com Agents Scraper: Reviews, Sales, Emails",
    "description": "Scrape Realtor.com's Find a Realtor directory by city, ZIP code, state, link or name, past the 10,000 agents a search shows. Get office, brokerage, served areas, experience, ratings, reviews, recent sales and price range; add the profile, reviews, listings, e-mail. No login. Leads in CSV or API.",
    "version": "0.1",
    "x-build-id": "Vseqhmr937mJvnQRP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~realtor-com-agents-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-realtor-com-agents-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/automation_craft~realtor-com-agents-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-realtor-com-agents-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/automation_craft~realtor-com-agents-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-realtor-com-agents-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": "Places (city, ZIP code or whole state)",
            "type": "array",
            "description": "Where agents work, one per line: a city with its state (\"Austin, TX\", \"Coeur d'Alene, ID\" with its apostrophe), a 5 digit ZIP code (\"78704\", checked against Realtor.com's own place list) or a whole state (\"TX\" or \"Texas\": its cities, largest first). Realtor.com lists agents by city or ZIP code only, so a neighborhood or a county is refused with a free row naming it. Up to 1,000.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Find-a-Realtor links and agent profile links",
            "type": "array",
            "description": "Links copied from Realtor.com: an agent search such as https://www.realtor.com/realestateagents/austin_tx/intent-buy/lang-spanish/sort-ratings or https://www.realtor.com/realestateagents/78704, or an agent profile such as https://www.realtor.com/realestateagents/56a649a10fa417010073f11b. A search link keeps its own filters (buyer or seller, language, price, order, name, members, photo, rating, recommendations, designation); a setting you also give below replaces that one filter. A later page link (pg-2) and a part the Actor does not read are refused with a free row, never guessed. Up to 10,000.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "agentName": {
            "title": "Agent name",
            "type": "string",
            "description": "Agents whose name has every word given (Realtor.com's own name search: each word matches the start of a word of the name). With places, the agents of that name in each place; alone, the agents of that name across the US. At least two letters."
          },
          "listingAgentLocations": {
            "title": "Agents found on listings (places)",
            "type": "array",
            "description": "Places whose homes for sale (or sold, or for rent, below) are read, and every agent advertising one of those homes is delivered with its full profile and the number of those homes it advertises: a city with its state, a ZIP code, a county or a neighborhood (\"Austin, TX\", \"78704\", \"Travis County, TX\", \"Mueller, Austin, TX\"). Up to 200.",
            "items": {
              "type": "string"
            }
          },
          "listingAgentStatuses": {
            "title": "Listings to read for agents",
            "type": "array",
            "description": "Which homes of the listing places are read for their agents. Default: for sale.",
            "items": {
              "type": "string",
              "enum": [
                "forSale",
                "sold",
                "forRent"
              ],
              "enumTitles": [
                "For sale",
                "Sold",
                "For rent"
              ]
            }
          },
          "maxListingsScanned": {
            "title": "Homes read per listing place",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many homes of each listing place are read for their agents, newest listings first. Default: 1,000; at most 10,000 (Realtor.com's limit for one search)."
          },
          "agents": {
            "title": "Agent profile links or ids",
            "type": "array",
            "description": "Realtor.com agent profile links (https://www.realtor.com/realestateagents/<id> and the older <Name>_<City>_<ST>_<id>_<n> form), 24 character profile ids or numeric fulfillment ids, one per line. An id with no profile is a free row. Up to 10,000.",
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Order",
            "enum": [
              "relevant",
              "ratings",
              "recommendations",
              "mostSales",
              "recentActivity"
            ],
            "type": "string",
            "description": "The order agents are read and delivered in. Default: most relevant (a pasted link keeps its own order unless you choose one here). Past the first 10,000 agents of a search (see \"Agents per search\") the rest are read by name."
          },
          "agentType": {
            "title": "Buyer's or seller's agents",
            "enum": [
              "any",
              "buyer",
              "seller"
            ],
            "type": "string",
            "description": "Realtor.com's own filter for agents who help buyers or sellers (it narrows little: most agents do both). It applies to agent searches, not to agents found on listings. Default: any (a pasted link keeps its own unless you choose one here)."
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Agents who speak any of these languages, in English and lower case (\"spanish\", \"chinese\", \"korean\"). Each row is checked: an agent whose profile lists none of them is left out, free.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Price range of the agent's listings: minimum (USD)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Agents whose listing price range reaches at least this price. Realtor.com leaves out every agent without a price range (about 85 percent of a city's agents) when a price is set."
          },
          "maxPrice": {
            "title": "Price range of the agent's listings: maximum (USD)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Agents whose listing price range starts at or below this price (the same note on agents without a price range)."
          },
          "realtorMembersOnly": {
            "title": "Realtor.com members (REALTOR) only",
            "type": "boolean",
            "description": "Only agents Realtor.com marks as REALTOR members."
          },
          "withPhotoOnly": {
            "title": "With a photo only",
            "type": "boolean",
            "description": "Only agents whose profile has a photo."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only agents rated at least this (0 to 5); agents with no rating are left out."
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only agents with at least this many reviews."
          },
          "minRecommendations": {
            "title": "Minimum recommendations",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only agents with at least this many recommendations."
          },
          "minRecentSales": {
            "title": "Minimum recent sales",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only agents with at least this many recently sold homes on their profile."
          },
          "minListingsForSale": {
            "title": "Minimum listings for sale",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only agents with at least this many homes for sale now."
          },
          "minYearsExperience": {
            "title": "Minimum years of experience",
            "minimum": 0,
            "maximum": 80,
            "type": "integer",
            "description": "Only agents in business at least this many years (from the first year on their profile)."
          },
          "maxYearsExperience": {
            "title": "Maximum years of experience",
            "minimum": 0,
            "maximum": 80,
            "type": "integer",
            "description": "Only agents in business at most this many years."
          },
          "brokerageContains": {
            "title": "Brokerage or office name contains",
            "type": "string",
            "description": "Only agents whose office or brokerage name has every word given (whole words, case and accents aside), for example \"keller williams\"."
          },
          "requiredFields": {
            "title": "Required fields",
            "type": "array",
            "description": "Only agents whose profile has every field chosen. Photo, bio and licence number are read from the search; the others from the full profile (turn on Agent details), e-mail from the e-mail add-on. A field counts whether or not personal data is delivered.",
            "items": {
              "type": "string",
              "enum": [
                "photo",
                "bio",
                "licenseNumber",
                "phone",
                "mobilePhone",
                "website",
                "officePhone",
                "officeWebsite",
                "officeAddress",
                "mlsId",
                "facebook",
                "instagram",
                "linkedin",
                "youtube",
                "x",
                "tiktok",
                "video",
                "email"
              ],
              "enumTitles": [
                "Photo",
                "Bio",
                "Licence number",
                "Any phone",
                "Mobile phone",
                "Website",
                "Office phone",
                "Office website",
                "Office address",
                "MLS id",
                "Facebook",
                "Instagram",
                "LinkedIn",
                "YouTube",
                "X",
                "TikTok",
                "Video",
                "E-mail"
              ]
            }
          },
          "specializations": {
            "title": "Specializations",
            "type": "array",
            "description": "Only agents who list any of these specializations on their profile (as Realtor.com writes them, for example \"First time home buyers\", \"Luxury homes\"; case aside). Needs Agent details.",
            "items": {
              "type": "string"
            }
          },
          "designations": {
            "title": "Designations",
            "type": "array",
            "description": "Only agents who hold any of these designations (for example \"ABR\", \"CRS\", \"GRI\"; case aside). Needs Agent details.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum agents (whole run)",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Stop after this many agents in all. Default and most: 200,000 a run (split a bigger job over several runs)."
          },
          "maxAgentsPerSearch": {
            "title": "Agents per search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most agents delivered from one search (a place, a link, a name, a listing place; a whole state counts as one). Default: 100. Realtor.com answers at most 10,000 agents for one search: above that, a city is read on through every two letter name prefix (about 2.4 calls per 100 agents; 99.95 percent of Austin's 34,924 in a test), and its coverage row says how many of the stated count were reached."
          },
          "countOnly": {
            "title": "Count only (free)",
            "type": "boolean",
            "description": "Reads only the first page of each search and delivers its agent count in the coverage row, no agent rows (only the run's start fee is charged). The count is Realtor.com's own: the place, name, order, agent type, languages and price narrow it; the other filters do not."
          },
          "includeDetails": {
            "title": "Agent details (full profile)",
            "type": "boolean",
            "description": "Adds each agent's full profile: office city and state (the street with personal data), office phones and website, licence state, MLS memberships, designations, specializations, Q and A, sales of the last 12 months and recent sales, and with personal data the agent's phones, website, social links and video. Charged as Agent details per agent that carries it."
          },
          "includeEmail": {
            "title": "Agent email",
            "type": "boolean",
            "description": "Adds the agent's e-mail and NRDS id as Realtor.com shows them on the agent's own listings (54 of 60 agents in a test of three cities: every agent with listings of its own). Also the office's e-mail where those listings show one, at no extra charge. Needs \"Include personal data\". Charged once per agent with an e-mail; agents without one are free."
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Adds the agent's reviews: rating and four sub ratings, comment, reviewer name, location and role, date, transaction date, the agent's reply. Charged per review delivered."
          },
          "maxReviewsPerAgent": {
            "title": "Reviews per agent",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The most reviews delivered per agent, newest first as Realtor.com lists them. Default: 50."
          },
          "includeRecommendations": {
            "title": "Recommendations",
            "type": "boolean",
            "description": "Adds the agent's recommendations (testimonials): comment, author, date, source. Charged per recommendation delivered."
          },
          "maxRecommendationsPerAgent": {
            "title": "Recommendations per agent",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The most recommendations delivered per agent. Default: 50."
          },
          "includeListings": {
            "title": "Listings",
            "type": "boolean",
            "description": "Adds the agent's own listings (the homes it lists, as the seller's side): price, status, dates, address, beds, baths, size, type, photo, link, its side; with the totals per kind and the count by side. Charged per listing delivered."
          },
          "listingTypes": {
            "title": "Listing kinds",
            "type": "array",
            "description": "Which of the agent's listings are delivered, newest first. Default: for sale and sold.",
            "items": {
              "type": "string",
              "enum": [
                "forSale",
                "sold",
                "forRent",
                "offMarket"
              ],
              "enumTitles": [
                "For sale",
                "Sold",
                "For rent",
                "Off market"
              ]
            }
          },
          "maxListingsPerAgent": {
            "title": "Listings per agent and kind",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most listings of each kind delivered per agent. Default: 50."
          },
          "includePersonalData": {
            "title": "Include personal data (the agent's name and contacts)",
            "type": "boolean",
            "description": "Off by default. On, agent rows also carry the agent's name, profile id, fulfillment id, profile link, photo and licence number; with Agent details the agent's phones, website, social links, MLS agent ids and licences, the office's street address and the about video; with the e-mail add-on the agent's e-mail and NRDS id; with reviews the reviewer's photo, address and link where Realtor.com shows them; the brokerage id; office and brokerage names, office phones and websites that may be the agent's own (named after the agent, the agent's own number or site). Off, those fields are empty. You are responsible for a lawful use of personal data (GDPR, CAN-SPAM, TCPA and state laws included)."
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "nested",
              "flat",
              "compact"
            ],
            "type": "string",
            "description": "Nested by default."
          },
          "omitEmptyFields": {
            "title": "Leave out empty fields",
            "type": "boolean",
            "description": "Rows leave out fields that are empty (null, empty text or lists)."
          },
          "saveCsv": {
            "title": "Save a CSV file",
            "type": "boolean",
            "description": "Also saves the delivered agents as a CSV file (AGENTS.csv, in parts of 5 MB) in the run's key-value store. Free."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Requests in flight at once (1 to 4). Default: 3."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is used by default (datacenter exits the Actor screens itself). You may give your own http:// proxy links instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}