RateMyProfessors Scraper
Pricing
from $0.80 / 1,000 professor profiles
RateMyProfessors Scraper
[π° $0.8 / 1K] Extract RateMyProfessors professor profiles and student ratings. Search by school or professor name, or paste profile URLs. Get rating, difficulty, would-take-again %, top tags, and every student review. Ideal for education research and EdTech.
Pricing
from $0.80 / 1,000 professor profiles
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pull professor profiles and the individual student ratings behind them from RateMyProfessors β average quality, difficulty, would-take-again %, top tags, and every comment with its course, grade, and post date. Search a whole school, look up professors by name, or paste profile URLs, and get back clean, linked records. Built for education researchers, EdTech product teams, and academic-advising tools that need professor sentiment at scale without copy-pasting profiles one page at a time.
Why This Scraper?
- Two linked record types in one run β every job returns
professorprofile rows plus individualratingrows, joined byprofessorIdandprofessorLegacyId, so you can pivot from a professor's 4.3 average straight to the hundreds of comments behind it. - The three headline metrics, pre-parsed β a 0β5 average quality rating, a 0β5 average difficulty score, and the would-take-again percentage on every professor, alongside the total rating count.
- Full per-rating breakdown β each student rating carries the course code, a 1β5 quality score, a 1β5 difficulty score, the free-text comment, the reported letter grade, and the post date in clean ISO 8601.
- Grade, textbook, credit, online, and attendance signals β each rating exposes whether a textbook was used, whether the class was for credit, whether it was online, and the attendance-mandatory flag β context you can filter and segment on.
- Top-tags aggregation β up to 5 most-used tags per professor (e.g. "Tough grader", "Gives good feedback", "Get ready to read"), ranked by frequency across their reviews.
- Community helpfulness on every review β thumbs-up and thumbs-down counts per rating, so you can weight comments by peer agreement instead of treating every review equally.
- Three ways to target data β scrape a whole school (by name or numeric RateMyProfessors ID), search professors by name (optionally narrowed to one school), or paste
/professor/and/school/URLs directly, all mixable in a single run. - Independent, predictable caps β
maxProfessorsandmaxRatingsPerProfessorare separate controls, so a 50-professor / 100-ratings run stays predictable instead of hiding behind one blurry combined limit. - Pipeline-ready IDs β every professor ships both the stable RateMyProfessors ID and the numeric
legacyId, plus a ready-to-openprofileUrl, so downstream re-lookups and follow-up runs chain cleanly.
Use Cases
Academic Research
- Study grade-inflation and student-sentiment trends across departments or entire schools.
- Compare would-take-again rates and difficulty scores between institutions.
- Build longitudinal datasets from rating post dates spanning multiple academic years.
EdTech & Product
- Seed course-planning and professor-matching apps with structured ratings.
- Enrich scheduling tools with quality and difficulty scores plus top tags.
- Power "best professor for this course" recommendation features.
Student Advising & Course Planning
- Flag high-difficulty, low-would-take-again sections before registration.
- Surface a professor's most-used tags so students know what to expect.
- Aggregate course-level feedback by class code across a department.
Reputation & Sentiment Analysis
- Track how a department's ratings evolve over time.
- Mine free-text comments for recurring themes with your own NLP.
- Weight consensus using thumbs-up counts on individual reviews.
Lead Generation (Tutoring & Services)
- Identify high-difficulty courses where tutoring demand is strongest.
- Target schools and departments by average difficulty.
- Build outreach lists segmented by school and department.
Getting Started
Scrape one school (summaries only)
{"schools": ["Arizona State University"],"maxProfessors": 25,"includeRatings": false}
Find a professor by name, narrowed to a school, with ratings
{"schools": ["University of California Los Angeles"],"professorNames": ["Andrew Ng"],"maxProfessors": 20,"includeRatings": true,"maxRatingsPerProfessor": 50}
Paste URLs directly and pull deep ratings
{"startUrls": ["https://www.ratemyprofessors.com/professor/1936365","https://www.ratemyprofessors.com/school/1234"],"maxProfessors": 100,"includeRatings": true,"maxRatingsPerProfessor": 200}
Input Reference
What to Scrape
Fill in any combination β everything you populate runs in one job.
| Parameter | Type | Default | Description |
|---|---|---|---|
schools | array | ["Arizona State University"] | School names (e.g. Arizona State University) or numeric RateMyProfessors school IDs (e.g. 15723). Pulls every professor at each school. Also narrows the professor-name search below. |
professorNames | array | [] | Professor names to search for (e.g. John Smith). Returns matching profiles. Add a school above to narrow the search to that campus. |
startUrls | array | [] | RateMyProfessors professor URLs (/professor/<id> β that professor) or school URLs (/school/<id> β all its professors). Type is detected automatically. |
Results
| Parameter | Type | Default | Description |
|---|---|---|---|
maxProfessors | integer | 50 | Maximum professors to collect per school or per name search. Set to 0 for as many as available. Ignored for direct professor URLs (those return one professor each). |
Ratings
| Parameter | Type | Default | Description |
|---|---|---|---|
includeRatings | boolean | true | Also collect each professor's individual student ratings (comment, course, quality and difficulty scores, grade, tags, and more), added as separate linked rows. Turn off for professor summaries only. |
maxRatingsPerProfessor | integer | 100 | Maximum ratings to collect per professor when ratings are enabled. Set to 0 for all available. Popular professors can have hundreds to over a thousand ratings. |
Output
Every run writes to one Overview tab with all records, plus clean Professors and Ratings tabs that are type-filtered subsets. Each row carries a recordType field so you can split them anywhere.
Professor record
{"recordType": "professor","professorId": "VGVhY2hlci0xOTM2MzY1","legacyId": 1936365,"firstName": "Jane","lastName": "Doe","fullName": "Jane Doe","department": "Computer Science","schoolId": "U2Nob29sLTE1NzIz","schoolLegacyId": 15723,"schoolName": "Arizona State University","avgRating": 4.3,"avgDifficulty": 3.1,"numRatings": 214,"wouldTakeAgainPercent": 88,"topTags": ["Gives good feedback", "Caring", "Respected", "Clear grading criteria", "Inspirational"],"profileUrl": "https://www.ratemyprofessors.com/professor/1936365"}
| Field | Type | Description |
|---|---|---|
recordType | string | Always "professor" |
professorId | string | Stable RateMyProfessors professor ID (use for joins) |
legacyId | integer | Numeric professor ID used in the profile URL |
firstName | string | Professor's first name |
lastName | string | Professor's last name |
fullName | string | Combined first and last name |
department | string | Department the professor teaches in |
schoolId | string | Stable RateMyProfessors school ID |
schoolLegacyId | integer | Numeric school ID |
schoolName | string | School name |
avgRating | number | Average overall quality rating (0β5) |
avgDifficulty | number | Average difficulty (0β5) |
numRatings | integer | Total number of student ratings on the profile |
wouldTakeAgainPercent | number | Percent of students who would take the professor again (null when unrated) |
topTags | array | Up to 5 most-used rating tags, ranked by frequency |
profileUrl | string | Direct link to the professor's RateMyProfessors page |
Rating record
Present only when Include Student Ratings is enabled. One row per student rating, linked back to its professor.
{"recordType": "rating","ratingId": "UmF0aW5nLTM4MjE0NTk=","professorId": "VGVhY2hlci0xOTM2MzY1","professorLegacyId": 1936365,"professorName": "Jane Doe","schoolName": "Arizona State University","class": "CSE110","qualityRating": 5,"difficultyRating": 3,"comment": "Clear lectures and fair exams. Attend every class and you'll do well.","date": "2026-03-10T18:02:47Z","grade": "A","wouldTakeAgain": true,"attendanceMandatory": "mandatory","textbookUse": true,"isForCredit": true,"isForOnlineClass": false,"tags": ["Clear grading criteria", "Gives good feedback"],"thumbsUp": 12,"thumbsDown": 1}
Rating & review
| Field | Type | Description |
|---|---|---|
recordType | string | Always "rating" |
ratingId | string | Unique rating ID |
professorId | string | Parent professor ID (join key back to the professor row) |
professorLegacyId | integer | Parent professor numeric ID (join key) |
professorName | string | Parent professor's full name (standalone context) |
schoolName | string | School name (standalone context) |
class | string | Course code the rating is for (e.g. CSE110) |
qualityRating | number | Student's quality score (1β5) |
difficultyRating | number | Student's difficulty score (1β5) |
comment | string | Free-text review comment |
date | string | Post date in ISO 8601 UTC (e.g. 2026-03-10T18:02:47Z) |
Course context & feedback
| Field | Type | Description |
|---|---|---|
grade | string | Letter grade the student reported receiving |
wouldTakeAgain | boolean | Whether the student would take the professor again |
attendanceMandatory | string | Attendance flag (mandatory / non mandatory / null) |
textbookUse | boolean | Whether a textbook was used |
isForCredit | boolean | Whether the class was taken for credit |
isForOnlineClass | boolean | Whether it was an online class |
tags | array | Tags the student applied to this rating |
thumbsUp | integer | Helpful (thumbs-up) count from the community |
thumbsDown | integer | Not-helpful (thumbs-down) count |
Tips for Best Results
- Skip search with direct URLs β paste
/professor/<id>or/school/<id>links to jump straight to exactly the professors or schools you want, with no name matching in the way. - Use a numeric school ID for exact targeting β school names go through a fuzzy match, but the numeric ID (the number in a
/school/<id>URL) always resolves to the exact campus. - Turn off ratings for a fast, cheap professor census β you still get every average rating, difficulty, would-take-again %, and top tags, without the per-professor rating pull.
- Cap
maxRatingsPerProfessorfor predictable costs β popular professors can have 1,000+ ratings; a cap of 50β100 keeps runs fast. Set it to0only when you truly need the full history. - Add a school to narrow a professor-name search β putting a school in the Schools field limits "John Smith" to that campus instead of every John Smith across North America.
- Keep ratings on if tags matter β RateMyProfessors often leaves the profile-level tag list empty, so top tags are rebuilt from the individual ratings; they populate best when ratings are enabled.
- Start small, then scale β run 10β25 professors first to confirm the school and fields look right, then raise
maxProfessors.
Pricing
From $0.80 per 1,000 professors + $0.20 per 1,000 ratings. You're charged per professor profile plus per student rating collected β a dual model that keeps summary-only runs cheap and only adds rating cost when you ask for ratings. No compute or time-based charges; you pay per professor and per rating collected, plus a small fixed per-run start fee.
Bronze, Silver, and Gold discount tiers apply automatically based on your Apify subscription plan β the higher your tier, the less you pay per result.
Per 1,000 professors collected
| Volume | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 professors | $0.095 | $0.090 | $0.085 | $0.080 |
| 1,000 professors | $0.95 | $0.90 | $0.85 | $0.80 |
| 10,000 professors | $9.50 | $9.00 | $8.50 | $8.00 |
| 100,000 professors | $95.00 | $90.00 | $85.00 | $80.00 |
Per 1,000 student ratings collected
| Volume | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 ratings | $0.024 | $0.022 | $0.021 | $0.020 |
| 1,000 ratings | $0.24 | $0.22 | $0.21 | $0.20 |
| 10,000 ratings | $2.40 | $2.20 | $2.10 | $2.00 |
| 100,000 ratings | $24.00 | $22.00 | $21.00 | $20.00 |
Example totals at Gold pricing
| Run | Professors | Ratings | Professor cost | Rating cost | Total |
|---|---|---|---|---|---|
| 100 professors Γ 20 ratings each | 100 | 2,000 | $0.08 | $0.40 | $0.48 |
| 500 professors Γ 40 ratings each | 500 | 20,000 | $0.40 | $4.00 | $4.40 |
A "result" is one professor profile or one student rating. Turn off Include Student Ratings to pay for professors only. Platform usage fees are additional.
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 scraper collects publicly available information from RateMyProfessors. Use the data responsibly and in compliance with RateMyProfessors' terms of service and all applicable laws, including data-protection regulations such as GDPR and CCPA. Student ratings are user-generated opinions β treat them as subjective commentary, not statements of fact, and do not use the data to harass, defame, or make automated decisions about individuals. You are responsible for how you use the data you collect.