# Changelog of Tender & RFP Matcher | Bid Qualification Scores (`egeusta/tender-rfp-opportunity-matcher`) Actor

- **URL**: https://apify.com/egeusta/tender-rfp-opportunity-matcher/changelog.md
- **Full Actor documentation**: https://apify.com/egeusta/tender-rfp-opportunity-matcher.md

## Changelog

### Unreleased

- Pushed rows are now flat objects with a fixed, documented set of columns (no nested arrays/objects), so the Apify Console's auto-generated CSV/Excel/JSON export renders cleanly. Raw source fields and full structured detail are preserved in a `detailsJson` column instead of being spread unflattened onto the row.
- Added flattened summary columns for list-shaped data: `matchedCapabilitiesCount`/`topMatchedCapability`/`matchedCapabilities`, `relevantKeywordsCount`/`relevantKeywords`, `requiredCertificationsCount`/`requiredCertifications`, `missingRequirementsCount`/`missingRequirements`.
- Flattened `scoreBreakdown` into individual `score*` columns (`scoreCapabilities`, `scoreSectors`, `scoreRegions`, `scoreKeywords`, `scoreContractValue`, `scoreEligibility`, `scoreDeadline`).
- Added `recommendedAction` (`BID`/`REVIEW`/`SKIP`/`EXPIRED`) — a plain-text call to action, distinct from `recommendation`, that calls out an already-expired deadline as its own state instead of folding it into a generic no-bid bucket.
- Updated `.actor/dataset_schema.json` to match the actual pushed field set and default "View Data" columns.

### 0.1.0 — 2026-08-14

- Source-agnostic opportunity input from pasted records or Apify datasets.
- Deterministic 100-point fit score with a documented breakdown.
- Hard gaps for missing stated certifications and expired deadlines.
- Bid, review, and no-bid recommendations with evidence.
- Pay-per-event charge-limit handling and free run summary.
