Kuwait Tender Radar — CAPT Tenders & Winning Bids avatar

Kuwait Tender Radar — CAPT Tenders & Winning Bids

Pricing

from $7.00 / 1,000 tender delivereds

Go to Apify Store
Kuwait Tender Radar — CAPT Tenders & Winning Bids

Kuwait Tender Radar — CAPT Tenders & Winning Bids

Open tenders and winning bids from Kuwait's Central Agency for Public Tenders (capt.gov.kw). Clean JSON with tender number, agency, subject in Arabic and English, request and closing dates, document price and bond in KWD, and winners with award totals.

Pricing

from $7.00 / 1,000 tender delivereds

Rating

0.0

(0)

Developer

Dottti

Dottti

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Categories

Share

Get Kuwait government tenders from the Central Agency for Public Tenders (CAPT) as clean JSON, CSV or Excel.

Two views:

  • Open tenders: tender number, agency, subject, request date, closing date, document price and bond in Kuwaiti dinars (KWD), bid type and a direct link.
  • Winning bids: the public awards list with each winner, the amount in KWD, the award meeting date and the agency.

Schedule it every morning and you have a tender alert feed for Kuwait.

Who uses this

  • Contractors and suppliers bidding in Kuwait get new tenders each day, with the closing date and the cost of the documents.
  • Bid teams see who won similar tenders and at what price before they price their own bid.
  • Consultancies and analysts track which agencies buy what, and which companies win.

Working in Saudi Arabia or Qatar too? See Etimad Tender Radar for Saudi government tenders and Monaqasat Awards for Qatar tender awards.

Daily tender alert in 3 steps

  1. Pick the view open, and add keywords for your sector, for example صيانة and maintenance.
  2. Click Save as a new task, then add a daily schedule in the Schedules tab.
  3. Connect the task to email, Slack or Google Sheets from the Integrations tab.

New tenders then arrive every morning. Keep maxItems at the number you want to pay for each day.

Agencies spell the same word in different ways. This actor folds those spellings before it matches your keywords:

  • صيانه matches صيانة (ta marbuta)
  • الوطني matches الوطنى (ya and alef maqsura)
  • انشاء matches إنشاء (alef and hamza forms)
  • Persian ی and ک match Arabic ي and ك
  • Arabic-Indic digits ٢٠٢٦ match 2026

The original text is kept in a raw object, so you can still search the portal for the exact wording.

Some agencies publish the subject in both Arabic and English. The actor splits it into titleAr and titleEn. It splits only where the text itself changes script. It does not translate anything. When the agency published only Arabic, titleEn is null.

Output

Open tender

Taken from a run on 20 October 2026 (view: "open", language: "en"):

{
"tenderNumber": "23/2025/2026",
"title": "توفير مستشارين نظم المعلومات",
"titleAr": "توفير مستشارين نظم المعلومات",
"titleEn": null,
"agency": "Public Presidency for the National Guard",
"agencyCode": "51",
"bidType": "General",
"publishDate": "2026-10-18",
"publishDateText": "Oct. 18, 2026",
"closingDate": "2027-01-12",
"closingDateText": "Jan. 12, 2027",
"currency": "KWD",
"documentPriceKwd": 150,
"documentPriceText": "150.000 KWD",
"bondKwd": null,
"bondText": "0.000 KD",
"bondByItems": true,
"alternativeOffers": "لا يقبل عروض بديلة",
"divisible": "قابلة للتجزئة",
"notes": null,
"hasInitialMeeting": true,
"hasSiteVisit": false,
"raw": {
"title": "توفير مستشارين نظم المعلومات",
"agency": "Public Presidency for the National Guard"
},
"language": "en",
"url": "https://capt.gov.kw/en/tenders/opening-tenders/?ministry_code=51&tender_no=23%2F2025%2F2026",
"sourceUrl": "https://capt.gov.kw/en/tenders/opening-tenders/",
"scrapedAt": "2026-10-20T12:15:34.922Z"
}

Winning bid, one winner

{
"itemNumber": "11",
"tenderNumber": "RFP-2134797",
"title": "خدمات الصيانة لشبكة الطرق لمنطقة حقول شركة نفط الكويت في شمال و غرب الكويت MAINTENANCE SERVICES FOR KOC FIELDS AREA ROADS NETWORK AT NORTH & WEST KUWAIT",
"titleAr": "خدمات الصيانة لشبكة الطرق لمنطقة حقول شركة نفط الكويت في شمال و غرب الكويت",
"titleEn": "MAINTENANCE SERVICES FOR KOC FIELDS AREA ROADS NETWORK AT NORTH & WEST KUWAIT",
"agency": "Kuwait Oil Company",
"agencyCode": "60",
"awardDate": "2026-10-14",
"awardDateText": "Oct. 14, 2026",
"currency": "KWD",
"winners": [
{
"item": null,
"name": "الشركة الكويتية لبناء المعامل والمقاولات ش م ك ع",
"amountKwd": 10620000,
"amountPercent": null,
"amountText": "10,620,000.000 KD"
}
],
"totalKwd": 10620000,
"totalPercent": null,
"totalText": "10,620,000.000 KD",
"awardedByItems": false,
"itemsUrl": null,
"url": "https://capt.gov.kw/en/tenders/winning-bids/"
}

Winning bid, awarded item by item

