GreatSchools Scraper — Ratings, Scores & Demographics
Pricing
from $12.00 / 1,000 school scrapeds
GreatSchools Scraper — Ratings, Scores & Demographics
Scrape US K-12 school data from GreatSchools.org: ratings, test scores, demographics, enrollment, contacts & more. Search by city/state or paste school URLs. Covers public, charter & private schools across all 50 states.
Pricing
from $12.00 / 1,000 school scrapeds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
GreatSchools Scraper
Extract comprehensive US K-12 school data from GreatSchools.org — the nation's leading school quality resource trusted by millions of parents and educators.
What it does
The GreatSchools Scraper collects detailed school profiles for public, charter, and private schools across all 50 US states plus Washington DC. Search by city/state or paste GreatSchools URLs directly. Each record includes 35+ data fields: GreatSchools ratings (1-10), test score ratings, student progress ratings, community review ratings, enrollment numbers, grade levels, contact information (phone, website, principal email), student demographics (race/ethnicity, gender breakdown, low-income percentage), regular attendance rates, Title I status, equity indicators, nearby schools, and recent community reviews.
Use cases
- Real estate analysis — school quality overlays for neighborhood scoring and property valuation
- Relocation research — side-by-side school comparisons for families moving to a new city
- Lead generation — principal contact lists for EdTech sales, partnership outreach, and marketing campaigns
- Education research — demographics analysis, equity studies, and test score benchmarking by district
- Data enrichment — school intelligence for dashboards, AI/ML datasets, and market sizing reports
- Nonprofit & journalism — public school data for transparency projects and investigative reporting
Input parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | No | — | GreatSchools.org URLs to scrape directly (school profiles or city listing pages) |
location | string | No* | Orlando, FL | City and US state in City, ST format (e.g. Chicago, IL) |
schoolLevels | array | No | — | Filter by level: preschool, elementary, middle, high |
schoolTypes | array | No | — | Filter by type: public, charter, private |
maxResults | integer | No | 10 | Maximum number of schools to collect |
maxConcurrency | integer | No | 5 | Concurrent request limit |
proxyConfiguration | object | No | — | Proxy settings (datacenter by default) |
*Either startUrls or location must be provided.
Output fields
| Field | Type | Example |
|---|---|---|
schoolId | string|null | "18885" |
gsid | string|null | "FL-18885" |
name | string | "Laureate Park Elementary" |
url | string|null | "https://www.greatschools.org/florida/orlando/18885-Laureate-Park-Elementary/" |
state | string|null | "FL" |
city | string|null | "Orlando" |
county | string|null | "Orange County" |
districtName | string|null | "Orange County Public Schools" |
districtUrl | string|null | "https://www.greatschools.org/florida/orlando/orange-county-public-schools/" |
schoolType | string|null | "public" |
gradeLevels | string|null | "PK,KG,1,2,3,4,5" |
grades | string|null | "PK, K-5" |
greatSchoolsRating | integer|null | 10 |
testScoreRating | integer|null | 10 |
studentProgressRating | integer|null | 10 |
reviewRating | number|null | 2.92 |
reviewCount | integer|null | 12 |
enrollment | integer|null | 778 |
studentTeacherRatio | string|null | "15:1" |
address | string|null | "7800 Laureate Boulevard" |
zipCode | string|null | "32827" |
phone | string|null | "(407) 730-8730" |
website | string|null | "http://laureateparkes.ocps.net/" |
schoolLeader | string|null | "Mr Jose Perez-Valentin" |
schoolLeaderEmail | string|null | "25704@OCPS.NET" |
lowIncomePercent | number|null | 19.3 |
ethnicity | array | [{"breakdown":"Hispanic","percent":38.3}] |
genderBreakdown | array | [{"gender":"Male","schoolPercent":52.05}] |
regularAttendancePercent | number|null | 90 |
titleI | boolean|null | false |
equityIndicator | boolean|null | true |
collegeSuccessAwards | array | [] |
claimStatus | string|null | "unclaimed" |
description | string|null | "Laureate Park Elementary is a public school..." |
nearbySchools | array | [{"name":"Luminary Middle","rating":9,"distanceMiles":1.04}] |
reviews | array | [{"date":"2026-05-21","rating":2,"text":"..."}] |
scrapedAt | string | "2026-07-01T12:00:00.000Z" |
sourceUrl | string | "https://www.greatschools.org/florida/orlando/18885-..." |
Pricing
| Event | Price | Description |
|---|---|---|
| Actor Start | $0.005 | Charged once when the run starts |
| School Scraped | $0.012 per result | Charged for each school record with full profile data |
Example cost: Scraping 100 schools = $0.005 + (100 x $0.012) = $1.21
How it works
- Search mode — Enter a city and state (e.g.
Orlando, FL). The actor constructs the GreatSchools city page URL and extracts all school profile links from it. - URL mode — Paste GreatSchools URLs directly (school profiles or city listing pages).
- The actor visits each school profile page and extracts data from embedded JSON (
gonobject), JSON-LD schema, and the HTML DOM. - Filters by school level and type are applied after extraction.
- Results are pushed to the dataset immediately — no buffering, no data loss on timeout.
Technical details
- Crawler: CheerioCrawler (static HTML parsing — no browser needed, fast and reliable)
- Data extraction: Parses the
gonJavaScript object embedded in<script>tags for structured data (ratings, demographics, enrollment), plus JSON-LDSchoolschema for address, phone, website, and reviews - Proxy: Datacenter proxies by default. Switch to residential if you encounter blocking.
- Deduplication: Schools are deduplicated by GreatSchools ID across multiple listing pages
API usage
# Run via APIcurl -X POST "https://api.apify.com/v2/acts/USERNAME~greatschools-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"location": "Orlando, FL", "maxResults": 50}'
// Run via JavaScript SDKimport { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('USERNAME/greatschools-scraper').call({location: 'Orlando, FL',maxResults: 50,schoolTypes: ['public', 'charter'],});const dataset = await client.dataset(run.defaultDatasetId).listItems();console.log(dataset.items);
Limitations
- GreatSchools city pages list schools from the "Top Rated Schools" section, which may not include every school in a city. For comprehensive coverage, use the
startUrlsfield with specific school profile URLs. - Some data fields (test score breakdowns, course lists) are loaded via JavaScript and may not be available in the static HTML. The actor captures all data available in the server-rendered page.
- Private school profiles may have less data than public schools (fewer ratings, no test scores).