# Changelog of Public Tenders & Contract Awards, 7 Countries (`a-g-d/emerging-tenders`) Actor

- **URL**: https://apify.com/a-g-d/emerging-tenders/changelog.md
- **Full Actor documentation**: https://apify.com/a-g-d/emerging-tenders.md

## Changelog

All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to
[Semantic Versioning](https://semver.org/).

### \[0.1.1] - 2026-09-28

#### Fixed

- Host name resolution of the Bangladesh and Bhutan portals on the Apify platform: the
  platform's resolver intermittently answered "not found" for www.eprocure.gov.bd (four
  consecutive attempts in three runs on 2026-09-28), so Bangladesh spent its retries on DNS
  and was reported as failed. When the system resolver fails or takes more than 5 s, the
  two workers now ask the public resolvers (1.1.1.1, 8.8.8.8), then the zone's own
  nameservers, keep that answer for the rest of the run and log once (with the country
  prefix) that they did. TLS verification is unchanged: the socket still connects by name.
  Same change as bd-egp-actor 0.1.2 and bt-egp-actor 0.1.1, vendored unchanged.

### \[0.1.0] - 2026-09-28

#### Added

- Public tender notices and contract awards from the national e-procurement portals of
  Vietnam (muasamcong.mpi.gov.vn), Bangladesh (eprocure.gov.bd), Bhutan (egp.gov.bt),
  Pakistan (epms.ppra.gov.pk), Uzbekistan (etender.uzex.uz), Ghana (ghaneps.gov.gh) and
  Tunisia (tuneps.tn, tenders only) in one normalised schema: country and portal, source
  ID, reference number, title, buyer and buyer code, category, procedure, status,
  publication, deadline and opening times with the country's offset, estimated value,
  award date, winner and winner code, exact local-currency amounts, links and the full
  source record.
- Input: `recordType` (tenders or awards), `countries` (any of the seven, default all),
  `keyword` and `publishedSince` applied the way each portal applies its own filters,
  `maxItemsPerCountry` (1-2,000) and an optional Apify Proxy.
- One worker per country, fetched concurrently with each portal's own pacing, retries and
  privacy rules (the portal layers of the seven per-country actors, vendored unchanged apart
  from the User-Agent and a country-prefixed logger); rows stored as they arrive and charged
  after storing, one batch at a time, so a spending cap never bills a row that was not stored.
- Fail-soft runs: a country that errors or hits a verification wall is logged, reported in
  the run's `OUTPUT` record (stored, charged, requests, retries, seconds, stop reason,
  error) and in the status message while the others carry on; the run fails only when every
  requested country failed or billing was inconsistent. A portal that answers no request
  for 2 minutes is reported as `stalled` and no longer waited for, so a 5-item run ends in
  about 2 minutes even when a portal hangs.
- Pay-per-event events `tender-notice` (per stored tender) and `award-result` (per stored
  award), the same as the source actors.
- Dataset schema generated from the zod schemas (draft-07, a union of the two record types)
  with "Tenders" and "Awards" views, an output schema linking the two views and the run
  report, and offline tests that replay Apify's validators on every fixture record of every
  country.
