RateMyProfessors — Professor Ratings Scraper avatar

RateMyProfessors — Professor Ratings Scraper

Pricing

Pay per event

Go to Apify Store
RateMyProfessors — Professor Ratings Scraper

RateMyProfessors — Professor Ratings Scraper

Scrape professors and student ratings from RateMyProfessors via its public GraphQL API. Input school names or IDs; get full professor profiles with avg rating, difficulty, and the complete corpus of student reviews with course codes, tags, grades, and comment text.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

10 days ago

Last modified

Share

RateMyProfessors Professor Ratings Scraper

Scrapes professors and student reviews from RateMyProfessors through its public GraphQL API. Returns professor profiles with average rating, difficulty and would-take-again rate, plus the full corpus of individual student reviews with course codes, tags, grades and comment text.


RateMyProfessors Scraper Features

  • Input school names or RateMyProfessors school IDs — names are resolved for you
  • Returns professor-level aggregates and every individual rating behind them
  • Each review carries course code, quality, difficulty, grade received and comment text
  • Rating tags, attendance policy and textbook usage included per review
  • Lean by design, so runs are quick and cheap
  • includeRatings: false gives professor summaries only, for a cheaper pass

What can you do with RateMyProfessors data?

  • Education researchers — Study grade expectations against difficulty ratings across departments.
  • NLP teams — Train sentiment or aspect-extraction models on a large corpus of free-text reviews with structured labels attached.
  • Prospective students — Compare a department's teaching quality across schools before committing.
  • University administrators — Benchmark departmental sentiment against peer institutions.
  • Ed-tech products — Seed a course-selection tool with real ratings rather than a licensed feed.

How RateMyProfessors Scraper Works

  1. You supply school names or IDs in schools.
  2. Each name is resolved to a RateMyProfessors school ID.
  3. Every professor at the school is collected with their aggregate scores.
  4. When includeRatings is true, the full rating corpus for each professor is pulled and emitted one record per review, stopping at maxItems.

Input

Full pull, professors plus every review:

{
"schools": ["Arizona State University", "University of Michigan"],
"includeRatings": true,
"maxItems": 5000
}

Professor summaries only — far fewer records:

{
"schools": ["Arizona State University"],
"includeRatings": false,
"maxItems": 500
}
FieldTypeDefaultDescription
schoolsarray["Arizona State University"]School names or RateMyProfessors school IDs
includeRatingsbooleantrueFetch every individual student rating per professor
maxItemsinteger10Maximum records across all schools

A large school with includeRatings: true produces tens of thousands of records. Set maxItems deliberately.


RateMyProfessors Scraper Output Fields

{
"school_name": "Arizona State University",
"school_city": "Tempe",
"school_state": "AZ",
"first_name": "Jane",
"last_name": "Doe",
"department": "Computer Science",
"avg_rating": "4.3",
"num_ratings": "218",
"would_take_again_percent": "87",
"avg_difficulty": "3.1",
"rating_class": "CSE110",
"rating_quality": "5",
"rating_difficulty": "3",
"rating_comment": "Clear lectures and fair exams. Do the practice sets.",
"rating_date": "2026-03-14",
"rating_tags": "Caring,Gives good feedback",
"rating_grade": "A",
"rating_attendance_mandatory": "non mandatory"
}
FieldTypeDescription
school_idstringGlobal school ID (base64-encoded)
school_legacy_idstringNumeric legacy school ID
school_namestringFull school name
school_citystringSchool city
school_statestringSchool state abbreviation
professor_idstringGlobal professor ID (base64-encoded)
professor_legacy_idstringNumeric legacy professor ID
first_namestringProfessor first name
last_namestringProfessor last name
departmentstringProfessor department
avg_ratingstringAverage quality rating, 1–5
num_ratingsstringTotal ratings for this professor
would_take_again_percentstringPercentage who would take this professor again
avg_difficultystringAverage difficulty rating, 1–5
rating_idstringGlobal rating ID (base64-encoded)
rating_legacy_idstringNumeric legacy rating ID
rating_classstringCourse code for this rating — e.g. CS101
rating_qualitystringQuality rating for this review, 1–5
rating_difficultystringDifficulty rating for this review, 1–5
rating_commentstringFull text of the student comment
rating_datestringDate the rating was posted (ISO 8601)
rating_thumbs_upstringThumbs-up votes on this rating
rating_thumbs_downstringThumbs-down votes on this rating
rating_tagsstringComma-separated tags applied to this rating
rating_for_creditstringWhether the course was taken for credit
rating_attendance_mandatorystringAttendance policy — yes / no / non mandatory
rating_textbook_usedstringTextbook used — 1 yes, 0 no, -1 unknown
rating_gradestringGrade the student received
scrapedAtstringISO 8601 timestamp of extraction

FAQ

What is one record — a professor or a review?

A review, when includeRatings is true: each record carries the professor and school fields alongside that single rating. Set includeRatings to false and you get one record per professor instead.

Do I need a school ID, or will a name do?

A name is fine. Arizona State University resolves on its own. Pass an ID when a name is ambiguous.

Does this need an account or API key?

No. It reads the same public GraphQL API the website uses.

Why are there both school_id and school_legacy_id?

RateMyProfessors migrated to base64 global IDs and kept the numeric ones. Both are emitted so records join against old and new datasets alike.

How do I keep a large school from producing a huge bill?

Start with includeRatings: false to size the professor count, then decide whether the full corpus is worth it and set maxItems accordingly.


Need More Features?

Need department filters or date-bounded rating pulls? Open an issue on the actor.

Why Use RateMyProfessors Scraper?

  • Full review corpus, not just averages — Comment text, course code, grade and tags on every record, which is what makes the data usable for research rather than browsing.
  • Names resolve to IDs automatically — No pre-step to look up school identifiers.
  • Pay per record — Pull one department or a whole university and pay for exactly what comes back.