# Distressed Property Scraper: Mortgagee Sales AU & NZ (`abotapi/distressed-au-nz-scraper`) Actor

Find mortgagee-sale and distressed-property listings in Australia and New Zealand. NZ results require a confirmed mortgagee-sale flag; AU results use keyword filtering. Get property, price, location and agent details, plus auction dates where available. Resume runs or track incremental changes

- **URL**: https://apify.com/abotapi/distressed-au-nz-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 distressed property records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Australia and NZ Distressed Property Scraper

Find mortgagee-sale and distressed-property listings across Australia and New Zealand. New Zealand results require a confirmed mortgagee-sale flag; Australian results use keyword filtering. Get property, price, location and agent details, plus auction dates where available. Resume runs or track incremental changes across scheduled searches.

### Why This Scraper?

- **Two registers, one actor.** Walk New Zealand mortgagee-sale listings and Australian mortgagee-sale search results. Each lane keeps its own native filters, and every record comes back normalized to one schema.
- **Distress evidence on every row.** New Zealand rows carry the register's own mortgagee-sale flag; Australian rows carry the keyword match plus auction dates lifted from the listing's event data where published.
- **Detail enrichment built in.** Every record can be opened on its source page for the full description, agent and agency contacts, photo galleries, and auction details.
- **Made for recurring monitoring.** Resume an interrupted run from its ID, or let incremental mode remember what you already scraped and return only NEW and UPDATED records, with EXPIRED markers when a record leaves the source.
- **Search the way each register wants.** New Zealand district and listing-pool filters; Australian state, listing type, property type, bedroom and price ranges. Or just paste links and let URL mode sort them out.
- **Honest by design.** If a register refuses every request the run fails loudly instead of returning an empty dataset that looks like "no results". A genuine empty search says so.

### Use Cases

- **Who:** Investors and buyers hunting below-market property across Australasian mortgagee-sale channels.
- **Who:** Buyers advocates and agents monitoring mortgagee listings by district or state for clients.
- **Who:** Lead-generation teams feeding distressed-property signals into CRM systems and alerting pipelines on a schedule.
- **Who:** Analysts comparing distressed inventory levels across Australia and New Zealand from one dataset.

### Data You Get

> Sample shape: values are illustrative placeholders, not from a live record.

| Field | Example |
| --- | --- |
| `recordId` | `"nz:realestate.co.nz:43000000"` |
| `country` | `"nz"` or `"au"` |
| `source` | `"realestate.co.nz"` or `"realestate.com.au"` |
| `title` | `"123 Sample Road, Sampleton"` |
| `distressType` | `"mortgagee-sale"` |
| `portalId` | `"000000"` |
| `publishedAt` | `"2026-10-01T02:32:41+13:00"` |
| `auctionDate` | `"2026-10-30T10:00:00+11:00"` |
| `location.address` / `location.city` / `location.region` | `"123 Sample Road, Sampleton"` / `"Sampleton"` / `"Auckland"` |
| `valueAmount` / `valueCurrency` / `valueText` | `850000` / `"NZD"` / `"Asking price $850,000"` |
| `status` | `"active"` |
| `parties` | `[{ "role": "agent", "name": "Sample Agent" }]` |
| `attachments` | `[{ "label": "photo", "url": "..." }]` |
| `description` | full listing description (when enrichment is on) |
| `details` | per-source detail block (bedrooms, bathrooms, land area, auction data) |
| `changeType` / `changedFields` / `firstSeenAt` / `lastSeenAt` | incremental-mode metadata |
| `url` | source record URL |

### How to Use

1. Pick a **Mode**: `search` (default) walks the country lanes with your filters; `url` reads only the links you paste. Pasted links are ignored in search mode, and the run log says so.
2. In search mode, pick your **country lanes** (New Zealand, Australia) and set each lane's filters (NZ district and listing pool; AU state, listing type, property type, bedrooms and price). In url mode, paste links.
3. Set **Max items** and whether to fetch detail pages, then click **Start**.
4. Download the dataset as JSON, CSV or Excel, or read it through the API.

