# Foreclosed Property Scraper (Cheap) (`data_api/foreclosed-property-scraper-cheap`) Actor

Foreclosed properties list tool that extracts distressed real estate inventory across the US, giving investors direct access to off-market and foreclosure deals.

- **URL**: https://apify.com/data\_api/foreclosed-property-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Foreclosed Property Scraper

![Foreclosed Property Scraper](cover.jpg)

Finding foreclosures the hard way means paying a monthly fee to some niche real estate portal or digging through county records by hand. This scraper skips all of that. Tell it a ZIP code or a state and it pulls back the homes currently in foreclosure (or recently sold off) as clean, structured rows: asking price, full street address, beds and baths, square footage, agent contacts, coordinates, photos, and more. One run gives you a foreclosure dataset you can drop straight into a spreadsheet or a model.

### What you get

Every property comes back as one flat row, so the columns line up when you load results into a sheet or database. The fields fall into a few groups:

- **Identity and status** — `propertyId`, `listingId`, `listingSlug`, `listingStatus`, `isForeclosure`, plus lifecycle flags like `isPending`, `isContingent`, `isAuction`, `isNewListing`, `isPriceReduced`
- **Price and dates** — `askingPrice`, `salePrice`, `priceCutAmount`, `listedDate`, `soldDate`
- **Property details** — `propertyKind`, `propertySubKind`, `bedroomCount`, `bathroomCount`, `interiorSqft`, `lotSqft`, `yearBuilt`, `garageSpaces`, `hasMatterport`
- **Location** — `streetAddress`, `cityName`, `stateName`, `stateCode`, `postalCode`, `lat`, `lng`, `countyName`, `countyFips`, `streetViewUrl`
- **Media** — `coverPhotoUrl`, `photoCount`, `photoLinks`
- **Agents and source** — `primaryAgentName`, `primaryAgentEmail`, `primaryAgentPhones`, `secondaryAgentName`, `brandingName`, `sourceName`, `openHouses`

### Quick start

1. Press **Try for free** to open the input form.
2. Type a location into at least one of **ZIP code**, **City**, or **State abbreviation**.
3. Add any filters you want, such as price range, bedroom count, or property type.
4. Set a **Total listings cap** to control spend, pick a proxy, then press **Start**.
5. When the run finishes, export the data as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Wholesaling** — pull a fresh foreclosure list for one ZIP code and reach out to distressed sellers first
- **Comparable sales** — export recently sold foreclosures to build a market analysis without retyping anything
- **Lead generation** — collect listing agent names, emails, and phone numbers for bank-owned homes
- **Market monitoring** — schedule a daily run to catch new foreclosures the moment they hit your target areas
- **Investment screening** — filter by price, beds, square footage, and year built to shortlist deals that fit your model

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `postalCode` | string | One of postalCode, cityName, stateCode, or addressLine | Single 5-digit US ZIP code, the tightest location filter. Example `33139`. |
| `stateCode` | string | One of postalCode, cityName, stateCode, or addressLine | Two-letter US state code, best paired with another filter. Prefilled `FL`. |
| `cityName` | string | One of postalCode, cityName, stateCode, or addressLine | Exact city name; pair with `stateCode` for clean results. Prefilled `Miami`. |
| `streetName` | string | Optional | Limit results to homes on one named street, e.g. `Ocean Drive`. |
| `addressLine` | string | Optional | One precise street address line. |
| `propertyTypes` | array of strings | No | Keep only chosen property categories, e.g. `single_family`, `condo`. |
| `featureKeywords` | array of strings | No | Filter by amenities such as `pool`, `waterfront`, `central_air`. |
| `bedsMin` / `bedsMax` | integer | No | Lowest and highest bedroom counts to allow. |
| `bathsMin` / `bathsMax` | integer | No | Lowest and highest bathroom counts to allow. |
| `listPriceMin` / `listPriceMax` | integer | No | Asking price range in USD. |
| `soldPriceMin` / `soldPriceMax` | integer | No | Sold price range in USD. |
| `soldDateFrom` / `soldDateTo` | string | No | Closed-sale date window, written `YYYY-MM-DD`. |
| `sqftMin` / `sqftMax` | integer | No | Interior living area range in square feet. |
| `lotSqftMin` / `lotSqftMax` | integer | No | Lot size range in square feet. |
| `yearBuiltFrom` / `yearBuiltTo` | integer | No | Construction year range. |
| `hoaFeeMax` | integer | No | Largest monthly HOA fee to allow. |
| `excludeHoa` | boolean | No | Return only homes with no HOA fee. Default `false`. |
| `openHouseFrom` / `openHouseTo` | string | No | Open-house date window, written `YYYY-MM-DD`. |
| `pageSize` | integer | No | Listings fetched per request. Default `150`. |
| `startOffset` | integer | No | Position where pagination begins. Default `0`. |
| `resultsLimit` | integer | No | Hard cap on total listings collected. Default `3000`. |
| `runTimeoutSeconds` | integer | No | Whole-run time budget in seconds. Default `360`. |
| `requestTimeoutSeconds` | integer | No | Per-request time budget in seconds. Default `45`. |
| `proxyConfiguration` | object | No | Proxies used for requests. Defaults to US datacenter. |

