# SAP SuccessFactors Jobs API

> Every public SuccessFactors posting, one endpoint - no OData URL hunting, no per-data-center URL juggling.

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

## Coverage

- **Sources covered:** Public SuccessFactors career sites
- **Freshness:** 24h refresh
- **History retention:** 12 months retention

## Why SAP SuccessFactors jobs data is confusing

SuccessFactors exposes its data over OData v2 - not REST in the modern JSON sense. Endpoint URLs vary by SAP data center (api4.successfactors.com, api5.successfactors.eu, salesdemo, performancemanager.successfactors.eu, and ~15 more), and you need to know which center each tenant is in before you can even compose a request. Cross-tenant aggregators inherit that data-center matrix.

Authentication is mid-migration from HTTP Basic Auth to OAuth2 + SAML assertion - Basic Auth is being phased out in 2024-2025 and existing integrations have to migrate or break. For job postings specifically, SuccessFactors Recruiting publishes openings to a public career site that renders client-side from an OData call; there is no documented public 'Jobs API' you can hit directly without the per-tenant OAuth dance. JobsPipe normalizes all of this into the same JSON shape as every other source.

## Workarounds

### Call the OData API with each tenant's OAuth credentials

Requires every customer to mint you a client and configure SAML. The data-center URL per tenant is non-trivial to track. Auth model is mid-migration.

### Scrape the public career site per tenant

Possible. The career site renders postings from an OData call; you can intercept that call but the URL pattern varies by data center and tenant configuration.

### Use JobsPipe

Every public SuccessFactors career site across every data center, one endpoint. Normalized JSON.

## 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": "sf_NjU0MzIxMDg3",
  "source": "successfactors",
  "tenant": "siemens",
  "title": "Lead Process Engineer, Wind Power",
  "company": "Siemens Energy",
  "location": {
    "city": "Hamburg",
    "region": "HH",
    "country": "DE",
    "remote": false
  },
  "salary": {
    "min": 78000,
    "max": 102000,
    "currency": "EUR",
    "period": "year",
    "source": "explicit"
  },
  "employment_type": "full_time",
  "posted_at": "2026-05-07T08:54:00Z",
  "expires_at": null,
  "apply_url": "https://jobs.siemens-energy.com/jobs/...",
  "description": "Siemens Energy is seeking a Lead Process Engineer to drive operational excellence across our wind-power manufacturing sites ..."
}
```

## FAQ

### Does JobsPipe need OData credentials from each SuccessFactors tenant?

No. JobsPipe reads only public career-site postings, equivalent to what an unauthenticated visitor sees. We do not call the authenticated OData API and never have access to applicant data, internal requisitions, or any non-public SuccessFactors object.

### How does JobsPipe handle SuccessFactors data center URLs?

Internally. We maintain the data-center mapping per tenant and route requests automatically. You POST /v1/jobs/search with "source_or": ["successfactors"] and never deal with api4/api5/salesdemo URL juggling.

### What about SuccessFactors customers using HTTP Basic Auth that's being deprecated?

Irrelevant to JobsPipe consumers. We don't authenticate against the OData API at all - only public career-site data flows through us. The Basic Auth → OAuth2 migration is your concern only if you're integrating with one specific SuccessFactors tenant.

### Can I filter to one SuccessFactors company?

Yes. "company_name_partial_match_or": ["siemens-energy"] in the JSON body of POST /v1/jobs/search filters to one tenant's SuccessFactors postings.

## SuccessFactors OData API

SuccessFactors exposes data over OData v2 at <data-center-host>/odata/v2/. Resources include PerPerson, EmpJob, JobRequisition, JobApplication, and 200+ others. The API is comprehensive but per-tenant authenticated, OData-shaped (not modern REST JSON), and gated by Role-Based Permissions (RBP) inside each tenant. JobsPipe consumes only public-career-site data and abstracts the OData surface entirely.

## SuccessFactors API data center URLs

SAP runs SuccessFactors out of multiple geographic data centers, each with its own API hostname: api4.successfactors.com (US), api5.successfactors.eu (EU), api2.successfactors.eu (EU legacy), apisalesdemo2.successfactors.com (sales demos), and roughly 15 others. Each tenant lives in exactly one data center and its API URL is fixed by where it was provisioned. Cross-tenant integrations have to maintain a tenant-to-data-center mapping. JobsPipe maintains that mapping internally so you never see it.

## SuccessFactors API authentication

SuccessFactors authentication is moving from HTTP Basic Auth to OAuth2 with SAML assertion. Basic Auth is being deprecated through 2024-2025 and new tenants cannot use it. OAuth2 in SuccessFactors requires generating an X.509 certificate, registering it as an OAuth2 client in the tenant's admin, and signing a SAML assertion to mint each access token. None of this applies if you're consuming JobsPipe - we only read the public career site, which is unauthenticated.

## Related

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

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