Product: Indeed AI Jobs (macOS)
Phase: 2 — Indeed retrieval feasibility
Status: Approved — Option C
Date: 2026-10-12
Approved: 2026-10-12 (product owner)
| Field | Value |
|---|---|
| Chosen production source | Licensed Indeed-index provider (or Indeed partner search channel) that returns Indeed-only listings with permitted desktop redistribution and link-back |
| Interim implementation | FixtureIndeedJobDataSource + mapper (no production network traffic) until vendor contract is live |
| Rejected for production | Client-side scraping / unauthorized automated HTML collection |
| Rejected as seeker search API | Indeed Job Sync API (employer/partner posting sync — not job-seeker search) |
| Go / no-go gate | Go on Option C. Live Indeed fetch still waits on a permitted vendor contract; OpenAI (Phase 3) proceeds against mocks/fixtures. |
The app must:
NSWorkspace)IndeedJobDataSource while the concrete source is swappedThere is no public Indeed job-seeker search API suitable for arbitrary third-party desktop search.
| Option | Permitted / ToS | Fit for in-app search | Decision |
|---|---|---|---|
| A. Official Job Sync API | Partner/employer posting API | Poor — not a seeker search API | Out |
| B. Client scraping / bots | Unauthorized automated collection typically prohibited | Technically possible; brittle (CAPTCHA, HTML churn, IP blocks); high legal/ops risk | Out for production |
| C. Licensed Indeed-index / partner feed | Permitted if contract allows desktop redistribution + Indeed-only index | Best fit if vendor confirms fields, geo TLDs, pagination, link-back | Recommended |
| D. Hybrid “open Indeed in browser” only | Low risk | Does not meet “show listings in app” | Out as sole strategy |
Proceed with Option C as the production path:
IndeedJobDataSource against that API once credentials and redistribution rights are confirmed.FixtureIndeedJobDataSource). Keep UI on mocks where appropriate.Explicit no-go without approval: any production adapter that scrapes Indeed HTML or mixes non-Indeed boards.
Before wiring live traffic:
indeedJobKey)Defined under Services/Indeed/:
IndeedJobDataSource — paginated search + error taxonomyIndeedListingMapper — DTO → JobListingIndeedURLCanonicalizer — regional hosts, jk= / path key extractionFixtureIndeedJobDataSource — sandbox JSON fixtures (no network)See also Indeed_Access_Spike.md.
Job listings shown in the app come from a permitted Indeed data channel. Opening a listing launches the corresponding page on Indeed. The app does not scrape Indeed’s website. Search queries may later be interpreted by OpenAI (Phase 3); listing content remains Indeed-sourced.
Update Privacy Policy before live fetch ships.
| Role | Name | Decision | Date |
|---|---|---|---|
| Product owner | Product owner | Approved Option C (licensed/partner Indeed-only path) | 2026-10-12 |
Live Indeed traffic still requires a signed vendor/partner contract (section 5). OpenAI Phase 3 may proceed against mocks/fixtures.