{
"itemNumber": "12",
"tenderNumber": "RFP-2143095",
"titleAr": "خدمات الصيانة لشبكة الطرق في مدينة الأحمدي ومناطق حقول شركة نفط الكويت في جنوب وشرق الكويت",
"titleEn": "MAINTENANCE SERVICES FOR ROADS NETWORK AT AHMADI TOWNSHIP AND KOC FIELDS AREA AT SOUTH &EAST KUWAIT",
"agency": "Kuwait Oil Company",
"awardDate": "2026-10-14",
"currency": "KWD",
"winners": [
{ "item": "60526", "name": "الشركة الكويتية لبناء المعامل والمقاولات ش م ك ع", "amountKwd": 7575000, "amountText": "7575000.000 KD" },
{ "item": "0", "name": "شركة المجموعة المشتركة للمقاولات مساهمة عامة", "amountKwd": 8645880, "amountText": "8645880.000 KD" },
{ "item": "60525", "name": "شركة المجموعة المشتركة للمقاولات مساهمة عامة", "amountKwd": 10175875, "amountText": "10175875.000 KD" }
],
"totalKwd": null,
"awardedByItems": true,
"itemsUrl": "https://capt.gov.kw/en/tenders/winning-bids-popup/RFP-2143095--60"
}

(Shortened. Real records carry every field shown in the first award example.)

Notes on the fields

  • Dates are Kuwait calendar dates in YYYY-MM-DD. The portal shows no time, so none is added. The original text is in publishDateText, closingDateText and awardDateText.
  • Money is in Kuwaiti dinars. currency is always KWD and the original text sits next to every amount.
  • Percent totals. Some awards show a percentage, for example -35%, in place of an amount. That value goes to totalPercent and totalKwd stays null. The portal does not say what the percentage is applied to.
  • Bond set per item. When the bond is set per item, the portal prints 0.000 KD and puts the amounts behind a login. bondByItems is then true and bondKwd is null.
  • Items awarded separately. The list then shows an Items button in place of the winner. The actor opens it and returns one entry per item in winners. The portal prints no total for these, so totalKwd is null. Some itemised rows print one winner and - KD. Those are returned as printed.
  • Links. For open tenders, url opens the portal's own search for that one tender. Winning bids have no page of their own on the portal, so url is the list page where the award appeared.
  • Missing values are null. Nothing is guessed.

Input

FieldWhat it does
viewopen (default) or awards.
keywordsWords matched against the subject (both languages), agency and tender number. For awards, winner names too. Empty returns everything.
matchModeany (default) or all.
agencyContainsKeep only one agency, for example Ministry of Health or وزارة الصحة. Use the language you pick in language.
dateFrom / dateToYYYY-MM-DD. Open tenders use the request date. Awards use the meeting date.
lookbackDaysHow far back to go past the portal's 5-page limit when you set no dates. Default 90.
includeItemWinnersRead the per-item winners of itemised awards. On by default.
maxItemsHard cap on records, and so on cost. Default 50.
languageen or ar. Sets the language of agency names, bid type and date text.
proxyConfigurationA residential connection in Kuwait by default, because the portal blocks data-centre servers. The proxy cost is included in the price.
requestDelayMs / maxRetriesPace and retries. The defaults suit most runs.

Example: maintenance tenders from the Ministry of Electricity and Water

{
"view": "open",
"keywords": ["صيانة", "maintenance"],
"agencyContains": "Electricity",
"maxItems": 100
}

Example: who won maintenance work in August and September 2026

{
"view": "awards",
"language": "ar",
"keywords": ["صيانه"],
"dateFrom": "2026-08-01",
"dateTo": "2026-09-30",
"maxItems": 200
}

How it reaches more than 50 rows

The portal lists 5 pages of 10 rows for any search. Page 6 shows page 1 again.

The actor uses the portal's own date search to go further. It checks every result against the date range it asked for. If the portal ever returns rows outside the range, the actor stops slicing by date and says so in the log. It always filters your date range locally as well.

When a date window still fills all 5 pages, the actor splits the window in half and tries again, down to a single day.

Pricing

You pay per record delivered to your dataset:

  • Tender: $0.01 each ($10 per 1,000)
  • Winning bid: $0.03 each ($30 per 1,000)

Only records that pass your filters and are stored are charged. maxItems caps the cost of every run. A run that is blocked before it delivers anything is charged nothing.

Notes and limits

  • Cloudflare. capt.gov.kw sits behind Cloudflare. The actor runs a real Chrome browser, which normally passes the check in a few seconds with no input from anyone. The actor never solves a captcha or clicks a human check. If Cloudflare does not let the browser through, the run stops, logs a clear error, charges nothing and ends as failed. The default residential connection in Kuwait passed in our tests on Apify. Data-centre connections were blocked.
  • Memory. A browser needs memory. The actor asks for at least 1,024 MB.
  • Speed. A run of 15 records took 8 to 13 seconds on a laptop in our tests, plus browser start-up on the platform.
  • Documents. Tender documents and the per-item bond list need a CAPT company login. The actor does not log in and does not download them.
  • Category. The portal can filter by contractor category but does not print the category on each tender, so records carry no category field.
  • Data source. Public pages of capt.gov.kw only. No login, no credentials, no personal data beyond the company names CAPT publishes.

Development

npm install
npm test # parser tests on saved CAPT pages
apify run --purge # local run, reads storage/key_value_stores/default/INPUT.json