# Resmi Gazete Watch - Turkey Official Gazette & Tenders (`great_saint/resmi-gazete-watch`) Actor

Daily keyword monitor for Turkey's Official Gazette (Resmî Gazete): regulations, presidential decisions, board decisions and public tender notices. Pay only for matching items.

- **URL**: https://apify.com/great_saint/resmi-gazete-watch.md
- **Developed by:** [Öge](https://apify.com/great_saint) (community)
- **Categories:** News, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 gazette items

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/actors/running/actors-in-store.md#pay-per-event

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

## Resmî Gazete Watch — Turkey Official Gazette & Tender Notices

Monitor **Turkey's Official Gazette (Resmî Gazete)** by keyword. Every day the gazette publishes presidential decisions, regulations, communiqués, board decisions (EPDK, BDDK, RTÜK…) and public **tender / sale / lease notices**. This Actor reads the official daily index at resmigazete.gov.tr and returns only the entries that match your keywords, as clean JSON.

**Typical uses**

- Compliance and legal teams: get every new regulation that mentions *"enerji"*, *"kişisel veri"*, *"gümrük"*…
- Public procurement / real-estate scouts: daily list of tender, property sale and lease notices of ministries, municipalities and state companies.
- AI agents and newsletters: a reliable, structured feed of Turkish legal changes.

### How it works

1. Downloads the daily index page(s) of the dates you choose (default: today, Istanbul time).
2. Parses the daily table of contents — *Yasama*, *Yürütme ve İdare* and *Yargı* sections (laws, decisions, regulations, communiqués, high-court decision titles) as `legislation`, and the *Artırma, Eksiltme ve İhale İlânları* list as `tenders`.
3. Keeps items whose title, institution or category contains any of your keywords (Turkish characters and case are ignored: `ihale` = `İHALE`).
4. With **Only new items** on, items you already received in an earlier run are skipped, so a daily schedule only pays for new matches.

Court notices (*Yargı İlânları*) and miscellaneous notices (*Çeşitli İlânlar*) are intentionally **not** collected: they often contain names of private individuals. The Actor outputs only titles, institutions and links; it does not extract document contents. Linked official documents (e.g. appointment decisions, Constitutional Court rulings) may themselves contain names.

### Input

```json
{
  "keywords": ["yönetmelik", "enerji", "taşınmaz"],
  "parts": ["legislation", "tenders"],
  "daysBack": 6,
  "onlyNew": true,
  "maxItems": 1000
}
```

| Field | Meaning |
|---|---|
| `keywords` | Match ANY of these (empty = return everything). |
| `parts` | `legislation` (Yasama, Yürütme ve İdare, Yargı sections) and/or `tenders`. |
| `daysBack` / `dateFrom` / `dateTo` | Date window (max 62 days per run). |
| `onlyNew` | Monitoring mode: skip items returned before for the same keywords. |
| `maxItems` | Hard cap per run. |

### Output (one dataset item per gazette entry)

```json
{
  "itemId": "3fcdf4fbf8c54b30",
  "date": "2026-10-24",
  "issueNumber": "33410",
  "part": "tenders",
  "section": "İLÂN BÖLÜMÜ",
  "category": "ARTIRMA, EKSİLTME VE İHALE İLÂNLARI",
  "title": "TAŞINMAZ SATILACAKTIR",
  "institution": "Çanakkale İli Kepez Belediye Başkanlığından",
  "documentUrl": "https://www.resmigazete.gov.tr/ilanlar/eskiilanlar/2026/10/20261024-3-7.pdf",
  "documentType": "pdf",
  "matchedKeywords": ["taşınmaz"],
  "sourcePageUrl": "https://www.resmigazete.gov.tr/eskiler/2026/10/20261024.htm",
  "scrapedAt": "2026-10-24T09:00:23+00:00"
}
```

Legislation items have `institution: null` and `part: "legislation"`; `category` is e.g. `YÖNETMELİKLER`, `CUMHURBAŞKANI KARARLARI`, `KURUL KARARLARI`, `TEBLİĞLER`.

### Pricing (pay per event)

- **$0.003 per returned gazette item** (≈ $3 per 1,000). You pay nothing for entries that do not match.
- A tiny Actor-start fee charged by the platform.
  A daily run with a few keywords usually costs **under $0.05**. Platform usage is included.

### Schedule it

Create a Task with your keywords, turn on **Only new items**, and add a daily schedule (e.g. 07:30 Europe/Istanbul). Connect a webhook, Slack, e-mail or Make/Zapier integration to get alerts.

### Notes

- Source: the public website of the Presidency of the Republic of Türkiye, Directorate of Legislation Development and Publication (resmigazete.gov.tr). This Actor is not affiliated with it.
- Extraordinary (*mükerrer*) issues are included when linked from the daily index.
- Full document text is not extracted (most documents are PDFs); use `documentUrl`.

***

#### Türkçe kısa açıklama

Resmî Gazete'yi anahtar kelimeyle izler. Her gün yasama, yürütme ve idare, yargı bölümlerindeki başlıkları (kanun, karar, yönetmelik, tebliğ, yüksek mahkeme kararları) ve **ihale, satış, kiralama ilanlarını** okur; yalnız kelimelerinize uyanları JSON olarak verir. "Yalnız yeni" seçeneğiyle günlük zamanlanmış çalıştırmada sadece yeni kayıtlar için ödersiniz. Yargı ilanları ve çeşitli ilanlar kişi adı içerebildiği için alınmaz; kişisel veri toplanmaz. Fiyat: eşleşen kayıt başına 0,003 $.

# Actor input Schema

## `keywords` (type: `array`):

Items whose title, institution or category contains ANY of these words are returned. Turkish characters and case are ignored ("ihale" matches "İHALE"). Leave empty to return every item.

## `parts` (type: `array`):

legislation = table of contents of the Yasama, Yürütme ve İdare and Yargı sections (laws, decisions, regulations, communiqués, high-court decisions). tenders = Artırma, Eksiltme ve İhale İlânları (tender / sale / lease notices of public bodies).

## `daysBack` (type: `integer`):

How many days before the end date to include. 0 = only the end date (today in Istanbul time). Max 61.

## `dateFrom` (type: `string`):

YYYY-MM-DD. Overrides 'Days back'.

## `dateTo` (type: `string`):

YYYY-MM-DD. Default: today (Europe/Istanbul).

## `onlyNew` (type: `boolean`):

Remember items returned in earlier runs with the same keywords and skip them. Use with a daily schedule so you only pay for new matches.

## `maxItems` (type: `integer`):

Stop after this many items.

## Actor input object example

```json
{
  "keywords": [
    "yönetmelik",
    "enerji"
  ],
  "parts": [
    "legislation",
    "tenders"
  ],
  "daysBack": 0,
  "onlyNew": false,
  "maxItems": 1000
}
```

# Actor output Schema

## `items` (type: `string`):

Matching gazette entries (legislation items and tender notices) as 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 = {
    "keywords": [
        "yönetmelik",
        "enerji"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("great_saint/resmi-gazete-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 = { "keywords": [
        "yönetmelik",
        "enerji",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("great_saint/resmi-gazete-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 '{
  "keywords": [
    "yönetmelik",
    "enerji"
  ]
}' |
apify call great_saint/resmi-gazete-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,great_saint/resmi-gazete-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/g8cGZSEtqpvkwFfye/builds/5lwGTZ0B8BX8jX0hw/openapi.json
