Unstop APIunstop.com ↗
Search Unstop internships by domain, job type, and location. Returns title, organization, salary, skills, eligibility, and pagination across 3 endpoints.
What is the Unstop API?
The Unstop API exposes 3 endpoints to search and filter internship listings from unstop.com, returning fields like title, organization, salary, required skills, locations, and eligibility. The search_internships endpoint accepts role slugs, job type, and pagination parameters so you can retrieve targeted results programmatically. Supporting endpoints get_domains and get_cities provide the valid slugs and city data needed to build precise filters.
curl -X GET 'https://api.parse.bot/scraper/d3cf4aa1-72f3-447c-9e12-2d8d45110813/search_internships?page=1&job_type=wfh&per_page=5' \ -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 unstop-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: Unstop Internships SDK — search, filter by domain and job type."""
from parse_apis.unstop_com_api import Unstop, JobType, InvalidInput
client = Unstop()
# List available domains to discover valid filter slugs
for domain in client.domains.list(limit=5):
print(domain.name, domain.slug)
# Search internships filtered by domain and job type
for internship in client.internships.search(
roles="data-science", job_type=JobType.WFH, limit=3
):
print(internship.title, internship.organization, internship.job_type)
# Search cities for location reference
city = client.cities.search(search="Bangalore", limit=1).first()
if city:
print(city.city_name, city.state_name, city.country_name)
# Handle invalid input errors
try:
for item in client.internships.search(roles="software-development", job_type=JobType.IN_OFFICE, limit=1):
print(item.title, item.min_salary, item.max_salary)
except InvalidInput as exc:
print(f"Invalid input: {exc}")
print("exercised: domains.list / internships.search / cities.search")
Search open internships on Unstop, optionally filtered by domain (role slug from get_domains) and job type. Returns paginated results including title, organization, salary, locations, required skills, and eligibility. Results are ordered by most recently posted.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| roles | string | Domain/role slug to filter internships (e.g. 'data-science', 'software-development', 'digital-marketing'). Obtain valid slugs from the get_domains endpoint. Omitting returns all domains. |
| job_type | string | Filter by work location type. Omitting returns all types. |
| per_page | integer | Number of results per page (1-100). |
{
"type": "object",
"fields": {
"total": "integer",
"per_page": "integer",
"last_page": "integer",
"internships": "array of internship objects with id, title, public_url, organization, region, job_type, timing, salary info, locations, work_functions, required_skills, eligibility_filters, dates, and counts",
"current_page": "integer"
},
"sample": {
"data": {
"total": 1,
"per_page": 18,
"last_page": 1,
"internships": [
{
"id": 1700742,
"title": "Data Science and Machine Learning Internship",
"pay_in": "monthly",
"region": "online",
"timing": "full_time",
"currency": "fa-rupee",
"end_date": "2026-07-17T00:00:00+05:30",
"job_type": "wfh",
"locations": [],
"max_salary": 8000,
"min_salary": 8000,
"public_url": "https://unstop.com/internships/data-science-and-machine-learning-internship-axlero-solutions-1700742",
"posted_date": "2026-06-18 11:47:22 GMT+0530",
"views_count": 1,
"organization": "Axlero Solutions",
"register_count": 9058,
"work_functions": [
"Machine Learning Engineering",
"Data Science"
],
"required_skills": [
"Machine Learning Concepts",
"Pandas (Python)",
"Python",
"SQL",
"Data Cleaning"
],
"eligibility_filters": [
"Undergraduate",
"Postgraduate",
"Engineering Students",
"Arts, Commerce, Sciences & Others"
]
}
],
"current_page": 1
},
"status": "success"
}
}About the Unstop API
Internship Search
The search_internships endpoint is the core of the API. It returns paginated internship listings ordered by most recent post date. Each internship object includes id, title, public_url, organization, region, job_type, timing, salary information, locations, and work function details. You can narrow results with the roles parameter (a domain slug such as data-science or software-development), the job_type parameter to filter by remote, in-office, or hybrid, and standard page/per_page controls (1–100 results per page). The response also returns total, current_page, and last_page for straightforward pagination logic.
Domain and City Reference Endpoints
get_domains returns the complete list of available work functions on Unstop, each with an id, name, and slug. The slug value maps directly to the roles parameter in search_internships, so querying this endpoint first ensures you pass valid filter values. get_cities accepts an optional search string and returns matching city objects with city_name, state_name, and country_name. When search is omitted, it returns a default set of popular Indian cities, reflecting the platform's primary user base.
Coverage and Scope
All three endpoints target open internship listings on Unstop. The data is ordered by recency, so the first page of search_internships reflects the most recently posted opportunities. The domain list from get_domains covers the full set of categories Unstop uses, from digital-marketing to finance to software-development. City data from get_cities supports fuzzy matching globally, though the default list skews toward major Indian metros.
The Unstop API is a managed, monitored endpoint for unstop.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when unstop.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 unstop.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 internship listings filtered by domain slug (e.g. 'data-science') for a niche job board
- Build a location-aware internship finder using city IDs returned by get_cities
- Filter work-from-home internships by passing the remote job_type parameter to search_internships
- Populate a domain dropdown in a career app using the slug and name fields from get_domains
- Track the volume of new internships in a specific domain by monitoring the total field over time
- Display salary ranges and required skills for internships in a student-facing dashboard
- Index Unstop internship public_urls and titles for a search engine focused on early-career opportunities
| 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.