Etimad Pre-Planning Radar — Upcoming Saudi Government Projects
Pricing
from $10.00 / 1,000 planned project delivereds
Etimad Pre-Planning Radar — Upcoming Saudi Government Projects
See what a Saudi government agency plans to procure before it reaches tender. Pulls Etimad pre-planning records by agency, with Arabic text repaired so keyword filters actually match.
Pricing
from $10.00 / 1,000 planned project delivereds
Rating
0.0
(0)
Developer
Mohanad Alshaka
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
See what a Saudi government agency plans to buy before it reaches tender.
Saudi government bodies publish their forward procurement plans on Etimad under التخطيط المسبق: the project, its nature, the planned duration, and the quarter it is expected in. This Actor pulls those plans for the agencies you care about and returns them as clean JSON, CSV or Excel.
Etimad's tender feed tells you what is out for bid today. This tells you what is coming.
Why an agency is required
Etimad filters pre-planning records by agency code and by nothing else. There is no server-side keyword, year or region filter on this endpoint, and the page size is capped at 24 rows. An unscoped run would have to walk roughly 96,000 records to find anything.
So you pick agencies, either by name or by code, and the Actor pulls their plans. Search by name and it resolves against Etimad's own directory of 1,819 government agencies, with Arabic normalised, so امانة finds أمانة.
Newest plans first
Etimad returns pre-planning records oldest first. On أمانة منطقة المدينة المنورة, 2,169 plans span 91 pages and the 2026 entries sit on page 90.
When you set a year filter, this Actor walks the pages backwards from the end and stops as soon as it reaches a page older than the year you asked for. On that agency it reads 12 records instead of roughly 2,160, and finishes in about six seconds.
Arabic text is repaired
Etimad publishes a large share of its text in Arabic Presentation Forms-B (U+FE70–U+FEFF). Those characters look like normal Arabic and are different code points, so a plain keyword search over the raw feed silently misses them.
Every text field is normalised before matching, so أعمال matches records published in presentation forms, and انارة/إنارة, مستشفي/مستشفى, صيانه/صيانة all match each other. The original wording is kept in a raw object on every record so you can still find it on the portal.
Output
{"agencyCode": "019003001000","agencyName": "أمانة منطقة المدينة المنورة","projectName": "اعمال صيانة مقابر الحسو والقري التابعة لها بلدية الحسو","projectNature": "دراسات","projectDescription": "...","projectTypes": ["انشطة الاستشارات الادارية"],"projectTypeIds": [1603],"raw": { "projectName": "..." },"year": "2026","yearQuarterId": 2,"yearQuarterName": "الربع الثانى","durationInDays": 0,"durationInMonths": 0,"durationInYears": 2,"statusName": "معتمد","insideKSAString": "داخل المملكة"}
Input
| Field | What it does |
|---|---|
agencySearch | Agency name substring, matched against Etimad's directory after Arabic normalisation. |
agencyCodes | Exact agency codes if you already have them, for example 018014000000. |
keywords | Matched against project name, nature, description and type. |
matchMode | any (default) or all. |
years | Plan years to keep, for example ["2026"]. Also switches on newest-first scanning. |
quarterIds | 1 الربع الأول, 2 الربع الثاني, 3 الربع الثالث, 4 الربع الرابع. |
maxAgencies | Cap on how many agencies a broad name search expands to. |
maxItems | Hard cap on delivered records, and therefore on cost. |
Example: what one municipality plans for 2026
{"agencySearch": "أمانة منطقة المدينة المنورة","years": ["2026"],"maxItems": 500}
Example: IT projects planned across every أمانة
{"agencySearch": "أمانة","keywords": ["حاسب", "تقنية", "أنظمة", "برمجيات"],"years": ["2026"],"maxAgencies": 50,"maxItems": 1000}
Personal data
Etimad's raw pre-planning record includes a createdBy string holding the civil servant's full name and national ID number. That is personal data under the Saudi Personal Data Protection Law and it has no bearing on the procurement opportunity, so this Actor drops it. It is never written to the dataset.
Reliability
Etimad throttles bursts with HTTP 429 and answers deep pagination with 5xx. Requests are spaced out and retried with exponential backoff, honouring Retry-After when present, so a throttled page is retried rather than reported as an empty result.
Notes and limits
- Public visitor data. No login, no credentials.
- A plan is a stated intention, not a commitment. Projects get rescheduled, merged or dropped, and the
statusNamefield carries Etimad's own status for the record. - Page size is fixed at 24 by Etimad. Requesting more has no effect.
Development
npm installnpm testnode src/main.js