# Ansorena Auction Scraper (`rastriq/ansorena-scraper`) Actor

Extrae lotes de subastas de Ansorena.com: artista, título, precio de salida, imágenes y estado (activo/vendido). Soporta subastas históricas, lotes activos por categoría y lote individual.

- **URL**: https://apify.com/rastriq/ansorena-scraper.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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

## Ansorena Auction Scraper

Extract structured auction lots from **[Ansorena.com](https://www.ansorena.com/es)** — Spain's leading fine art and jewellery auction house — via its public SSR API. No browser, no authentication needed.

***

### What is Ansorena Auction Scraper?

Ansorena is one of the oldest and most prestigious auction houses in Spain, specialising in fine art, jewellery, decorative arts, sculpture, furniture, and silver. Every season it publishes hundreds of lots across multiple sessions — each with starting price, artist biography, dimensions, and high-resolution images.

**Ansorena Auction Scraper** gives you programmatic access to that catalogue. Whether you need to track hammer prices across historical auctions, monitor currently available lots for price intelligence, or build a reference dataset of Spanish fine art, **Ansorena Auction Scraper** handles pagination, session discovery, and optional detail enrichment automatically.

***

### What data does Ansorena Auction Scraper extract?

Every lot includes a set of **common fields** regardless of mode, plus **enriched fields** available when the detail page is scraped.

#### Common fields (all modes)

| Field | Description | Format |
|-------|-------------|--------|
| `lotId` | Composite identifier `"{auctionId}-{lotNumber}"` | text |
| `auctionId` | Numeric auction ID | number |
| `lotNumber` | Lot number within the auction | number |
| `auctionSlug` | URL slug of the auction (e.g. `"julio-2026_457-001"`) | text |
| `session` | Session number within the auction | number |
| `category` | Category name: Joyas, Pintura, Escultura… | text |
| `artist` | Artist or author name | text |
| `birth` | Artist biography (city, country, dates) | text |
| `title` | Artwork title | text |
| `dimensions` | Dimensions as shown in the listing | text |
| `startingPrice` | Starting bid price in EUR | number |
| `currency` | Always `EUR` | text |
| `status` | `SOLD`, `UNSOLD`, or `ACTIVE` | text |
| `lotUrl` | Direct URL to the lot on Ansorena.com | link |
| `imageThumb260` | Thumbnail image at 260 px | image |
| `scrapedAt` | Extraction timestamp (ISO 8601) | datetime |

#### Enriched fields (with `scrapeDetailPage: true`)

| Field | Description |
|-------|-------------|
| `technique` | Medium / technique (etching, oil, watercolour…) |
| `imageThumb500` | Thumbnail at 500 px from the detail page |
| `fullResImages` | Full-resolution image URLs (~1.8 MB each) |
| `estimatedPriceLow` | Low estimate (requires authenticated session) |
| `estimatedPriceHigh` | High estimate (requires authenticated session) |
| `_detailArtist` | Artist name cross-checked from the detail page |
| `_detailTitle` | Title cross-checked from the detail page |

***

### Example output

```json
{
  "lotId": "457-12",
  "auctionId": 457,
  "lotNumber": 12,
  "auctionSlug": "julio-2026_457-001",
  "session": 1,
  "category": "Pintura",
  "categoryId": "6",
  "artist": "Pablo Picasso",
  "birth": "Malaga, 1881 - Mougins, 1973",
  "title": "Composicion",
  "dimensions": "81 x 65 cm",
  "technique": "Oleo sobre lienzo",
  "startingPrice": 4500,
  "currency": "EUR",
  "status": "SOLD",
  "lotUrl": "https://www.ansorena.com/es/subasta-lote/composicion-12/457-12",
  "imageThumb260": "https://www.ansorena.com/img/thumbs/260/...",
  "imageThumb500": "https://www.ansorena.com/img/thumbs/500/...",
  "fullResImages": ["https://www.ansorena.com/img/load/real/..."],
  "scrapedAt": "2026-08-18T12:00:00.000Z"
}
```

***

### How to use Ansorena Auction Scraper

1. **Open the actor** and click **Try for free** (no credit card required for a test run).
2. **Choose a scraping mode:**
   - Paste one or more Ansorena URLs into **Start URLs** — the actor auto-detects the type (full auction, available lots, full history, or single lot).
   - Enable **Active lots by category** to scrape only currently available (unsold) lots, optionally filtered by category.
   - Leave everything empty to auto-discover and scrape the full historical auction archive.
3. **Select categories** (optional) — Joyas, Artes decorativas, Pintura, Escultura, Mobiliario, Obras en papel, or Plata.
4. **Set Max lots** — start with 24 for a quick test. Set 0 for no limit.
5. **Enable detail page scraping** if you need technique, full-resolution images, or the 500 px thumbnail. This adds one extra request per lot.
6. **Click Start**. Results appear in the Output tab in real time.
7. **Export** as JSON, CSV, or Excel — or connect via the Apify API.

#### URL types supported

| URL type | Example |
|----------|---------|
| Full auction | `https://www.ansorena.com/es/subasta/julio-2026_457-001` |
| Available lots | `https://www.ansorena.com/es/lotes-disponibles?noAward=1` |
| Full historical archive | `https://www.ansorena.com/es/subastas-historicas` |
| Single lot | `https://www.ansorena.com/es/subasta-lote/titulo-obra/457-5` |

***

### Input parameters

| Parameter | Description | Default |
|-----------|-------------|---------|
| Start URLs | Ansorena URLs to scrape — any supported format | — |
| Active lots by category | Scrape only currently available (unsold) lots | false |
| Categories | Filter by one or more of the 7 categories | all |
| Max lots | Hard cap on total lots returned (0 = unlimited) | 0 |
| Detail page scraping | Visit each lot's detail page for technique + full-res images | false |
| Max concurrency | Parallel pages (1–10) | 3 |
| Proxy configuration | Apify proxy settings | — |
| Debug mode | Verbose logging | false |

***

### How much does Ansorena Auction Scraper cost?

**Ansorena Auction Scraper** uses pay-per-event (PPE) pricing — you pay only for results delivered.

| Volume | Approximate cost |
|--------|-----------------|
| 100 lots | ~$0.15 |
| 1,000 lots | ~$1.05 |
| 10,000 lots | ~$10.05 |

Your $5 free trial credit covers approximately 4,900 lots. Run a quick test with `maxLots: 24` first to verify the output format before scaling up.

> **Note on detail scraping:** enabling `scrapeDetailPage` doubles the number of HTTP requests (one extra per lot), which slightly increases compute time but not the per-item price.

***

### Architecture

**Ansorena Auction Scraper** uses Apify's `CheerioCrawler` to call Ansorena's SSR endpoints directly — no browser, no Playwright, no screenshots. The site uses Laravel server-side rendering with no JavaScript challenge or WAF, making extraction fast and reliable.

- **Standard mode:** 1 request per listing page (40 lots/page), fully paginated.
- **Detail mode:** 1 additional request per lot to retrieve technique, 500 px thumbnail, and full-resolution images.
- **History mode:** auto-discovers all past auction slugs from the `/es/subastas-historicas` index, then iterates through every session.

***

### Related Scrapers by Rastriq

- [Wallapop Scraper](https://apify.com/rastriq/wallapop-scraper) — Spain's largest classifieds marketplace
- [Wallapop Cars Scraper](https://apify.com/rastriq/wallapop-cars-scraper) — Dedicated vehicle listings
- [Milanuncios Scraper](https://apify.com/rastriq/milanuncios-scraper) — Alternative Spanish classifieds

***

### FAQ

**Is scraping Ansorena legal?**
Ansorena Auction Scraper accesses only publicly visible listing data. No authentication is required or circumvented, and no personal data (emails, phone numbers, or private user information) is extracted. Always use scraped data in accordance with Ansorena's Terms of Service and applicable data protection regulations.

**Do I need a proxy?**
No. Ansorena has no WAF or IP-based rate limiting. The actor works without a proxy for any volume. You can enable Apify datacenter proxy for very large or high-frequency runs as a precaution.

**Are estimated prices extracted?**
Starting prices (`startingPrice`) are always available publicly. Estimated prices (`estimatedPriceLow`, `estimatedPriceHigh`) are only visible to authenticated Ansorena users — they will be `null` in an unauthenticated run.

**Can I scrape multiple categories at once?**
Yes. In active-lots mode, select multiple categories — the actor launches a separate paginated search per category and merges the results. In start-URL mode, leave categories empty to get all categories from a given auction.

**How do I get full-resolution images?**
Enable `scrapeDetailPage: true`. The actor will visit each lot's detail page and extract URLs from the `/img/load/real/` endpoint (~1.8 MB per image). These URLs work without authentication.

**How do I keep my dataset up to date?**
Schedule the actor on a weekly or per-season basis. Use `scrapeActiveByCategory: true` with `categories: []` to always get the latest available lots, or pass the URL of the current auction season for incremental updates.

***

### Espanol

> Resumen en espanol para usuarios hispanohablantes.

#### Que es Ansorena Auction Scraper?

**Ansorena Auction Scraper** extrae lotes de subastas de **Ansorena.com** — artista, titulo, precio de salida, imagenes y estado (vendido, disponible, activo) — sin necesidad de navegador ni autenticacion.

#### Que datos extrae?

Cada lote incluye: identificador unico, subasta y sesion de origen, categoria, artista y datos biograficos, titulo, dimensiones, precio de salida en EUR y estado. Con extraccion de ficha de detalle: tecnica, thumbnail 500px e imagenes full-res sin watermark.

#### Como usar Ansorena Auction Scraper?

1. Pega la URL de una subasta en Start URLs y pulsa Start.
2. O activa "Lotes activos por categoria" para extraer solo lotes disponibles ahora.
3. Exporta en JSON, CSV o Excel.

#### Cuanto cuesta?

$0,05 de inicio + $0,001 por lote. 1.000 lotes cuestan aproximadamente $1,05. Los $5 de credito de prueba cubren cerca de 4.900 lotes.

# Actor input Schema

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

Ansorena URLs to scrape. Any of these formats are accepted:<br><br><b>Full auction:</b> <code>https://www.ansorena.com/es/subasta/julio-2026\_457-001</code><br><b>Available lots:</b> <code>https://www.ansorena.com/es/lotes-disponibles?noAward=1</code><br><b>Full history:</b> <code>https://www.ansorena.com/es/subastas-historicas</code><br><b>Single lot:</b> <code>https://www.ansorena.com/es/subasta-lote/.../457-5</code><br><br>Leave empty (with <b>Active lots by category</b> off) to auto-discover and scrape the full historical archive.

## `scrapeActiveByCategory` (type: `boolean`):

Enable to scrape <b>only currently available lots</b> (unsold, available for direct purchase), filtered by the selected categories.<br><br>Uses the <code>/es/lotes-disponibles?noAward=1\&category=X</code> endpoint.<br><br>When enabled, <b>Start URLs</b> is ignored.

## `categories` (type: `array`):

Categories to include.<br><br>In <b>Active lots</b> mode: one search per selected category. Empty = all 7 categories.<br>In <b>Start URLs</b> mode: filters within the given auction. Empty = all categories.

## `maxLots` (type: `integer`):

Hard cap on total lots returned. <code>0</code> = no limit. Use a low value (e.g. 24) for a quick test run.

## `scrapeDetailPage` (type: `boolean`):

Visit each lot's individual page to retrieve:<br><b>Technique</b> (etching, oil, watercolour…) — only available on the detail page.<br><b>Full-resolution images</b> via <code>/img/load/real/</code> (~1.8 MB each, no auth required).<br><br>Slower. For large catalogues, the 500 px thumbnail from the listing is usually sufficient.

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

Proxy settings. The actor works without a proxy in most cases.

## `maxConcurrency` (type: `integer`):

Number of pages scraped in parallel. Recommended maximum: 5.

## `debugMode` (type: `boolean`):

Enable verbose logging. Do not use in production.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.ansorena.com/es/subasta/julio-2026_457-001"
    }
  ],
  "scrapeActiveByCategory": false,
  "categories": [],
  "maxLots": 24,
  "scrapeDetailPage": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "maxConcurrency": 3,
  "debugMode": false
}
```

# Actor output Schema

## `results` (type: `string`):

Structured lots from Ansorena auctions: artist, title, prices, images and status.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.ansorena.com/es/subasta/julio-2026_457-001"
        }
    ],
    "categories": [],
    "maxLots": 24,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/ansorena-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 = {
    "startUrls": [{ "url": "https://www.ansorena.com/es/subasta/julio-2026_457-001" }],
    "categories": [],
    "maxLots": 24,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/ansorena-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 '{
  "startUrls": [
    {
      "url": "https://www.ansorena.com/es/subasta/julio-2026_457-001"
    }
  ],
  "categories": [],
  "maxLots": 24,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rastriq/ansorena-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rastriq/ansorena-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/KnYipmocbPSJlOsBf/builds/lMy7rKq6ofO5kHuiF/openapi.json
