Ford (ford.eightfold.ai), Lockheed Martin (lockheedmartin.eightfold.ai) and Northrop Grumman (jobs.northropgrumman.com) run their careers sites on Eightfold, and the site's own search is a public JSON endpoint:
curl -s "https://lockheedmartin.eightfold.ai/api/pcsx/search?domain=lockheedmartin.com&query=&location=United%20States&start=0" \
| jq -c '.data.count, [.data.positions[].efcustomTextCustpayrange[0]][0:3]'
That printed 6366 and three pay ranges, the first "$118,000.00 - $219,100.00". Ten jobs a page, whatever you ask for, as the Microsoft, Starbucks and Qualcomm write-up covers. Five more things to know, measured on 2026-10-28 with a few seconds between requests.
1. The domain is the tenant id, and the careers page states it
The search wants domain, and it is not always the company's web domain. The page says which one it is:
curl -s "https://jobs.northropgrumman.com/careers" | grep -o '_EF_GROUP_ID[^;]*'
That printed _EF_GROUP_ID = "ngc.com". The same search with domain=northropgrumman.com answered 404; with ngc.com, 200 and 3,800 jobs. Deere is the same story: careers.deere.com states johndeere.com.
2. Some tenants answer a different search
Eightfold runs two job searches and a tenant answers one of them. Netflix's site answers 403 on /api/pcsx/search and 200 on the older one:
curl -s "https://explore.jobs.netflix.net/api/apply/v2/jobs?domain=netflix.com&start=0&num=10" \
| jq '.count, .positions[0].canonicalPositionUrl'
That printed 398 and a job link. Of the 94 Eightfold sites we read, 21 answer only the older search, with snake_case fields (t_create for the date) where the newer one has camelCase. A 403 here is a redirection, not a refusal.
3. The list has a path; the employer's link is in the job's record
The newer search gives each job a positionUrl such as /careers/job/563568453894425, on the Eightfold host. The employer's own page is in the job's record, one more GET:
ID=$(curl -s "https://ford.eightfold.ai/api/pcsx/search?domain=ford.com&query=&location=United%20States&start=0" \
| jq '.data.positions[0].id')
curl -s "https://ford.eightfold.ai/api/pcsx/position_details?position_id=$ID&domain=ford.com&hl=en" \
| jq -r '.data.publicUrl'
That printed a https://jobs.ford.com/careers/job/... link. On all 67 newer-search sites whose record answered, that link was the employer's address plus the list's own path, so one record names the address for every job on the board. Taking it per job instead makes a job's link change between runs whenever one record request fails, which ours did until this week.
4. Pay sits in fields each tenant names itself
Lockheed Martin lists efcustomTextCustpayrange in the search itself, as in the first command: 27 of its 30 newest jobs carried a range. Starbucks keeps efcustomTextPayRangenonretail ("$58,800-$82,300 annually") in the record only, and of 68 sites read, Lockheed was the only one with pay in the list at all. A field's name is no promise: Lockheed's efcustomTextCustpreferredsalaryV2 said "Attractive compensation".
5. Most of the pay is in the description
Everyone else writes it into jobDescription. Across 15 large tenants, 75 of 90 US job records stated a band there: Northrop Grumman "Primary Level Salary Range: $161,000.00 - $253,600.00", Microsoft "The typical base pay range for this role across the U.S. is USD $142,800 - $274,800 per year", Ford by salary grade:
curl -s "https://ford.eightfold.ai/api/pcsx/position_details?position_id=$ID&domain=ford.com&hl=en" \
| jq -r '.data.jobDescription' | sed 's/<[^>]*>/ /g' | grep -o 'ranges from [^A-Za-z]*'
That printed "ranges from $99,600-$192,900". Microsoft's European postings state euros the same way ("€ 65,100.00 - € 129,500.00 per year" for the Netherlands). Every Eightfold site sits behind one shared front end, so pace these record requests: a burst across many sites is answered with 405 "Human Verification" or 429 for all of them at once.
Hosted
Company Career Page Jobs Scraper on Apify takes Ford, Lockheed Martin or Northrop Grumman by name, finds the tenant id and the search each site answers, and links every job on the employer's own address. Lockheed's rows carry salaryMin and salaryMax from its pay field on every run; with includeDescription, the other sites' rows get the band their record states. Every other system's public endpoint, with a tested curl, is in job-board-apis.
Top comments (0)