# Spanish Lottery Scraper 🎰 - Bonoloto & Primitiva Results (`tikitakaclaw/spanish-lottery-scraper`) Actor

Get the latest Spanish lottery results (Bonoloto, Primitiva, Euromillones) including winning numbers, complementary number, refund, Joker, prize breakdown, and draw date. Updated daily. Perfect for analytics, journalism, betting apps, and LLM training data.

- **URL**: https://apify.com/tikitakaclaw/spanish-lottery-scraper.md
- **Developed by:** [TikitakaClaw Pikipiki](https://apify.com/tikitakaclaw) (community)
- **Categories:** Automation, E-commerce, Other
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 draw results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Spanish Lottery Scraper 🎰

**Get the latest Spanish lottery results in structured JSON format** — Bonoloto, Primitiva, and (coming soon) Euromillones. Perfect for analytics dashboards, journalism, betting apps, and LLM training data.

---

### What you can scrape

| Game | Schedule | Format |
|---|---|---|
| 🍀 **Bonoloto** | Daily (Mon-Sun) | 6 numbers from 1-49 + complementario + reintegro |
| 🎯 **Primitiva** | Thu + Sat | 6 numbers from 1-49 + complementario + reintegro + Joker (7-digit) |
| 💶 **Euromillones** | Tue + Fri | 5 numbers from 1-50 + 2 lucky stars from 1-12 (coming soon) |

Each result includes:
- **Draw date** (ISO 8601 format)
- **Draw number** (sequential)
- **Winning numbers** (sorted)
- **Complementario** (bonus number, where applicable)
- **Reintegro** (0-9 refund number)
- **Joker** (7-digit number, Primitiva only)
- **Prize breakdown** (categories, winners, amounts)
- **Source URL** (for verification)

---

### Input

```json
{
  "lottery": "bonoloto",
  "includeHistorical": 0
}
````

#### Field reference

| Field | Type | Default | Description |
|---|---|---|---|
| `lottery` | enum | `bonoloto` | Which lottery to scrape: `bonoloto`, `primitiva`, `euromillones`, or `all` |
| `includeHistorical` | integer | `0` | Number of historical draws to include (0 = latest only) |

***

### Output

#### Bonoloto example

```json
{
  "lottery": "bonoloto",
  "drawDate": "2026-07-04",
  "drawNumber": 185,
  "numbers": [7, 10, 25, 45, 46, 48],
  "complementario": 1,
  "reintegro": 3,
  "prizes": [
    {"category": 1, "name": "6 Aciertos", "winners": 1, "amountEur": 5731134.13},
    {"category": 2, "name": "5 Aciertos+C", "winners": 4, "amountEur": 51026.32}
  ],
  "source": "loteriabonoloto.info"
}
```

#### Primitiva example

```json
{
  "lottery": "primitiva",
  "drawDate": "2026-07-04",
  "drawNumber": 80,
  "numbers": [19, 25, 28, 43, 44, 48],
  "complementario": 16,
  "reintegro": 8,
  "joker": 4249108,
  "prizes": [...],
  "source": "laprimitiva.info"
}
```

***

### Pricing

**Pay per event:**

| Event | Cost |
|---|---|
| Draw result extracted | $0.001 |

> ℹ️ Apify's platform usage is **passed through to you** — no markup. You only pay the per-event fee on top of CU (which is typically <$0.0001 per run).

**Example:** scraping all 3 lotteries once a day for a month = 90 events × $0.001 = **$0.09/month** to run as a daily job. Add your own analytics or app on top and you save hours of development time.

***

### Use cases

1. **📊 Analytics dashboards** — show "hot/cold" numbers, frequency analysis, distribution
2. **📰 News & journalism** — auto-publish results to your blog/newsletter
3. **🤖 LLM training data** — fine-tune models on historical Spanish lottery data
4. **📱 Telegram/Discord bots** — daily notifications to your community
5. **🎰 Betting strategies** — backtest number selection algorithms
6. **🔍 Compliance/audit** — verify your tickets against official results

***

### Technical notes

- **Engine:** Python 3.11 + httpx + BeautifulSoup + impit (Chrome TLS impersonation)
- **Sources:** `loteriabonoloto.info` (Bonoloto), `laprimitiva.info` (Primitiva)
- **Data refresh:** daily, ~2-5 seconds per request
- **Build time:** ~30s
- **Memory:** 256 MB typical
- **No proxies needed:** the source sites don't block us (we have fallback stealth if they do)

***

### Changelog

- **0.1.0** (2026-07-05) — Initial release. Bonoloto + Primitiva working. Euromillones coming soon.

***

### Support

- 🐛 Report issues: Apify Console → this Actor → Issues tab
- 💬 Questions: [Apify Discord](https://discord.com/invite/jyEM2PRvMU)
- 📧 Author: [@tikitakaclaw](https://apify.com/tikitakaclaw) on Apify

***

### License

MIT License. Data sourced from public Spanish lottery information aggregators. Use responsibly and verify with official sources for any financial decisions.

# Actor input Schema

## `lottery` (type: `string`):

Which Spanish lottery results to fetch.

## `includeHistorical` (type: `integer`):

Fetch last N historical draws. 0 = just the latest draw.

## Actor input object example

```json
{
  "lottery": "bonoloto",
  "includeHistorical": 0
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("tikitakaclaw/spanish-lottery-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("tikitakaclaw/spanish-lottery-scraper").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 '{}' |
apify call tikitakaclaw/spanish-lottery-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Spanish Lottery Scraper 🎰 - Bonoloto & Primitiva Results",
        "description": "Get the latest Spanish lottery results (Bonoloto, Primitiva, Euromillones) including winning numbers, complementary number, refund, Joker, prize breakdown, and draw date. Updated daily. Perfect for analytics, journalism, betting apps, and LLM training data.",
        "version": "0.2",
        "x-build-id": "66we32Felz5RRxtzh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tikitakaclaw~spanish-lottery-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tikitakaclaw-spanish-lottery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/tikitakaclaw~spanish-lottery-scraper/runs": {
            "post": {
                "operationId": "runs-sync-tikitakaclaw-spanish-lottery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/tikitakaclaw~spanish-lottery-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-tikitakaclaw-spanish-lottery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "lottery"
                ],
                "properties": {
                    "lottery": {
                        "title": "Lottery to scrape",
                        "enum": [
                            "bonoloto",
                            "primitiva",
                            "euromillones",
                            "all"
                        ],
                        "type": "string",
                        "description": "Which Spanish lottery results to fetch.",
                        "default": "bonoloto"
                    },
                    "includeHistorical": {
                        "title": "Include historical results",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Fetch last N historical draws. 0 = just the latest draw.",
                        "default": 0
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
