# Spain Property & Judicial Auctions Scraper | BOE (`abotapi/boe-es-auction-scraper`) Actor

Scrape Spain's official BOE auction portal: judicial and public auction listings with expediente, dates, claim amounts, valuations, minimum bids, deposits, authority contact, property lots and documents. Monitoring (NEW, UPDATED, EXPIRED), incremental runs, resume, MCP export.

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

## Pricing

from $1.20 / 1,000 auction 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

## Spain BOE Auction Scraper

Scrape Spain's BOE auction portal (subastas.boe.es) - judicial and administrative auctions with money fields, property lots, bid status, and documents, ready for search or pasted links and monitoring over time.

### Why This Scraper?

- **Every auction status.** Search across all five portal statuses (upcoming, judicial enforcement, subsequent, cancelled, finished) or read specific auction links you paste in.
- **Money fields and lots.** Each record carries claim amount, appraised value, valuation, minimum bid, deposit, bid tranches, lot count, and the full lot details with documents.
- **Dates and authority.** Conclusion, start, and publication dates plus the enforcing authority, province, locality, street address, and postal code - everything needed to filter and route a deal.
- **Bid status without an account.** Each enriched record says whether the auction received bids and where its bidding period stands. Bid amounts are the one thing the portal answers only to registered users, so the actor reports the public status instead of inventing a number.
- **Documents linked.** Bases, inventory, and appraisal attachments are collected as URLs on every record.
- **Monitoring ready.** Incremental mode with resume and change fields flags what moved between runs, so you can schedule recurring checks cheaply.

### Use Cases

- **Who:** Real estate investors tracking foreclosure and enforcement auctions nationwide.
- **Who:** Legal and compliance researchers monitoring auction activity by court or authority.
- **Who:** Data teams enriching property pipelines with BOE auction records and valuation history.

### Data You Get

> Sample shape: one auction record as published on the portal.

| Field | Example |
| --- | --- |
| `idSub` | `SUB-JA-2025-251191` |
| `estado` | `EJ` |
| `tipoSubasta` | `JUDICIAL EN VÍA DE APREMIO` |
| `cuentaExpediente` | `3527 0000 05 1106 24` |
| `fechaInicio` | `18-09-2026 18:00:00 CET (ISO: 2026-09-18T18:00:00+02:00)` |
| `fechaConclusion` | `08-10-2026 18:00:24 CET (ISO: 2026-10-08T18:00:24+02:00)` |
| `fechaPublicacion` | `26-09-2026` |
| `cantidadReclamada` | `278.898,39 €` |
| `valorSubasta` | `230.518,81 €` |
| `tasacion` | `384.198,00 €` |
| `pujaMinima` | `Sin puja mínima` |
| `tramos` | `4.610,37 €` |
| `deposito` | `11.525,94 €` |
| `lotes` | `1` |
| `pujasEstado` | `con pujas` |
| `hasBids` | `true` |
| `autoridadCodigo` | `28079` |
| `autoridadDescripcion` | `JUZGADO DE PRIMERA INSTANCIA N. 7 DE MADRID` |
| `provincia` | `MADRID` |
| `localidad` | `MADRID` |
| `direccion` | `CALLE FALSA 123` |
| `codigoPostal` | `28013` |
| `detailUrl` | `https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191` |
| `changeType` | `NEW` |
| `lastSeenAt` | `2026-10-01T09:14:03.000Z` |

Property lots ride the record in `bienes` (description, address, postal code, town, province, possession status, visitable flag, registry entry).

The dataset carries four Output tabs:

- **Auctions** - the default flat view of every auction.
- **Auctions (all fields)** - the full record including the nested `bienes` and `documentos` objects.
- **Property lots** - one row per property lot, unwound next to its auction.
- **Changes (incremental mode)** - just the monitoring fields, for schedule runs.

### How to Use

1. Pick **Status and date search** mode and choose one or more statuses plus a conclusion-date window.
2. Or switch to **Links mode** and paste auction detail URLs you already know.
3. Toggle detail enrichment to pull lots, documents, bid status, and the full money fields from each auction page.
4. Download the dataset as CSV/JSON, or connect Notion to push each auction as a rich page.

**Search auctions in a date window:**