**New Zealand mortgagee-sale walk:**

```json
{
  "mode": "search",
  "country": ["nz"],
  "nzRegion": "northland",
  "fetchDetails": true,
  "maxItems": 50
}
```

**Australian mortgagee-sale walk:**

```json
{
  "mode": "search",
  "country": ["au"],
  "auState": "nsw",
  "auListingType": "buy",
  "fetchDetails": true,
  "maxItems": 50
}
```

**URL mode (both registers):**

```json
{
  "mode": "url",
  "urls": [
    "https://www.realestate.co.nz/residential/sale?k=mortgagee",
    "https://www.realestate.com.au/buy/in-nsw/list-1?keywords=mortgagee"
  ],
  "fetchDetails": true,
  "maxItems": 20
}
```

#### Run it from your code

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/distressed-au-nz-scraper").call(run_input={
    "country": ["nz"],
    "nzRegion": "northland",
    "fetchDetails": True,
    "maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["recordId"], item["title"], item.get("valueAmount"))
```

JavaScript:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/distressed-au-nz-scraper').call({
    country: ['au'],
    auState: 'nsw',
    fetchDetails: true,
    maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.recordId, item.title);
```

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the **Integrations** tab.

#### Resume and recurring updates

- **Resume** (`resumeFromRunId`) continues one interrupted run: paste its run ID and the actor skips everything already collected there, so you don't pay twice.
- **Incremental mode** (`incrementalMode`) is for scheduled runs over the same scope. Each record is classified `NEW`, `UPDATED` (with `changedFields`), `UNCHANGED` (suppressed and not billed unless `emitUnchanged` is on) or `EXPIRED` (only after a run that scanned the whole scope, and only with `emitExpired`). Use `stateKey` to share one baseline across slightly different filter variants, and `ignoreFieldsForChanges` to exclude noisy fields from the comparison. The two features are mutually exclusive; pick one per run.

### Send results into your apps (MCP connectors)

Optionally send a summary of each returned record into an app connected through Apify MCP integrations. Select one or more **MCP connectors** and, for Notion, provide the parent page URL or ID. The actor creates a Notion page per record; other connectors receive a best-effort write or digest. Exports are capped by **Max items to export per connector** (50 by default), and connector failures do not change dataset output.

| Field | What it does |
|---|---|
| `mcpConnectors` | Selected MCP connectors (empty = no export). |
| `notionParentPageUrl` | Notion parent page URL or ID; required for Notion exports. |
| `maxNotifyListings` | Maximum records sent to each selected connector (default `50`, maximum `1000`). |

### Input Parameters