#### Example input

```json
{
    "stateCode": "FL",
    "cityName": "Miami",
    "propertyTypes": ["single_family", "multi_family"],
    "listPriceMax": 750000,
    "bedsMin": 2,
    "resultsLimit": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
}
```

### Output

Each foreclosed home becomes one flat JSON row. Every declared field is present on a normal row, and unavailable values come back as `null` or empty so your dataset stays rectangular.

#### Example output

```json
{
    "listingAttribution": true,
    "propertyId": "9482736150",
    "listingId": "2967451308",
    "listingSlug": "742-Evergreen-Ter_Miami_FL_33139_M94827-36150",
    "listingStatus": "for_sale",
    "askingPrice": 389000,
    "salePrice": null,
    "priceCutAmount": 15000,
    "listedDate": "2026-05-18",
    "soldDate": "",
    "propertyKind": "single_family",
    "propertySubKind": "",
    "bedroomCount": 3,
    "bathroomCount": "2",
    "interiorSqft": 1640,
    "lotSqft": 5200,
    "yearBuilt": 1998,
    "garageSpaces": 2,
    "streetAddress": "742 Evergreen Terrace",
    "cityName": "Miami",
    "stateName": "Florida",
    "stateCode": "FL",
    "postalCode": "33139",
    "lat": 25.7907,
    "lng": -80.1300,
    "countyName": "Miami-Dade County",
    "countyFips": "12086",
    "streetViewUrl": "https://maps.googleapis.com/maps/api/streetview?location=25.7907,-80.1300",
    "coverPhotoUrl": "https://ap.rdcpix.com/example/cover-2x.jpg",
    "photoCount": 24,
    "photoLinks": [
        "https://ap.rdcpix.com/example/photo-1.jpg",
        "https://ap.rdcpix.com/example/photo-2.jpg"
    ],
    "hasMatterport": false,
    "isComingSoon": false,
    "isNewListing": true,
    "isPriceReduced": true,
    "isForeclosure": true,
    "isNewConstruction": false,
    "isPending": false,
    "isContingent": false,
    "isAuction": false,
    "isFractionallyOwned": false,
    "sourceId": "MIAMI",
    "sourceName": "Miami Association of Realtors",
    "sourceType": "mls",
    "sourceListingId": "A11234567",
    "showContactAgent": true,
    "marketType": "for_sale",
    "leadType": "advantage",
    "isVaEligible": false,
    "productList": ["co_broke"],
    "productBrandName": "essentials",
    "primaryAgentType": "seller",
    "primaryAgentName": "Maria Alvarez",
    "primaryAgentEmail": "maria.alvarez@example.com",
    "primaryAgentOffice": "Coastal Realty Group",
    "primaryAgentPhones": ["3055550142"],
    "secondaryAgentType": null,
    "secondaryAgentName": null,
    "secondaryAgentEmail": null,
    "secondaryAgentOffice": null,
    "secondaryAgentPhones": [],
    "brandingName": "Coastal Realty Group",
    "searchPromotions": [],
    "communityPromotions": [],
    "openHouses": [
        {
            "start_date": "2026-06-07T17:00:00Z",
            "end_date": "2026-06-07T20:00:00Z",
            "description": "Saturday open house",
            "time_zone": "America/New_York"
        }
    ],
    "collectedAt": "2026-06-29T12:00:00.000000+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingAttribution` | boolean | Source attribution flag from the listing feed |
