Skip to main content

RateMyProfessors API Client (Python)

PyPI downloads docs

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 an errors array 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 again
  • Rating — Date, comment, quality, difficulty, tags, course, thumbs up/down
  • SchoolRating — Date, comment, overall score, category ratings, thumbs up/down
  • ProfessorSearchResult / SchoolSearchResult — Paginated list with has_next_page and next_cursor
  • ProfessorRatingsPage / SchoolRatingsPage — One page of ratings with cursor pagination
  • CompareSchoolsResult — 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 a ValidationResult with 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 codes
  • analyze_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)

Source distribution for ratemyprofessors-client 3.0.2
File Size Uploaded
ratemyprofessors_client-3.0.2.tar.gz 26.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ratemyprofessors-client 3.0.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

3.0.2 This release

2 release files

3.0.0

2 release files

2.1.2

2 release files

2.1.0

2 release files

2.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page