Microsoft APIapply.careers.microsoft.com ↗
Search and retrieve Microsoft job listings by keyword, location, seniority, and more. Get full job descriptions, qualifications, and work-site policy via 2 endpoints.
What is the Microsoft API?
The Microsoft Careers API provides 2 endpoints for searching and retrieving job listings directly from Microsoft's official careers portal. Use search_jobs to run full-text queries across titles and descriptions with filters for location, seniority, profession, and work-site policy, and use get_job_details to fetch the complete posting for a specific position — including cleaned description text, raw HTML, qualifications, discipline, role type, and travel requirements.
curl -X GET 'https://api.parse.bot/scraper/7696fb46-41c6-4fc6-ae9f-42e85bf76ca9/search_jobs?page=1&limit=5&query=software+engineer&sort_by=timestamp' \ -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 apply-careers-microsoft-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.
"""Microsoft Careers Job Search — search, filter, and drill into job details."""
from parse_apis.microsoft_careers_job_search_api import MicrosoftCareers, Sort, JobNotFound
client = MicrosoftCareers()
# Search for software engineering jobs sorted by latest posting date.
for job in client.jobsummaries.search(query="software engineer", sort_by=Sort.TIMESTAMP, limit=3):
print(job.title, job.department, job.locations)
# Drill into the first result for full description and qualifications.
summary = client.jobsummaries.search(query="data scientist", limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.employment_type, detail.work_site)
print(detail.description[:200])
# Fetch a job directly by its position ID.
try:
job = client.jobs.get(id="1970393556872816")
print(job.title, job.role_type, job.profession)
except JobNotFound as exc:
print(f"Position gone: {exc}")
print("exercised: jobsummaries.search / summary.details / jobs.get / JobNotFound catch")
Full-text search over Microsoft Careers job listings. `query` matches titles and descriptions; `sort_by` orders results by posting date or relevance. Supports filters for location, seniority, work site, profession, and employment type. Paginates via `page` (1-based integer). Returns job summaries with id, title, locations, department, and posting timestamp. Each result carries a position id usable with get_job_details for the full description and qualifications.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based) |
| limit | integer | Number of results to return per page (max ~100 recommended) |
| query | string | Search keyword(s) for job titles and descriptions |
| sort_by | string | Sort order for results |
| location | string | Location filter (e.g., 'Redmond, WA, United States', 'Remote'). Omitting returns jobs from all locations. |
| seniority | string | Experience level filter (e.g., 'Senior', 'Mid-Level', 'Entry', 'Manager', 'Director', 'Intern') |
| work_site | string | Work site filter (e.g., '3 days / week in-office', 'fully on-site', '0 days / week in-office – remote') |
| profession | string | Profession filter (e.g., 'product management', 'software engineering') |
| employment_type | string | Employment type filter (e.g., 'full-time', 'internship', 'temp/contract') |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with id, job_id, title, locations, department, posted_timestamp, and work_location_option",
"page": "integer - current page number",
"limit": "integer - requested results per page",
"total_count": "integer - total number of matching jobs",
"returned_count": "integer - actual number of results returned in this response"
}
}About the Microsoft API
Search Microsoft Job Listings
The search_jobs endpoint accepts a query string matched against job titles and descriptions, and returns an array of JobSummary objects. Each summary includes id, job_id, title, locations, standardized_locations, department, posted_timestamp, and created_times. Results paginate via the page (1-based) and limit parameters, and the response always includes total_count and returned_count so you can track pagination state. sort_by accepts timestamp to get the most recently posted roles first, or relevance to rank by query match.
Filtering Options
Beyond keyword search, search_jobs supports several independent filter parameters. location takes a plain-text string such as 'Redmond, WA, United States' or 'Remote'. seniority accepts values like 'Senior', 'Mid-Level', 'Entry', 'Manager', 'Director', or 'Intern'. work_site maps to Microsoft's in-office policy labels — for example '3 days / week in-office' or '0 days / week in-office – remote'. profession accepts category strings like 'software engineering' or 'product management'. All filters are optional and can be combined freely.
Job Detail Retrieval
The get_job_details endpoint takes a position_id (the numeric id field from search_jobs results) and returns the full posting. Response fields include the public url, title, is_hot indicator, locations, role_type, work_site, department, discipline, and both a cleaned text version and raw HTML version of the job description. This gives downstream consumers flexibility to render or index the content as needed.
Coverage and Scope
The API covers active listings on Microsoft's public careers portal at apply.careers.microsoft.com. Listings include roles across Microsoft's global offices and remote positions. The data reflects publicly visible postings and includes structured metadata like posted_timestamp and department, which is useful for tracking hiring trends or building role-monitoring tools.
The Microsoft API is a managed, monitored endpoint for apply.careers.microsoft.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when apply.careers.microsoft.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 apply.careers.microsoft.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?+
- Monitor new Microsoft engineering roles by polling
search_jobssorted bytimestampand filtering byprofession: 'software engineering' - Build a remote-job aggregator that filters Microsoft listings using
work_site: '0 days / week in-office – remote' - Track entry-level and intern openings by setting
seniorityto'Entry'or'Intern'and paginating through results - Index full job descriptions from
get_job_detailsfor semantic search or LLM-powered job matching - Analyze Microsoft's department-level hiring activity using the
departmentandposted_timestampfields fromsearch_jobs - Alert users to new openings in a specific city by setting the
locationfilter to a target metro area - Surface
is_hotflagged positions for priority display in a job board or recruiting dashboard
| 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 Microsoft have an official developer API for its careers portal?+
What does `get_job_details` return beyond what `search_jobs` provides?+
get_job_details returns the full job description in both cleaned text and raw HTML, along with qualifications, role_type, discipline, work_site policy detail, and travel requirements. search_jobs summaries only include id, title, locations, department, and timestamp fields — no description content or qualifications.How does pagination work in `search_jobs`?+
page parameter alongside limit (recommended max ~100 per page). The response includes total_count (total matching jobs) and returned_count (jobs in the current response), so you can compute the total number of pages and iterate through them systematically.Does the API expose application submission or candidate profile data?+
search_jobs and fetching posting details via get_job_details. Application submission, candidate profiles, and recruiter-side data are not exposed. You can fork this API on Parse and revise it to add endpoints targeting application-related functionality if it becomes accessible.