TheGradCafe APIthegradcafe.com ↗
Query TheGradCafe's crowdsourced grad school admission results by school, program, GPA, GRE scores, and decision outcome via a clean REST API.
What is the TheGradCafe API?
The TheGradCafe API exposes two endpoints for querying and retrieving crowdsourced graduate school admission results. search_admission_results returns paginated summaries — up to 20 per page — filterable by institution, program, degree type, application season, decision outcome, and date range. get_admission_result returns the full detail for a single submission, including self-reported GPA, GRE scores, decision date, and applicant notes.
curl -X GET 'https://api.parse.bot/scraper/90a2e4cf-c5fa-435d-8f5c-db85f7ab3cf8/search_admission_results?program=Computer+Science&added_end=2025-01-31&added_start=2025-01-01&decision_end=2025-01-20&decision_start=2025-01-10&query=computer+science' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace thegradcafe-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: TheGradCafe SDK — search admission results and drill into details."""
from parse_apis.thegradcafe_com_api import TheGradCafe, Decision, ResultNotFound
client = TheGradCafe()
# Search for PhD computer science acceptances, capped at 5 total items.
for summary in client.admission_result_summaries.search(
query="computer science",
degree="PhD",
decision=Decision.ACCEPTED,
limit=5,
):
print(summary.school, summary.program, summary.season, summary.gpa)
# Drill into the first result's full detail via the summary→detail navigation.
summary = client.admission_result_summaries.search(
query="computer science", limit=1
).first()
if summary is not None:
detail = summary.details()
print(detail.school, detail.decision_date, detail.notes)
print("GRE:", detail.gre_general, detail.gre_verbal, detail.gre_analytical_writing)
print("Acceptance rate:", detail.institution_acceptance_rate_percent)
# Point lookup by a result_id discovered from the search above.
if summary is not None:
try:
result = client.admission_results.get(result_id=summary.result_id)
print(result.school, result.program, result.notification_method)
except ResultNotFound:
print("Result no longer available")
print("exercised: admission_result_summaries.search / details / admission_results.get")
Searches TheGradCafe's crowdsourced admission results. One call returns one page of up to 20 result summaries (newest first) plus the site's approximate total match count. Filter by free-text query and/or exact-ish institution and program names, and optionally by degree type, decision outcome, application season, and decision/added date ranges. At least one of query, institution or program must be given. Paging is controlled by `page` (1-based, default 1); `has_more` reports whether a next page exists. Each summary carries the numeric `result_id` accepted by get_admission_result. Applicant stats (gpa, gre_*) are self-reported and null when the submitter did not provide them; decision_date is the month/day shown in the listing without a year (the detail endpoint returns the full date). A search that matches nothing returns an empty results array with total_results 0.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number; each page holds up to 20 results. |
| query | string | Free-text search over school and program names, e.g. computer science. Optional when institution or program is given. |
| degree | string | Degree type filter. Omitted = all degree types. |
| season | string | Application season code: F or S followed by a two-digit year, e.g. F25 = Fall 2025, S26 = Spring 2026. Omitted = all seasons. |
| program | string | Program name filter as written on the site (e.g. Computer Science). |
| decision | string | Decision outcome filter. Omitted = all outcomes. |
| added_end | string | Latest submission (added on) date to include, ISO date YYYY-MM-DD. |
| added_start | string | Earliest submission (added on) date to include, ISO date YYYY-MM-DD. |
| institution | string | Institution/school name filter as written on the site (e.g. Stanford University). |
| decision_end | string | Latest decision date to include, ISO date YYYY-MM-DD. |
| decision_start | string | Earliest decision date to include, ISO date YYYY-MM-DD. |
{
"type": "object",
"fields": {
"page": "the page number returned",
"count": "number of results on this page",
"results": "array of result summaries: result_id (string, use with get_admission_result), school, program, degree, added_on (submission date text), decision (Accepted/Rejected/Interview/Wait listed), decision_date (month/day text, no year), season (e.g. Fall 2025), applicant_origin (American/International), gpa, gre_general, gre_verbal, gre_analytical_writing (numbers or null)",
"has_more": "true when a following page exists",
"total_results": "site's approximate total number of matching results (integer, null if not shown)"
},
"sample": {
"data": {
"page": 1,
"count": 20,
"results": [
{
"gpa": null,
"degree": "PhD",
"school": "Stanford University",
"season": "Fall 2026",
"program": "Computer Science",
"added_on": "Feb 06, 2026",
"decision": "Accepted",
"result_id": "997336",
"gre_verbal": 170,
"gre_general": 169,
"decision_date": "Feb 06",
"applicant_origin": "American",
"gre_analytical_writing": 6
}
],
"has_more": false,
"total_results": 251
},
"status": "success"
}
}About the TheGradCafe API
Search Admission Results
search_admission_results accepts up to eight filter parameters: query (free-text over school and program names), institution, program, degree, season (e.g. F25 for Fall 2025), decision, added_start, and added_end. Each response includes an array of result summaries with fields for school, program, degree, decision, added_on, and a result_id you pass to the detail endpoint. The total_results field gives the site's approximate match count; has_more tells you whether additional pages exist. Pagination is 1-based via the page parameter, with up to 20 results per page.
Get Admission Result Detail
get_admission_result takes a single result_id (from search_admission_results) and returns the full record: school, program, degree, decision (one of Accepted / Rejected / Interview / Wait listed), decision_date (ISO date or null), gpa, gre_general, gre_verbal, gre_analytical_writing, and free-text notes. All applicant stat fields are null when the submitter did not provide them — which is common, since TheGradCafe data is entirely self-reported.
Data Coverage and Freshness
TheGradCafe aggregates submissions from applicants across many graduate programs and institutions, predominantly in the United States. Results skew toward STEM, social science, and humanities PhD and Masters programs. Because every record is submitted voluntarily, GPA and GRE fields have high null rates, and program names may vary slightly in how they are spelled across submissions. The season filter can narrow results to a specific cycle, which is useful when comparing year-over-year acceptance patterns for a given program.
The TheGradCafe API is a managed, monitored endpoint for thegradcafe.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when thegradcafe.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official thegradcafe.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate acceptance rates by program and degree type using
decisionfield values across paginated search results. - Build a GPA/GRE score distribution chart for a target program by collecting
gpa,gre_general, andgre_verbalfromget_admission_result. - Track how many admission results are submitted per week for a school by filtering
added_startandadded_endinsearch_admission_results. - Compare Fall vs Spring admission outcomes for a program using the
seasonparameter (e.g. F24 vs S25). - Surface applicant notes about interview timelines or funding offers via the
notesfield inget_admission_result. - Feed a grad school decision tracker app that alerts users when new results appear for their target programs.
- Analyze wait-list conversion rates by filtering
decisionto 'Wait listed' and monitoring subsequent result submissions.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does TheGradCafe have an official developer API?+
What does `search_admission_results` return, and how do I narrow results to a specific program?+
total_results (the site's approximate match count) and a has_more flag. To target a specific program, pass the program parameter with the program name as it appears on the site (e.g. 'Computer Science'), and optionally combine it with institution and degree. Use the page parameter to walk through additional pages.How often are GPA and GRE fields populated?+
gpa, gre_general, gre_verbal, and gre_analytical_writing, so expect null values frequently. Any analysis depending on these fields should account for missing data.Does the API return user profile pages or historical application lists for individual submitters?+
search_admission_results and retrieved via get_admission_result) but does not expose individual user profiles or a submitter's full application history. You can fork this API on Parse and revise it to add an endpoint targeting that data.Can I filter results by a specific notification date rather than submission date?+
added_start and added_end parameters filter by the date the result was submitted to TheGradCafe, not by the decision_date field. Filtering directly on decision notification date is not currently supported in search_admission_results. You can fork this API on Parse and revise it to add that filter capability.