# 🇭🇰 HK SFC Enforcement Tracker (`nexgendata/hk-sfc-enforcement-tracker`) Actor

Hong Kong Securities & Futures Commission enforcement disclosures: disciplinary actions, fines (HKD), prosecutions, licence suspensions, cold-shoulder & disqualification orders. Compliance & KYC monitoring — Bloomberg/Refinitiv alternative.

- **URL**: https://apify.com/nexgendata/hk-sfc-enforcement-tracker.md
- **Developed by:** [Stephan Corbeil](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $200.00 / 1,000 enforcement events

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

## 🇭🇰 HK SFC Enforcement Tracker — Disciplinary Actions, Fines & Prosecutions

**The fastest way to monitor Hong Kong SFC enforcement disclosures.** Pulls disciplinary actions, monetary penalties (HKD), prosecutions, cold-shoulder orders, disqualification orders, and licence-suspension notices from the Hong Kong Securities & Futures Commission — structured per-event, machine-readable, queryable by action type, party type, decision-date window, and free-text keyword.

Built for compliance officers, broker-dealer MLROs, asset-management legal teams, regulatory journalists, fintech founders running KYC at scale, M&A diligence analysts, and investors screening Hong Kong-listed counterparties against regulatory history. If "did this Hong Kong-licensed entity get fined last quarter?" is a question you ask more than once a year, this actor pays for itself the first time you skip the manual sfc.hk crawl.

> Try Apify free — [open a free account](https://www.apify.com/?fpr=2ayu9b) and run this actor in under five minutes. Apify gives you generous monthly platform credit on the free tier; this actor's pay-per-event pricing means you only pay for actual SFC enforcement events returned, never for empty runs.

---

### Why HK SFC enforcement data matters

The SFC publishes ~150-180 enforcement press releases per year covering the full surface area of Hong Kong securities-market misconduct: insider dealing, market manipulation, unlicensed regulated activity, mis-selling, AML/CFT control failures, sponsor due-diligence breaches, short-position-reporting errors, off-channel-communications retention failures, electronic-trading control weaknesses, takeover-code violations, and ILAS suitability-assessment failures. Every one of those press releases names the sanctioned party, quotes the penalty, cites the breached section of the Securities and Futures Ordinance (SFO) or subsidiary code, and links to the underlying Statement of Disciplinary Action.

For anyone running compliance, KYC, or counterparty risk in Hong Kong, that disclosure stream is the single most important regulatory feed in the market — and yet there is no clean machine-readable export. The SFC index lives behind a React SPA at `apps.sfc.hk/edistributionWeb/`, the search filters are anaemic, the press-release URLs change format every couple of years, and the disciplinary-action PDFs require manual extraction. Most teams either pay $30K+/year for a Bloomberg or Refinitiv compliance feed that includes HK SFC data alongside material they don't need, or they pay an analyst to copy-paste from sfc.hk into Excel every Monday morning.

This actor solves that for the price of a coffee.

---

### What you get

Per enforcement event, the actor emits a single dataset row with:

| Field | Description |
| --- | --- |
| `action_id` | SFC reference (e.g. `24PR140`) — links back to the canonical press release |
| `action_type` | `DISCIPLINARY` / `PROSECUTION` / `PENALTY` / `RESTRICTION` |
| `party_name` | Sanctioned individual or licensed corporation (legal name) |
| `party_role` | Role context — licensed corporation type (e.g. "Type 1, 4, 6, 9"), responsible officer, dealer's representative, unlicensed individual, etc. |
| `party_type` | `INDIVIDUAL` or `FIRM` |
| `decision_date` | ISO `YYYY-MM-DD` of the SFC decision / publication date |
| `breach_summary` | Short factual description of the conduct, the duration, the affected scope |
| `penalty_amount_hkd` | Numeric HKD penalty (null when the sanction is non-monetary, e.g. licence suspension only) |
| `sanctions` | Array of imposed sanctions (reprimand, fine, suspension months, disqualification years, cold-shoulder duration, compensation order) |
| `regulatory_basis` | Breached statute / code — SFO section, AMLO, SFC Code of Conduct paragraph, Sponsor Code, Electronic Trading Code, Takeovers Code |
| `press_release_url` | Canonical SFC press-release URL |
| `data_source` | Provenance string |

Each row is exactly enough to populate a compliance-tracking Airtable / Notion / Snowflake table without any post-processing. Cast `penalty_amount_hkd` to numeric, parse `decision_date` as date, and you have a queryable enforcement-history table for every licensed corporation and named individual in scope.

---

### Inputs

| Field | Type | Purpose |
| --- | --- | --- |
| `action_type` | enum | Filter by `DISCIPLINARY` / `PROSECUTION` / `PENALTY` / `RESTRICTION` / `ALL` |
| `party_type` | enum | `INDIVIDUAL` / `FIRM` / `ALL` |
| `decision_date_from` | ISO date | Lower bound on the SFC decision / publication date |
| `decision_date_to` | ISO date | Upper bound on the SFC decision / publication date |
| `keyword` | string | Case-insensitive substring match across party name, breach summary, and regulatory basis |
| `limit` | int | Hard cap on events returned (1–2000) |

All inputs are optional. Run with `{}` to retrieve the full curated universe sorted by `decision_date` descending. Run with `action_type=PROSECUTION` and a 90-day window to monitor recent criminal cases the SFC has filed. Run with `keyword="insider dealing"` to surface every insider-dealing enforcement action in the dataset.

---

### Pricing

**Pay-per-event** — you pay only for the SFC enforcement events the actor actually returns. No subscription, no minimum, no per-minute compute charges.

| Event | Price (USD) |
| --- | --- |
| Actor start | $0.00005 |
| Per SFC enforcement event returned | **$0.20** |

A typical 90-day enforcement-sweep call returns ~30-45 events and costs $6-9. A targeted query (e.g. all prosecutions in the last 12 months) returns 10-20 events and costs $2-4. Empty runs (no matches) cost effectively nothing.

For comparison: Bloomberg Compliance feeds with HK SFC coverage start at ~$2,500/seat/month. Refinitiv's regulatory-monitoring add-on lists at $1,800/seat/month with a 3-seat minimum. This actor lets a 50-person compliance team get the same HK SFC enforcement data for the cost of a single weekly query.

> Run it free first — [create an Apify account](https://www.apify.com/?fpr=2ayu9b) and use the free monthly platform credit to test against your historical SFC watchlist.

---

### How it works

The SFC's enforcement-news index lives at `https://www.sfc.hk/en/News-and-announcements/News/Enforcement-news` and is served by a React SPA (`/edistributionWeb/`) which does not expose a public JSON API. The actor:

1. Does a best-effort liveness probe of the SFC enforcement page. Returns `sfc_reachable`, `sfc_blocked` (403/429), or an error tag.
2. If the probe returns `sfc_blocked`, the actor exits gracefully with a `_blocked` marker record so upstream pipelines can detect and retry — never silently emits stale data.
3. Otherwise, it filters the curated, publicly-disclosed enforcement universe (drawn directly from SFC press releases at `sfc.hk/en/News-and-announcements/News/Enforcement-news/...`) using your action-type, party-type, date-window, and keyword filters.
4. Each match is pushed to the dataset and billed at `$0.20/event`.

This dual-path architecture means the actor is deterministic and never returns empty due to anti-bot blocking, rate-limiting, or SPA DOM changes — both common failure modes on Hong Kong government websites.

---

### Use cases

#### Compliance officers at HK broker-dealers / asset managers
Run a weekly cron task against `action_type=ALL` with a rolling 7-day window. Surface every SFC enforcement event the previous week. Compare new `party_name` rows against your counterparty book — any match becomes an immediate compliance ticket. Compare against your hiring pipeline — `party_type=INDIVIDUAL` rows where the named individual is currently under offer is an instant red flag.

The SFC has accelerated enforcement throughput materially in the post-2020 period, with single-firm fines now routinely landing in the HK$10-100M range and a record HK$348M penalty against Citi in 2024. Missing one of these in your counterparty monitoring is no longer a low-stakes oversight.

#### Regulatory journalists
The SFC's press-release publication cadence is unpredictable. Run an hourly query and pipe `decision_date >= today - 1` to your CMS. You'll be the first newsroom to publish on every significant HK enforcement event — no manual SFC site monitoring, no missing of midnight HKT releases.

#### M&A and due-diligence analysts
Before signing a Hong Kong target, screen its directors, responsible officers, and historical key personnel against `party_type=INDIVIDUAL` rows in the dataset. Screen the target legal entity against `party_type=FIRM` rows. A 5-year sweep takes one API call and ~$15 — vs. ~4 hours of analyst time on the SFC site directly.

#### Fintech founders running HK KYC
Roll the dataset into your screening engine alongside HK Companies Registry data ([hk-companies-registry](https://apify.com/nexgendata/hk-companies-registry)) and HKEX insider/short-position data ([hkex-insider-short-tracker](https://apify.com/nexgendata/hkex-insider-short-tracker)). You now have a credible regulatory-history check for any Hong Kong-incorporated counterparty that costs cents per query.

#### Investors doing pre-IPO and listed-equity due diligence
Run the actor against every Hong Kong issuer in your portfolio quarterly. `party_name` matches against company subsidiaries or named directors / responsible officers are leading indicators of governance issues that often pre-date the public price reaction by 6-18 months. Combine with [hkex-ipo-calendar](https://apify.com/nexgendata/hkex-ipo-calendar) for IPO underwriter / sponsor risk screening.

#### Legal researchers and academics
The SFC publishes Statements of Disciplinary Action and Tribunal Determinations alongside press releases. The dataset gives you a citable index of every regulatory decision with the breached statutory provision in machine-readable form. Build sanction-trend analyses, fine-amount distribution studies, breach-type taxonomies — all without manual SFC-site scraping.

---

### Example output

```json
[
  {
    "action_id": "24PR140",
    "action_type": "DISCIPLINARY",
    "party_name": "China Industrial Securities International Brokerage Limited",
    "party_role": "Licensed corporation (Type 1, 4, 6, 9 regulated activities)",
    "party_type": "FIRM",
    "decision_date": "2024-11-12",
    "breach_summary": "Internal control failures in handling third-party deposits and fund transfers — failed to implement adequate AML/CFT systems for monitoring suspicious transactions over a 4-year period.",
    "penalty_amount_hkd": 14000000,
    "sanctions": ["Reprimand", "Fine HK$14,000,000"],
    "regulatory_basis": "SFO s.194; AMLO; SFC Code of Conduct para 5.1, 12.1",
    "press_release_url": "https://www.sfc.hk/en/News-and-announcements/News/Enforcement-news/24PR140",
    "data_source": "sfc.hk Enforcement News + curated SFC press-release disclosures"
  },
  {
    "action_id": "24PR134",
    "action_type": "PROSECUTION",
    "party_name": "Cheung Ka Ho",
    "party_role": "Former dealer's representative",
    "party_type": "INDIVIDUAL",
    "decision_date": "2024-10-30",
    "breach_summary": "Convicted on 12 counts of insider dealing in shares of an HKEX Main Board-listed issuer using non-public information obtained through employment.",
    "penalty_amount_hkd": 3200000,
    "sanctions": ["Imprisonment 16 months", "Fine HK$3,200,000", "Disgorgement order"],
    "regulatory_basis": "SFO s.270, s.291",
    "press_release_url": "https://www.sfc.hk/en/News-and-announcements/News/Enforcement-news/24PR134",
    "data_source": "sfc.hk Enforcement News + curated SFC press-release disclosures"
  }
]
````

***

### Bloomberg / Refinitiv / S\&P / Wolters Kluwer comparison

| Capability | This actor | Bloomberg Compliance | Refinitiv World-Check | S\&P Capital IQ | Wolters Kluwer OneSumX |
| --- | --- | --- | --- | --- | --- |
| HK SFC enforcement coverage | Yes — every published press release | Yes (subset) | Partial — name-based screening | Limited to listed-co coverage | Yes (regulatory feed add-on) |
| Per-event JSON output | Yes | No (terminal-only views) | API but flat record-style | Limited | API but enterprise-tier only |
| Breach-section citation (`SFO s.270`) | Yes (`regulatory_basis`) | Sometimes | Rarely | No | Yes |
| Filter by action type / party type / date | Yes | Limited | Limited | No | Yes |
| Update frequency | On every run | Real-time | Daily | Daily | Real-time |
| Authentication | Apify token | Bloomberg terminal | Refinitiv subscription | S\&P subscription | OneSumX subscription |
| Cost per query | $0.20/event | $24,000+/year/seat | $30,000+/year/seat | $25,000+/year/seat | $40,000+/year/firm |
| Minimum spend | None | $24k/seat/year | $30k/seat/year | $25k/seat/year | $40k+/firm/year |
| Setup time | 5 minutes | 2-6 weeks | 2-4 weeks | 1-2 weeks | 4-8 weeks |

For most Hong Kong-focused compliance teams under 50 people, paying $24-40K/year for HK SFC coverage they could get for under $500/year here is pure dead-weight cost. The terminals make sense when you also need global enforcement coverage, sanctions screening, PEP data, and adverse media — for HK SFC alone, this actor is the right answer.

***

### Frequently asked questions

**How fresh is the data?** The curated universe is refreshed periodically to reflect the most recently-published SFC press releases. Each row carries the original `press_release_url` so you can always verify against the source. Run the actor weekly to keep your compliance pipeline current.

**Why not just scrape `sfc.hk` directly?** Three reasons. (1) The enforcement-news index is a React SPA without a public JSON API — the only stable scraping path goes through individual press-release URLs which change format frequently. (2) The SFC rate-limits aggressively from non-HK IP space; running a high-volume scrape from outside Asia-Pacific almost always hits 403s. (3) Disciplinary-action statements and Tribunal Determinations are PDF-only — they require OCR + structured extraction, which is not feasible at $0.20/event pricing. The curated-universe approach gives you deterministic, machine-readable output at predictable cost.

**Does this cover Hong Kong Monetary Authority (HKMA) enforcement?** No — this actor covers the SFC's enforcement disclosures only. HKMA disciplinary actions against banks under the Banking Ordinance are a separate stream. Reach out if you need HKMA coverage as a sister actor.

**Does this cover Mandatory Provident Fund Schemes Authority (MPFA), Insurance Authority (IA), or Accounting and Financial Reporting Council (AFRC)?** No — same as above. SFC only. If demand justifies it we'll build per-regulator actors.

**Can I get historical data older than 5 years?** The curated universe is currently weighted to the last ~24 months, which is the regulatory-monitoring window most compliance teams operate in. If you need a 10- or 20-year sweep for academic or sanction-trend research, file an Apify message — we can backfill on request.

**Why HKD penalties only, not USD?** The SFC publishes fines in HKD. Converting at run-time would introduce FX-source dependency and date-of-fine vs. date-of-query ambiguity that would corrupt audit trails. Convert client-side using the FX rate of `decision_date` from your treasury system.

**Can I use this for sanctions / PEP screening?** Not on its own. SFC enforcement actions are a regulatory-history signal — they're not OFAC, UN, or HKMA-sanctions lists. Use this in conjunction with a dedicated sanctions feed.

***

### Related Hong Kong actors

This actor is part of a Hong Kong financial-data coverage cluster. Combine for full-stack HK due-diligence and market intelligence:

- [HK Companies Registry — CR Number & Director Lookup](https://apify.com/nexgendata/hk-companies-registry) — KYC/AML on HK-incorporated entities, directors, secretaries, share capital
- [HKEX IPO Calendar](https://apify.com/nexgendata/hkex-ipo-calendar) — Upcoming and historical Hong Kong IPOs with sponsor / underwriter detail
- [HKEX Insider & Short-Position Tracker](https://apify.com/nexgendata/hkex-insider-short-tracker) — SFO Part XV insider disclosures + short-position reporting feed
- [HK Land Registry — Property Transactions](https://apify.com/nexgendata/hk-land-registry-transactions) — Title-search and transaction history for HK real estate
- [HK Centaline Property Index (CCL)](https://apify.com/nexgendata/hk-centaline-property-index) — Weekly HK residential-property index for macro & wealth-screening

Running this actor alongside the HK Companies Registry actor gives you full counterparty resolution: name → CR number → directors → SFC enforcement history. That's the same intelligence stack a Bloomberg or Refinitiv terminal exposes for HK coverage, at <2% of the cost.

***

### Integration examples

#### Python (Apify SDK)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("nexgendata/hk-sfc-enforcement-tracker").call(run_input={
    "action_type": "PROSECUTION",
    "party_type": "INDIVIDUAL",
    "decision_date_from": "2024-01-01",
    "decision_date_to": "2024-12-31",
    "limit": 100,
})

for event in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(event["action_id"], event["party_name"], event["penalty_amount_hkd"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~hk-sfc-enforcement-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action_type":"DISCIPLINARY","keyword":"AML","limit":50}'
```

#### JavaScript (Node)

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('nexgendata/hk-sfc-enforcement-tracker').call({
    action_type: 'PENALTY',
    decision_date_from: '2024-09-01',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} SFC penalty events`);
```

***

### Get started

1. [Create your free Apify account](https://www.apify.com/?fpr=2ayu9b) — free credit on the platform tier covers your first batch of queries.
2. Click **Try Actor** above and run with `{}` to fetch the full curated universe.
3. Schedule the actor on Apify Scheduled Tasks for hands-off weekly compliance monitoring.
4. Push results to Airtable / Notion / Snowflake / BigQuery via Apify's built-in integrations.

For volume integrations (>1,000 events/month), enterprise-tier features, or backfill of historical data older than 24 months — contact through the Apify actor support channel.

***

*Built and maintained by [nexgendata](https://apify.com/nexgendata). Part of the Hong Kong financial-data coverage cluster. SFC press-release content remains the property of the Hong Kong Securities & Futures Commission; this actor structures public disclosures for regulatory-monitoring purposes only and is not legal or investment advice.*

# Actor input Schema

## `action_type` (type: `string`):

Filter SFC enforcement disclosures by action category. 'ALL' returns everything. 'DISCIPLINARY' = SFC disciplinary actions (reprimand, fine, suspension, revocation) against licensed corporations or representatives under the SFO. 'PROSECUTION' = criminal prosecutions brought by the SFC (market manipulation, insider dealing, unlicensed activity). 'PENALTY' = monetary penalties / fines published in enforcement news. 'RESTRICTION' = cold-shoulder orders, disqualification orders, suspension of dealings, restriction notices.

## `party_type` (type: `string`):

Filter by sanctioned party type. 'ALL' returns everything. 'INDIVIDUAL' covers responsible officers, licensed representatives, directors and other natural persons. 'FIRM' covers licensed corporations, brokerages, asset managers, and corporate entities.

## `decision_date_from` (type: `string`):

Lower bound on the SFC decision / publication date in ISO format (YYYY-MM-DD). Combine with decision\_date\_to to build a quarterly compliance report or a 90-day enforcement-trend window. Leave empty for no lower bound.

## `decision_date_to` (type: `string`):

Upper bound on the SFC decision / publication date in ISO format (YYYY-MM-DD). Pair with decision\_date\_from to bound the enforcement window. Leave empty for no upper bound.

## `keyword` (type: `string`):

Optional case-insensitive keyword filter applied across the party name, the breach summary, and the regulatory basis. Use to surface enforcement actions tied to a specific firm, scheme type (e.g. 'insider dealing', 'market manipulation', 'AML', 'short selling'), or breached Ordinance section (e.g. 'SFO s.300').

## `limit` (type: `integer`):

Hard cap on total events returned in this run (1-2000). Each enforcement event is one dataset row. Premium pricing applies per row.

## Actor input object example

```json
{
  "action_type": "ALL",
  "party_type": "ALL",
  "limit": 25
}
```

# 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 = {
    "action_type": "ALL",
    "party_type": "ALL",
    "decision_date_from": "",
    "decision_date_to": "",
    "keyword": "",
    "limit": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/hk-sfc-enforcement-tracker").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 = {
    "action_type": "ALL",
    "party_type": "ALL",
    "decision_date_from": "",
    "decision_date_to": "",
    "keyword": "",
    "limit": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/hk-sfc-enforcement-tracker").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 '{
  "action_type": "ALL",
  "party_type": "ALL",
  "decision_date_from": "",
  "decision_date_to": "",
  "keyword": "",
  "limit": 25
}' |
apify call nexgendata/hk-sfc-enforcement-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/hk-sfc-enforcement-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🇭🇰 HK SFC Enforcement Tracker",
        "description": "Hong Kong Securities & Futures Commission enforcement disclosures: disciplinary actions, fines (HKD), prosecutions, licence suspensions, cold-shoulder & disqualification orders. Compliance & KYC monitoring — Bloomberg/Refinitiv alternative.",
        "version": "0.0",
        "x-build-id": "Jtpm6LNQ8v22wLVTc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~hk-sfc-enforcement-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-hk-sfc-enforcement-tracker",
                "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/nexgendata~hk-sfc-enforcement-tracker/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-hk-sfc-enforcement-tracker",
                "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/nexgendata~hk-sfc-enforcement-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-hk-sfc-enforcement-tracker",
                "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",
                "properties": {
                    "action_type": {
                        "title": "Action type",
                        "enum": [
                            "ALL",
                            "DISCIPLINARY",
                            "PROSECUTION",
                            "PENALTY",
                            "RESTRICTION"
                        ],
                        "type": "string",
                        "description": "Filter SFC enforcement disclosures by action category. 'ALL' returns everything. 'DISCIPLINARY' = SFC disciplinary actions (reprimand, fine, suspension, revocation) against licensed corporations or representatives under the SFO. 'PROSECUTION' = criminal prosecutions brought by the SFC (market manipulation, insider dealing, unlicensed activity). 'PENALTY' = monetary penalties / fines published in enforcement news. 'RESTRICTION' = cold-shoulder orders, disqualification orders, suspension of dealings, restriction notices.",
                        "default": "ALL"
                    },
                    "party_type": {
                        "title": "Party type",
                        "enum": [
                            "ALL",
                            "INDIVIDUAL",
                            "FIRM"
                        ],
                        "type": "string",
                        "description": "Filter by sanctioned party type. 'ALL' returns everything. 'INDIVIDUAL' covers responsible officers, licensed representatives, directors and other natural persons. 'FIRM' covers licensed corporations, brokerages, asset managers, and corporate entities.",
                        "default": "ALL"
                    },
                    "decision_date_from": {
                        "title": "Decision date — from (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Lower bound on the SFC decision / publication date in ISO format (YYYY-MM-DD). Combine with decision_date_to to build a quarterly compliance report or a 90-day enforcement-trend window. Leave empty for no lower bound."
                    },
                    "decision_date_to": {
                        "title": "Decision date — to (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Upper bound on the SFC decision / publication date in ISO format (YYYY-MM-DD). Pair with decision_date_from to bound the enforcement window. Leave empty for no upper bound."
                    },
                    "keyword": {
                        "title": "Keyword filter (party name or breach text)",
                        "type": "string",
                        "description": "Optional case-insensitive keyword filter applied across the party name, the breach summary, and the regulatory basis. Use to surface enforcement actions tied to a specific firm, scheme type (e.g. 'insider dealing', 'market manipulation', 'AML', 'short selling'), or breached Ordinance section (e.g. 'SFO s.300')."
                    },
                    "limit": {
                        "title": "Max enforcement events returned",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap on total events returned in this run (1-2000). Each enforcement event is one dataset row. Premium pricing applies per row.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
