482 scrapers live47.7K runs1,562 usersRebuilt in the last 30 days: 482 of 482

Scrapers / Leads & Business

Singapore School Directory (MOE SchoolFinder) logo

Singapore School Directory (MOE SchoolFinder)

hipersoft/sg-school-scraper

Every MOE school in Singapore (official data): name, level, nature, type, zone, address, postal code, contacts, email, principal, mother tongues, and SAP/IP/gifted flags. Filter by level, zone, nature. No setup.

Total users

5

Monthly users

1

Total runs

109

Per school returned

$0.003

Last rebuilt

Oct 28, 2026

Overview

Every MOE school in Singapore as clean JSON, CSV or Excel — name, level, nature, type, zone, address, postal code, phone, email, website, principal & vice-principals, mother tongues offered, and SAP / Integrated Programme / Gifted flags. Filter by level, zone, nature or programme. Built on Singapore's official MOE open data, commercial-reuse licensed. No key, no login.

Great for parent & relocation apps, education lead generation, tuition/edtech targeting and analytics.

Singapore School Directory input — level, zone and programme filters in the Apify Console

What you get

  • 🎓 ~340 schools — the full official MOE list, primary through junior college
  • 🏷️ Rich attributes — level, nature (co-ed/boys/girls), type, zone, session
  • 📞 Contacts — phone(s), fax, email, website, principal & vice-principals
  • 🧭 Getting there — nearest MRT and bus services
  • 🌏 Programmes — mother tongues offered, and SAP / IP / Gifted indicators
  • 🔎 Filters — name, level, zone, nature, postal code, gifted-only, IP-only, SAP-only
  • 🧾 Provenance — stable id, sourceUrl, collectedAt

Example input

All co-ed secondary schools in the East offering the Integrated Programme:

{ "level": "SECONDARY", "zone": "EAST", "nature": "CO-ED", "ipOnly": true }

Output

Singapore School Directory output example — schools with level, zone, contacts and programme flags as structured JSON

{
  "id": "sgsch-admiralty-primary-school",
  "schoolName": "ADMIRALTY PRIMARY SCHOOL",
  "level": "PRIMARY",
  "nature": "CO-ED SCHOOL",
  "type": "GOVERNMENT SCHOOL",
  "zone": "NORTH",
  "address": "11 WOODLANDS CIRCLE",
  "postalCode": "738907",
  "email": "[email protected]",
  "website": "https://admiraltypri.moe.edu.sg",
  "nearestMrt": "Admiralty Station",
  "principalName": "…",
  "motherTongues": ["CHINESE", "MALAY", "TAMIL"],
  "isSap": false, "isGifted": false, "isIP": false,
  "sourceUrl": "https://data.gov.sg/datasets/…/view",
  "collectedAt": "2026-07-30T08:14:00.000Z"
}

Output schema

Field Type Description
id string Stable record ID for the school.
schoolName string Official school name.
level string School level (Primary, Secondary, Junior College, etc.).
nature string Nature of the school (co-ed, boys, girls).
type string School type (e.g. Government, Government-Aided).
zone string Geographic zone (North, South, East, West).
session string Session type (single or double session).
address string Street address.
postalCode string Postal code.
telephone string Primary phone number.
telephone2 string Secondary phone number.
fax string Fax number.
email string Contact email.
website string School website URL.
nearestMrt string Nearest MRT station.
busServices string Bus services serving the school.
principalName string Name of the principal.
vicePrincipals array Names of vice-principals.
motherTongues array Mother-tongue languages offered.
isSap boolean Whether it is a Special Assistance Plan (SAP) school.
isAutonomous boolean Whether it is an autonomous school.
isGifted boolean Whether it offers the Gifted Education Programme.
isIP boolean Whether it offers the Integrated Programme.
sourceUrl string (URL) Source dataset URL.
collectedAt string (ISO date) When the record was collected.

Input fields

