GeBIZ Singapore Government Tender Scraper
Pricing
Pay per event
GeBIZ Singapore Government Tender Scraper
Extract Singapore government tenders from GeBIZ — tender ID, agency, category, closing date, contact person, and email for open procurement opportunities
Pricing
Pay per event
Rating
1.0
(1)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
26
Total users
8
Monthly active users
22 hours
Issues response
14 days ago
Last modified
Categories
Share
GeBIZ Singapore Government Tender & Procurement Scraper
Scrape Singapore government tenders and procurement opportunities from GeBIZ (Government Electronic Business), Singapore's sole official government procurement portal. This GeBIZ tender scraper extracts tender IDs, agency names, procurement categories, closing dates, and direct contact details for procurement officers — structured and ready for export to JSON or CSV.
GeBIZ publishes every public sector procurement in Singapore: ministries, statutory boards, schools, and government-linked entities. The portal lists approximately 7,100 open tenders at any time, with 50–100 new tenders posted daily.
What Data This Scraper Extracts
Each record includes up to 18 fields depending on whether detail-page fetching is enabled:
| Field | Description |
|---|---|
tenderId | Document code (e.g., MOESCHETQ26001557) |
title | Full tender title as published |
agency | Publishing government agency |
publishedDate | Date the tender was posted |
closingDate | Submission deadline (date and time) |
tenderType | Quotation, Open Tender, etc. |
category | Procurement category path (e.g., IT => Software) |
status | OPEN, CLOSED, or AWARDED |
procurementMethod | Open Tender, Open Quotation, Selective Tender, etc. |
procurementNature | Period Contract or Non Period Contract |
contactPerson | Procurement officer name |
contactEmail | Procurement officer email address |
contactPhone | Procurement officer direct phone number |
description | Tender remarks and scope description |
documents | Attached tender documents, each with documentName and fileType (plus fileUrl when a GeBIZ login is supplied) |
documentCount | Number of attached documents |
tenderUrl | Direct URL to the tender on GeBIZ |
scrapedAt | ISO 8601 timestamp of when the record was scraped |
procurementMethod, procurementNature, contactPerson, contactEmail, contactPhone, and description are only populated when fetchDetails: true (the default).
documents and documentCount require includeDocuments: true. They list what is attached to each tender — the file names and extensions — so you can see the document set without opening every tender. No login is needed for this.
Downloading the document files
GeBIZ publishes no direct link to a tender document: the site fetches each file through a session-bound form submit, and it serves them only to a signed-in GeBIZ Trading Partner. There is therefore no permanent URL for the scraper to hand you.
Supply your own GeBIZ login alongside includeDocuments and the actor will fetch the files during the run and store them in the run's key-value store. Each document then carries three extra fields:
| Field | Description |
|---|---|
size | Size as GeBIZ displays it (e.g. 351.24 kB) |
sizeBytes | Exact size of the stored file in bytes |
kvsKey | Key of the file inside this run's key-value store |
fileUrl | Direct download URL for the stored copy |
The three login fields. GeBIZ secures accounts with two-factor authentication, and an authenticator app is the only second factor it offers. So alongside gebizId and gebizPassword the actor needs gebizTotpSecret — the 2FA setup key, the authentication key code GeBIZ shows beside the QR code when you set 2FA up. That key is permanent: you enter it once and the actor derives a fresh 6-digit code on every run. It is not the 6-digit code from your phone, which expires in 30 seconds and would be stale before the run began.
If you no longer have the setup key, GeBIZ shows it only during 2FA enrolment — you would need to re-run 2FA setup on your account to see it again. All three fields are stored as Apify secrets. Your password is sent to GeBIZ RSA-encrypted, exactly as the GeBIZ website encrypts it in your browser.
Two things to plan for. Files live in the run's key-value store, so they are removed when that run's data is, per your account's retention — copy anything you need to keep. And each downloaded file is billed as one additional result on top of the tender row.
Enter the login once. Save the actor as a Task with the three fields filled in, and every later run of that task — manual or scheduled — reuses them; there is nothing to re-enter. The saved input lives against your Apify account and is readable only with your own API token.
Do not put these values in a key-value store instead. Key-value store records are readable by anyone who knows the store ID, and this actor publishes that ID inside every fileUrl it emits.
Leave the login fields blank and the actor runs exactly as before: document names and types, no files.
{"maxItems": 20,"statusFilter": "open","fetchDetails": true,"includeDocuments": true,"gebizId": "your-gebiz-id","gebizPassword": "your-password","gebizTotpSecret": "YOUR2FASETUPKEY"}
GeBIZ Scraper Input Parameters
| Field | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 20 | Maximum number of tenders to collect (up to 10,000) |
keyword | string | — | Filter tenders by keyword in the title |
tenderCategory | array | — | Filter by one or more Procurement Categories (OR-matched); omit for no category filter. Options: Administration & Training, Construction, Dental, Medical & Laboratory, Event Organising, Food & Beverages, Facilities Management, Furniture, Office Equipment & Audio-Visual, IT&Telecommunication, Miscellaneous, Services, Transportation, Workshop Equipment and Services |
statusFilter | string | open | Tender status: open, closed, or all |
fetchDetails | boolean | true | Visit each tender detail page for contact info, procurement method, and description |
includeDocuments | boolean | false | Include each tender's attached documents (requires fetchDetails). Names and file types always; supply the GeBIZ login below to also download the files |
gebizId | string | — | Your GeBIZ ID. Only needed to download the document files |
gebizPassword | string | — | Your GeBIZ password, sent RSA-encrypted as the GeBIZ site does |
gebizTotpSecret | string | — | Your GeBIZ 2FA setup key (permanent), not a 6-digit code |
Example Inputs
Scrape 50 open tenders with full contact details:
{"maxItems": 50,"statusFilter": "open","fetchDetails": true}
Fast listing-only scrape — no detail pages, ~10x faster:
{"maxItems": 200,"statusFilter": "open","fetchDetails": false}
Search for IT tenders specifically:
{"maxItems": 100,"keyword": "software","statusFilter": "open","fetchDetails": true}
Filter to IT & Telecommunication and Services tenders only:
{"maxItems": 100,"tenderCategory": ["IT&Telecommunication", "Services"],"statusFilter": "open","fetchDetails": true}
GeBIZ Scraper Sample Output
{"tenderId": "MOE000ETQ26000094","title": "SUPPLY, DELIVERY, INSTALLATION, TESTING AND COMMISSIONING OF AN AUTONOMOUS ROBOTIC SWEEPER SYSTEM","agency": "Ministry of Education","publishedDate": "20 Apr 2026 09:50PM","closingDate": "04 May 2026 01:00PM","tenderType": "Quotation","category": "Miscellaneous => Others","status": "OPEN","procurementMethod": "Open Quotation","procurementNature": "Non Period Contract","contactPerson": "KU CHIA TZU PEI","contactEmail": "KU_CHIA_Tzu_Pei@moe.gov.sg","contactPhone": "94380926","description": "Please refer to attached Quotation document.","documents": [{ "documentName": "ITQ Cover Letter.pdf", "fileType": "pdf" },{ "documentName": "Annex A - Price Schedule.docx", "fileType": "docx" }],"documentCount": 2,"tenderUrl": "https://www.gebiz.gov.sg/ptn/opportunity/directlink.xhtml?docCode=MOE000ETQ26000094","scrapedAt": "2026-04-20T14:16:02.024Z"}
Who Uses GeBIZ Tender Data & Tender Alerts
- Suppliers and contractors — monitor new procurement opportunities in their sector before the closing date
- Business development teams — identify which Singapore government agencies are spending in your category
- Market research and consulting — analyze procurement patterns and budget distribution across the public sector
- Lead generation — build contact lists of procurement officers across Singapore's ministries and statutory boards
- Competitive intelligence — track which vendors are active across tender categories and contract types
Performance and Rate Limits
GeBIZ paginates through a fragile, session-bound interface; the scraper manages all of that for you. No geo-restrictions, no CAPTCHA.
| Mode | Speed | Use when |
|---|---|---|
fetchDetails: false | ~10 tenders/second | Bulk listing scans, opportunity monitoring |
fetchDetails: true | ~1 tender/second | Contact extraction, detailed analysis |
includeDocuments: true | ~0.5 tenders/second | Documents per tender (files too, with a login) |
Examples:
- 20 tenders with full details: ~35 seconds
- 100 tenders listing-only: ~10 seconds
- 1,000 tenders listing-only: ~2 minutes
The scraper applies a 300ms delay between pagination requests and a 500ms delay between detail page fetches as a courtesy to the portal.
Pricing
This actor uses pay-per-event (PPE) pricing:
- $0.10 per actor start
- $0.01 per tender record saved
A run collecting 100 tenders costs approximately $1.10 total.
Frequently Asked Questions
How do I scrape Singapore government tenders from GeBIZ?
Run this actor with your desired maxItems and statusFilter. Set fetchDetails: true (default) to get contact person name, email, and phone from each tender's detail page. Results export as JSON, CSV, or via the Apify API.
How many tenders are on GeBIZ?
Approximately 7,100 open tenders at any given time. Singapore government agencies post 50–100 new tenders per day. Set maxItems up to 10,000 to collect the full open tender listing.
What procurement categories does GeBIZ cover?
All Singapore public sector procurement: IT and software, construction and facilities, professional services, healthcare, education, security, logistics, and more. Use the keyword field to filter by category or subject matter.
Can I scrape closed or awarded GeBIZ tenders?
Yes. Set statusFilter to closed or all. Awarded tenders include additional fields on the detail page that are captured when fetchDetails: true.
How often should I run the scraper for fresh data? For continuous opportunity monitoring, run daily. GeBIZ does not provide a change feed or RSS, so re-scraping the open tender listing is the standard approach.
Is there a GeBIZ API for tender alerts and opportunity monitoring?
GeBIZ does not publish a public tender API or alert feed. This actor is the closest equivalent: schedule it on Apify to re-scrape the open tender listing daily and pull results via the Apify API into your own alert or monitoring pipeline. Filter with keyword and statusFilter to track only the categories and agencies you bid on.
Is scraping GeBIZ legal?
GeBIZ's robots.txt allows scraping (only /scripts/ is disallowed). The portal is a public government resource. Always review the site's terms of use before commercial use of the data.
Need a custom filter, additional fields, or a scheduled pipeline? Get in touch.
Further reading: How to Get Government Tender Data From 14 Procurement Portals