Saudi Etimad government tenders and awards as JSON feed
Saudi Etimad Tenders API is a pay-per-record Apify Actor by Daemon Data that returns 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. as JSON, CSV or Excel. It costs $0.003 per tender record with the default options ($3.00 per 1,000); no login to the source site and no proxy or browser to set up on your side, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.
Daemon Data Saudi Etimad Tenders API on Apify Listing as plain text
Checked on 9 Nov 2026
The Etimad portal listed 291,416 tenders in total. On 9 Nov 2026 the last-two-days example returned 183 new tenders (about 90 a day) with agency, activity, region, type, deadlines and document fee; a {} run returns the 50 newest in about 10 seconds. Awarded tenders add bidders, the awarded supplier and the award value.
Why teams use it
- 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), plusdaysRemaining. - 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.
Output fields
The most useful top-level fields with values from a real record; the full list is tenderId, referenceNumber, tenderNumber, name, agency, branch, tenderType, tenderTypeEn, tenderTypeId, activity, activityId, status, statusEn, statusId, publishedAt, publishedDate, lastEnquiryDate, submissionDeadline, submissionDeadlineDate, lastEnquiryDateHijri, submissionDeadlineHijri, daysRemaining, documentFeeSar, documentsFree, financialFeesSar, invitationCostSar, buyingCostSar, isUnifiedProcurement, url, tenderIdString, source, scrapedAt, offersOpeningDate, offersOpeningDateHijri, changeType, agencyCode, insideKsa, purpose, contractDuration, contractDurationDays, insuranceRequired, submissionMethod, initialGuarantee, contractorClassification, executionLocation, executionRegions, region, regionEn, city, includesSupplyItems, activities, offersExaminationDate, expectedAwardDate, workStartDate, enquiriesStartDate, maxEnquiryResponseDays, awardType, bidders, biddersCount, lowestOfferSar, awardAnnounced, awardedSuppliers, awardedSupplier, awardTotalSar, hasDetails, awardNumber, constructionWorks, maintenanceWorks, offersOpeningPlace, previouslyDeliveredOn. Per-field notes and the OpenAPI definition are on the Apify API page.
| Field | Type | Example |
|---|---|---|
tenderId | number | 1118251 |
referenceNumber | string | "261139001461" |
name | string | "تأمين أحتياج الأيام العالمية لزوم مستشفى الأمير سلمان بن محمد بالد... |
agency | string | "تجمع الرياض الصحي الأول" |
branch | string | "مستشفى الأمير سلمان بن محمد بالدلم" |
tenderType | string | "شراء مباشر" |
tenderTypeEn | string | "Direct purchase" |
tenderTypeId | number | 2 |
activity | string | "خدمات النشر والطباعة والدعاية والاعلان والإنتاج الفني" |
activityId | number | 801 |
status | string | "تم اعتماد الترسية" |
statusEn | string | "Award approved" |
statusId | number | 15 |
publishedAt | string | "2026-11-05T14:23:11.6166667" |
publishedDate | string | "2026-11-05" |
Input and how to call it
Example input. Fields and pricing were checked against the public listing on 2026-11-09; this build does not run paid example searches.
{
"publishedWithin": "2d",
"maxItems": 50
}
One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):
curl -X POST "https://api.apify.com/v2/acts/data_daemon~saudi-etimad-tenders/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"publishedWithin": "2d", "maxItems": 50}'
Python: ApifyClient(token).actor("data_daemon/saudi-etimad-tenders").call(run_input=...). Python example · Node.js example · n8n workflow.
AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/saudi-etimad-tenders with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.
All input fields
| Field | Type | Meaning |
|---|---|---|
stage | 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 | 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 | 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 | string | Optional publication date range end (included), YYYY-MM-DD. |
keywords | 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 | 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 | 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 | array | public (منافسة عامة), directPurchase (شراء مباشر), framework (اتفاقية إطارية), largeCompanies, reverseAuction, twoStage, postQualification, competition, revenueShare. Empty = all types. |
regions | 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 | string | Price of the tender documents (booklet), a proxy for contract size. The portal answers this filter slowly (10-30 s per page). |
includeDetails | 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 | 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 | 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 | string | Name of the only-new memory. Use a different name for each independent feed. |
Price
$0.003 per tender record ($3.00 per 1,000); $0.007 per tender details and award results ($7.00 per 1,000). List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
| Tender record | $0.003 | $3.00 | One Saudi government tender saved to the dataset (agency, type, activity, deadlines, document fee, status, link). Tenders left out by filters or unchanged in only-new mode are never charged. |
| Tender details and award results | $0.007 | $7.00 | Charged once per saved tender whose public detail page was read (includeDetails): purpose, contract duration, guarantees, execution city, dates, bidders and award results. Not charged when the detail page is unavailable. |
Cost example: 50 tender records with default options cost $0.15, including any start fee. This is an illustrative record count; set explicit row and total-charge caps for your run. Apify's free plan includes $5 of usage a month, about 1,666 tender records before start fees; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.
Ready-made example pages
Saved inputs you can run with one click on Apify (Examples tab); each has its own page:
- New Saudi government tenders, last 2 days (Etimad JSON feed): Every tender published on the Saudi Etimad procurement portal in the last two days, as JSON: agency and branch, tender type (public tender, direct purchase, framework agreement), activity, submission and enquiry deadline
{"publishedWithin": "2d", "maxItems": 0}
Alternatives, honestly
| Option | What it gives you | Where it falls short for this job |
|---|---|---|
| Etimad portal (tenders.etimad.sa) | Official tender search and tender pages | One search at a time in the browser; no export or daily feed of new tenders |
| Etimad Contracts Plus / paid tender alerts | Official and commercial alert services | Per-query or subscription pricing |
| Tender aggregator subscriptions | Multi-country tender databases with support | Subscriptions; the Etimad listings themselves are public |