Collegedunia APIcollegedunia.com ↗
Fetch paginated student reviews, ratings, and filters for universities worldwide from Collegedunia via a single structured API endpoint.
What is the Collegedunia API?
The Collegedunia University Reviews API exposes one endpoint — get_university_reviews — that returns up to 9 response fields per call, including paginated student reviews, category-level rating averages, pros/cons content, and available filter options for stream and degree type. It covers universities listed on Collegedunia's Study Abroad section, addressable by country-prefixed slug.
curl -X GET 'https://api.parse.bot/scraper/7ca1b1a0-2fab-41be-8fc8-28b5b9650068/get_university_reviews' \ -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 collegedunia-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.
"""
Collegedunia University Reviews API Client
Fetch and analyze student reviews for universities on Collegedunia.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Any, Dict
from urllib.parse import urljoin
class ParseClient:
"""Client for interacting with the Collegedunia University Reviews API."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the ParseClient.
Args:
api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "7ca1b1a0-2fab-41be-8fc8-28b5b9650068"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError(
"API key not provided. Set PARSE_API_KEY environment variable or pass it as argument."
)
def _call(
self, endpoint: str, method: str = "POST", **params
) -> Dict[str, Any]:
"""
Make a request to the Parse API.
Args:
endpoint: API endpoint name
method: HTTP method (GET or POST)
**params: Query/body parameters
Returns:
Response data as dictionary
Raises:
requests.exceptions.RequestException: If request fails
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json",
}
try:
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"API request failed: {str(e)}")
def get_university_reviews(
self,
university_slug: str,
page: int = 1,
stream_id: Optional[str] = None,
degree_type: Optional[str] = None,
) -> Dict[str, Any]:
"""
Get student reviews for a university on Collegedunia.
Args:
university_slug: University path slug (e.g., 'uk/university/865-university-of-oxford-oxford')
page: Page number for paginated results (default: 1)
stream_id: Filter by stream/subject ID (e.g., '339' for Computer Science)
degree_type: Filter by degree type (e.g., 'Bachelor', 'Master')
Returns:
Dictionary containing reviews, stats, filters, and pagination info
"""
params = {
"university_slug": university_slug,
"page": page,
}
if stream_id is not None:
params["stream_id"] = stream_id
if degree_type is not None:
params["degree_type"] = degree_type
return self._call("get_university_reviews", method="GET", **params)
def display_review(review: Dict[str, Any]) -> None:
"""Display a single review in a readable format."""
print(f"\n{'='*70}")
print(f"📝 {review.get('title', 'No title')}")
print(f"👤 {review.get('name', 'Anonymous')}")
print(f"📚 {review.get('course', 'N/A')}")
print(f"📅 Enrollment: {review.get('enrollment', 'N/A')}")
print(f"👍 {review.get('likes', 0)} likes | 👎 {review.get('dislikes', 0)} dislikes")
if review.get("positive_points"):
print("\n✅ Positive Points:")
for point in review["positive_points"]:
print(f" • {point}")
if review.get("negative_points"):
print("\n❌ Negative Points:")
for point in review["negative_points"]:
print(f" • {point}")
def display_review_stats(stats: Dict[str, Any]) -> None:
"""Display review statistics in a readable format."""
print(f"\n{'='*70}")
print("📊 REVIEW STATISTICS")
print(f"{'='*70}")
print(f"Total Reviews: {stats.get('total_reviews', 0)}")
print(f"Average Rating: {stats.get('average_rating', 0):.2f}/10")
rating = stats.get("rating", {})
if rating:
print("\nCategory Ratings:")
print(f" 📚 Academic: {rating.get('avg_academic', 0):.2f}/10")
print(f" 👨🏫 Faculty: {rating.get('avg_faculty', 0):.2f}/10")
print(f" 🏗️ Infrastructure: {rating.get('avg_infrastructure', 0):.2f}/10")
print(f" 🏠 Accommodation: {rating.get('avg_accomodation', 0):.2f}/10")
print(f" 💼 Placement: {rating.get('avg_placement', 0):.2f}/10")
print(f" 🎭 Extracurricular: {rating.get('avg_extracurricular', 0):.2f}/10")
if __name__ == "__main__":
# Initialize the client
client = ParseClient()
# Practical workflow: Fetch and analyze reviews for University of Oxford
print("🎓 Collegedunia University Reviews Analysis")
print("=" * 70)
university_slug = "uk/university/865-university-of-oxford-oxford"
print(f"\nFetching reviews for: {university_slug}")
try:
# Fetch first page of reviews
response = client.get_university_reviews(university_slug, page=1)
# Display university info
print(f"\n✨ {response.get('university', 'University')}")
total_reviews = response.get("total_reviews", 0)
print(f"Total Reviews Available: {total_reviews}")
# Display review statistics
if "review_stats" in response:
display_review_stats(response["review_stats"])
# Display available filters
filters = response.get("filters", {})
if filters:
print(f"\n🔍 Available Filters:")
for filter_name, filter_data in filters.items():
print(f" • {filter_name}: {filter_data}")
# Display pagination info
pagination = response.get("pagination", {})
current_page = pagination.get("current", 1)
last_page = pagination.get("last", 1)
print(f"\n📄 Pagination: Page {current_page} of {last_page}")
# Display reviews from the first page
reviews = response.get("reviews", [])
print(f"\n📋 Displaying {len(reviews)} reviews from page {current_page}:")
for idx, review in enumerate(reviews[:3], 1): # Show first 3 reviews
display_review(review)
print()
if len(reviews) > 3:
print(f"\n... and {len(reviews) - 3} more reviews on this page")
# Demonstrate multi-page fetching
if last_page > 1:
print(f"\n{'='*70}")
print("📚 Fetching additional pages...")
print(f"{'='*70}")
for page_num in range(2, min(last_page + 1, 4)): # Fetch up to 3 pages
page_response = client.get_university_reviews(university_slug, page=page_num)
page_reviews = page_response.get("reviews", [])
print(f"\nPage {page_num}: Found {len(page_reviews)} reviews")
if page_reviews:
first_review = page_reviews[0]
print(f" Sample: {first_review.get('title', 'No title')} by {first_review.get('name', 'Anonymous')}")
print(f"\n{'='*70}")
print("✅ Analysis complete!")
except Exception as e:
print(f"❌ Error: {str(e)}")Get student reviews for a university on Collegedunia. Returns paginated reviews with ratings, pros/cons, content, and available filters. The university_slug follows the site's URL pattern including country prefix.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for paginated results. |
| stream_id | string | Filter reviews by stream/subject ID. Available stream IDs are returned in the filters field of the response (e.g. '339' for Computer Science, '4' for Arts). |
| degree_type | string | Filter reviews by degree type. Available values are returned in the filters field of the response (e.g. 'Bachelor', 'Master'). |
| university_slugrequired | string | University path slug in format '<country>/university/<id>-<name-slug>'. Examples: 'uk/university/865-university-of-oxford-oxford', 'usa/university/1020-northeastern-university-boston'. The slug can be found from the Collegedunia university page URL. |
{
"type": "object",
"fields": {
"filters": "object with available filter options and counts",
"reviews": "array of review objects",
"pagination": "object with current and last page numbers",
"university": "string",
"current_page": "integer",
"review_stats": "object with average ratings across categories",
"total_reviews": "integer"
},
"sample": {
"filters": {},
"reviews": [
{
"id": 23347,
"url": "uk/reviews/23347-student-review-on-university-of-oxford",
"name": "Student (Anonymous)",
"likes": "0",
"title": "My M.Phil Experience",
"course": "M.Phil Development Studies",
"content": [
{
"title": "",
"content": "<ul>...</ul>"
}
],
"dislikes": "0",
"course_url": "uk/university/865-university-of-oxford-oxford/programs?course_id=215658",
"created_at": "2025-12-08",
"enrollment": "2025",
"college_name": "University of Oxford",
"country_name": "United Kingdom",
"review_images": {},
"negative_points": [
"Only thing I wish could be better..."
],
"positive_points": [
"High standards of rigor in research"
]
}
],
"pagination": {
"last": 2,
"current": 1
},
"university": "University of Oxford",
"current_page": 1,
"review_stats": {
"rating": {
"avg_faculty": 9.45,
"avg_academic": 9.55,
"avg_placement": 8.36,
"avg_accomodation": 9,
"avg_infrastructure": 9.27,
"avg_extracurricular": 8
},
"total_reviews": 11,
"total_student": 11,
"average_rating": 8.33
},
"total_reviews": 11
}
}About the Collegedunia API
What the Endpoint Returns
The get_university_reviews endpoint accepts a required university_slug in the format <country>/university/<id>-<name-slug> — for example, uk/university/865-university-of-oxford-oxford. It returns a reviews array of individual student review objects containing written feedback, pros/cons fields, and per-review ratings. The review_stats object aggregates average scores across rating categories for the university. total_reviews and pagination (with current_page and last_page) let you walk through all available reviews.
Filtering Reviews
Two optional parameters narrow results: stream_id filters by academic subject area, and degree_type filters by level of study (e.g., Bachelor's, Master's). Both accept values that are themselves returned in the filters response field — which includes available filter options alongside review counts — so a standard workflow is to call the endpoint once without filters to retrieve valid filter values, then re-call with the desired parameters.
Coverage and Pagination
The university field in the response confirms which institution the results belong to. Pagination is integer-based via the page parameter. The filters object documents which streams and degree types actually have reviews for a given university, preventing empty result sets from bad filter combinations. Coverage spans universities listed on Collegedunia's international study-abroad section, identified by country prefix in the slug.
The Collegedunia API is a managed, monitored endpoint for collegedunia.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when collegedunia.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 collegedunia.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 student sentiment scores from
review_statsacross multiple universities for a comparison tool - Build a subject-specific reputation index by filtering reviews with
stream_idand averaging ratings - Extract pros/cons text from
reviewsto train or fine-tune a sentiment classification model - Power a university shortlisting feature by combining
total_reviews,review_stats, anddegree_typefilters - Monitor how review counts and average ratings change over time by periodically calling
get_university_reviews - Populate a study-abroad guide with real student feedback organized by degree level using the
degree_typefilter
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Collegedunia offer an official public developer API?+
How do I know which `stream_id` and `degree_type` values are valid for a university?+
get_university_reviews for the target university without any filter parameters. The filters field in the response lists all valid stream IDs and degree type values along with the review count for each, so you can build filter selections dynamically without guessing.Does the API return reviewer profile data such as usernames, graduation year, or country of origin?+
reviews array contains review content, ratings, and pros/cons text. Detailed reviewer profile fields such as graduation year or country of origin are not currently part of the response. You can fork the API on Parse and revise it to surface additional per-reviewer fields if they are available on the source page.Can I fetch reviews for universities outside the UK?+
university_slug parameter is country-prefixed, so universities in other countries are accessible by using their corresponding country code in the slug (e.g., us/university/... or au/university/...). Coverage depends on which institutions are listed on Collegedunia's Study Abroad section.Does the API expose university-level metadata like ranking, tuition fees, or acceptance rates?+
review_stats, reviews, total_reviews, filters, and pagination. University-level metadata such as rankings, tuition fees, or acceptance rates are not returned. You can fork the API on Parse and revise it to add an endpoint targeting those data fields.