| `propertyId` | string | Stable internal identifier for the property |
| `listingId` | string | Identifier of the specific listing |
| `listingSlug` | string | URL slug for the listing |
| `listingStatus` | string | Current state, such as `for_sale` or `sold` |
| `askingPrice` | integer | Current listed asking price in USD |
| `salePrice` | integer | Final closing price in USD, on sold homes only |
| `priceCutAmount` | integer | How far the asking price has been reduced, in USD |
| `listedDate` | string | ISO 8601 date the listing went live |
| `soldDate` | string | ISO 8601 date the sale closed, when applicable |
| `propertyKind` | string | Top-level property type, e.g. `single_family` |
| `propertySubKind` | string | Finer property classification |
| `bedroomCount` | integer | Number of bedrooms |
| `bathroomCount` | string | Consolidated bathroom count |
| `interiorSqft` | integer | Interior living area in square feet |
| `lotSqft` | integer | Outdoor lot size in square feet |
| `yearBuilt` | integer | Year the home was built |
| `garageSpaces` | integer | Number of garage spaces |
| `streetAddress` | string | Full street address line |
| `cityName` | string | City the property sits in |
| `stateName` | string | Full state name |
| `stateCode` | string | Two-letter US state code |
| `postalCode` | string | ZIP or postal code |
| `lat` | number | Latitude of the property |
| `lng` | number | Longitude of the property |
| `countyName` | string | County the property falls under |
| `countyFips` | string | County FIPS code |
| `streetViewUrl` | string | Link to a street-level map preview |
| `coverPhotoUrl` | string | Direct link to the headline photo |
| `photoCount` | integer | How many photos accompany the listing |
| `photoLinks` | array | Direct image URLs for the property |
| `hasMatterport` | boolean | True when a Matterport 3D tour is attached |
| `isComingSoon` | boolean | True when marked coming soon |
| `isNewListing` | boolean | True when flagged as a new listing |
| `isPriceReduced` | boolean | True when the price recently dropped |
| `isForeclosure` | boolean | True for active foreclosure listings |
| `isNewConstruction` | boolean | True when newly built |
| `isPending` | boolean | True when the sale is pending |
| `isContingent` | boolean | True when the sale is contingent |
| `isAuction` | boolean | True when sold at auction |
| `isFractionallyOwned` | boolean | True when ownership is fractional |
| `sourceId` | string | Identifier of the originating feed |
| `sourceName` | string | Name of the originating feed, e.g. the local MLS |
| `sourceType` | string | Type of the originating feed |
| `sourceListingId` | string | Listing ID in the source feed |
| `showContactAgent` | boolean | Whether a contact-an-agent action is offered |
| `marketType` | string | Lead market classification |
| `leadType` | string | Lead type for the listing |
| `isVaEligible` | boolean | True when flagged Veterans United eligible |
| `productList` | array | Distribution products attached to the listing |
| `productBrandName` | string | Brand name tied to the products |
| `primaryAgentType` | string | Type of the primary representative |
| `primaryAgentName` | string | Name of the primary representative |
| `primaryAgentEmail` | string | Email for the primary representative |
| `primaryAgentOffice` | string | Office handling the primary representative |
| `primaryAgentPhones` | array | Phone numbers for the primary representative |
| `secondaryAgentType` | string | Type of the secondary representative |
| `secondaryAgentName` | string | Name of the secondary representative |
| `secondaryAgentEmail` | string | Email for the secondary representative |
| `secondaryAgentOffice` | string | Office handling the secondary representative |
| `secondaryAgentPhones` | array | Phone numbers for the secondary representative |
| `brandingName` | string | Affiliated agent branding label |
| `searchPromotions` | array | Search-level promotions attached to the listing |
| `communityPromotions` | array | Community-level promotions attached to the listing |
| `openHouses` | array | Scheduled open house entries with times and notes |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Reason a row failed; `null` on success |

