Skip to main content

A clean Python client for Apple's career job listings. No API key, no headless browser, no scraping service.

Project description

apple-jobs

A lightweight Python client for Apple job listings on jobs.apple.com. No API key, no browser automation.

Install

# From GitHub (recommended for now)
pip install git+https://github.com/Mikedan37/apple-jobs.git

# Or clone and install locally
git clone https://github.com/Mikedan37/apple-jobs.git
cd apple-jobs
pip install -e .

Requires Python 3.10+ and httpx.

Quick example

from apple_jobs import AppleJobsClient

client = AppleJobsClient()

for job in client.search(query="iOS engineer", limit=5):
    print(f"{job.title}{job.team.name}")
    print(f"  {job.location} · {job.posting_date}")
    print(f"  {job.url}")
    print()

client.close()

CLI

~6,000+ live positions across Apple teams and locations.

apple-jobs count                          # total open positions
apple-jobs search "Swift"                 # search by keyword
apple-jobs search --team "Software"       # filter by team
apple-jobs search "iOS" --location "US"   # combine filters
apple-jobs page 5                         # fetch a specific page
apple-jobs dump > jobs.jsonl              # all jobs as JSON lines

Or via module: python -m apple_jobs count

Why this exists

Apple does not provide a public jobs API.

This package gives you a clean, stable interface over the public job listings so you can:

  • search roles programmatically
  • build job matching pipelines
  • automate job discovery workflows

One dependency (httpx). No Selenium. No API key.

What this does

  • Fetches Apple job listings from jobs.apple.com
  • Parses structured job data from server-rendered HTML (no headless browser)
  • Returns typed Python models (AppleJob, AppleJobsPage)
  • Handles pagination, retries, and rate limiting
  • Provides a small CLI for quick lookups and bulk export

What this does NOT do

  • Does not apply to jobs on your behalf
  • Does not bypass authentication or access controls
  • Does not scrape aggressively or circumvent rate limits
  • Does not cover job boards other than Apple
  • Does not enrich, score, or rank jobs

Responsible use

This library parses data already served to standard browser requests. Built-in safeguards:

  • 0.5s default delay between page requests. Do not set it to zero.
  • 3 retries max on transient failures. No infinite loops.
  • Honest User-Agent with a project URL. Do not spoof it.

If Apple changes their site structure or blocks automated access, this library will stop working. That is their right. File an issue and we will adapt.

API reference

AppleJobsClient

client = AppleJobsClient(delay=0.5, retries=3, timeout=30.0)
Method Returns Description
search(query=, location=, team=, limit=) list[AppleJob] Search with client-side filtering
search_page(page=1) AppleJobsPage Fetch a single page (20 jobs)
iter_jobs(max_pages=300) Iterator[AppleJob] Auto-paginate all jobs
get_total_count() int Total open positions
close() Close HTTP client

Supports context manager: with AppleJobsClient() as client: ...

AppleJob

Field Type Description
position_id str Apple's unique position ID
title str Job title
summary str 2-3 paragraph description
url str Direct link to posting
posted_at datetime? UTC timestamp
posting_date str Human-readable date
team AppleJobTeam Department (name, code)
locations list[AppleJobLocation] One or more locations
home_office bool Remote-eligible
weekly_hours int 40 = full-time

Properties: location (primary as string), is_remote, is_part_time

AppleJobsPage

Field Type Description
jobs list[AppleJob] Up to 20 jobs
total_records int Total matching jobs
page int Current page (1-indexed)

Properties: total_pages, has_next

Development

git clone https://github.com/Mikedan37/apple-jobs.git
cd apple-jobs
pip install -e ".[dev]"
pytest tests/ -v              # 32 tests, ~0.5s, fully offline

Tests parse saved HTML fixtures. No network calls. If Apple changes their site and tests break, re-capture:

curl -s "https://jobs.apple.com/en-us/search?page=1" \
  -H "user-agent: apple-jobs-python-client/0.1" \
  -o tests/fixtures/search_page_1.html

Limitations

  • Client-side filtering. Apple's search page does not support server-side text queries via URL params. search() fetches pages and filters locally.
  • Summaries only. The summary field is from the search listing (2-3 paragraphs). Full detail pages exist at each url but are not fetched.
  • HTML parsing is inherently fragile. If Apple redesigns their career site, the parser will break. File an issue.

Maintained by

Maintained by Danylchuk Studios, LLC (Seeker project).

This project is not affiliated with or endorsed by Apple Inc. Intended for personal use, research, and tooling. Not for high-volume scraping or commercial redistribution of Apple job listings.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apple_jobs-0.1.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

apple_jobs-0.1.1-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file apple_jobs-0.1.1.tar.gz.

File metadata

  • Download URL: apple_jobs-0.1.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.6

File hashes

Hashes for apple_jobs-0.1.1.tar.gz
Algorithm Hash digest
SHA256 dafcea1637d0e9e8c3472a1efc15dfd42fded023f673db56468e72b8f69a8106
MD5 185c5418447cf430c5466d654c05b9df
BLAKE2b-256 f1e805c0992c4749386efbc604ec720c4264f15c7cfff54c085ecae7adeaafb8

See more details on using hashes here.

File details

Details for the file apple_jobs-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: apple_jobs-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.6

File hashes

Hashes for apple_jobs-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e05939dc79754e48ac30fe323c0f20ccee2ebd623f43badd36f2219222a6ecd9
MD5 848c714df9b052fa0652398174e4773f
BLAKE2b-256 3dbadbcd849a8f1d03739ce410e6acfa3e2c2d0be153bcd820d125220c420b66

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page