jobs.apple.com APIjobs.apple.com ↗
Search Apple job postings by keyword, location, and team. Retrieve full job details including description, pay range, and qualifications via 4 endpoints.
curl -X GET 'https://api.parse.bot/scraper/fe01b80a-ae55-44cf-beb0-5e8df44d30c8/search_jobs?page=1&sort=relevance&query=software+engineer&location=USA' \ -H 'X-API-Key: $PARSE_API_KEY'
Search Apple job listings with keyword query, location filter, pagination and sort order. Returns 20 results per page with job summaries including title, team, locations, and posting date.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). |
| sort | string | Sort order. Accepted values: 'relevance', 'newest', 'oldest'. |
| query | string | Search keyword (e.g. 'machine learning', 'software engineer'). Empty string returns all jobs. |
| locale | string | Locale code (e.g. 'en-us'). |
| location | string | Location filter ID(s), comma-separated. Use search_locations to find valid IDs. Can use full ID like 'postLocation-SFMETRO' or short code like 'SFMETRO'. |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with id, position_id, title, summary, posting_date, type, team, locations",
"per_page": "integer - results per page (20)",
"total_pages": "integer - total pages available",
"current_page": "integer - current page number",
"total_records": "integer - total matching jobs"
},
"sample": {
"data": {
"jobs": [
{
"id": "200624083-0836",
"team": {
"teamID": "teamsAndSubTeams-SFTWR",
"teamCode": "SFTWR",
"teamName": "Software and Services"
},
"type": "REQ",
"title": "Software Engineer, Watch Software",
"summary": "Do you want to help deliver the next amazing Apple product?...",
"locations": [
{
"city": "",
"name": "Cupertino",
"level": 5,
"metro": "",
"region": "",
"countryID": "iso-country-USA",
"countryName": "United States of America",
"stateProvince": "",
"postLocationId": "postLocation-CUP"
}
],
"home_office": false,
"position_id": "200624083",
"posting_date": "Oct 08, 2025",
"weekly_hours": 40,
"posting_date_gmt": "2025-10-08T17:21:28.586Z",
"is_multi_location": false,
"transformed_title": "software-engineer-watch-software"
}
],
"per_page": 20,
"total_pages": 289,
"current_page": 1,
"total_records": 5778
},
"status": "success"
}
}About the jobs.apple.com API
The Apple Jobs API provides 4 endpoints for searching and retrieving job listings from jobs.apple.com. The search_jobs endpoint returns paginated results with up to 20 jobs per page, including title, team, posting date, and locations. Companion endpoints cover full job detail retrieval, location ID lookup for filters, and job title autocomplete — giving you structured access to Apple's current open roles.
Searching Jobs
The search_jobs endpoint accepts a query string for keyword matching (e.g. 'machine learning', 'software engineer') and an optional location parameter that takes one or more location filter IDs — obtainable from search_locations. Results are paginated at 20 per page, and the response includes total_records, total_pages, and current_page to support full traversal. You can sort by relevance, newest, or oldest using the sort parameter. Passing an empty query string returns all open positions.
Job Details
get_job_details accepts a job_id (e.g. '200647916-3401') from search results and returns the complete record: the full description text, teams array with codes and names, locations with city, state/province, country, metro area, and region, plus home_office boolean and eeo_content HTML when present. Pay range data is also returned where Apple includes it in the listing.
Location Lookup and Autocomplete
search_locations resolves a plain-language query like 'San Francisco' or 'London' into structured location objects containing id, code, name, display_name, city, state_province, and level. The returned id values are what search_jobs expects in its location parameter. For job title input assistance, quickfind accepts a partial title string and returns an array of matching title suggestion strings drawn from current listings.
- Monitor new Apple job postings by team or keyword to track hiring signals in specific product areas
- Filter open roles by office location using IDs from
search_locationsto target specific metros like Austin or London - Build a job alert system that pages through
search_jobswithsort=newestand checks for net-newposting_datevalues - Extract full
descriptionand qualifications fromget_job_detailsto analyze required skills across engineering roles - Check the
home_officefield across listings to identify remote-eligible positions at Apple - Power an autocomplete field in a job aggregator using
quickfindsuggestions tied to Apple-specific title variants - Aggregate
teamsandlocationsdata across all listings to map Apple's headcount expansion by region
| 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 | 250 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 Apple provide an official public API for jobs.apple.com?+
What does `get_job_details` return that `search_jobs` does not?+
search_jobs returns job summaries: title, team, posting date, type, and location names. get_job_details adds the full job description text, structured teams objects with codes and IDs, granular locations data (city, state/province, metro, region), home_office boolean, eeo_content HTML, and pay range where Apple provides it.How do I filter jobs by location?+
search_locations with a plain-language query (e.g. 'Seattle') to get location objects that include an id field. Pass that ID into the location parameter of search_jobs. Multiple IDs can be passed as a comma-separated string.Does the API expose applied-to or saved job data for Apple ID accounts?+
Is there a way to retrieve all jobs without a keyword?+
query parameter to search_jobs. The response will include all currently listed positions, paginated at 20 per page. Use total_pages from the first response to determine how many pages to fetch.