🇸🇬 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
2 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.