SAP SuccessFactors Jobs, as Rows You Can Query
A career-site host, URL, or company name in, live SAP SuccessFactors jobs out as structured rows, read straight from the public feed each career site already publishes.
When to use this skill
- Someone wants SuccessFactors jobs and does not want to read career sites like jobs.sap.com by hand.
- You are filling a job board, a market-intel dashboard, or a sourcing tool with roles from SuccessFactors-hosted careers pages.
- You went looking for a SuccessFactors API and found only the employer-side OData APIs you cannot sign up for.
- You need the whole career site in one pull, not page after page of search results.
Not for: using the data live from inside Claude or another MCP client. Use the companion apify-successfactors-mcp skill, built on the same Actor. See references/actor-index.md.
What you get
One dataset row per job. resultType separates job rows from error rows.
Core fields:
requisitionId, url (canonical, safe as a dedupe key), applyUrl, title
companyName, employer, tenant, careerSiteUrl
jobFunction, location, countryCode, isRemote
validThrough (expiration date), and datePosted with the detail add-on
salaryDerived plus flat salaryMin, salaryMax, salaryCurrency, salaryPeriod (parsed from the posting text when present)
descriptionMarkdown (default add-on), descriptionHtml, descriptionText (opt-in add-ons)
source (always successfactors), sourceType, flavor, scrapedAt
With includeDetailFields on, each row also carries datePosted, department, facility, shiftType, travel, and any employer customFields, fetched from the job page.
The Actor ships dataset views for the console: overview, details, and tenants.
Prerequisites
The Actor
Run it with the Apify CLI
Pull the first 100 live jobs from a career site, descriptions as Markdown:
apify actors call "johnvc/sap-successfactors-jobs-api" \
-i '{"companies":["jobs.sap.com"],"maxJobs":100,"includeDescriptionMarkdown":true}' \
--json \
--user-agent apify-awesome-skills/apify-successfactors-jobs-api \
2>/dev/null
Read a run's dataset by id:
apify datasets get-items <DATASET_ID> --format json \
--user-agent apify-awesome-skills/apify-successfactors-jobs-api 2>/dev/null
Inspect the input schema:
apify actors info "johnvc/sap-successfactors-jobs-api" --input --json \
--user-agent apify-awesome-skills/apify-successfactors-jobs-api 2>/dev/null
Run it from Claude (MCP)
Add the hosted Apify MCP server and call the Actor as a tool:
https://mcp.apify.com/?tools=actors,docs,johnvc/sap-successfactors-jobs-api
Docs: https://docs.apify.com/platform/integrations/mcp
Workflow
- Identify the target career sites: a host such as
jobs.sap.com, a full career-site URL, a single job URL, or a company name to match against the bundled directory.
- Decide the output:
jobs for full records, urlsOnly for the cheapest index, or tenantsOnly to list career sites.
- Pick description formats (Markdown is on by default) and turn on
includeDetailFields if you need the posted date or department.
- Set filters (
titleKeywords, jobFunctions, locationKeywords, remoteOnly, activeOnly) so filtered rows never bill.
- Cap the run with
maxJobs (and maxJobsPerTenant, maxTenants).
- Call the Actor, then read the dataset. Dedupe on
url or requisitionId across runs.
Inputs
companies: career-site hosts, full URLs, single-job URLs, or company names.
startUrls: the same values as a URL list; merged with companies.
outputMode: jobs (default), urlsOnly, or tenantsOnly.
titleKeywords, jobFunctions, locationKeywords: keep-only filters, applied before billing.
activeOnly (default true), remoteOnly: further pre-billing filters.
includeDescriptionMarkdown (default true), includeDescriptionHtml, includeDescriptionText: per-format add-ons.
includeDetailFields: posted date, department, facility, shift type, travel, custom fields (one extra request per job).
report: write a Markdown or HTML run digest to the key-value store.
maxJobs, maxJobsPerTenant, maxTenants, maxConcurrency: cost and scope caps.
Cost guardrails
- Billing is per delivered row. Filters run before billing, so filtered jobs cost nothing.
- The base job record is one event; description formats, the detail fields, and the run report are separate add-ons billed only on rows that carry them.
- Start small:
maxJobs of 10 to 25 while you shape filters, then raise it.
- Read the live price before a big run (see
references/gotchas.md).
Honest limits
- Salary is a best-effort regex over the posting text; many SuccessFactors postings publish no pay, so salary fields are often null.
- The public feed carries no posted date;
datePosted comes only with the detail add-on.
- Coverage is the public career-site feed, so unlisted or gated postings are not returned.
Troubleshooting
- An
error row with tenant_not_found means the company could not be resolved to a live feed; pass the career-site URL directly and check the didYouMean suggestions.
job_not_found on a single-job URL means the posting closed or expired.
- Zero rows usually means filters are too tight or
activeOnly dropped expired postings; widen the filters.
Related Actors
See references/actor-index.md for the companion apify-successfactors-mcp skill and the other ATS job APIs on this account (Workday, Greenhouse, Ashby, iCIMS, Oracle Taleo).
1---2name: apify-successfactors-jobs-api3description: Pull live SAP SuccessFactors job postings from any public SuccessFactors career site with the Apify SAP SuccessFactors Jobs API Actor (johnvc/sap-successfactors-jobs-api). Returns job rows as JSON: title, company, employer, requisition ID, job function, location and country code, expiration date, remote flag, and the description as Markdown by default, with optional HTML or plain text. Turn on the detail add-on for the posted date, department, facility, shift type, and travel that only the job page carries. Takes a career-site host like jobs.sap.com, a full career-site URL, a single job URL, or a company name; filters by title, job function, location, remote, and active-only before billing. Use when someone wants successfactors jobs, a successfactors jobs api, a successfactors api without a key, to scrape SAP SuccessFactors career sites, or to feed a job board, aggregator, or sourcing tool with enterprise postings. Billed per job delivered with no start fee, and MCP-ready for Claude and other AI agents.4license: MIT5---67# SAP SuccessFactors Jobs, as Rows You Can Query89A career-site host, URL, or company name in, live SAP SuccessFactors jobs out as structured rows, read straight from the public feed each career site already publishes.1011## When to use this skill1213- Someone wants SuccessFactors jobs and does not want to read career sites like jobs.sap.com by hand.14- You are filling a job board, a market-intel dashboard, or a sourcing tool with roles from SuccessFactors-hosted careers pages.15- You went looking for a SuccessFactors API and found only the employer-side OData APIs you cannot sign up for.16- You need the whole career site in one pull, not page after page of search results.1718Not for: using the data live from inside Claude or another MCP client. Use the companion `apify-successfactors-mcp` skill, built on the same Actor. See `references/actor-index.md`.1920## What you get2122One dataset row per job. `resultType` separates `job` rows from `error` rows.2324Core fields:2526- `requisitionId`, `url` (canonical, safe as a dedupe key), `applyUrl`, `title`27- `companyName`, `employer`, `tenant`, `careerSiteUrl`28- `jobFunction`, `location`, `countryCode`, `isRemote`29- `validThrough` (expiration date), and `datePosted` with the detail add-on30- `salaryDerived` plus flat `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` (parsed from the posting text when present)31- `descriptionMarkdown` (default add-on), `descriptionHtml`, `descriptionText` (opt-in add-ons)32- `source` (always `successfactors`), `sourceType`, `flavor`, `scrapedAt`3334With `includeDetailFields` on, each row also carries `datePosted`, `department`, `facility`, `shiftType`, `travel`, and any employer `customFields`, fetched from the job page.3536The Actor ships dataset views for the console: `overview`, `details`, and `tenants`.3738## Prerequisites3940- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).41- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).4243## The Actor4445- Store page: https://apify.com/johnvc/sap-successfactors-jobs-api?fpr=9n7kx3&fp_sid=skillrepo46- Actor ID: `johnvc/sap-successfactors-jobs-api`47- Pricing: pay per event, no start fee. See the cost section below and `references/gotchas.md` for the live-price command.4849## Run it with the Apify CLI5051Pull the first 100 live jobs from a career site, descriptions as Markdown:5253```bash54apify actors call "johnvc/sap-successfactors-jobs-api" \55 -i '{"companies":["jobs.sap.com"],"maxJobs":100,"includeDescriptionMarkdown":true}' \56 --json \57 --user-agent apify-awesome-skills/apify-successfactors-jobs-api \58 2>/dev/null59```6061Read a run's dataset by id:6263```bash64apify datasets get-items <DATASET_ID> --format json \65 --user-agent apify-awesome-skills/apify-successfactors-jobs-api 2>/dev/null66```6768Inspect the input schema:6970```bash71apify actors info "johnvc/sap-successfactors-jobs-api" --input --json \72 --user-agent apify-awesome-skills/apify-successfactors-jobs-api 2>/dev/null73```7475## Run it from Claude (MCP)7677Add the hosted Apify MCP server and call the Actor as a tool:7879```80https://mcp.apify.com/?tools=actors,docs,johnvc/sap-successfactors-jobs-api81```8283Docs: https://docs.apify.com/platform/integrations/mcp8485## Workflow86871. Identify the target career sites: a host such as `jobs.sap.com`, a full career-site URL, a single job URL, or a company name to match against the bundled directory.882. Decide the output: `jobs` for full records, `urlsOnly` for the cheapest index, or `tenantsOnly` to list career sites.893. Pick description formats (Markdown is on by default) and turn on `includeDetailFields` if you need the posted date or department.904. Set filters (`titleKeywords`, `jobFunctions`, `locationKeywords`, `remoteOnly`, `activeOnly`) so filtered rows never bill.915. Cap the run with `maxJobs` (and `maxJobsPerTenant`, `maxTenants`).926. Call the Actor, then read the dataset. Dedupe on `url` or `requisitionId` across runs.9394## Inputs9596- `companies`: career-site hosts, full URLs, single-job URLs, or company names.97- `startUrls`: the same values as a URL list; merged with `companies`.98- `outputMode`: `jobs` (default), `urlsOnly`, or `tenantsOnly`.99- `titleKeywords`, `jobFunctions`, `locationKeywords`: keep-only filters, applied before billing.100- `activeOnly` (default true), `remoteOnly`: further pre-billing filters.101- `includeDescriptionMarkdown` (default true), `includeDescriptionHtml`, `includeDescriptionText`: per-format add-ons.102- `includeDetailFields`: posted date, department, facility, shift type, travel, custom fields (one extra request per job).103- `report`: write a Markdown or HTML run digest to the key-value store.104- `maxJobs`, `maxJobsPerTenant`, `maxTenants`, `maxConcurrency`: cost and scope caps.105106## Cost guardrails107108- Billing is per delivered row. Filters run before billing, so filtered jobs cost nothing.109- The base job record is one event; description formats, the detail fields, and the run report are separate add-ons billed only on rows that carry them.110- Start small: `maxJobs` of 10 to 25 while you shape filters, then raise it.111- Read the live price before a big run (see `references/gotchas.md`).112113## Honest limits114115- Salary is a best-effort regex over the posting text; many SuccessFactors postings publish no pay, so salary fields are often null.116- The public feed carries no posted date; `datePosted` comes only with the detail add-on.117- Coverage is the public career-site feed, so unlisted or gated postings are not returned.118119## Troubleshooting120121- An `error` row with `tenant_not_found` means the company could not be resolved to a live feed; pass the career-site URL directly and check the `didYouMean` suggestions.122- `job_not_found` on a single-job URL means the posting closed or expired.123- Zero rows usually means filters are too tight or `activeOnly` dropped expired postings; widen the filters.124125## Related Actors126127See `references/actor-index.md` for the companion `apify-successfactors-mcp` skill and the other ATS job APIs on this account (Workday, Greenhouse, Ashby, iCIMS, Oracle Taleo).