GreatSchools Scraper
Pricing
from $10.00 / 1,000 results
GreatSchools Scraper
[π° $10 / 1K] Extract US K-12 school data from GreatSchools.org: 1-to-10 ratings, principal and contact details, test scores, demographics, and enrollment. Search by city, state, or ZIP, or paste GreatSchools URLs. Covers public, charter, and private schools across all 50 states.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pull US K-12 school data from GreatSchools.org at scale β 1-to-10 ratings, test scores by subject, student demographics, enrollment, and principal contacts for public, charter, and private schools across all 50 states. Search by city, state, or ZIP, or paste any GreatSchools URL. Built for real estate and relocation services, EdTech teams, and market researchers who need verified, structured school data without manually opening one profile page at a time.
Why This Scraper?
- All 50 US states plus D.C. β search any city, state, or ZIP code, or paste a GreatSchools listing or profile URL. Mix locations and URLs in a single run.
- The 1-to-10 GreatSchools rating, fully broken out β every school's overall summary rating plus three sub-ratings: test-score rating, student-progress rating, and equity rating.
- Test scores by subject β per-subject proficiency percentages (math, reading/ELA, science, and more), not just a single blurred average.
- Student demographics on every school β race/ethnicity breakdown percentages plus the low-income student percentage, ready for equity and access analysis.
- Principal name and email when listed β go straight to the decision-maker on claimed profiles, with the school's phone, website, and Facebook page included.
- 4 school levels and 3 school types β filter to preschool, elementary, middle, or high, and to public, charter, or private, in any combination.
- Enrollment, student-teacher ratio, district, and exact coordinates β total enrollment, a clean
16:1-style ratio, district name and city, plus latitude/longitude on every row. - Fast listing mode or full enrichment β flip
includeDetailsoff for quick name/rating/address rows, or on for the complete 30+ field profile.
Use Cases
Real Estate & Relocation
- Attach school ratings and test scores to property listings in a target ZIP
- Build relocation guides comparing schools across candidate neighborhoods
- Rank neighborhoods by the strength of their assigned schools
- Answer buyer questions about district quality with sourced numbers
Market Research
- Map school quality, type, and enrollment across a metro or state
- Compare public, charter, and private options in the same area
- Track demographic and low-income mix across districts
- Benchmark test-score proficiency between competing districts
EdTech & Data Products
- Power school-search and comparison tools with structured records
- Enrich an existing school database with ratings and demographics
- Feed dashboards that monitor district and school-level performance
- Build alerting on enrollment, rating, or demographic shifts
Parent & Family Research
- Shortlist schools by level, type, and rating before touring
- Compare test scores and student-teacher ratios side by side
- Weigh demographics and low-income mix for schools on a shortlist
- Pull principal contact details to reach out with questions
Lead Generation
- Build principal and school contact lists (name, email, phone) by area
- Target schools by type and level for education-focused outreach
- Segment outreach by district, enrollment size, or rating band
Getting Started
Search by City
The simplest way to start β one city and state:
{"searchLocations": ["Austin, TX"],"maxResults": 50}
Search by ZIP with Filters
Pull only public and charter elementary and middle schools in three ZIP codes:
{"searchLocations": ["78701", "78702", "78703"],"schoolLevels": ["elementary", "middle"],"schoolTypes": ["public", "charter"],"maxResults": 200}
Full Detail Run
Mix locations and a URL, pull every enriched field, and collect everything found:
{"searchLocations": ["Denver, CO", "80206"],"startUrls": ["https://www.greatschools.org/colorado/denver/schools/"],"schoolLevels": ["high"],"schoolTypes": ["public"],"includeDetails": true,"maxResults": 0}
Input Reference
What to Scrape
| Parameter | Type | Default | Description |
|---|---|---|---|
searchLocations | array | ["Austin, TX"] | Cities (e.g. Austin, TX) or ZIP codes (e.g. 78701) to search. Add as many as you like β no URLs to build. |
startUrls | array | [] | Any GreatSchools.org search or school-profile URL. Filters already in the URL are applied automatically. |
Search Filters
These filters apply only to searchLocations. URLs carry their own filters.
| Parameter | Type | Default | Description |
|---|---|---|---|
schoolLevels | array | [] (all) | Limit to grade levels: Preschool / Pre-K, Elementary, Middle, High School. |
schoolTypes | array | [] (all) | Limit to school types: Public, Charter, Private. |
Options
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 100 | Exact maximum schools to return across all locations and URLs. Set to 0 for unlimited. |
includeDetails | boolean | true | Open each profile for the full record β ratings breakdown, test scores, demographics, and principal contact. Off returns fast name/rating/address/URL rows. Very large single-location runs (200+) with details on take several minutes; lower maxResults or split into multiple ZIP/city runs for faster turnaround. |
Output
Each result is one flat row per school. With includeDetails on, the profile fields below are populated; with it off, you get the core listing fields.
{"id": "18850","name": "Lee Elementary School","url": "https://www.greatschools.org/texas/austin/18850-Lee-Elementary-School/","schoolType": "public","level": "Elementary","gradesServed": "PK-5","latitude": 30.2849,"longitude": -97.7341,"addressStreet": "3308 Hampton Rd","addressCity": "Austin","addressState": "TX","addressZip": "78705","phone": "(512) 414-2236","website": "https://example.austinisd.org","facebook": "https://www.facebook.com/example","principalName": "Jane Doe","principalEmail": "jane.doe@austinisd.org","overallRating": 9,"ratingScaleLabel": "Above average","testScoresRating": 9,"studentProgressRating": 8,"equityRating": 7,"reviewsCount": 24,"reviewsAverageRating": 4.5,"testScores": [{ "subject": "Math", "proficiencyPercentage": 72 },{ "subject": "Reading", "proficiencyPercentage": 78 }],"enrollmentTotal": 412,"studentTeacherRatio": "15:1","demographics": [{ "group": "White", "percentage": 58 },{ "group": "Hispanic", "percentage": 26 }],"lowIncomePercentage": 18,"districtId": "1234","districtName": "Austin Independent School District","districtCity": "Austin","scrapedAt": "2026-06-27T12:00:00.000Z"}
Core Fields
| Field | Type | Description |
|---|---|---|
id | string | GreatSchools universal school ID |
name | string | School name |
url | string | GreatSchools profile URL |
schoolType | string | public, charter, or private |
level | string | Grade band (Preschool / Elementary / Middle / High) |
gradesServed | string | Grades offered, e.g. K-5, 9-12 |
enrollmentTotal | integer | Total students enrolled |
studentTeacherRatio | string | Students per teacher, e.g. 15:1 |
scrapedAt | string | ISO timestamp of capture |
Ratings & Reviews
| Field | Type | Description |
|---|---|---|
overallRating | number | GreatSchools summary rating (1-10) |
ratingScaleLabel | string | Plain-language rating band, e.g. Above average |
testScoresRating | number | Test-scores sub-rating (1-10) |
studentProgressRating | number | Student-progress sub-rating (1-10) |
equityRating | number | Equity sub-rating (1-10) |
reviewsCount | integer | Number of parent reviews |
reviewsAverageRating | number | Average parent review rating |
testScores | object[] | Per-subject proficiency: { subject, proficiencyPercentage } |
Address & Contact
| Field | Type | Description |
|---|---|---|
addressStreet | string | Street address |
addressCity | string | City |
addressState | string | State code |
addressZip | string | ZIP code |
latitude | number | Latitude |
longitude | number | Longitude |
phone | string | School phone number |
website | string | School website |
facebook | string | School Facebook page |
principalName | string | Principal name (claimed profiles) |
principalEmail | string | Principal email (claimed profiles) |
Demographics & District
| Field | Type | Description |
|---|---|---|
demographics | object[] | Race/ethnicity breakdown: { group, percentage } |
lowIncomePercentage | number | Percent of low-income students |
districtId | string | District ID |
districtName | string | District name |
districtCity | string | District city |
Tips for Best Results
- Start small, then scale β set
maxResultsto 10-50 on your first run to confirm the data matches your needs before pulling thousands. - Turn off
includeDetailsfor fast bulk listings β when you only need name, rating, address, and URL, this collects far more schools per run; turn it back on for test scores, demographics, and principal contacts. - Large detail runs take longer β pulling 200+ schools from a single city or ZIP with
includeDetailson can run several minutes, since each profile is opened individually. For faster turnaround, lowermaxResultsor split a big city into several smaller ZIP or city runs. - Match GreatSchools' own city spelling β type the city exactly as GreatSchools writes it (e.g.
Saint Louis, MO, notSt. Louis, MO); an unrecognized spelling returns no results rather than an error. - Use ZIP codes for precise neighborhood targeting β a ZIP search pins results to a specific area, while a city search returns the whole city.
- Remember filters apply only to
searchLocationsβschoolLevelsandschoolTypesdo not change results coming fromstartUrls, which carry their own filters. - Combine inputs in one run β mix multiple cities, ZIP codes, and URLs together; results are deduplicated so overlapping areas never double-count a school.
- Principal email is best-effort β it appears on claimed profiles; expect it on a subset of schools rather than every row.
Pricing
From $10 per 1,000 results β a flat, predictable rate for verified US school data. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $1.20 | $1.13 | $1.07 | $1.00 |
| 1,000 | $12.00 | $11.30 | $10.70 | $10.00 |
| 10,000 | $120.00 | $113.00 | $107.00 | $100.00 |
| 100,000 | $1,200.00 | $1,130.00 | $1,070.00 | $1,000.00 |
No compute or time-based charges β you pay per result, plus a small fixed per-run start fee. A "result" is any school row in the output dataset.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n β Workflow automation
- Google Sheets β Direct spreadsheet export
- Slack / Email β Notifications on new results
- Webhooks β Trigger custom APIs on run completion
- Apify API β Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate education research, real estate and relocation analysis, and market intelligence. Users are responsible for complying with applicable laws and GreatSchools.org's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any contact details responsibly and in line with applicable privacy regulations.