# UltiPro (UKG Pro) Jobs API

> Public UKG Pro (UltiPro) Recruiting career sites, one normalized endpoint.

**Canonical URL:** https://jobspipe.dev/sources/ultipro

## Coverage

- **Sources covered:** Public UKG Pro Recruiting tenants
- **Freshness:** 24h refresh
- **History retention:** 12 months retention

## Why UltiPro (UKG Pro) jobs data is confusing

UltiPro is the former name of UKG Pro, and its ATS module (UKG Pro Recruiting) still serves career sites on recruiting.ultipro.com tenant subdomains - which is why people keep searching for the 'UltiPro ATS'. UKG's APIs are per-customer HCM integrations, not a public postings feed.

Each UKG Pro customer's public career site lives at a recruiting.ultipro.com URL with tenant-specific structure. The postings are public, but there is no cross-tenant endpoint. JobsPipe indexes public UKG Pro Recruiting tenants and normalizes them into the same schema as our other sources.

## Workarounds

### Use UKG's customer APIs

Right for integrating with one employer's own UKG account, with credentials they grant. Not a path to postings across many employers.

### Scrape recruiting.ultipro.com tenants

Possible per tenant you already know, but tenant discovery, pagination, and bot handling are on you.

### Use JobsPipe

Public UKG Pro tenants, one endpoint, same JSON schema as 30+ other sources. Free tier included.

## Fields available on every record

- `id`
- `source`
- `tenant`
- `title`
- `company`
- `location`
- `salary`
- `employment_type`
- `remote`
- `posted_at`
- `expires_at`
- `apply_url`
- `description`

## Sample response

```json
{
  "id": "up_M2JlZjRhOTAtY2U0",
  "source": "ultipro",
  "tenant": "harborview-logistics",
  "title": "Operations Supervisor - Night Shift",
  "company": "Harborview Logistics",
  "location": {
    "city": "Memphis",
    "region": "TN",
    "country": "US",
    "remote": false
  },
  "salary": {
    "min": 62000,
    "max": 78000,
    "currency": "USD",
    "period": "year",
    "source": "explicit"
  },
  "employment_type": "full_time",
  "posted_at": "2026-08-18T11:12:00Z",
  "expires_at": null,
  "apply_url": "https://recruiting.ultipro.com/HAR1001HARBV/JobBoard/...",
  "description": "Harborview Logistics is hiring a night-shift Operations Supervisor for our Memphis hub ..."
}
```

## FAQ

### Is UltiPro the same as UKG Pro?

Yes. UltiPro was renamed UKG Pro after the Ultimate Software / Kronos merger; the recruiting module still serves career sites on recruiting.ultipro.com, which is why 'UltiPro ATS' remains the common search.

### Does UKG offer a public job-postings API?

No. UKG's APIs are per-customer HCM integrations. JobsPipe aggregates the public career-site postings across tenants instead.

### How fresh is UltiPro data?

Public UKG Pro Recruiting sites are re-crawled at least every 24 hours.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/ultipro.

---
Building this integration yourself? The steps above work. The alternative is one API over this source and 30+ others, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
  -H "Content-Type: application/json" \
  -d '{"job_title_or":["software engineer"],"limit":5}'
```

Sample data, exact live schema. For live data get a free key (1,000 jobs/month) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin