# Regulator Watch: UAE, Saudi, Cyprus, EU & Russia (`ndsolovev/regulator-watch`) Actor

Recent publications from about 80 regulator and industry sources (finance, gaming, data, digital), screened by an LLM into one English row each.

- **URL**: https://apify.com/ndsolovev/regulator-watch.md
- **Developed by:** [Nikita Solovev](https://apify.com/ndsolovev) (community)
- **Categories:** News, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 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

## Regulator Watch

Reads about 80 regulator and industry sources (financial, gaming, data protection, telecom and digital regulators, app store rules, specialist media) and returns what they published in the last few days. Each publication becomes one English row. An LLM screens it: what kind of publication it is, whether it matters for your topics, and a one-line English headline.

### Input

| Field | Default | Meaning |
|---|---|---|
| `jurisdictions` | `["UAE", "Cyprus", "EU"]` | Whose sources to read. `Topic` is industry media and topic searches, `Platform` is app store and platform rules. |
| `sinceDays` | `7` | Keep publications from the last N days (1 to 60). |
| `topics` | gaming and gambling, mobile apps, AI, fintech and crypto, personal data, intellectual property, advertising | What counts as relevant, in plain words. |
| `screen` | `true` | Run the LLM screener. |
| `openrouterApiKey` | none | [OpenRouter API key](https://openrouter.ai/keys) for the screener. Falls back to the `OPENROUTER_API_KEY` environment variable. With no key the rows come back unscreened. |
| `maxItemsPerSource` | `10` | Newest publications kept per source. |

### Output row

```json
{
  "source_id": "esma",
  "source_name": "ESMA (MiCA)",
  "source_jurisdiction": "EU",
  "title": "ESMA publishes final report on ...",
  "url": "https://www.esma.europa.eu/...",
  "publisher_url": null,
  "published": "2026-11-07",
  "kind": "guidance",
  "relevant": true,
  "verdict": "brief",
  "audience": ["crypto"],
  "event_jurisdiction": "EU",
  "story": "esma-mica-final-report",
  "headline": "ESMA finalises MiCA guidance on ...",
  "money_mentioned": "",
  "date_mentioned": "30 June 2027"
}
```

- `kind`: rule_change, enforcement, deadline, guidance, consultation, event, report, opinion, pr, other.
- `verdict`: keep (a lawyer should read it), brief (worth one line), drop (noise or off topic). pr, event, opinion and other are never keep; anything not relevant is drop.
- `publisher_url`: the original article behind a Google News link, when it resolves.
- `story`: the same slug for every article about the same event, so you can group duplicates.
- Screening fields are null when screening is off or the model call failed.

Publications with no date in the feed or on the page are dropped. Sources that only track page changes are skipped.

### Sources

About 83 feeds. Pick them by jurisdiction in the input. A source marked *(via Google News)* is read through a Google News search of its site; the row then carries the original article link in `publisher_url` when it resolves.

**UAE**: [VARA (Dubai)](https://www.vara.ae/en/news/), [TDRA](https://tdra.gov.ae) *(via Google News)*, [GCGRA](https://gcgra.gov.ae) *(via Google News)*, [UAE Government Portal (u.ae)](https://u.ae) *(via Google News)*, [DFSA (DIFC)](https://dfsa.ae) *(via Google News)*, [ADGM / FSRA](https://www.adgm.com/media/announcements), [Central Bank of the UAE](https://centralbank.ae) *(via Google News)*, [UAE Media Council](https://uaemc.gov.ae) *(via Google News)*, [Ministry of Economy & Tourism UAE](https://moet.gov.ae) *(via Google News)*, [SCA UAE](https://sca.gov.ae) *(via Google News)*, [Federal Tax Authority UAE](https://tax.gov.ae/en/media.centre/news.aspx), [Al Tamimi](https://tamimi.com) *(via Google News)*, UAE laws and cabinet resolutions *(via Google News)*.

**Saudi Arabia (KSA)**: [SDAIA](https://sdaia.gov.sa) *(via Google News)*, [GAMR](https://gmedia.gov.sa) *(via Google News)*, [SAMA (Saudi Central Bank)](https://sama.gov.sa) *(via Google News)*, [CST Saudi](https://cst.gov.sa) *(via Google News)*, [Ministry of Commerce Saudi](https://mc.gov.sa) *(via Google News)*, [CMA Saudi](https://cma.org.sa) *(via Google News)*, [ZATCA Saudi](https://zatca.gov.sa/en/MediaCenter/News/Pages/default.aspx).

**Cyprus**: [Cyprus DPA](https://www.gov.cy/dataprotection/), [CySEC](https://www.cysec.gov.cy), [Cyprus Gaming and Casino Supervision Commission](https://www.cgc.org.cy/en/), [Cyprus Deputy Ministry of Research, Innovation and Digital Policy](https://www.gov.cy/dmrid/en/), [Cyprus Bar Association](https://www.cyprusbarassociation.org/index.php/en/news), [National Betting Authority Cyprus](https://nba.gov.cy), [Cyprus Mail](https://cyprus-mail.com/).

**EU**: [EC Digital Strategy](https://digital-strategy.ec.europa.eu/en/news), [EDPB](https://www.edpb.europa.eu), [ESMA (MiCA)](https://www.esma.europa.eu), [EBA](https://www.eba.europa.eu), [Irish DPC](https://dataprotection.ie) *(via Google News)*, [Garante (Italy)](https://garanteprivacy.it) *(via Google News)*, [CNIL (France)](https://www.cnil.fr), [noyb](https://noyb.eu).

**Russia**: [Roskomnadzor](https://rkn.gov.ru) *(via Google News)*, [Roskomnadzor (Telegram)](https://t.me/rkn_tg), [Russian Ministry of Digital Development](https://digital.gov.ru) *(via Google News)*, [Russian Ministry of Digital Development (Telegram)](https://t.me/mintsifry), [Rospatent (IP)](https://rospatent.gov.ru/ru/news), [Bank of Russia: fintech news](https://cbr.ru) *(via Google News)*, [Russian Federal Antimonopoly Service](https://fas.gov.ru) *(via Google News)*, [Russian Federal Antimonopoly Service (Telegram)](https://t.me/fasrussia), [Russian Federal Tax Service](https://nalog.gov.ru) *(via Google News)*, [Russian Ministry of Finance](https://minfin.gov.ru) *(via Google News)*, [Rosfinmonitoring](https://fedsfm.ru) *(via Google News)*, [Kremlin.ru](http://kremlin.ru/acts/news), [ConsultantPlus: new documents](https://www.consultant.ru), [Pravo.ru: IT courts and bills](https://pravo.ru), [CNews](https://www.cnews.ru), [D-Russia](https://d-russia.ru/).

**Malta**: [Malta Gaming Authority](https://www.mga.org.mt/), [MFSA (Malta)](https://mfsa.mt) *(via Google News)*.

**UK**: [Ofcom](https://ofcom.org.uk) *(via Google News)*, [UK CMA](https://www.gov.uk/government/organisations/competition-and-markets-authority), [UK Gambling Commission (loot boxes)](https://www.gamblingcommission.gov.uk/news).

**US**: [FTC](https://www.ftc.gov), [US Copyright Office (AI & IP)](https://www.copyright.gov/newsnet/), [SEC (US)](https://www.sec.gov), [CFTC](https://www.cftc.gov/PressRoom/PressReleases), [FinCEN](https://www.fincen.gov/news).

**Kazakhstan**: [AFSA (AIFC Kazakhstan)](https://afsa.aifc.kz/news/), Kazakhstan: IT, AI, gaming and data laws (press) *(via Google News)*.

**Global**: [FATF](https://fatf-gafi.org) *(via Google News)*, Curaçao Gaming Control Board (press) *(via Google News)*.

**Platform: app store rules**: [Apple Developer News](https://developer.apple.com/news/), [Android Developers Blog](https://android-developers.googleblog.com/search/label/Google%20Play), [Steamworks](https://steamcommunity.com/groups/steamworks).

**Topic: industry media and topic searches**: Topic: loot boxes and game monetisation *(via Google News)*, Topic: Russian personal data law *(via Google News)*, [Reddit r/gamedev](https://www.reddit.com/r/gamedev/), [Habr: IT law](https://habr.com/ru/), [Hacker News](https://news.ycombinator.com), [Ars Technica](https://arstechnica.com/tech-policy/), [The Verge](https://www.theverge.com), [GamesIndustry.biz](https://www.gamesindustry.biz/), [App2Top](https://app2top.ru/), [iGaming Business](https://igamingbusiness.com/), [PocketGamer.biz](https://www.pocketgamer.biz), [Game Developer](https://www.gamedeveloper.com), [CoinDesk](https://www.coindesk.com).

### Cost

The screener uses [`google/gemini-3.1-flash-lite`](https://openrouter.ai/google/gemini-3.1-flash-lite) through [OpenRouter](https://openrouter.ai), about $0.0002 per publication, so a 300-row run costs about 6 cents on your OpenRouter key.

# Actor input Schema

## `jurisdictions` (type: `array`):

Whose regulators to read. Topic = industry media and topic searches; Platform = app store and platform rules.

## `sinceDays` (type: `integer`):

Keep publications from the last N days.

## `topics` (type: `string`):

What counts as relevant for the screener, in plain words.

## `screen` (type: `boolean`):

Classify each publication (kind, verdict, English headline). Needs an OpenRouter API key.

## `openrouterApiKey` (type: `string`):

Optional. Without a key the rows come back unscreened.

## `maxItemsPerSource` (type: `integer`):

Newest first.

## Actor input object example

```json
{
  "jurisdictions": [
    "UAE",
    "Cyprus",
    "EU"
  ],
  "sinceDays": 7,
  "topics": "gaming and gambling, mobile apps, AI, fintech and crypto, personal data, intellectual property, advertising",
  "screen": true,
  "maxItemsPerSource": 10
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ndsolovev/regulator-watch").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("ndsolovev/regulator-watch").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 ndsolovev/regulator-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ndsolovev/regulator-watch"
        }
    }
}
```

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/tHcel3SJ6Z8bLal6k/builds/guKc29TOCCiQzEYV1/openapi.json