### Tips for best results

- **Always set a location.** Give the scraper at least one of `postalCode`, `cityName`, `stateCode`, or `addressLine`, or it has nothing to search against.
- **Start small.** Drop `resultsLimit` to 50 or so on your first run to confirm the fields match your pipeline before pulling thousands.
- **Combine `cityName` with `stateCode`.** A city on its own can match across several states; pairing the two keeps results tight.
- **Switch proxy tiers if requests start failing.** US datacenter clears most runs; move to residential if you hit repeated errors.
- **Raise `requestTimeoutSeconds`** toward 60 to 90 on slower proxies, and give `runTimeoutSeconds` more headroom for large states.
- **Use the sold-date filters for comps.** Set `soldDateFrom` and `soldDateTo` to gather recently closed foreclosures for a market analysis.

### How can I use foreclosure property data?

**How can I use the Foreclosed Property Scraper to build a wholesaling lead list?**
Enter a target ZIP code or city and the scraper returns every active foreclosure there, each with the street address, asking price, beds and baths, and the listing agent's name, email, and phone. Sort by `priceCutAmount` or `listedDate` to surface motivated sellers, then export the rows straight into your CRM.

**How can I find recently sold foreclosures for a comparable market analysis?**
Set `soldDateFrom` and `soldDateTo` to the window you want and the scraper pulls closed foreclosure sales with `salePrice`, `interiorSqft`, `yearBuilt`, and location fields. Group the results by neighborhood or ZIP to price your own offers against what actually traded.

**How can I scrape bank-owned home listings across a whole state?**
Pass a `stateCode` such as `FL`, raise `resultsLimit`, and the scraper paginates through the available inventory and hands back one row per home. Filter by `propertyTypes`, price range, or bedroom count to keep only the distressed deals that match your buy box.

**How can I monitor new foreclosures automatically?**
Save your filters and schedule the run on Apify to repeat daily. Each run captures `collectedAt` and the lifecycle flags like `isNewListing` and `isForeclosure`, so you can diff against yesterday's dataset and flag fresh distressed listings as they appear.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `postalCode` (type: `string`):

Narrow the search to a single 5-digit US ZIP code. This is the tightest way to focus on one neighborhood. For instance, use '33139' for Miami Beach, FL.

## `stateCode` (type: `string`):

Cast a wider net with a 2-letter US state code. Works best paired with another filter. For example, 'FL' for Florida or 'TX' for Texas.

## `cityName` (type: `string`):

Match a single city by its exact name. Pairing it with stateCode gives the cleanest results. Try 'Miami' or 'Dallas'.

## `streetName` (type: `string`):

Limit results to homes sitting on one named street, such as 'Ocean Drive' or 'Elm St'.

## `addressLine` (type: `string`):

Search for one precise street address, for example '742 Evergreen Terrace'.

## `propertyTypes` (type: `array`):

Keep only the property categories you care about. Accepted values: apartment, condo\_townhome, condo\_townhome\_rowhome\_coop, condo, condos, single\_family, multi\_family, mobile, land, farm, other.

## `featureKeywords` (type: `array`):

Screen listings by amenities or standout features. Try values like: basement, carport, central\_air, den, hardwood\_floors, pool, waterfront, ocean\_view, fireplace.

