RateMyProfessors API Client (Python)
A typed, retrying, rate-limited unofficial client for RateMyProfessors.
Looking for TypeScript? Check out the TypeScript version.
Requirements
- Python 3.10 or later
- Works with type checkers (Pydantic models, fully typed API)
Installation
pip install ratemyprofessors-client
Available Functions
Create a client and call any of these methods. See the full docs for parameters, return types, and examples.
from rmp_client import RMPClient
with RMPClient() as client:
...
Schools
search_schools(query)— Search schools by name. Returns paginated results.get_school(school_id)— Get a single school by its numeric ID.get_compare_schools(school_id_1, school_id_2)— Fetch two schools side by side.get_school_ratings_page(school_id)— Get one page of school ratings.iter_school_ratings(school_id)— Iterator over all ratings for a school.
Professors
search_professors(query)— Search professors by name. Returns paginated results.list_professors_for_school(school_id)— List professors at a given school.iter_professors_for_school(school_id)— Iterator over all professors at a school.get_professor(professor_id)— Get a single professor by their numeric ID.get_professor_ratings_page(professor_id)— Get one page of professor ratings.iter_professor_ratings(professor_id)— Iterator over all ratings for a professor.
Low-level
raw_query(payload)— Send a raw GraphQL payload to the RMP endpoint.
Lifecycle
close()— Close the client. Safe to call multiple times.
Errors and What They Mean
All errors extend RMPError. Catch and narrow with isinstance:
HttpError— The server returned a non-2xx status code (e.g. 404, 500).ParsingError— The response couldn't be parsed (e.g. professor/school not found).RetryError— The request failed after all retry attempts. Contains the last underlying error.RMPAPIError— The GraphQL API returned anerrorsarray in the response.ConfigurationError— Invalid client configuration.
from rmp_client import RMPClient, HttpError, ParsingError
with RMPClient() as client:
try:
prof = client.get_professor("2823076")
except ParsingError:
print("Professor not found")
except HttpError as e:
print(f"HTTP error: {e.status_code}")
Types
All methods return Pydantic models. Import any of these:
from rmp_client.models import (
School,
Professor,
Rating,
SchoolRating,
ProfessorSearchResult,
SchoolSearchResult,
ProfessorRatingsPage,
SchoolRatingsPage,
CompareSchoolsResult,
)
School— ID, name, location, overall quality, category ratings (reputation, safety, etc.)Professor— ID, name, department, school, overall rating, difficulty, percent take againRating— Date, comment, quality, difficulty, tags, course, thumbs up/downSchoolRating— Date, comment, overall score, category ratings, thumbs up/downProfessorSearchResult/SchoolSearchResult— Paginated list withhas_next_pageandnext_cursorProfessorRatingsPage/SchoolRatingsPage— One page of ratings with cursor paginationCompareSchoolsResult— A pair of schools
Extras
Optional helpers for data pipelines:
from rmp_client import (
analyze_sentiment,
normalize_comment,
is_valid_comment,
build_course_mapping,
clean_course_label,
)
normalize_comment(text, *, strip_html=True, strip_punctuation=False)— Normalize text for deduplication (trim, strip HTML, lowercase, collapse whitespace; optionally strip punctuation)is_valid_comment(text, *, min_len=10)— Validate a comment and return aValidationResultwith diagnostics (empty, too short, all caps, excessive repeats, no alpha)clean_course_label(raw)— Clean scraped course labels (remove counts, normalize whitespace)build_course_mapping(scraped, valid)— Map scraped labels to known course codesanalyze_sentiment(text)— Compute sentiment label from text (uses TextBlob)
Release files for ratemyprofessors-client 3.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ratemyprofessors_client-3.0.2.tar.gz | 26.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ratemyprofessors_client-3.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.3 kB
Release files / ratemyprofessors_client-3.0.2.tar.gz
| Download URL | ratemyprofessors_client-3.0.2.tar.gz |
|---|---|
| Size | 26.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1db6cb2a05d2b3ebf0b01ade04f043121f9d145cae8e0ee99cf8e1afda3efca9
|
|
BLAKE2b-256 checksum How to use checksums |
426c459e8f6e0d16032c6ff2fc3874b12c165cb9ba2b29cec371b9aa0da177e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 11, 2026.
Transparency logRelease files / ratemyprofessors_client-3.0.2-py3-none-any.whl
| Download URL | ratemyprofessors_client-3.0.2-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86ad14558c83f0853e5132e846b5e5cdcb1fd2c62dd8b68bb7576ad5aa0f728d
|
|
BLAKE2b-256 checksum How to use checksums |
94af0f571478d3817763ae972dd62abca50522bdf877bae45443eec353a924ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 11, 2026.
Transparency log