All parameters are optional unless noted. Each country lane uses only its own filters.

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` walks the country lanes with your filters; `url` reads only the pasted links. |
| `country` | array | `["nz"]` | Country lanes to walk, in order: `nz`, `au`. Search mode only. |
| `urls` | array | (none) | Pasted source links (any supported site); grouped by site automatically. Read in url mode. |
| `nzRegion` | string | (none) | New Zealand district filter, e.g. `northland`, `auckland`, `wellington`. Empty = national walk. |
| `nzListingType` | string | (none) | New Zealand listing pool: `residential`, `rural`, `commercial`, `rental`. Empty = residential sale. |
| `auState` | string | (none) | Australian state filter: `act`, `nsw`, `nt`, `qld`, `sa`, `tas`, `vic`, `wa`. Empty sweeps all eight states in order. |
| `auListingType` | string | `buy` | Australian listing pool: `buy`, `rent`, `sold`. |
| `auPropertyType` | string | (none) | Australian property type: `house`, `apartment`, `townhouse`, `villa`, `land`, `rural`, `commercial`. |
| `auBedroomsMin` | number | (none) | Minimum bedrooms. |
| `auBedroomsMax` | number | (none) | Maximum bedrooms. |
| `auPriceMin` | number | (none) | Minimum price in AUD. |
| `auPriceMax` | number | (none) | Maximum price in AUD. |
| `auExcludes` | array | (none) | Drop rows whose title contains any of these words. |
| `fetchDetails` | boolean | `true` | Open each record's detail page for the full field set. |
| `maxItems` | integer | `20` | Total result cap across all lanes (`0` = no limit). |
| `maxPages` | integer | `0` | Page cap per search walk; `0` = until natural end. |
| `proxy` | object | Apify Proxy | Connection settings. |
| `resumeFromRunId` | string | (none) | Continue a previous run; only unpushed records are saved. |
| `incrementalMode` | boolean | `false` | Track changes across scheduled runs; only NEW/UPDATED returned. Mutually exclusive with `resumeFromRunId`. |
| `stateKey` | string | (none) | Named incremental baseline; derived from the scope when empty. |
| `emitUnchanged` | boolean | `false` | Also return (and bill) UNCHANGED records in incremental mode. |
| `emitExpired` | boolean | `false` | Also return (and bill) EXPIRED records in incremental mode. |
| `ignoreFieldsForChanges` | array | (none) | Extra fields that never count as a change. |
| `mcpConnectors` | array | (none) | Optional MCP connectors to receive returned record summaries after the run. |
| `notionParentPageUrl` | string | (none) | Parent page URL or ID required for Notion page creation. |
| `maxNotifyListings` | integer | `50` | Maximum records sent to each connector (`1`-`1000`). |

### Output Example

The Output tab offers three tables: **Overview** (one row per record), **Detail-enriched** (runs with detail fetching on) and **Changes** (change type, changed fields, first and last seen, for incremental runs).

> Sample shape: values are illustrative placeholders, not from a live record.

**Example record (New Zealand, mortgagee-flagged):**

```json
{
  "recordId": "nz:realestate.co.nz:43000000",
  "country": "nz",
  "source": "realestate.co.nz",
  "title": "123 Sample Road, Sampleton",
  "distressType": "mortgagee-sale",
  "portalId": "000000",
  "publishedAt": "2026-10-01T02:32:41+13:00",
  "location": { "address": "123 Sample Road, Sampleton", "city": "Sampleton", "region": "Auckland", "country": "NZ" },
  "valueAmount": 850000,
  "valueCurrency": "NZD",
  "valueText": "Asking price $850,000",
  "status": "active",
  "parties": [{ "role": "agent", "name": "Sample Agent" }],
  "description": "Sample listing description.",
  "attachments": [{ "label": "photo", "url": "https://www.realestate.co.nz/listings/43000000/sample.crop.140x178.jpg" }],
  "url": "https://www.realestate.co.nz/43000000/residential/sale/123-sample-road-sampleton",
  "raw": {}
}
```

### Plan Requirement

The actor uses Apify Proxy for all reads, and an Apify plan that includes proxy access is required. If no page can be read at all, the run stops with a clear message instead of returning an empty result.

### FAQ

#### How much does it cost?

The actor is pay per event: a start fee per run plus a per-record fee for every record returned, and a detail surcharge per record only when `fetchDetails` is enabled. Exact prices are on the actor's **Pricing** tab. **Max items** is the cost lever: a run's record count is bounded by it.

#### Is it legal to scrape these registers?

This actor collects only publicly available property listings: New Zealand mortgagee-sale flags are published on the national property register and Australian mortgagee-sale results are public search results. You are responsible for how you use the data: follow the sites' terms and the laws that apply to you, including privacy law such as GDPR or CCPA; personal data of identifiable individuals requires a lawful basis. Every record links back to its official source.

#### Can I get only new or changed records on a schedule?

Yes. Use incremental mode: the actor remembers its baseline per scope and returns only what changed (NEW, UPDATED), with optional EXPIRED markers for records that left the source. Use `stateKey` to share one baseline across slightly different filter variants.

#### Why does a run return fewer records than I expected?

**Max items** (20 by default) stops the run once the cap is reached, walking the selected country lanes in order; raise it or set it to `0` to collect everything. A narrow filter combination (for example a single district plus a listing pool) can also simply match few records; clear a filter to widen the search.

#### Why did my run fail instead of returning an empty dataset?

One of the registers refused every request in that run (temporary rate limiting or an outage). The run is failed loudly rather than returning an empty dataset that would look like "no results". Wait a little and rerun.

#### Can I use it with AI agents or MCP?

Yes. The dataset is JSON, and you can optionally select Apify MCP connectors to send record summaries into connected apps. Notion requires a parent page URL or ID; connector exports are capped separately from the dataset.

### 🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

<table>
<tr><td>🛒 <a href="https://apify.com/abotapi/thewarehouse-co-nz-scraper"><b>The Warehouse NZ Scraper</b></a><br>Scrape The Warehouse New Zealand search results, category pages, and direct product URLs...</td><td>💼 <a href="https://apify.com/abotapi/seek-companies-reviews-scraper"><b>SEEK Company Reviews</b></a><br>From $1/1K. Scrape SEEK Australia and New Zealand company profiles and employee reviews...</td></tr>
<tr><td>🏠 <a href="https://apify.com/abotapi/homes-co-nz-scraper"><b>Homes.co.nz Scraper</b></a><br>Scrape Homes.co.nz listings by location or URL with pagination. Extract property details...</td><td>🚗 <a href="https://apify.com/abotapi/trademe-co-nz-scraper"><b>Trade Me NZ Scraper</b></a><br>Scrape trademe.co.nz across all five sections: Marketplace goods and auctions, Property...</td></tr>
<tr><td>🔌 <a href="https://apify.com/abotapi/pbtech-co-nz-scraper"><b>PB Tech Scraper</b></a><br>Scrape pbtech.co.nz products with full specifications, price, brand, condition, per-store...</td><td>🏠 <a href="https://apify.com/abotapi/realestate-co-nz-scraper"><b>RealestateCo NZ</b></a><br>From $1/1K. Search and extract all real estate properties for sale, rent, and sold across...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/distressed-au-nz-scraper/issues/open). We usually reply within hours.
- 🛠️ **Need another site, extra fields or a private build?** Email <contact@abotapi.com>.
- ⭐ **Enjoying it?** A quick review on the actor page helps other users find it.

# Actor input Schema

## `mode` (type: `string`):

How to discover records. 'search' walks the selected country lanes with your filters. 'url' reads only the links you paste into urls. Pasted links are ignored in search mode; the run log tells you when that happens.

## `country` (type: `array`):

Which registers to walk, in order. New Zealand = mortgagee-flagged listings from the national property register. Australia = keyword-filtered mortgagee-sale results. Each selected lane uses its own filters below.

## `urls` (type: `array`):

Pasted source links (any supported site); grouped by site automatically. Read in url mode.

## `nzRegion` (type: `string`):

Limit the New Zealand walk to one district. Empty = national walk.

## `nzListingType` (type: `string`):

Limit to one New Zealand listing pool. Empty = residential sale, the mortgagee-sale pool.

## `auState` (type: `string`):

Limit the Australian walk to one state or territory. Empty = national walk.

## `auListingType` (type: `string`):

Which Australian listing pool to walk. Buy is the mortgagee-sale pool; rent and sold are supported for completeness.

## `auPropertyType` (type: `string`):

Limit to one Australian property type. Empty = all types.

## `auBedroomsMin` (type: `integer`):

Minimum bedrooms. Selects the bedroom path segment of the search URL.

## `auBedroomsMax` (type: `integer`):

Maximum bedrooms (upper bound). Rides the search as a query filter.

## `auPriceMin` (type: `integer`):

Minimum price in AUD. Lower bound of the price path segment.

## `auPriceMax` (type: `integer`):

Maximum price in AUD. Upper bound of the price path segment.

## `auExcludes` (type: `array`):

Advanced: drop rows whose title contains any of these words (case-insensitive). Example: \["sold", "leased"].

## `fetchDetails` (type: `boolean`):

Open each result's detail page (full description, extra fields). Adds one request per record; disable for fast listing-only runs.

## `maxItems` (type: `integer`):

Stop after this many results total across all lanes. 0 = no limit (run until the walks end).

## `maxPages` (type: `integer`):

Stop each search walk after this many result pages. 0 = walk until the natural end. Max items always applies too.

## `proxy` (type: `object`):

Connection used for requests. New Zealand works with the standard pool; the Australian lane automatically uses residential exits (set when the Australia lane is selected).

## `resumeFromRunId` (type: `string`):

Continue a previous run: only records not already in that run's dataset are pushed. Leave empty for a fresh run.

## `incrementalMode` (type: `boolean`):

Track records across scheduled runs with the same scope: only NEW or UPDATED records are returned (UNCHANGED suppressed), and records that disappear are marked EXPIRED. Mutually exclusive with Resume.

## `stateKey` (type: `string`):

Name for the incremental baseline when you want to share one baseline across different filter variants. Leave empty to derive it from the scope automatically.

## `emitUnchanged` (type: `boolean`):

In incremental mode, also return records that did not change (marked UNCHANGED).

## `emitExpired` (type: `boolean`):

In incremental mode, also return records seen previously that no longer appear (marked EXPIRED).

## `ignoreFieldsForChanges` (type: `array`):

Advanced: record fields that should never count as a change (in addition to the built-in ignore list). Example: \["updatedAt"].

## `mcpConnectors` (type: `array`):

Optionally send a summary of each returned property to connected apps. Authorize a connector under Apify > Settings > Integrations, then select it here. Notion creates a page per record; other connectors receive a best-effort write or digest. Leave empty to skip. Dataset results are unaffected.

## `notionParentPageUrl` (type: `string`):

URL or ID of the Notion page where record pages should be created. Required for Notion; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Maximum number of records written to each connector. Does not affect dataset output.

## Actor input object example

```json
{
  "mode": "search",
  "country": [
    "nz"
  ],
  "urls": [
    "https://www.realestate.co.nz/residential/sale?k=mortgagee",
    "https://www.realestate.com.au/buy/in-nsw/list-1?keywords=mortgagee"
  ],
  "auListingType": "buy",
  "fetchDetails": true,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `detail` (type: `string`):

No description

## `changes` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "country": [
        "nz"
    ],
    "urls": [
        "https://www.realestate.co.nz/residential/sale?k=mortgagee",
        "https://www.realestate.com.au/buy/in-nsw/list-1?keywords=mortgagee"
    ],
    "nzRegion": "",
    "nzListingType": "",
    "auState": "",
    "auListingType": "buy",
    "auPropertyType": "",
    "fetchDetails": true,
    "maxItems": 20,
    "maxPages": 0,
    "proxy": {
        "useApifyProxy": true
    },
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/distressed-au-nz-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "country": ["nz"],
    "urls": [
        "https://www.realestate.co.nz/residential/sale?k=mortgagee",
        "https://www.realestate.com.au/buy/in-nsw/list-1?keywords=mortgagee",
    ],
    "nzRegion": "",
    "nzListingType": "",
    "auState": "",
    "auListingType": "buy",
    "auPropertyType": "",
    "fetchDetails": True,
    "maxItems": 20,
    "maxPages": 0,
    "proxy": { "useApifyProxy": True },
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/distressed-au-nz-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "country": [
    "nz"
  ],
  "urls": [
    "https://www.realestate.co.nz/residential/sale?k=mortgagee",
    "https://www.realestate.com.au/buy/in-nsw/list-1?keywords=mortgagee"
  ],
  "nzRegion": "",
  "nzListingType": "",
  "auState": "",
  "auListingType": "buy",
  "auPropertyType": "",
  "fetchDetails": true,
  "maxItems": 20,
  "maxPages": 0,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false
}' |
apify call abotapi/distressed-au-nz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/distressed-au-nz-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EDTSlySm8VJR2SVjq/builds/WyOrvWgGPnoTfoLpt/openapi.json
