🇸🇬 Singapore GeBIZ Tender & Award Change Watch
Pricing
from $33.50 / 1,000 tender/award deltas
🇸🇬 Singapore GeBIZ Tender & Award Change Watch
Monitor public Singapore GeBIZ listings and get structured, seed-zero deltas when tenders open, change, close, are cancelled, or publish an award state. Before/after snapshots, changed-field lists, grace-windowed closures, and a source receipt on every run.
Pricing
from $33.50 / 1,000 tender/award deltas
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Share
GeBIZ shows you today's listing, not what changed. This is a seed-zero change feed: when a Singapore government tender opens, changes, closes, is cancelled, or reaches an award state, you get a structured delta with before/after — not another full scrape to diff yourself.
What you get
tender_delta—NEW,CHANGED,CLOSED,PENDING_AWARD,AWARDED,CANCELLED,NO_AWARD,REAPPEARED, each withbefore/afterandchanged_fieldstender_record— a normalized listing snapshot: document and reference number, type, status, title, agency, category, published/closes dates,source_hash- A closure grace window (
closureGraceRuns) so a listing that briefly drops out is not reported as closed missing_complete_runson each delta, so you can see the evidence behind a closure callsource_receiptevery run — terminal state, canary result, page/request counters, never billed
Use cases by team
- Suppliers & bid teams: Route matching opportunities to bid owners the run they appear, and get told when one changes under you.
- Procurement & compliance teams: Retain dated public status records with before/after evidence of each change.
- Award & incumbency analysts: Catch the
PENDING_AWARD→AWARDEDtransition rather than polling for it. - Researchers: Study public agency and category behaviour over time from a deterministic, bounded feed.
Example inputs
Seed a watch on two agencies
{"watchMode": true,"baselineKey": "sg-infocomm","agencies": ["Government Technology Agency"],"publishedWithinDays": 30}
Award-state changes only
{"watchMode": true,"baselineKey": "sg-awards","emitDeltaTypes": ["PENDING_AWARD","AWARDED","NO_AWARD"]}
Keyword + type targeting
{"watchMode": true,"baselineKey": "sg-cloud","keywords": ["cloud"],"opportunityTypes": ["Tender","Quotation"],"maxItems": 200}
📊 Sample Output
{"record_type": "tender_delta","delta_type": "AWARDED","document_number": "GT2026000123W","reference_number": "GTA/2026/CLOUD/07","opportunity_type": "Tender","status": "AWARDED","title": "Provision of cloud hosting services","agency": "Government Technology Agency","procurement_category": "Infocomm Technology","changed_fields": ["status"],"before": {"status": "PENDING_AWARD"},"after": {"status": "AWARDED"},"missing_complete_runs": 0,"published_at": "2026-06-18","closes_at": "2026-07-16","source_url": "https://www.gebiz.gov.sg/ptn/opportunity/BOListing.xhtml","observed_at": "2026-07-25T00:00:00Z"}
How it works
Configure agencies, categories, opportunity types, states and keywords. It reads only the public, logged-out GeBIZ business-opportunity listing, normalizes each listing into a tender_record with a source_hash, and diffs against a private baseline. The first watch run stores the baseline and emits no alerts; later runs emit only qualified tender_delta events with before/after snapshots and changed_fields. Closure is grace-windowed over closureGraceRuns, so a transient disappearance does not fire a false CLOSED. Snapshot mode exists, but the product is the recurring change feed.
Pricing
| Event | Price (FREE tier) |
|---|---|
Actor start (apify-actor-start) | $0.02 flat, once per run |
Tender/award delta (tender_delta) — primary | $0.05 |
Tender record snapshot (tender_record) | $0.10 |
Source check (source_check) | $0.10, once per run |
Pay-per-event on a four-tier ladder (FREE → GOLD, with Platinum/Diamond floored at the Gold rate). Primary event tender_delta: $0.05 / $0.045 / $0.04 / $0.0335. tender_record and source_check: $0.10 / $0.09 / $0.08 / $0.067. Worked example — a watch run on FREE with 8 qualified deltas: $0.02 start + $0.10 source check + 8 × $0.05 = $0.52. The seeding run and genuine-zero runs charge the start + source check only; receipts are never billed. New to Apify? Start free.
Run it — API, CLI, MCP
API:
curl -X POST "https://api.apify.com/v2/acts/nexgenwatch~gebiz-tender-watch/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" -d @input.json
CLI:
$apify call nexgenwatch/gebiz-tender-watch -i @input.json
MCP: expose nexgenwatch/gebiz-tender-watch through Apify's MCP server, select it as a tool, and pass the same input object.
Related actors — App Intelligence cluster
| Actor | What it does |
|---|---|
| EU TED Tender & Award Watch | Watch EU-wide public procurement: tenders, awards, incumbent changes. |
| UK Find a Tender Watch | Watch UK tenders, award results and incumbent changes. |
| CanadaBuys Tender Watch | Watch Government of Canada tender opportunities and awards. |
| AusTender Award Watch | Watch Australian federal contract awards and incumbents. |
| MAS Directory Change Watch | Watch Singapore MAS financial-institution licence changes. |
Compliance & honest limits
- Public, logged-out GeBIZ listing only — no login, CAPTCHA, paywall, or access-control defeating.
- The first watch run seeds a baseline and emits zero deltas by design.
- Detail-page enrichment is off by default (
includePublicDetail,maxDetailRequests: 0) to keep runs bounded and polite. - A closure is reported only after
closureGraceRunsconsecutive complete runs without the listing — deliberately conservative. - A source-confirmed empty listing is
GENUINE_EMPTY; truncated runs arePARTIAL; exhausted retries areBLOCKED. Receipts are never billed.
FAQ
What does seed-zero mean?
The first watch run stores a private baseline and emits no alerts at all. Deltas start on the second run. This is why you are not billed a flood of false 'new' events on day one.
Which changes can I subscribe to?
Set emitDeltaTypes to any subset of NEW, CHANGED, CLOSED, PENDING_AWARD, AWARDED, CANCELLED, NO_AWARD, REAPPEARED.
How do you avoid false closures?
A listing must be absent for closureGraceRuns consecutive complete runs before CLOSED fires, and each delta carries missing_complete_runs so you can audit the call.
Does zero mean blocked?
No. Every run emits a source_receipt with an explicit terminal state — NORMAL, GENUINE_EMPTY, PARTIAL or BLOCKED — plus a canary result and page counters.
What is REAPPEARED for?
A listing that dropped out and came back. It is emitted explicitly rather than being silently re-reported as NEW.
What am I charged on a quiet run?
The $0.02 start plus the $0.10 source check. Deltas are the primary unit, so quiet weeks are cheap.
Can I get full snapshots instead of deltas?
Yes — snapshot mode returns tender_record rows, billed at $0.10 each. Most buyers want the delta feed.
Troubleshooting
- First run emitted nothing? That is seed-zero behaviour. Re-run with the same
baselineKeyand deltas begin. - Everything came back as NEW? You changed
baselineKey, or setresetBaseline-equivalent behaviour, so the baseline was re-seeded. - Missing an agency's listings? Check
agenciesspelling against the public listing, and confirmpublishedWithinDaysis wide enough. - Run marked PARTIAL? You hit
maxItemsormaxPages. Raise them or narrowstates/opportunityTypes. - Closures arriving late? By design — lower
closureGraceRunsif you want faster, less certain closure calls.
About
Part of the NexGenData procurement-watch family — one honest, deterministic contract across UK, EU, Canadian, Australian and Singaporean public procurement. Built by NexGenData. Questions or need a custom feed? Open an issue on the Actor page.
Scheduling
Watch mode is built for recurring runs. Schedule the Actor (Apify Schedules, API, or MCP) at your chosen cadence and keep the same inputs each run so every run reads and updates the one derived baseline store; changing a filter starts a fresh baseline. The first run seeds and emits zero deltas by design; later runs emit only confirmed tender_delta rows, and a settled poll with no changes charges only the once-per-run source_check.
Preview vs Watch mode
- Preview / snapshot (watchMode = false): returns current GeBIZ tender records for the filter and bills one
tender_recordper emitted row. One-off; no baseline. - Watch (watchMode = true): seeds a private baseline on the first run (zero deltas, no per-record billing), then emits only qualified
tender_deltarows against it. A zero-delta poll over a complete/CAPPED read charges a singlesource_check; active runs bill viatender_deltaand are not double-charged.source_receiptdiagnostics go to theRUN_RECEIPTkey-value record and log — never the dataset.