Field Description
nameQuery Keyword in name/address.
level / zone / nature Filter by level, zone or nature.
giftedOnly / ipOnly / sapOnly Programme filters.
postalCode Postal-code prefix.
maxItems Max schools (0 = all).

FAQ

Where does the data come from? Singapore's official MOE "General Information of Schools" dataset on data.gov.sg, reused under the Singapore Open Data Licence.

Can I find schools with a specific programme? Yes — use giftedOnly, ipOnly or sapOnly, and combine with level/zone/nature.

How does billing work? A tiny per-run dataset charge plus pay per school returned.

Can I connect this to other apps? The Singapore School Directory can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.

Notes

Original clean-room implementation using Singapore's official MOE open data (data.gov.sg), reused under the Singapore Open Data Licence. Not affiliated with or endorsed by MOE or the Singapore Government.

Input

FieldTypeDescription
nameQuery
Name / address keyword
stringFilter by keyword in school name or address. Empty = all.
level
Level
stringe.g. PRIMARY, SECONDARY, JUNIOR COLLEGE, MIXED LEVEL. Empty = all.
zone
Zone
stringNORTH, SOUTH, EAST or WEST. Empty = all.
nature
Nature
stringCO-ED, BOYS or GIRLS. Empty = all.
giftedOnly
Gifted programme only
booleanOnly schools offering the Gifted Education Programme.
Default: false
ipOnly
Integrated Programme only
booleanOnly schools offering the Integrated Programme (IP).
Default: false
sapOnly
SAP schools only
booleanOnly Special Assistance Plan (SAP) schools.
Default: false
postalCode
Postal code prefix
stringFilter by postal code / prefix. Empty = all.
maxItems
Max schools
integerMaximum schools to return. 0 = all (~340).
Default: 0

API

curl -X POST "https://api.apify.com/v2/acts/hipersoft~sg-school-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Pricing

EventPricePaid plans from
School returned
One school record returned.
$0.003$0.0015
Dataset fetch
One fetch of the official MOE dataset.
$0.005$0.005

You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.

Related scrapers

North Data Scraper

Look up European companies on North Data: legal name, former names, register number, address, founding date, LEI, business purpose, managing directors and officers, and recent register publications. Germany, UK, France, Austria and 20+ countries. Bulk lookups.

2,467 runs · 5 users · $0.004 / company

Website Content Crawler

Extract clean, readable content from any list of websites: page title, meta description, headings, main body text, word count and link/image counts. Optional same-domain crawl. Bulk-ready. Great for LLM/RAG ingestion, content audits and research.

206 runs · 20 users · $0.0024 / page scraped

SpyFu Domain Scraper

Bulk SEO and PPC reports for any domain from SpyFu: organic keywords, monthly SEO clicks and value, Google Ads budget, paid keywords, top keywords, competitors, top countries and monthly history. Competitor research for agencies. Export CSV/JSON.

185 runs · 7 users · $0.008 / domain report

Trustpilot Reviews Scraper

Scrape Trustpilot reviews and company ratings by company domain or Trustpilot URL: star rating, title, text, reviewer name & country, verification, date, company reply, plus company TrustScore and total reviews.

146 runs · 4 users · $0.0006 / review scraped

ACRA Singapore Company Registry Scraper

Search and export Singapore's full ACRA corporate registry: UEN, entity name, status, incorporation date, address, SSIC industry codes, officers, former names and audit firms. Filter by name, status, entity type or industry. Public open data, no setup.

138 runs · 10 users · $0.01 / company scraped

Wayback Machine Scraper

List every Internet Archive (Wayback Machine) snapshot of a URL or whole domain: timestamp, snapshot URL, status code, MIME type and content digest. Filter by date, status and dedupe. For SEO, OSINT and historical research. No setup.

135 runs · 15 users · $0.002 / snapshot scraped
Need a source that isn't here?

Send the site and the fields. We build it and you get it first.

Request a build