## `bedsMin` (type: `integer`):

Lowest acceptable bedroom count.

## `bedsMax` (type: `integer`):

Highest acceptable bedroom count.

## `bathsMin` (type: `integer`):

Lowest bathroom count to allow, half-baths counted.

## `bathsMax` (type: `integer`):

Highest bathroom count to allow.

## `listPriceMin` (type: `integer`):

Floor on the current listed asking price, in USD.

## `listPriceMax` (type: `integer`):

Ceiling on the current listed asking price, in USD.

## `soldPriceMin` (type: `integer`):

Floor on the final sold price, in USD.

## `soldPriceMax` (type: `integer`):

Ceiling on the final sold price, in USD.

## `soldDateFrom` (type: `string`):

Keep only homes that closed on or after this date, written as YYYY-MM-DD.

## `soldDateTo` (type: `string`):

Keep only homes that closed on or before this date, written as YYYY-MM-DD.

## `sqftMin` (type: `integer`):

Smallest interior living area to include, measured in square feet.

## `sqftMax` (type: `integer`):

Largest interior living area to include, measured in square feet.

## `lotSqftMin` (type: `integer`):

Smallest outdoor lot size to include, measured in square feet.

## `lotSqftMax` (type: `integer`):

Largest outdoor lot size to include, measured in square feet.

## `yearBuiltFrom` (type: `integer`):

Earliest construction year to allow.

## `yearBuiltTo` (type: `integer`):

Latest construction year to allow; lower it to surface older builds.

## `hoaFeeMax` (type: `integer`):

Largest monthly Homeowners Association fee you are willing to accept.

## `excludeHoa` (type: `boolean`):

Turn this on to return only homes with zero Homeowners Association fees.

## `openHouseFrom` (type: `string`):

Only show homes with an open house scheduled on or after this date (YYYY-MM-DD).

## `openHouseTo` (type: `string`):

Only show homes with an open house scheduled on or before this date (YYYY-MM-DD).

## `pageSize` (type: `integer`):

How many listings to fetch in one call to the source. Default 150.

## `startOffset` (type: `integer`):

The positional index where pagination begins. Default 0.

## `resultsLimit` (type: `integer`):

The hard ceiling on how many listings the run collects across every page. Default 3000.

## `runTimeoutSeconds` (type: `integer`):

Once the run exceeds this many seconds, it wraps up cleanly and exits. Default 360.

## `requestTimeoutSeconds` (type: `integer`):

How long to wait on each individual request before giving up on it. Default 45.

## `proxyConfiguration` (type: `object`):

Pick the proxies that route your requests so you stay under the radar and avoid blocks. US datacenter proxies are the default.

## Actor input object example

```json
{
  "postalCode": "33139",
  "stateCode": "FL",
  "cityName": "Miami",
  "propertyTypes": [
    "single_family",
    "multi_family"
  ],
  "featureKeywords": [
    "pool",
    "waterfront"
  ],
  "bedsMin": 2,
  "bedsMax": 4,
  "bathsMin": 1,
  "listPriceMin": 150000,
  "listPriceMax": 750000,
  "soldDateFrom": "2023-01-01",
  "soldDateTo": "2023-12-31",
  "yearBuiltFrom": 1990,
  "yearBuiltTo": 2020,
  "excludeHoa": false,
  "pageSize": 150,
  "startOffset": 0,
  "resultsLimit": 3000,
  "runTimeoutSeconds": 360,
  "requestTimeoutSeconds": 45,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "stateCode": "FL",
    "cityName": "Miami",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/foreclosed-property-scraper-cheap").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 = {
    "stateCode": "FL",
    "cityName": "Miami",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/foreclosed-property-scraper-cheap").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "stateCode": "FL",
  "cityName": "Miami",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call data_api/foreclosed-property-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/foreclosed-property-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8e4xLzi0cxaxtNDMG/builds/9JgBTSwOl69Q1oQSe/openapi.json
