{
  "openapi": "3.0.1",
  "info": {
    "title": "AU & NZ Real Estate Agent OSINT - Profiles & Decision Scores",
    "description": "Build OSINT intelligence reports on real estate agents across Australia and New Zealand. Extract profiles, contacts, agency details, active listings, sales history, reviews and media mentions. Each report includes an evidence-backed 0–100 decision score. Structured JSON for AI agents, APIs and MCP.",
    "version": "1.0",
    "x-build-id": "4YjaTmgaEScBx3B5F"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~realestate-agent-osint/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-realestate-agent-osint",
        "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~realestate-agent-osint/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-realestate-agent-osint",
        "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~realestate-agent-osint/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-realestate-agent-osint",
        "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": "Mode",
            "enum": [
              "realestate",
              "url"
            ],
            "type": "string",
            "description": "What to run. 'realestate' (default): one scored report per agent from agentQueries, agentUrls or suburbs. 'url': read the pasted urls (listings, agencies, articles, agent profiles); agentQueries, agentUrls and suburbs are then ignored.",
            "default": "realestate"
          },
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "URL mode only (ignored in Realestate mode). One link per line from reiwa.com.au, domain.com.au, ratemyagent.com.au / .co.nz, realestate.com.au, realcommercial.com.au, property.com.au, theguardian.com or theurbandeveloper.com, a realestate.co.nz agent profile (/agent/<id>/<name>) or a Ray White New Zealand office site agent profile. Left untouched: one example of every supported link shape. maxItems is split evenly across the links (at least 1 record each). Unsupported or bot-protected links are skipped with a SKIP warning.",
            "items": {
              "type": "string"
            },
            "default": [
              "https://reiwa.com.au/for-sale/applecross/",
              "https://reiwa.com.au/for-sale/applecross/houses/",
              "https://reiwa.com.au/for-sale/applecross/?page=2",
              "https://reiwa.com.au/sold/applecross/",
              "https://reiwa.com.au/rental-properties/applecross/",
              "https://reiwa.com.au/commercial/for-sale/perth/",
              "https://reiwa.com.au/business/for-sale/perth~region/",
              "https://reiwa.com.au/real-estate-agents/applecross/",
              "https://reiwa.com.au/27-marmion-street-fremantle-4964208/",
              "https://reiwa.com.au/real-estate-agency/bourkes-14089-0/",
              "https://reiwa.com.au/the-wa-market/resources/",
              "https://reiwa.com.au/news/perth-vacancy-rate-drops-to-lowest-level-in-nearly-two-years/",
              "https://www.theguardian.com/australia-news/australia-news",
              "https://www.theguardian.com/australia-news/2026/oct/01/brisbane-sydney-hit-hardest-by-falling-house-prices",
              "https://www.theurbandeveloper.com/",
              "https://www.theurbandeveloper.com/articles/brisbane-airport-corporation-masterplan-terminal3-plans-investment-approved"
            ]
          },
          "agentQueries": {
            "title": "Agents by name (name + suburb)",
            "type": "array",
            "description": "Agents to look up by name, as a JSON array: [{\"name\": \"Jane Smith\", \"suburb\": \"Bondi NSW\"}]; New Zealand (country nz): {\"name\": \"Jane Smith\", \"suburb\": \"Ponsonby, Auckland\"}. The suburb is optional but keeps namesakes out: the directories are searched in that suburb's state. An ambiguous suburb (\"Richmond\") is not searched or billed; the run lists the candidates.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "title": "Agent name",
                  "description": "Full name of the agent, e.g. Jane Smith."
                },
                "suburb": {
                  "type": "string",
                  "title": "Suburb",
                  "description": "Optional: suburb with state (Bondi NSW) or NZ region (Ponsonby, Auckland)."
                }
              },
              "required": [
                "name"
              ]
            },
            "default": []
          },
          "agentUrls": {
            "title": "Agent profile URLs (optional)",
            "type": "array",
            "description": "Agent profile links to report on: domain.com.au /real-estate-agent/<name>-<id>, ratemyagent.com.au or .co.nz /real-estate-agent/<name>-<code>/, reiwa.com.au or realestate.com.au agent pages. One row per agent, however many links reach it.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "suburbs": {
            "title": "Suburbs to sweep (optional)",
            "type": "array",
            "description": "Suburbs to sweep for the agents working there. Australia with the state (and postcode): \"Bondi NSW\", \"Brighton VIC 3186\", \"Darwin\" (= Darwin City NT 0800). New Zealand (country nz) with the region: \"Ponsonby, Auckland\". A name several suburbs share (\"Richmond\", \"St Kilda\") is not swept until you add the state, postcode or region; the run lists the candidates.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxAgentsPerSuburb": {
            "title": "Max agents per suburb",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Max agents reported per swept suburb, counted as people (one agent on several directories is one row).",
            "default": 25
          },
          "country": {
            "title": "Country",
            "enum": [
              "au",
              "nz"
            ],
            "type": "string",
            "description": "Market: 'au' = Australia (NSW, VIC, QLD, SA, WA, TAS, NT, ACT), 'nz' = New Zealand. Scopes the directories, the suburb names and the licence registers; a suburb of the other country is not swept.",
            "default": "au"
          },
          "includeSoldHistory": {
            "title": "Full sold history",
            "type": "boolean",
            "description": "Attach the sold listings (address, date, price where published, method) and their analysis. Billed as sold-history once per agent whose sold list is complete and holds 5 or more sales.",
            "default": true
          },
          "includeReviews": {
            "title": "Reviews (agent level)",
            "type": "boolean",
            "description": "Attach the review analysis: count, average, Bayesian rating, aspect themes with real quotes (reviewer names removed). Billed as reviews-multisite once per agent with analysed reviews.",
            "default": true
          },
          "includeLicenceCheck": {
            "title": "Licence & disciplinary check",
            "type": "boolean",
            "description": "Check the agent's own register (NSW, QLD, WA or New Zealand). licence holds a CONFIRMED licence only (name and the register's address agree); same-name entries the address does not confirm go to licenceCandidates (leads, not facts); licenceCheck says how the lookup ended. VIC, SA, ACT, TAS and NT have no register that permits automated lookup (licenceCheck no-public-register).",
            "default": true
          },
          "includeNetwork": {
            "title": "Co-listing network",
            "type": "boolean",
            "description": "Attach the co-listing partners named on the agent's sales; a partner that is another agent of this run is marked inRun. When the graph has at least one link, network.html is saved and network is billed once per run.",
            "default": true
          },
          "includeAgencyData": {
            "title": "Agency profile block",
            "type": "boolean",
            "description": "Attach the agent's agency (agency). Australia: as the agent directory publishes it: website, general mailbox (labelled role or person), phone, address, logo, profile tier and roster (names, roles, directory links; never colleagues' numbers); rides the agent's profile request, no extra request. New Zealand: the office of the agent's joined realestate.co.nz profile: name, legal entity, address, website and roster names.",
            "default": true
          },
          "includeCurrentListings": {
            "title": "Current listings",
            "type": "boolean",
            "description": "Attach the agent's current for-sale listings (currentListings). Australia: the directory's total, suburbs, property types, advertised price texts, auction share and up to 5 listing links (one extra directory request per agent). New Zealand: the joined realestate.co.nz profile's own total and its first 6 listings with listed date and days listed (no extra request).",
            "default": true
          },
          "includeAgentWebsites": {
            "title": "Agency website profiles",
            "type": "boolean",
            "description": "Read the agent's public profiles beyond the directories. Australia: the agent's profile on its agency's own website (Ray White, LJ Hooker, Raine & Horne, Harcourts, Barry Plant office sites, the agent's own page, or an independent agency's team pages). New Zealand: realestate.co.nz (the mobile its call link shows, office legal entity and address, listings, 12-month figures, recent sales), OneRoof (sold totals, bio, specialities, top suburbs), the Bayleys agent list and the agency's own site (Harcourts, Ray White, the agent's own page). Emails and phones ONLY as a page shows them (never behind an Email button, a masked number or hidden page data). A profile is used only when a phone it shows is already on the agent's record, or it is the only person of that name at the agent's office (in New Zealand also sharing a sale or listing with the agent's record); anything weaker is listed in leads. A site that does not answer is listed in unreadSections (agentWebsite / nzProfiles). Plain web requests, no proxy, about 1 to 8 per agent.",
            "default": true
          },
          "includeMedia": {
            "title": "Media mentions",
            "type": "boolean",
            "description": "Search the Elite Agent industry news site for articles that print the agent's full name (one search per name, plain web request, no proxy). An article is listed in mediaMentions only when a sentence that names the agent also names the agent's agency or one of its suburbs, and no sentence ties the name to another office; any other article that prints the name is listed in mentionLeads (a lead, never counted or scored). Awards are read only from a sentence of such an article that names the agent and the award together (awards, source 'media'). Links point to the public articles. A news site that does not answer is listed in unreadSections (media).",
            "default": true
          },
          "includeAgencyEntity": {
            "title": "Agency business entity (Australia)",
            "type": "boolean",
            "description": "Look up the agency on the public Australian Business Register (ABN Lookup name search in the office's state, plus one details page; plain web requests, at most two per agency, cached per run). agency.entity (ABN, entity name and type, status, GST, business names, location) is filled only when exactly one active entity in that state carries the agency's name AND its main business location postcode is the office postcode; otherwise up to three unconfirmed agency.entityCandidates are listed with the reason. It describes the agency, never the agent. Needs the agency block (Agency profile block on). New Zealand: not available (the NZ business register needs an access key). A register that does not answer is listed in unreadSections (agencyEntity).",
            "default": true
          },
          "aiAnalysis": {
            "title": "Deprecated option",
            "type": "boolean",
            "description": "Deprecated: no longer used. The actor returns structured data for your own AI agent.",
            "default": false
          },
          "suburbLeaderboard": {
            "title": "Suburb leaderboard",
            "type": "boolean",
            "description": "Also push one ranked leaderboard row per suburb with 3 or more scored agents (the agents the sweep found there or whose main suburb it is). Billed as suburb-leaderboard once per board.",
            "default": false
          },
          "maxItems": {
            "title": "Max results per run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on agents reported (and billed) per run in Realestate mode; one person is one row. URL mode: total records, split evenly across the links (at least 1 per link).",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Default: Apify Proxy RESIDENTIAL with AU exits (New Zealand works over them too). Agents outside Western Australia need residential: on a datacenter-only group or no proxy those directories are skipped, and a run that finds nothing else fails with 'Residential connection required'. Proxy traffic counts toward your Apify proxy usage.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          },
          "maxRequestsPerMin": {
            "title": "Max requests per minute",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Polite pacing per site: each directory, review site and licence register gets at most this many requests per minute.",
            "default": 24
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Run ID (or its dataset ID) of an interrupted run of this actor: agents it already reported are skipped and not billed again."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Only emit (and only bill) agents that are new or whose merged record changed since the last successful run with the same state key. Compared: name, contact details, agency, licence, sold-listing summary and history, review count and average. Never compared (kept in the output): fetch and last-seen timestamps, photo URL, recent review text, source lists, and the values measured against the other agents of the run (score, network, Bayesian rating), which move whenever a peer joins or drops out. Unchanged agents are suppressed and not billed. When a source refuses an agent it listed before, the stored record is kept (for at most two runs in a row) instead of a degraded one.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Named baseline scope for incremental mode. Runs sharing a stateKey diff against each other.",
            "default": "default"
          },
          "emitUnchanged": {
            "title": "Emit unchanged",
            "type": "boolean",
            "description": "Incremental mode only: also emit (and bill) unchanged agents, flagged changeType=UNCHANGED.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired",
            "type": "boolean",
            "description": "Incremental mode only: also emit agents that disappeared from the source set since the baseline, flagged changeType=EXPIRED. Only after a complete suburbs-only scan: never when a site refused a profile, suburb list or name search on that run, nor after a time-limit cut or a maxItems cap.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Extra dataset fields that must not alone mark a record UPDATED. Dotted paths reach nested fields, for example reviews.average or soldSummary.count12m; * matches any one key.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send a condensed summary of each result into the apps you already use, via Model Context Protocol (MCP) connectors. The full record stays in the dataset. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify."
          },
          "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}