Public Tenders & Contract Awards, 7 Countries
Pricing
from $2.00 / 1,000 tender notices
Public Tenders & Contract Awards, 7 Countries
Public tenders and contract awards from the national e-procurement portals of Vietnam, Bangladesh, Bhutan, Pakistan, Uzbekistan, Ghana and Tunisia in one normalised JSON schema: buyer, title, category, procedure, dates with local offsets, exact local-currency amounts, winners and links.
Pricing
from $2.00 / 1,000 tender notices
Rating
0.0
(0)
Developer
Aloever Dulay
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Public tender notices and contract awards from the national e-procurement portals of Vietnam, Bangladesh, Bhutan, Pakistan, Uzbekistan, Ghana and Tunisia, in one normalised JSON schema. One input, one run, seven portals read concurrently, one record shape: country, buyer, title, category, procedure, dates with the country's real time offset, exact amounts in the local currency, winners, links, and the full source record for anything else.
- Tenders (
recordType: "tenders", the default): open tender notices from every selected country, newest first per country. - Contract awards (
recordType: "awards"): awarded contracts and published results from every selected country except Tunisia, whose portal publishes no award results the actor can read, newest first per country.
The same data as the seven per-country actors, read by the same code, but you pay this actor's events once and never a second actor.
Who needs this
- Suppliers, contractors and consultants bidding across South Asia, Southeast Asia, Central Asia and Africa who want one morning feed instead of seven portals.
- Tender-alert services and bid consultants building multi-country feeds, digests or alerts on one schema.
- Market-entry, trade and development-finance teams sizing public demand and following who wins what, where, at what price.
- Analysts, journalists and researchers studying public procurement across emerging markets without writing seven scrapers.
- AI agents and automations that need a stable schema instead of seven portals in six languages and three date formats.
Countries and portals
| Country | Portal | source | Tenders | Awards | Time offset |
|---|---|---|---|---|---|
| Vietnam | muasamcong.mpi.gov.vn | muasamcong | open tender notices (TBMT) | published contractor-selection results (KQLCNT) | +07:00 |
| Bangladesh | eprocure.gov.bd | bd-egp | live tenders | Notifications of Award, one per lot | +06:00 |
| Bhutan | egp.gov.bt | bt-egp | live tenders | Notifications of Award, one per contract | +06:00 |
| Pakistan | epms.ppra.gov.pk | ppra-epms | active tenders | awarded contracts | +05:00 |
| Uzbekistan | etender.uzex.uz | uzex | open tenders, then open selections | completed deals | +05:00 |
| Ghana | ghaneps.gov.gh | ghaneps | tenders open for bids (Bid Submission) | awarded contracts, one per tender, lot and supplier | +00:00 |
| Tunisia | tuneps.tn | tuneps | open tender notices | none (skipped with a note in the run report) | +01:00 |
Input
| Field | Type | Default | Description |
|---|---|---|---|
recordType | string | "tenders" | tenders or awards. One run returns one record type. |
countries | string[] | all seven | Any of VN, BD, BT, PK, UZ, GH, TN. Fetched concurrently, one worker per country. |
keyword | string | "" | Case-insensitive text filter, applied the way each portal applies its own (see below). Portals index text in their own language. |
publishedSince | string | "" | An ISO date (2026-09-20, midnight in each country's own time) or an ISO-8601 timestamp. Tenders filter on publication, awards on the award date. |
maxItemsPerCountry | integer | 50 | Stop each country after this many records (1-2,000), newest first. |
proxyConfiguration | object | no proxy | Optional Apify Proxy. Not needed normally; Vietnam's portal sometimes resets datacenter connections, where a residential group helps. |
Examples:
{ "countries": ["VN", "PK", "GH"], "keyword": "hospital", "maxItemsPerCountry": 100 }
{ "recordType": "awards", "publishedSince": "2026-09-01", "maxItemsPerCountry": 200 }
How the keyword and date filters apply per country
Each portal applies what it can; the actor applies the rest itself, reading newest first and
stopping at the first page older than publishedSince where a list is sorted by date.
| Country | keyword | publishedSince |
|---|---|---|
| Vietnam | by the portal, on the notice number and package name (Vietnamese) | by the portal, on the notice's publication time (tenders) or the result's (awards); without a date, the trailing year |
| Bangladesh | tenders: by the actor, on title, reference number and tender ID; awards: by the portal, on the package title | tenders: by the portal by day, then the exact time by the actor; awards: by the actor on the contract signing date |
| Bhutan | as Bangladesh | as Bangladesh (awards on the notification-of-award date) |
| Pakistan | by the portal, on titles, descriptions and numbers (a match need not be in title) | by the portal, by advertisement day (tenders) or publication day (awards) |
| Uzbekistan | by the portal, on the lot name (Uzbek or Russian) | tenders: by the actor on the publication time; awards: by the portal by day, then the exact time by the actor |
| Ghana | tenders: by the portal on the title, re-checked by the actor; awards: by the actor on title, supplier and lot | by the actor, on the publication time (tenders) or award time (awards) |
| Tunisia | by the portal, on the French title | by the portal, on the publication time |
Output
One dataset item per tender notice or per contract award. Every item has a recordType
(tender or award), a country (ISO 3166-1 alpha-2) and a source (the portal's short
name). Text is kept exactly as each portal publishes it, in its own language and script.
Dates are ISO-8601 with the country's real offset; where a portal prints only a day the value
stays a date (YYYY-MM-DD). Amounts are exact numbers in the local currency, never converted.
raw holds the full record exactly as the country's own actor stores it, so nothing is lost.
The Output tab on this page documents every field; the dataset has "Tenders" and "Awards"
views.
Common fields: recordType, country, source, sourceId, referenceNo, title, buyer,
buyerCode, category, procedure, status, detailUrl, sourceUrl, fetchedAt, raw.
Tenders add publishedAt, deadlineAt, openingAt, estimatedValue, currency, valueText.
Awards add awardedOn, winnerName, winnerCode, amount, currency, amountText.
What each field holds, per country
| Field | Vietnam | Bangladesh | Bhutan | Pakistan | Uzbekistan | Ghana | Tunisia |
|---|---|---|---|---|---|---|---|
sourceId | notice id | tender ID / lot ID | tender ID / contract ID | tender / contract number | trade ID / deal ID | tender ID (shared by its awards) | notice number |
referenceNo | notice number (IB…) | reference number | reference number | reference number | 14-digit lot number | none | buyer reference |
buyer / buyerCode | investor / its code | procuring entity / none | procuring agency / none | office / none | customer / taxpayer number | procuring entity / none | buyer / buyer code |
category | procurement field | procurement nature | procurement category | sector | none | none | category (French) |
procedure | selection method | method name | method name | none | tender or selection | procedure | procedure (French) |
publishedAt | notice publication time | publication time | publication time | advertisement day | publication time | publication time | publication time |
deadlineAt | bid closing time | closing time | closing time | closing time | offers due | bid submission deadline | submission deadline |
openingAt | bid opening time | none | none | none | none | none | opening time |
estimatedValue | package price (VND) | none | none | none | starting price (in currency) | none | none |
awardedOn | result publication time | contract signing date | notification-of-award date | day EPMS published the contract | time the deal was concluded | award date and time | n/a |
winnerName / winnerCode | joint venture or winners / portal codes | winner / none | winner / none | winner / none | supplier / taxpayer number | supplier / none | n/a |
amount | winning price (VND) | contract value (BDT, from crore) | contract value (BTN, exact) | awarded amount (PKR) | deal cost (in currency) | award amount (as printed) | n/a |
amountText | none | crore figure as printed | million Nu figure as printed | "Rs." figure as printed | none | amount with code as printed | n/a |
Notes:
- Vietnam winners: a joint venture is named by its joint-venture name; several distinct
winners of a multi-lot package are joined with
;.winnerCodejoins the portal's own list of winner codes, which is not aligned one-to-one with the names (rawhas both lists). - Bangladesh amounts are converted exactly from the published crore figure (precise to
10,000 BDT); Bhutan amounts are read exactly from the portal's advanced award search
(
raw.contractValueExactsays whether the exact figure matched the list). - Uzbekistan
tendersare open tenders first and then, up to the same maximum, open selections of the best offers (proceduretells them apart). Amounts are in each lot's own currency (UZS, USD, EUR and others as published). - Ghana awards share the tender's
sourceId; the lot and supplier in the record tell them apart.
A real Bangladesh tender, normalised (captured 2026-09-26):
{"recordType": "tender","country": "BD","source": "bd-egp","sourceId": "1320555","referenceNo": "ShSmch/Breakfast/Diet/2026-2027/G-9C-F/E Notice","title": "ShSmch/Breakfast/Diet/26-27/G-9,C-F, PROCUREMENT OF DIET FOR BREAKFAST FOR ADMITTED PATIENT ( GROUP-A, CATEGORY-F) OF SHAHEED SUHRAWARDY MEDICAL COLLEGE & HOSPITAL, DHAKA FINANCIAL YEAR- 2026-2027","buyer": "Shaheed Suhrawardy Medical College Hospital , Dhaka","buyerCode": null,"category": "Goods","procedure": "Open Tendering Method","status": "Live","publishedAt": "2026-09-25T23:30:00+06:00","deadlineAt": "2026-10-12T13:30:00+06:00","openingAt": null,"estimatedValue": null,"currency": null,"valueText": null,"detailUrl": "https://www.eprocure.gov.bd/resources/common/ViewTender.jsp?id=1320555&h=t","sourceUrl": "https://www.eprocure.gov.bd/TenderDetailsServlet","fetchedAt": "2026-09-26T13:42:31.000Z","raw": {"recordType": "tender","tenderId": "1320555","ministry": "Ministry of Health and Family Welfare","…": "…"}}
A real Bangladesh award, normalised (captured 2026-09-26):
{"recordType": "award","country": "BD","source": "bd-egp","sourceId": "2056490","referenceNo": "APP ID : 216678","title": "Widening & Strengthening of Hazirhat HQ- Ramnawaj GC road at ch. 0.00- 7900m including 03 Nos. 2-vent 3.00mx3.00m RCC Box Culvert at 1148m 4036m & 7008m under Upazila: Monpura District: Bhola (Road ID No. 509652002 Salvage Materials Cost Tk 634374.00)","buyer": "Office of the Executive Engineer, LGED, Bhola","buyerCode": null,"category": null,"procedure": "Open Tendering Method","status": null,"awardedOn": "2026-09-24","winnerName": "KE-SS (JV)","winnerCode": null,"amount": 185320000,"currency": "BDT","amountText": "18.532","detailUrl": "https://www.eprocure.gov.bd/resources/common/ViewAwardedContracts.jsp?pkgLotId=2056490&tenderid=1296078","sourceUrl": "https://www.eprocure.gov.bd/SearchNoaServlet","fetchedAt": "2026-09-26T13:43:05.000Z","raw": {"recordType": "award","tenderId": "1296078","lotId": "2056490","contractValueCrore": 18.532,"…": "…"}}
The run report
The default key-value store holds an OUTPUT record with, per requested country, how many
records were stored and charged, how many portal requests and retries it took, how long it
ran, why it stopped, and the error message when a portal failed or refused. A country that
errors or answers with a verification page is reported there and in the run's status
message; the other countries carry on. A portal that stops answering altogether (no response
for 2 minutes) is reported the same way, with stop reason stalled, so one hanging portal
never holds up the rest of the run. The run fails only when every requested country fails.
Pricing
Pay per event, charged only for records actually stored in your dataset:
tender-notice: one per tender notice stored.award-result: one per contract award stored.
A run charges one of the two, depending on recordType; the actor defines no start event of
its own. Each country's rows are stored before they are charged and every country stops
cleanly when your spending limit is reached, so you never pay for data you cannot see.
Data sources and politeness
The data comes from the public, login-free lists of the seven national portals, read by the same code as the per-country actors: one worker per country, each sending one request at a time with at least 1-2 seconds between requests (each portal's own pace), an honest User-Agent that names the actor, retries with exponential backoff inside a fixed budget, a clear error when a portal keeps refusing, and a clean stop shortly before the run's timeout. When the platform's DNS cannot resolve the Bangladesh or Bhutan portal, the actor asks public resolvers (1.1.1.1, 8.8.8.8) and then the portal's own nameservers, and keeps that answer for the run. The actor never logs in, never solves or works around a CAPTCHA (a verification page stops that country at once), never downloads tender documents, and never uses the credential-gated Pakistan e-PADS gateway.
Terms differ per portal: Bangladesh's and Bhutan's say their content is copyrighted by the
procurement authority; the others state no reuse conditions. The actor publishes metadata and
links only, not documents; follow detailUrl for the official page and documents.
Data and privacy
The output is buyer, tender and award metadata exactly as each government publishes it by law.
Contracts are often awarded to sole proprietorships named after their owner, so winnerName
can be a person's name: the actor keeps it as published and adds nothing to it. It keeps each
source actor's privacy rules: Uzbek taxpayer numbers are published only for legal entities,
never for individuals or individual entrepreneurs; Bhutan winners' addresses, Tunisian buyer
staff names and any e-mail addresses or phone numbers in free text are left out; beneficial
owners and contact officers are never read. It does not enrich, profile or combine records
with other sources. If you process names of individuals, you are responsible for doing so
lawfully.
Limitations
- Tenders are open tenders only in every country (live, active, in bid submission or with a deadline ahead); closed and archived tenders are not read.
- Tunisia has no awards: its award observatory is walled behind a CAPTCHA, so
awardsruns skip Tunisia with a note in the run report. - Vietnam needs a publication window: without
publishedSincethe actor asks for the trailing year, which covers every open notice; for awards it reads newest result first by splitting the window, at the cost of a few extra requests. - Estimated values are published only by Vietnam and Uzbekistan; the other lists print
none, so
estimatedValueisnullthere. - Per-country speed differs. Ghana serves 10 rows per page 2-5 seconds apart and Tunisia
needs one request per notice, so large
maxItemsPerCountryvalues run into the run timeout there; the run then ends successfully with what it stored, and the report says why. sourceIdis the portal's own key: unique per record everywhere except Ghana awards (onesourceIdper tender, several awards) and Tunisia addenda (the same notice number,raw.modificationSeqdiffers).- Garbled characters, missing dates and free text instead of numbers are the portals' own;
the actor keeps text as published and sets the numeric or date field to
null.