# Saudi Etimad Tenders API – Government Tenders & Awards Feed (`data_daemon/saudi-etimad-tenders`) Actor

Saudi government tenders from the Etimad procurement portal as JSON: agency, type, activity, region, Gregorian and Hijri deadlines, document fee, status, plus detail pages with award results (bidders, winner, amount). Keyword, agency, activity and region filters; daily only-new feed. $3 per 1,000.

- **URL**: https://apify.com/data_daemon/saudi-etimad-tenders.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Lead generation, Agents
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 tender records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Saudi Etimad Tenders API – Government Tenders & Awards Feed

**A daily feed of new Saudi government tenders as JSON, straight from the Etimad procurement portal.** Every tender published on [tenders.etimad.sa](https://tenders.etimad.sa) by a Saudi ministry, authority, municipality, hospital or university, with the agency, tender type, activity, region, submission deadline (Gregorian and Hijri), enquiry deadline, document fee, status and a link to the tender page. Filter by Arabic or English keyword, agency, activity, tender type, region and publication window; turn on `includeDetails` to add the purpose, contract duration, guarantee and insurance requirements, execution city and the **published award results** (bidders with their offers, the awarded supplier and the award value). No Etimad account, API key or proxy.

```bash
curl -X POST "https://api.apify.com/v2/acts/data_daemon~saudi-etimad-tenders/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"publishedWithin": "2d", "maxItems": 0}'
```

On 9 November 2026 Etimad listed **291,416 tenders**: 182 published in the last 2 days, 707 in the last week, 2,813 in the last month, 7,156 in the last 3 months, 1,339 currently open for offers and 242,812 with published award results. Read live from the portal on every run.

$3 per 1,000 tenders ($0.003 per tender), plus $7 per 1,000 detail pages when `includeDetails` is on ($0.01 per tender with details).

### What teams run, and what it costs

| You are | You run | Cost |
|---|---|---|
| Bid team / contractor / supplier | Daily: `publishedWithin: "2d"`, `onlyNew: true`, your `keywords` or `activities` (about 90 new tenders a day across all sectors) | $3-8 per month for the whole market, cents for one sector |
| Bid consultancy / tender alert service | Daily feed with `includeDetails: true` for the purpose, contract duration, guarantees and execution city | about $25 per month for everything, $1-5 per sector |
| Market-intelligence / competitor desk | `stage: "awarded"`, `publishedWithin: "90d"`, `includeDetails: true`, `onlyNew: true`: who won what, at what price, against which bidders | $0.01 per awarded tender (about 2,000 in the 90-day window: $20 once, then a few dollars a month) |
| Market-entry adviser / analyst | Backfill: `publishedWithin: "30d"` or `"90d"`, `maxItems: 0` | 2,800 tenders: $8.40; 7,200 tenders: $21 |
| Developer / AI agent | A sample: the default input returns the 50 newest tenders | $0.15 |

Export JSON, CSV or Excel, connect by API, webhook, Google Sheets, Make or n8n, or ask an AI agent through the Apify MCP server.

### Why use this instead of the Etimad portal

- **A feed, not a search form.** The portal shows 24 tenders a page in Arabic and has no RSS, export or API for suppliers without an account. This Actor returns the newest tenders first as clean rows and remembers what it delivered, so a scheduled run gives you only new or changed tenders (`onlyNew`), never charged twice.
- **Searchable in English.** Tender type, status, region and the main activity groups come with English translations next to the Arabic originals (`tenderTypeEn`, `statusEn`, `regionEn`), and filters accept English names (`regions: ["Riyadh"]`, `activities: ["IT"]`, `tenderTypes: ["public"]`). Tender names, agencies and purposes stay exactly as the agency published them (Arabic, sometimes English).
- **Award results with prices.** With `includeDetails`, awarded tenders carry every bidder's financial offer and technical result, the awarded supplier and the award value: the data a competitor analysis needs.
- **Both calendars.** Deadlines come as Gregorian timestamps (`submissionDeadline`) and Hijri dates (`submissionDeadlineHijri`), plus `daysRemaining`.
- **Built for schedules.** Publication windows (2 days to 90 days), a run-deadline guard, a charge-limit guard and a clear status message; unchanged tenders in only-new mode are skipped and not charged.
- **Business data only.** Agencies, tenders and supplier companies as published on the public portal. No login, no personal data.

### How to use it

1. Click **Try for free**. The default input returns the 50 most recently published tenders across all agencies (about $0.15).
2. Narrow it down: **Keywords** (Arabic or English, e.g. `صيانة`, `تكييف`, `CCTV`), **Activities** (e.g. `contracting`, `IT`, `healthcare`, or an Etimad sub-activity id such as `601`), **Tender types**, **Regions**, **Government agencies**.
3. Pick a **Published within** window (`2d` for a daily feed, `30d` or `90d` for a backfill) and set **Max items** to `0` for everything that matches.
4. Turn on **Include details** when you need the purpose, contract duration, guarantees, execution city or the award results.
5. For a daily feed, schedule the run with **Only new or changed** on. The first run delivers the window, later runs only new tenders and changed ones (status, deadline).

### Input

```json
{
    "stage": "all",
    "publishedWithin": "2d",
    "keywords": ["صيانة", "تكييف"],
    "regions": ["Riyadh", "Eastern Province"],
    "tenderTypes": ["public", "framework"],
    "includeDetails": false,
    "onlyNew": true,
    "maxItems": 0
}
```

| Field | What it does |
|---|---|
| `stage` | `all` (default, newest published first), `open` (accepting offers now), `opening`, `evaluation`, `awarding`, `awarded` (results published), `ended`. |
| `publishedWithin` | The portal's publication window: `any` (default), `2d`, `7d`, `30d`, `90d`. |
| `fromDate`, `toDate` | Optional exact publication date range, `YYYY-MM-DD`; the listing is read newest first and stops at older tenders. |
| `keywords` | Etimad's own search (tender name, number, agency), one query per keyword, Arabic or English. |
| `agencies` | Agency names in Arabic as Etimad lists them (`وزارة الصحة`, `أمانة منطقة الرياض`) or 12-digit agency codes. |
| `activities` | Main activity id 1-19 or its English/Arabic name, or an Etimad sub-activity id (e.g. `601`). |
| `tenderTypes` | `public`, `directPurchase`, `framework`, `largeCompanies`, `reverseAuction`, `twoStage`, `postQualification`, `competition`, `revenueShare`. |
| `regions` | The 13 Saudi regions by English or Arabic name or id 1-13. |
| `documentFee` | Document (booklet) price range as a proxy for contract size: `free`, `upTo1k`, `1kTo10k`, ... `over50k`. |
| `includeDetails` | Read each tender's detail page and award results (one `tender-details` event per tender). |
| `maxItems` | Tenders to save, newest first; `0` = all that match (default 50). |
| `onlyNew`, `stateName` | Deliver and charge only new or changed tenders (400-day memory per state name). |

Main activity groups (Etimad ids): 1 Trade, 2 Contracting, 3 Operation, maintenance and cleaning, 4 Real estate and land, 5 Industry, mining and recycling, 6 Gas, water and energy, 7 Mines, petroleum and quarries, 8 Media and publishing, 9 Telecommunications and IT, 10 Agriculture and fishing, 11 Healthcare, 12 Education and training, 13 Employment and recruitment, 14 Security and safety, 15 Transport, post and storage, 16 Consulting professions, 17 Tourism, restaurants, hotels and exhibitions, 18 Finance and insurance, 19 Other services.

### Output

```json
{
  "tenderId": 1118251,
  "referenceNumber": "261139001461",
  "name": "تأمين أحتياج الأيام العالمية لزوم مستشفى الأمير سلمان بن محمد بالدلم والمراكز التابعة له",
  "agency": "تجمع الرياض الصحي الأول",
  "branch": "مستشفى الأمير سلمان بن محمد بالدلم",
  "tenderType": "شراء مباشر",
  "tenderTypeEn": "Direct purchase",
  "tenderTypeId": 2,
  "activity": "خدمات النشر والطباعة والدعاية والاعلان والإنتاج الفني",
  "activityId": 801,
  "status": "تم اعتماد الترسية",
  "statusEn": "Award approved",
  "statusId": 15,
  "publishedAt": "2026-11-05T14:23:11.6166667",
  "publishedDate": "2026-11-05",
  "lastEnquiryDate": "2026-11-07T14:23:11.6166667",
  "submissionDeadline": "2026-11-08T09:59:00",
  "submissionDeadlineDate": "2026-11-08",
  "lastEnquiryDateHijri": "1448-05-27",
  "submissionDeadlineHijri": "1448-05-28",
  "daysRemaining": 0,
  "documentFeeSar": 200,
  "documentsFree": false,
  "isUnifiedProcurement": false,
  "url": "https://tenders.etimad.sa/Tender/DetailsForVisitor?STenderId=SvrhAdqudUuPcsdpj5EptQ%3D%3D",
  "purpose": "تأمين أحتياج الأيام العالمية لزوم مستشفى الأمير سلمان بن محمد بالدلم والمراكز التابعة له",
  "contractDuration": "15 يوم",
  "contractDurationDays": 15,
  "insuranceRequired": false,
  "submissionMethod": "ملف واحد للعرض الفني والمالي معا",
  "initialGuarantee": "لا يوجد ضمان",
  "contractorClassification": "غير مطلوب",
  "executionLocation": "داخل المملكة",
  "region": "منطقة الرياض",
  "regionEn": "Riyadh",
  "city": "الدلم",
  "activities": ["مقاولات الإنشاءات العامة (التشييد و بناء المرافق العامة)- إنشاءات عامة", "خدمات النشر والطباعة والدعاية والاعلان والإنتاج الفني"],
  "expectedAwardDate": "2026-11-12",
  "workStartDate": "2026-11-15",
  "awardAnnounced": true,
  "bidders": [
    { "supplier": "شركة تروفريم", "offerSar": 92575, "technicalResult": "مطابق" },
    { "supplier": "مؤسسة جود التعمير الراقي", "offerSar": 29900, "technicalResult": "مطابق" }
  ],
  "biddersCount": 7,
  "lowestOfferSar": 29900,
  "awardType": "ترسية كاملة",
  "awardedSuppliers": [{ "supplier": "مؤسسة جود التعمير الراقي", "offerSar": 29900, "awardSar": 29900 }],
  "awardedSupplier": "مؤسسة جود التعمير الراقي",
  "awardTotalSar": 29900,
  "hasDetails": true,
  "source": "Etimad (tenders.etimad.sa), Saudi government procurement portal",
  "scrapedAt": "2026-11-09T14:52:10.112Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

| Field | Meaning |
|---|---|
| `tenderId`, `referenceNumber`, `tenderNumber`, `url` | Etimad identifiers and the public tender page. |
| `name`, `agency`, `agencyCode`, `branch` | Tender name and the publishing agency and branch, as published (Arabic, sometimes English). |
| `tenderType`, `tenderTypeEn`, `tenderTypeId` | Public tender, direct purchase, framework agreement, large companies tender, reverse auction, two-stage, post-qualification, competition, revenue sharing. |
| `activity`, `activityId` | Etimad activity (sub-activity) of the tender. |
| `status`, `statusEn`, `statusId` | Approved (open for offers), offers opened, offers under examination, awarding stage, preliminary award approved, award approved, awaiting authority review... |
| `publishedAt`, `publishedDate` | When the agency published the tender (Riyadh time). |
| `lastEnquiryDate`, `submissionDeadline`, `offersOpeningDate` and the `...Hijri` twins | Enquiry deadline, offer submission deadline and opening date, Gregorian and Hijri. |
| `daysRemaining` | Days left to submit, as the portal counts them. |
| `documentFeeSar`, `documentsFree`, `financialFeesSar`, `invitationCostSar`, `buyingCostSar` | Price of the tender documents and the portal's other fees, in Saudi riyals. |
| `insideKsa`, `isUnifiedProcurement` | Execution inside the Kingdom; unified government procurement (UGRP) tender. |
| Details (`includeDetails`) | `purpose`, `contractDuration`/`contractDurationDays`, `insuranceRequired`, `submissionMethod`, `initialGuarantee`, `contractorClassification`, `executionLocation`, `executionRegions` (regions with cities), `region`/`regionEn`/`city`, `activities`, `includesSupplyItems`, `constructionWorks`, `maintenanceWorks`, `enquiriesStartDate`, `offersExaminationDate`, `expectedAwardDate`, `workStartDate`, `maxEnquiryResponseDays`, `offersOpeningPlace`. |
| Award results (`includeDetails`) | `awardAnnounced`, `bidders` (supplier, `offerSar`, `technicalResult`), `biddersCount`, `lowestOfferSar`, `awardType` (full or partial), `awardedSuppliers` (supplier, `offerSar`, `awardSar`), `awardedSupplier`, `awardTotalSar`, `awardNumber`. |
| `hasDetails` | True when the detail page was read (unified-procurement tenders have no public detail page). |
| `changeType`, `previouslyDeliveredOn` | Only-new mode: `new` or `updated`, and when the tender was last delivered. |

### How much does it cost to get Saudi tender data?

Pay per result: **$3 per 1,000 tenders** ($0.003 per tender; lower on higher Apify plans), and **$7 per 1,000 detail pages** when `includeDetails` is on, so a tender with details costs $0.01. No monthly fee. Tenders left out by filters, and unchanged tenders in only-new mode, are not charged. Typical jobs: a sample of 50 tenders $0.15; the last 2 days (about 180 tenders) $0.55; a 30-day backfill (about 2,800) $8.40; a daily all-market feed about $8 per month; the awards of the last 90 days with details (about 2,000) $20. The portal serves 24 tenders per request in about 3 seconds, so 1,000 tenders take about 2 minutes; details add about 1.5 seconds per tender.

### Tips

- **Daily feed:** `publishedWithin: "2d"`, `onlyNew: true`, `maxItems: 0`; schedule it every morning. Each new tender arrives once; a tender whose deadline or status changes arrives again as `changeType: "updated"`.
- **Awards feed:** `stage: "awarded"`, `publishedWithin: "90d"`, `includeDetails: true`, `onlyNew: true`. Direct purchases are usually awarded within two to three weeks of publication; public tenders take longer, so the 90-day window catches most awards. Rows carry `awardedSupplier`, `awardTotalSar`, `bidders` and `lowestOfferSar`.
- **Sector feeds:** `activities: ["contracting"]` for construction, `["IT"]` for technology, `["healthcare"]`, `["security"]`, `["consulting"]`, or Etimad sub-activity ids for a precise trade; `tenderTypes: ["public", "framework"]` leaves out small direct purchases.
- **Agency watch:** `agencies: ["وزارة الصحة"]` matches every agency whose Etimad name contains the text; when it matches many (the Ministry of Health has about 30 entities), rows are filtered by agency and branch name instead.
- **Contract size:** `documentFee: "over50k"` (or `"20kTo40k"`...) keeps the large tenders; the portal answers this filter slowly.
- The listing is paged newest first at 24 rows a request, so very wide pulls (`publishedWithin: "any"`, `maxItems: 0`) run for a long time; use the windows or `fromDate`/`toDate` and raise the run timeout for backfills.

### FAQ

**Is there an Etimad API?** Not a public one for suppliers: the Etimad portal offers no feed, export or API without an account, and its paid integration services are for government entities and their contracted suppliers. This Actor reads the public visitor listing and the public tender pages and returns them as JSON, CSV or Excel through the Apify API.

**Which tenders are included?** Everything the visitor listing shows: all tender types from all government agencies, from the newest publication backwards, including closed and awarded tenders (`stage`). Unified government procurement (UGRP) tenders appear in the listing but have no public detail page, so they come without detail fields.

**Are the texts translated?** Coded fields are: tender type, status, region and main activity carry English translations next to the Arabic originals. Tender names, agencies, purposes and supplier names are kept exactly as published, in Arabic or English, so they match the portal and other records.

**Why does a daily feed deliver a tender twice?** With `onlyNew` a tender is delivered again, labelled `updated`, when its status, submission deadline, enquiry deadline, opening date or name changed since the last delivery, for example when the deadline is extended or the award is approved.

**Is it legal?** The data is published by the Saudi government on a public portal for the public and suppliers, and contains tender and business records only. You are responsible for how you use it.

**Something wrong or missing?** Open an issue on the Issues tab with the input you used.

### Related Actors by Daemon Data

- [Dubai DLD Property Transactions](https://apify.com/data_daemon/dubai-property-transactions) – registered Dubai sales, mortgages and gifts with AED value and price per sq m, daily
- [Dubai Real Estate Projects API](https://apify.com/data_daemon/dubai-real-estate-projects) – the DLD project register: developer, status, value, escrow account, progress
- [Dubai Rent Contracts (Ejari)](https://apify.com/data_daemon/dubai-rent-contracts) – registered rent contracts: annual rent, rent per sq m, area, new vs renewed
- [UK Gazette Insolvency Notices](https://apify.com/data_daemon/uk-gazette-insolvency-notices) – winding-up petitions, administrations and liquidations as JSON
- [India New Company Registrations](https://apify.com/data_daemon/india-new-company-registrations) – newly incorporated Indian companies daily: CIN, type, state, activity, capital

All Daemon Data Actors: [apify.com/data_daemon](https://apify.com/data_daemon).

# Actor input Schema

## `stage` (type: `string`):

Which tenders to list, as the Etimad visitor portal groups them. `all` (default) returns every published tender newest first (291,000 on 9 Nov 2026); `open` the ones still accepting offers (about 1,300); `awarded` the ones whose award results are published (combine with **Published within** 90 days and **Include details** for an awards feed with supplier names and amounts).

## `publishedWithin` (type: `string`):

The portal's own publication-date window. On 9 Nov 2026: 182 tenders in the last 2 days, 707 in the last week, 2,800 in the last month, 7,200 in the last 3 months. Use `2d` for a daily feed.

## `fromDate` (type: `string`):

Optional exact publication date range start (included), `YYYY-MM-DD`. The listing is read newest first and stops once it reaches older tenders. Combine with **Published within** = any for a backfill.

## `toDate` (type: `string`):

Optional publication date range end (included), `YYYY-MM-DD`.

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

Search terms, Arabic or English, matched by Etimad's own search over tender name, number and agency, e.g. `صيانة`, `تكييف`, `software`, `CCTV`. One listing query per keyword; results are merged and de-duplicated.

## `agencies` (type: `array`):

Agency names (Arabic, as Etimad lists them, e.g. `وزارة الصحة`, `أمانة منطقة الرياض`) or 12-digit Etimad agency codes. A name is matched against the portal's agency list (up to 8 matching agencies are queried); names with more matches filter the rows by agency/branch name instead.

## `activities` (type: `array`):

Tender activity: main activity id 1-19 or its English/Arabic name (`contracting`, `IT`, `healthcare`, `maintenance`, `security`, `consulting`, `transport`...), or an Etimad sub-activity id such as `601` (electricity, gas, water and HVAC supplies). One query per activity.

## `tenderTypes` (type: `array`):

`public` (منافسة عامة), `directPurchase` (شراء مباشر), `framework` (اتفاقية إطارية), `largeCompanies`, `reverseAuction`, `twoStage`, `postQualification`, `competition`, `revenueShare`. Empty = all types.

## `regions` (type: `array`):

Execution region: `Riyadh`, `Makkah`, `Madinah`, `Qassim`, `Eastern Province`, `Asir`, `Tabuk`, `Hail`, `Northern Borders`, `Jazan`, `Najran`, `Al Bahah`, `Al Jouf` (English, Arabic or id 1-13). Empty = all of Saudi Arabia.

## `documentFee` (type: `string`):

Price of the tender documents (booklet), a proxy for contract size. The portal answers this filter slowly (10-30 s per page).

## `includeDetails` (type: `boolean`):

Also read each tender's public detail page: purpose, contract duration, insurance and guarantee requirements, submission method, contractor classification, execution region and city, activities, expected award and work-start dates, and the published award results (bidders with offer amounts, awarded supplier and award value). Adds one `tender-details` event per tender (4 requests each, about 1-2 s per tender).

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

Maximum tenders to save, newest first (0 = everything that matches). Each saved tender is one charged event; the default of 50 keeps a first try at about $0.15 ($0.50 with details).

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

For scheduled runs: deliver (and charge) a tender only when it is new to this **State name** or when its status, submission deadline, enquiry deadline, opening date or name changed since the last delivery. Each row then carries `changeType` (`new` or `updated`). Memory lasts 400 days.

## `stateName` (type: `string`):

Name of the only-new memory. Use a different name for each independent feed.

## `proxyConfiguration` (type: `object`):

Not needed: the Etimad visitor endpoints answer Apify's datacenter IPs directly. Provided in case the portal starts limiting requests.

## Actor input object example

```json
{
  "stage": "all",
  "publishedWithin": "any",
  "keywords": [],
  "agencies": [],
  "activities": [],
  "tenderTypes": [],
  "regions": [],
  "documentFee": "any",
  "includeDetails": false,
  "maxItems": 50,
  "onlyNew": false,
  "stateName": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `tenders` (type: `string`):

Saudi government tenders as JSON items in the default dataset (also downloadable as CSV, Excel, XML).

## `summary` (type: `string`):

Counts, filters and warnings of this run.

# 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("data_daemon/saudi-etimad-tenders").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("data_daemon/saudi-etimad-tenders").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 data_daemon/saudi-etimad-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_daemon/saudi-etimad-tenders"
        }
    }
}
```

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/exAkYmXl5W8aoBart/builds/obU5ijli6diL7c7p4/openapi.json
