# asean-lottery-companies (`0x_wzhenkai/asean-lottery-companies`) Actor

Returns information about all lottery companies, including their provider IDs, names, and next scheduled draw dates.

- **URL**: https://apify.com/0x_wzhenkai/asean-lottery-companies.md
- **Developed by:** [Zhen Kai](https://apify.com/0x_wzhenkai) (community)
- **Categories:** Other, Integrations, Developer tools
- **Stats:** 4 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## ASEAN Lottery Companies Actor

This Apify actor retrieves all ASEAN lottery companies with their next draw dates from 12 different game providers across 5 ASEAN countries.

### 🎯 What it does

The actor connects to a MySQL database and fetches information about all available lottery companies, including:

- Company provider ID (PID)
- Company name
- Next scheduled draw date

### 🌏 Supported Countries & Providers

#### Malaysia (6 providers)

- **Magnum 4D** (PID: MAG)
- **Da Ma Cai 4D** (PID: DMC)
- **Sports Toto 4D** (PID: TOT)
- **Cashsweep 4D** (PID: CSP)
- **Sandakan 4D** (PID: STC)
- **Sabah 88 4D** (PID: S88)

#### Singapore (1 provider)

- **Singapore Pools 4D** (PID: SGP)

#### Cambodia (3 providers)

- **GD Lotto 4D** (PID: GDL)
- **Lucky Hari Hari 4D** (PID: LHH)
- **Perdana 4D** (PID: PDN)

#### Vietnam (1 provider)

- **Vietnam Lottery 4D** (PID: VIE)

#### Philippines (1 provider)

- **PCSO 4D Lotto** (PID: PHL)

### 📥 Input

This actor requires **no input parameters**. Simply run it to get all lottery companies.

```json
{}
```

### 📤 Output

The actor returns a JSON object with the following structure:

```json
{
  "success": true,
  "data": [
    {
      "pid": "MAG",
      "name": "Magnum",
      "next_draw_date": "20250530"
    },
    {
      "pid": "SGP", 
      "name": "Singapore Pools",
      "next_draw_date": "20250531"
    }
    // ... more companies
  ]
}
```

#### Output Fields

- **success** (boolean): Indicates if the operation was successful
- **data** (array): Array of lottery companies
  - **pid** (string): Provider ID (e.g., "MAG", "SGP")
  - **name** (string): Full company name
  - **next_draw_date** (string): Next draw date in YYYYMMDD format

### ⚙️ Configuration

#### Required Environment Variables

Set these environment variables in the Actor settings:

```
MYSQLHOST=your_database_host
MYSQLUSER=your_database_user
MYSQLPASSWORD=your_database_password
MYSQLDATABASE=your_database_name
MYSQLPORT=3306
```

#### Alternative Environment Variables (Fallback)

```
DB_HOST=your_database_host
DB_USER=your_database_user
DB_PASSWORD=your_database_password
DB_NAME=your_database_name
DB_PORT=3306
```

### 📊 Database Requirements

The actor expects these database tables:

#### lottery_companies

- `company_id` (INT, PRIMARY KEY)
- `pid` (VARCHAR) - Provider ID
- `name` (VARCHAR) - Company name

#### upcoming_draws

- `company_id` (INT) - Foreign key to lottery_companies
- `next_draw_date` (DATE/DATETIME) - Next scheduled draw
- `completed` (TINYINT) - Draw completion status (0 = not completed)

### 🚀 Usage Examples

#### Run via Apify Console

1. Go to the actor page
2. Click "Start"
3. Leave input empty `{}`
4. View results in the Dataset

#### Run via API

```bash
curl -X POST https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

#### Run via Apify Client (Node.js)

```javascript
const { ApifyApi } = require('apify-client');

const client = new ApifyApi({
    token: 'YOUR_API_TOKEN'
});

const run = await client.actor('YOUR_ACTOR_ID').call();
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);
```

### ⏰ Draw Schedules

#### Malaysia

- **Regular draws**: Wednesday, Saturday, Sunday at 7:00 PM
- **Special draws**: Occasionally on Tuesdays at 7:00 PM

#### Singapore

- **Draws**: Wednesday, Saturday, Sunday at 6:30 PM

#### Cambodia

- **Draws**: Daily
  - GD Lotto: 7:15 PM
  - Lucky Hari Hari: 7:45 PM
  - Perdana: 7:15 PM

#### Vietnam

- **Draws**: Daily at 11:30 AM

#### Philippines

- **Draws**: Monday, Wednesday, Friday at 9:00 PM

### 🔍 Troubleshooting

#### Common Issues

**Database Connection Failed**

- Verify database credentials
- Check network connectivity
- Ensure database accepts external connections

**No Results Returned**

- Check if lottery_companies table has data
- Verify upcoming_draws table has future dates
- Check database table structure

**Empty next_draw_date**

- Ensure upcoming_draws table is populated
- Check date formats in database
- Verify completed field is set correctly

### 📝 Notes

- The actor only returns draws scheduled for current date or future dates
- Completed draws (completed=1) are excluded from next_draw_date calculation
- Date format is always YYYYMMDD for consistency
- Actor automatically handles different date formats from database

### 🔒 Security

- Use read-only database user for production
- Secure database credentials in environment variables
- Enable SSL/TLS for database connections when possible

### 📞 Support

For issues related to this actor, please check:

1. Database connectivity and credentials
2. Table structure and data
3. Environment variable configuration

### 📄 License

This actor is provided as-is for lottery data retrieval purposes.

# Actor input Schema

## Actor input object example

```json
{}
```

# 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("0x_wzhenkai/asean-lottery-companies").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("0x_wzhenkai/asean-lottery-companies").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 '{}' |
apify call 0x_wzhenkai/asean-lottery-companies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,0x_wzhenkai/asean-lottery-companies"
        }
    }
}
```

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/dHBBzzH6dOqAFabs5/builds/g1l3w7LgcaOTqWJEO/openapi.json
