CareerOneStop APIcareeronestop.org ↗
Search 10,000+ scholarships, fellowships, grants, and loans from CareerOneStop. Filter by keyword, study level, award type, and eligibility. Retrieve full award details.
What is the CareerOneStop API?
This API provides access to CareerOneStop's catalog of over 10,000 scholarships, fellowships, grants, prizes, and loans across two endpoints. The search_scholarships endpoint accepts filters for keyword, level of study, award type, affiliation, sex, and location, returning paged award summaries including name, organization, purpose, award amount, and a scholarship_id you can pass directly to get_scholarship for the full record.
curl -X GET 'https://api.parse.bot/scraper/00e357bc-4084-4a64-8666-7e753b59ce13/search_scholarships?sex=female&keyword=nursing&level_of_study=graduate' \ -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 careeronestop-org-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: CareerOneStop Scholarship Finder — bounded, re-runnable."""
from parse_apis.careeronestop_org_api import (
CareerOneStop, LevelOfStudy, Sex, Sort, ScholarshipNotFound,
)
client = CareerOneStop()
# Search for nursing scholarships aimed at female graduate students.
for summary in client.scholarship_summaries.search(
keyword="nursing",
level_of_study=LevelOfStudy.GRADUATE,
sex=Sex.FEMALE,
sort=Sort.DEADLINE_ASC,
limit=5,
):
print(summary.name, "|", summary.organization, "|", summary.award_amount)
# Drill into the first hit for full detail (qualifications, how to apply, etc.).
hit = client.scholarship_summaries.search(
keyword="nursing",
level_of_study=LevelOfStudy.GRADUATE,
limit=1,
).first()
if hit is not None:
detail = hit.details()
print(detail.name)
print("Amount:", detail.award_amount)
print("Qualifications:", detail.qualifications)
print("Deadline:", detail.deadline)
print("Emails:", detail.emails)
# Same record reachable by direct ID lookup.
try:
same = client.scholarships.get(scholarship_id=hit.scholarship_id)
print("Direct lookup:", same.name, "| Focus:", same.focus)
except ScholarshipNotFound:
print("Scholarship no longer available")
print("exercised: scholarship_summaries.search / details / scholarships.get")
Searches the scholarship catalog and returns one page of award summaries (name, organization, purpose, levels of study, award types, award amount, deadline month, canonical scholarship_id and detail URL). All filters combine with AND. Results are paged: page (1-based, default 1) and page_size (10, 25 or 50; default 10) are the caller's paging controls; total is the site's reported match count (the unfiltered catalog reports a maximum of 10,000) and has_more tells whether a further page exists. A combination of filters that matches nothing returns total 0 and an empty scholarships array (success). One round trip per call.
| Param | Type | Description |
|---|---|---|
| sex | string | Sex-specific restriction of the award. Omitted = awards open to any sex plus sex-specific ones. |
| page | integer | 1-based result page. |
| sort | string | Result ordering. |
| keyword | string | Free-text keyword matched against award name, organization and purpose (e.g. nursing). Omitted = no keyword filter. |
| page_size | integer | Awards per page; the site accepts 10, 25 or 50 and other values are rejected. |
| award_type | string | Kind of financial award. Omitted = all award types. |
| affiliation | string | Required affiliation or group membership the award is restricted to. Omitted = no affiliation filter. |
| level_of_study | string | Level of study the award supports. Omitted = all levels. |
| study_location | string | Where the applicant will study, as the site labels it: US, International, or a full US state/territory name such as Texas. Passed to the site as written; an unknown value yields an empty result. Omitted = no study-place filter. |
| residence_location | string | Where the applicant lives, as the site labels it: US, International, or a full US state/territory name such as Ohio or District of Columbia. Passed to the site as written; an unknown value yields an empty result. Omitted = no residence restriction filter. |
{
"type": "object",
"fields": {
"page": "integer page returned",
"total": "integer count of matching awards reported by the site (max 10,000)",
"has_more": "boolean, true when a later page exists",
"page_size": "integer awards per page",
"scholarships": "array of award summaries; each has scholarship_id (string, use with get_scholarship), name, url (detail page), organization, purpose, levels_of_study (array of strings), award_types (array of strings), award_amount (string as displayed, may be N/A or null), deadline (month name or null)"
},
"sample": {
"data": {
"page": 1,
"total": 3,
"has_more": false,
"page_size": 10,
"scholarships": [
{
"url": "https://www.careeronestop.org/Toolkit/Training/find-scholarships-detail.aspx?scholarshipId=9997232",
"name": "Faye Lynn Roberts Education Scholarship Fund",
"purpose": "To fund scholarships for female students pursuing a career in technical studies, court reporting, computer training, or nursing.",
"deadline": "January",
"award_types": [
"Scholarship"
],
"award_amount": "$750",
"organization": "Collaboratory",
"scholarship_id": "9997232",
"levels_of_study": [
"Bachelor's Degree",
"Graduate Degree",
"High School"
]
}
]
},
"status": "success"
}
}About the CareerOneStop API
Searching the Scholarship Catalog
The search_scholarships endpoint accepts up to eight filter parameters that combine with AND logic. Use keyword to match free text against award names, organizations, and purpose statements. Narrow results further with level_of_study (e.g., undergraduate, graduate), award_type (scholarship, fellowship, grant, loan, prize), affiliation for awards tied to group memberships, and sex for sex-restricted awards. Omitting a filter returns all values for that dimension. Results are paged; page_size must be 10, 25, or 50 — other values are rejected. The response includes total (capped at 10,000), has_more to detect additional pages, and an array of award summaries each carrying a scholarship_id string.
Retrieving Full Award Detail
Pass any scholarship_id from a search response to get_scholarship to retrieve the complete record. The detail response includes fields not present in search results: focus (fields of study targeted), qualifications (eligibility requirements), criteria (selection criteria text), to_apply (application instructions), duration, deadline as written by the sponsor, phone, and emails for sponsor contact. Fields the sponsor did not supply come back as null rather than being omitted, so you can safely check each field without guarding for key absence.
Coverage and Filtering Notes
The catalog covers U.S.-based awards. The total field in search_scholarships reflects the count the source reports and is capped at 10,000 regardless of how many records exist. Because filters combine with AND, combining many restrictive parameters can quickly reduce results to zero — it is worth checking total before paginating. The sort parameter controls result ordering but accepted sort values are not enumerated in the response; test against the live endpoint to confirm accepted tokens.
The CareerOneStop API is a managed, monitored endpoint for careeronestop.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when careeronestop.org 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 careeronestop.org 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?+
- Build a scholarship matching tool that filters by
level_of_studyandkeywordto surface relevant awards for a student's field - Aggregate sponsor contact data (
phone,emails) fromget_scholarshipto compile a directory of funding organizations - Track application deadlines by pulling
deadlinefields across awards matching a givenaffiliationoraward_type - Filter by
sexandlevel_of_studyto power a targeted grant finder for underrepresented groups - Extract
qualificationsandcriteriatext to train a classifier that predicts eligibility from a student profile - Display
purposeandfocusfields in a college advising dashboard so counselors can quickly brief students on award goals - Page through the full catalog with
search_scholarshipsto build a local snapshot of award amounts and deadlines for offline analysis
| 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 CareerOneStop have an official developer API?+
What does `search_scholarships` return versus `get_scholarship`, and when should I call each?+
search_scholarships returns paged summaries: name, organization, purpose, award_type, level_of_study, award_amount, deadline month, and the scholarship_id you need for the detail call. get_scholarship returns the full record for one award, adding focus, qualifications, criteria, to_apply, duration, sponsor phone, and emails. Call search first to filter the catalog, then call detail only for awards you intend to display or store in full.Are there any hard limits on pagination or result counts?+
total field in search_scholarships is capped at 10,000 regardless of how many matching records exist, so you cannot determine exact catalog size from the API alone. Additionally, page_size must be exactly 10, 25, or 50 — the endpoint rejects other values. Plan your pagination loops around those constraints.Does the API expose residence or study location filters mentioned in the plan summary?+
search_scholarships inputs as defined do not include separate residence or study location parameters — available filters are keyword, level of study, award type, affiliation, sex, sort, page, and page_size. If location-based filtering is important to your use case, you can fork this API on Parse and revise it to add the missing location parameters.