```json
{
  "mode": "search",
  "estados": ["EJ"],
  "fechaFinDesde": "2026-10-01",
  "fechaFinHasta": "2026-10-08",
  "fetchDetails": true,
  "maxItems": 20
}
```

**Follow specific auction links:**

```json
{
  "mode": "url",
  "startUrls": [
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266"
  ],
  "fetchDetails": true,
  "maxItems": 20
}
```

**Monitor for changes on a schedule:**

```json
{
  "mode": "search",
  "estados": ["EJ"],
  "fechaFinDesde": "2026-10-01",
  "fetchDetails": true,
  "maxItems": 50,
  "incrementalMode": true,
  "stateKey": "boe-es-auctions"
}
```

Every link shape the portal emits is read through its auction id:

| Shape | Example |
| --- | --- |
| Judicial detail (canonical) | `https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191` |
| Administrative/tax detail (alphanumeric id) | `https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266` |
| Detail with search context | the same links with `&idBus=...` or `&idLote=...` parameters appended |
| Bare auction id | `SUB-JA-2025-251191` on its own |

Links that carry none of these shapes are skipped with a warning in the run log - never silently dropped. With the field untouched in URL mode, the two example links above are read so the run always has a concrete shape to show; replace them with your own links.

Status search exposes the portal's own narrowing options plus a value range:

- **Asset type** (`tipoBien`): real estate only (the default, matching the actor's original behaviour), vehicles only, or all asset types.
- **Sort** (`sortField` + `sortOrder`): conclusion date (default), auction id, status, or minimum bid, ascending or descending - applied by the portal itself.
- **Value range** (`valorMinimo` / `valorMaximo`): keep only auctions whose auction value falls inside the range, evaluated in euros after each auction is read. Detail reads must be on for the filter to see every auction's valuation; with details off the filter applies only where a value was read and a run-log warning says so.
- **Province** (`provincia`): one province by NAME (accents optional) or INE code; an unmatched name fails the run with the list of valid provinces.
- **Auction id** (`idSubasta`): fetch one auction by identifier.

Turn incremental mode on for scheduled runs. The first run returns every matching auction as NEW; later runs compare the full auction snapshot (amounts, dates, status, lots, authority) against the stored baseline and return only what moved. Fields that change without the auction changing - the document list and the authority phone/fax/email - never count as updates, and `ignoreFieldsForChanges` adds more. State is keyed per status, date-window and link setup, or name it with `stateKey`. Expired tombstones are produced only when a run has fully scanned the tracked search, never after a cap or an interrupted page.

#### Run it from your code

> Sample shape: minimal client calls returning the same records as the dataset.

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("abotapi/boe-es-auction-scraper").call(
    run_input={
        "mode": "search",
        "estados": ["EJ"],
        "fechaFinDesde": "2026-10-01",
        "maxItems": 20,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["idSub"], item["valorSubasta"])
```

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

const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });
const run = await client.actor("abotapi/boe-es-auction-scraper").call({
  runInput: {
    mode: "search",
    estados: ["EJ"],
    fechaFinDesde: "2026-10-01",
    maxItems: 20,
  },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].idSub, items[0].valorSubasta);
```

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

Point the run at an MCP connector you have authorized under Apify, Settings, API & Integrations, and each collected auction is pushed to it after the run - Notion as a rich page per auction, other connectors as a best-effort write. Leave the field empty to skip the export entirely; it never changes the dataset output.

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | Search walks auction listings by status and date windows. URL mode reads the specific auctions you paste. |
| `estados` | array | `["EJ"]` | Statuses to include: PU upcoming, EJ judicial enforcement, SU subsequent, CA cancelled, FS finished. CA and FS return very large sets - combine them with a narrow date window. |
| `fechaFinDesde` | string | ``| Only auctions concluding on or after this date (ISO `YYYY-MM-DD`). Leave empty for no lower bound. |
| `fechaFinHasta` | string |`` | Only auctions concluding on or before this date (ISO `YYYY-MM-DD`). Leave empty for no upper bound. |
| `fechaInicioDesde` | string | ``| Only auctions starting on or after this date (ISO `YYYY-MM-DD`). Leave empty for no lower bound. |
| `fechaInicioHasta` | string |`` | Only auctions starting on or before this date (ISO `YYYY-MM-DD`). Leave empty for no upper bound. |
| `tipoBien` | string | `I` | Asset type: `I` real estate (the original behaviour), `V` vehicles, empty for all. URL mode is unaffected. |
| `sortField` | string | `SUBASTA.FECHA_FIN` | Portal-side sort: conclusion date, auction id, status, or minimum bid. |
| `sortOrder` | string | `asc` | `asc` or `desc`. |
| `valorMinimo` | string | ``| Keep only auctions valued at or above this many euros. |
| `valorMaximo` | string |`` | Keep only auctions valued at or below this many euros. |
| `provincia` | string | ``| Restrict to one province - type its NAME (e.g. Madrid; accents optional) or its INE code (01-52). |
| `idSubasta` | string |`` | Read one auction by its id (e.g. `SUB-JA-2025-251191`). The status filter is skipped for this lookup; date windows still apply. |
| `startUrls` | array | two example links | Auction detail links for URL mode (see the link-shape table above). |
| `urls` | array | ``| Alias of `startUrls` kept for backwards compatibility. |
| `fetchDetails` | boolean | `true` | Read each auction page for lots, documents, bid status, and the full money fields. Off returns listing-row data only. Each enriched auction is billed once as detail enrichment. |
| `maxItems` | integer | `20` | Stop after this many auction records. This is THE cap: the run stops when it is reached or when listings run out. |
| `maxPages` | integer | `0` | Cap listing pages read per status. Zero means no page cap; Max items still stops the run. |
| `proxyConfiguration` | object | Apify Proxy Residential | Apify proxy settings used for portal requests. |
| `resumeFromRunId` | string |`` | Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there. |
| `incrementalMode` | boolean | `false` | Suppress records unchanged since the last run and emit `changeType` on the rest. |
| `stateKey` | string | ``| Named key for the incremental baseline. Use one key per scope so scopes stay independent. |
| `emitUnchanged` | boolean | `false` | With incremental mode on, also emit unchanged records with `changeType: "UNCHANGED"`. |
| `emitExpired` | boolean | `false` | With incremental mode on, emit tombstones for records no longer present in the current scan. |
| `ignoreFieldsForChanges` | array |`` | Fields excluded from change detection in incremental mode, so volatile fields never count as updates. |
| `mcpConnectors` | array | ``| MCP connector export (Notion rich page-per-item). Leave empty to skip; never changes the dataset output. |
| `notionParentPageUrl` | string |`` | URL or id of the Notion page that receives exported records. Required to enable the Notion export; ignored by other connectors. |
| `maxNotifyListings` | integer | `50` | Cap on items written to each connector per run. Does not affect the dataset. |

### Output Example

> Sample shape: one enriched auction record exactly as the dataset stores it.

```json
{
  "idSub": "SUB-JA-2025-251191",
  "estado": "EJ",
  "tipoSubasta": "JUDICIAL EN VÍA DE APREMIO",
  "cuentaExpediente": "3527 0000 05 1106 24",
  "fechaInicio": "18-09-2026 18:00:00 CET (ISO: 2026-09-18T18:00:00+02:00)",
  "fechaConclusion": "08-10-2026 18:00:24 CET (ISO: 2026-10-08T18:00:24+02:00)",
  "fechaPublicacion": "26-09-2026",
  "cantidadReclamada": "278.898,39 €",
  "valorSubasta": "230.518,81 €",
  "tasacion": "0,00 €",
  "pujaMinima": "Sin puja mínima",
  "deposito": "11.525,94 €",
  "pujasEstado": "concluido periodo de pujas",
  "hasBids": true,
  "provincia": "MADRID",
  "localidad": "MADRID",
  "detailUrl": "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
  "changeType": "NEW"
}
```

### Plan Requirement

The portal is public and open, so no premium proxy tier is required to read it; the actor ships with residential proxy exits as its default connection and rotates exits automatically when a connection is refused, falling back to backup connections where the run's plan allows. Apify free plans do not include residential proxies - on a free plan the run warns once and continues on its backup connection, and a run that cannot read any page fails with a clear message instead of returning an empty success. Pay-per-event charges apply to auction records, detail enrichment, and the run start - see the actor's pricing page for current rates.

### FAQ

#### What data comes back from each auction?

Every record carries the auction id, status, type, file number, conclusion/start/publication dates, claim amount, appraised value, valuation, minimum bid, deposit, bid tranches, lot count, bid status, enforcing authority, province, locality, address, postal code, and the detail link. With detail enrichment on you also get every lot with its description, address, possession status, and linked documents.

#### How much does it cost to run?

You pay for Apify compute time, the proxy traffic your plan includes, and three pay-per-event charges: one per auction record, one per enriched auction page, and one per run start. Narrow date windows keep runs small and cheap.

#### Is it legal to scrape the BOE auction portal?

The portal publishes auction notices as official public information. Scraping public data is generally lawful, but you are responsible for complying with the portal's terms of use and applicable data-protection rules for any personal data in the records.

#### Why does the bid amount say the auction has bids but show no price?

The portal answers the current bid amount only to registered users. The actor reports the public bidding-period status (`pujasEstado`, `hasBids`) instead of inventing an amount.

#### Why did my run return no results?

Check the status filter and date window first - narrow windows combined with a single status usually mean genuinely no auctions conclude in that range. Upcoming (PU) and subsequent (SU) auctions are announced before their dates are set, so their date fields are legitimately empty. Link mode only accepts auction-detail URLs carrying an auction id. Runs that cannot reach the portal fail loudly instead of returning an empty success.

#### Can I schedule recurring runs to monitor new auctions?

Yes. Turn on incremental mode with a state key, and each run only emits new or changed auctions with `changeType`, `changedFields`, and first/last-seen timestamps. Schedule it in Apify and pair it with the Notion connector to receive only what moved.

### 🔗 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/carrefour-es-scraper"><b>Carrefour Spain Scraper</b></a><br>Scrape Carrefour Spain (carrefour.es) products. Search by keyword, browse a category, or...</td><td>🛒 <a href="https://apify.com/abotapi/decathlon-es-scraper"><b>Decathlon.es</b></a><br>Scrape Decathlon Spain (decathlon.es) sporting goods: current price plus strike-through...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/druni-es-scraper"><b>druni.es</b></a><br>Scrape Druni beauty, cosmetics and perfume products. Search by keyword, category, Ofertas...</td><td>🥦 <a href="https://apify.com/abotapi/elcorteingles-es-scraper"><b>El Corte Inglés Scraper</b></a><br>Scrape El Corte Inglés elcorteingles.es products across fashion, electronics, home...</td></tr>
<tr><td>🏠 <a href="https://apify.com/abotapi/fotocasa-es-scraper"><b>Fotocasa.es</b></a><br>From $1/1K. Scrape Spain property listings from fotocasa.es. Get price, surface, rooms...</td><td>🔌 <a href="https://apify.com/abotapi/leroymerlin-es-scraper"><b>LeroyMerlin.es Scraper</b></a><br>Scrape Leroy Merlin Spain (leroymerlin.es) DIY and home-improvement products: price...</td></tr>
</table>

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

### 💬 Support & custom scrapers

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

# Actor input Schema

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

Search walks auction listings by status and date windows. URL mode reads the specific auctions you paste.

## `estados` (type: `array`):

Search mode: auction statuses to walk. EJ = judicial enforcement (open auctions with dates), PU = upcoming public, SU = subsequent, CA = cancelled, FS = finished. CA and FS return very large sets; combine them with a narrow date window.

## `fechaFinDesde` (type: `string`):

Search mode: only auctions concluding on or after this date (ISO date, e.g. 2026-10-01). Leave empty for no lower bound.

## `fechaFinHasta` (type: `string`):

Search mode: only auctions concluding on or before this date (ISO date, e.g. 2026-10-08). Leave empty for no upper bound.

## `fechaInicioDesde` (type: `string`):

Search mode: only auctions starting on or after this date (ISO date). Leave empty for no lower bound.

## `fechaInicioHasta` (type: `string`):

Search mode: only auctions starting on or before this date (ISO date). Leave empty for no upper bound.

## `tipoBien` (type: `string`):

Search mode: real estate auctions only (Inmuebles, the default and the original behaviour), vehicles only (Vehiculos), or all asset types. URL mode is unaffected.

## `sortField` (type: `string`):

Search mode: the portal's own sort. Conclusion date (default and the original behaviour), auction identifier, status, or minimum bid.

## `sortOrder` (type: `string`):

Search mode: ascending (default and the original behaviour) or descending.

## `valorMinimo` (type: `string`):

Search and URL modes: keep only auctions whose auction value is at least this many euros. Evaluated after each auction is read; needs detail reads on to apply everywhere.

## `valorMaximo` (type: `string`):

Search and URL modes: keep only auctions whose auction value is at most this many euros. Evaluated after each auction is read; needs detail reads on to apply everywhere.

## `provincia` (type: `string`):

Search mode: narrow to one province - type its NAME (e.g. Madrid, Barcelona, Alicante; accents optional) or its INE code (01-52, e.g. 28 = Madrid). Leave empty for all provinces.

## `idSubasta` (type: `string`):

Search mode: fetch one auction by its identifier (e.g. SUB-JA-2025-251191). The status filter is skipped for this lookup (the identifier already picks one auction); the date windows still apply.

## `startUrls` (type: `array`):

URL mode: auction detail links, each carrying its auction id (detalleSubasta.php?idSub=SUB-...). Both id styles work - judicial (SUB-JA-...) and administrative/tax (SUB-AT-... with its alphanumeric tail). A link carrying extra search-context parameters (idBus, idLote) is read the same way, and a bare auction id (SUB-JA-...) is accepted too. The auction id is read from the link; entries are read in order.

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

Alias for Auction links, accepted under the name other Apify actors use for URL mode. Each entry is an auction detail link; entries are read in order.

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

Read each auction's detail page (valuation, minimum bid, deposit, authority contact, property lots, documents). Turn off for a faster listing-only run. Each enriched auction is billed once as detail enrichment.

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

Stop after this many records. This is THE cap: the run stops when it is reached or when listings run out.

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

Advanced. Rarely needed: cap the listing pages read per status. Zero means no page cap; Max items still stops the run.

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

Apify Proxy settings. Residential exits are recommended. Runs without a residential plan fall back automatically where possible; a free plan may read fewer pages.

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

Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there.

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

Turn this on for daily or recurring monitoring. The first run returns every matching auction as NEW. Later runs compare the full auction snapshot (amounts, dates, status, lots, authority) against the stored baseline and return only NEW and UPDATED auctions. Volatile fields that move without the auction changing - document list, authority phone/fax/email - are excluded from the comparison by default, and Ignore fields (below) adds more. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each status, date-window and link setup; use State key to name or deliberately share a monitoring campaign.

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

Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the statuses and date settings.

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

Off by default. Turn on to also return auctions that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.

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

Off by default. Turn on to also return auctions that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search.

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

Incremental mode: changes to only these fields do not mark a record UPDATED. Defaults cover rotating document tokens and volatile counters.

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

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.

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

URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

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

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "estados": [
    "EJ"
  ],
  "tipoBien": "I",
  "sortField": "SUBASTA.FECHA_FIN",
  "sortOrder": "asc",
  "startUrls": [
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266"
  ],
  "fetchDetails": true,
  "maxItems": 20,
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "maxNotifyListings": 50
}
```

# Actor output Schema

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

No description

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

No description

## `lots` (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",
    "estados": [
        "EJ"
    ],
    "tipoBien": "I",
    "sortField": "SUBASTA.FECHA_FIN",
    "sortOrder": "asc",
    "startUrls": [
        "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
        "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266"
    ],
    "fetchDetails": true,
    "maxItems": 20,
    "maxPages": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    },
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "maxNotifyListings": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/boe-es-auction-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",
    "estados": ["EJ"],
    "tipoBien": "I",
    "sortField": "SUBASTA.FECHA_FIN",
    "sortOrder": "asc",
    "startUrls": [
        "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
        "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266",
    ],
    "fetchDetails": True,
    "maxItems": 20,
    "maxPages": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "maxNotifyListings": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/boe-es-auction-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",
  "estados": [
    "EJ"
  ],
  "tipoBien": "I",
  "sortField": "SUBASTA.FECHA_FIN",
  "sortOrder": "asc",
  "startUrls": [
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-JA-2025-251191",
    "https://subastas.boe.es/detalleSubasta.php?idSub=SUB-AT-2026-26R4686001266"
  ],
  "fetchDetails": true,
  "maxItems": 20,
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "maxNotifyListings": 50
}' |
apify call abotapi/boe-es-auction-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/boe-es-auction-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/OhfNhYYTbXVWaEGRq/builds/np3SiDC5edjbdCpxl/openapi.json
