GreatSchools Scraper — Ratings, Scores & Demographics avatar

GreatSchools Scraper — Ratings, Scores & Demographics

Pricing

from $12.00 / 1,000 school scrapeds

Go to Apify Store
GreatSchools Scraper — Ratings, Scores & Demographics

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

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

FieldTypeRequiredDefaultDescription
startUrlsarrayNoGreatSchools.org URLs to scrape directly (school profiles or city listing pages)
locationstringNo*Orlando, FLCity and US state in City, ST format (e.g. Chicago, IL)
schoolLevelsarrayNoFilter by level: preschool, elementary, middle, high
schoolTypesarrayNoFilter by type: public, charter, private
maxResultsintegerNo10Maximum number of schools to collect
maxConcurrencyintegerNo5Concurrent request limit
proxyConfigurationobjectNoProxy settings (datacenter by default)

*Either startUrls or location must be provided.

Output fields

FieldTypeExample
schoolIdstring|null"18885"
gsidstring|null"FL-18885"
namestring"Laureate Park Elementary"
urlstring|null"https://www.greatschools.org/florida/orlando/18885-Laureate-Park-Elementary/"
statestring|null"FL"
citystring|null"Orlando"
countystring|null"Orange County"
districtNamestring|null"Orange County Public Schools"
districtUrlstring|null"https://www.greatschools.org/florida/orlando/orange-county-public-schools/"
schoolTypestring|null"public"
gradeLevelsstring|null"PK,KG,1,2,3,4,5"
gradesstring|null"PK, K-5"
greatSchoolsRatinginteger|null10
testScoreRatinginteger|null10
studentProgressRatinginteger|null10
reviewRatingnumber|null2.92
reviewCountinteger|null12
enrollmentinteger|null778
studentTeacherRatiostring|null"15:1"
addressstring|null"7800 Laureate Boulevard"
zipCodestring|null"32827"
phonestring|null"(407) 730-8730"
websitestring|null"http://laureateparkes.ocps.net/"
schoolLeaderstring|null"Mr Jose Perez-Valentin"
schoolLeaderEmailstring|null"25704@OCPS.NET"
lowIncomePercentnumber|null19.3
ethnicityarray[{"breakdown":"Hispanic","percent":38.3}]
genderBreakdownarray[{"gender":"Male","schoolPercent":52.05}]
regularAttendancePercentnumber|null90
titleIboolean|nullfalse
equityIndicatorboolean|nulltrue
collegeSuccessAwardsarray[]
claimStatusstring|null"unclaimed"
descriptionstring|null"Laureate Park Elementary is a public school..."
nearbySchoolsarray[{"name":"Luminary Middle","rating":9,"distanceMiles":1.04}]
reviewsarray[{"date":"2026-05-21","rating":2,"text":"..."}]
scrapedAtstring"2026-07-01T12:00:00.000Z"
sourceUrlstring"https://www.greatschools.org/florida/orlando/18885-..."

Pricing

EventPriceDescription
Actor Start$0.005Charged once when the run starts
School Scraped$0.012 per resultCharged for each school record with full profile data

Example cost: Scraping 100 schools = $0.005 + (100 x $0.012) = $1.21

How it works

  1. 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.
  2. URL mode — Paste GreatSchools URLs directly (school profiles or city listing pages).
  3. The actor visits each school profile page and extracts data from embedded JSON (gon object), JSON-LD schema, and the HTML DOM.
  4. Filters by school level and type are applied after extraction.
  5. 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 gon JavaScript object embedded in <script> tags for structured data (ratings, demographics, enrollment), plus JSON-LD School schema 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 API
curl -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 SDK
import { 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 startUrls field 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).