# Oracle Recruiting Jobs API (`conserving_celerytop/oracle-recruiting-jobs-api`) Actor

Get open jobs from any Oracle Recruiting Cloud (Fusion HCM) career site by URL: title, location, job family, posted date, pay text and the full cleaned description. Filter by keyword and location. Contact names and emails are never returned. Independent tool, not affiliated with Oracle.

- **URL**: https://apify.com/conserving_celerytop/oracle-recruiting-jobs-api.md
- **Developed by:** [Don Mangu](https://apify.com/conserving_celerytop) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Use this Oracle Recruiting Cloud jobs API to get the open jobs of any Oracle Recruiting Cloud (Fusion HCM) career site for $2.00 per 1,000 jobs, with no login, no API key and no proxy.

Paste the address of a career site, such as https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs. Each result is one open job: title, location, job family, posted date, workplace type, pay text when the employer shows it, and the full job description as clean text and as HTML. Add a keyword or a location to narrow the list. The Actor reads the public job list that the career site loads in your browser, newest job first. Names and emails of recruiters and hiring managers are never returned. The Actor removes email addresses and phone numbers from the job text.

Independent tool, not affiliated with Oracle. An independent developer built this Actor. It is not endorsed by or operated by Oracle or by any employer.

### Sample output

One row per job. This is a real row from a run on 7 October 2026 on the career site of jpmc.fa.oraclecloud.com, the first of 25 rows. The description is shortened here to keep this page short:

```json
{
  "tenantHost": "jpmc.fa.oraclecloud.com",
  "siteNumber": "CX_1001",
  "jobId": "210707696",
  "title": "Equity Derivatives Trade Support - Analyst/Associate",
  "jobUrl": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/job/210707696",
  "postedDate": "2026-10-07",
  "postingEndDate": null,
  "primaryLocation": "Kwun Tong, Kowloon, Hong Kong",
  "country": "HK",
  "secondaryLocations": [],
  "latitude": 22.31537,
  "longitude": 114.2236,
  "workplaceType": null,
  "jobFamily": "Trading Services",
  "jobFunction": "Operations",
  "category": "Trading Services",
  "organization": null,
  "businessUnit": "Commercial & Investment Bank",
  "department": null,
  "legalEmployer": null,
  "workerType": null,
  "contractType": null,
  "jobSchedule": "Full time",
  "jobShift": null,
  "jobType": null,
  "managerLevel": null,
  "studyLevel": null,
  "numberOfOpenings": null,
  "salaryText": null,
  "hotJob": false,
  "trendingJob": false,
  "shortDescription": "Support equity derivatives trading and drive operational excellence in a collaborative, fast-paced middle office team.",
  "description": "Are you ready to make an impact in Equity Derivatives Operations? Join a team that puts users first and drives growth through technology and collaboration. You’ll work alongside talented colleagues, develop your expertise, and help deliver an unparalleled client experience. Experience career growth, skill development, and the op ...",
  "descriptionHtml": "<p>Are you ready to make an impact in Equity Derivatives Operations? Join a team that puts users first and drives growth through technology and collaboration. You’ll work alongside talented colleagues, develop your exper ...",
  "totalMatchingJobs": 7398,
  "retrievedAt": "2026-10-07T14:38:23.702Z",
  "source": "jpmc.fa.oraclecloud.com: Public career site API (Oracle Recruiting Cloud candidate experience)",
  "resultStatus": "ok",
  "message": null
}
```

The site held 7,398 open jobs when this row was read. `totalMatchingJobs` shows that number on every row.

### How to get Oracle Recruiting Cloud jobs with this Actor

1. Click **Try for free**. No API key is needed.
2. Open the career site of a company in your browser and click one job. Copy the address from the browser into **Career site URLs**. The address ends with a path like /hcmUI/CandidateExperience/en/sites/CX_1001/job/210668641. The Actor reads the host and the site code from it.
3. Add a **Keyword** or a **Location** if you want fewer jobs.
4. Set **Max items**. The default is 100. The first run is prefilled with 25.
5. Click **Start**, open the **Jobs** view, and export as JSON, CSV or Excel.

Typical uses:

- Build a database of the open jobs of one or many employers and refresh it every day.
- Watch a competitor for new roles in a job family or a country.
- Feed a job board, a salary study or an AI agent with clean rows instead of HTML pages.
- Check which employers show pay text and in which places.
- Count open jobs by family, country or posting date with the postedDate and jobFamily fields.

### What you get

| Field | Meaning |
|---|---|
| tenantHost, siteNumber, jobId | Which career site and which job. The job number is the last part of the job link |
| title, jobUrl | Job title and a link to the job page on the career site |
| postedDate, postingEndDate | Dates in YYYY-MM-DD. The end date is set only when the employer set one |
| primaryLocation, country, secondaryLocations | Main location as the site writes it, a two letter country code, and the other locations of the same job |
| latitude, longitude | Map position of the primary location. Only with Include description on |
| workplaceType, jobSchedule, jobShift, jobType, workerType, contractType | On site, hybrid or remote, and the schedule fields. Many employers leave some of them empty, and then the value is null |
| jobFamily, jobFunction, category | How the employer groups the job. Category needs Include description on |
| organization, businessUnit, department, legalEmployer, managerLevel, studyLevel, numberOfOpenings | Further fields when the employer sets them |
| salaryText | Pay text from the job details, as the employer wrote it. Only with Include description on, and only when the employer shows pay |
| hotJob, trendingJob | Flags that the site sets |
| shortDescription | The one or two sentences that the site shows in its job list |
| description, descriptionHtml | The full job text without HTML, and as HTML with styles, scripts and contact links removed. Emails and phone numbers are replaced by a note. Only with Include description on |
| totalMatchingJobs | Jobs on the site that match your keyword, before the location filter |
| retrievedAt, source | When the Actor read the job and where it comes from |
| resultStatus, message | ok for a job. A status row explains a site that gave no jobs |

The Actor adds no data from other sources. Every value comes from the career site. A field that the employer left empty is null.

### Pricing

Pay per event: **$2.00 per 1,000 jobs** on the Free plan, with lower prices on Bronze, Silver and Gold plans. The start of a run costs $0.00005. A row costs the same with and without the description. A career site that gives no jobs, a wrong address or a keyword with no match returns one status row and counts as one result, because the lookup was done. A run that cannot read the site is not charged.

Worked example: the prefill run read the 25 newest jobs of jpmc.fa.oraclecloud.com with their descriptions on 7 October 2026. It returned 25 rows and costs 25 x $0.002 = $0.05 on the Free plan. The same site with 7,398 open jobs costs about 7,398 x $0.002 = $14.80 for a full copy. With descriptions on, the speed of the 25 row run (about 0.4 seconds per row) gives about 49 minutes for that copy. This time is an estimate and was not measured on the full site. Use Max items to set a ceiling. The run also stops at the maximum charge that you set in the Apify Console.

### Speed

The Actor starts at most one request every 0.3 seconds, about 3 per second, and never runs more than 2 at the same time. With descriptions on, a run reads one page per job: the real run with 25 rows took 10 seconds. With Include description off, the list comes in pages of 100 jobs: a real run with 300 rows took 6 seconds. Use the second way when you only need the list fields.

### Input examples

The newest 25 jobs of one career site with descriptions (the prefill):

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "maxItems": 25
}
```

Data engineer jobs in London, with descriptions:

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "keyword": "data engineer",
  "location": "London",
  "maxItems": 10
}
```

The 300 newest jobs, list fields only, which is much faster:

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "maxItems": 300,
  "includeDescription": false
}
```

Two career sites in one run:

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs",
    "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "maxItems": 200
}
```

The Actor reads the sites one after the other. Max items counts the rows of all sites together.

### Output example with a keyword and a location

The keyword input above returned 10 rows on 7 October 2026. The site had 1,982 jobs for the keyword. The Actor read the list from the newest job and kept the rows with London in a location. This is the first row, shortened:

```json
{
  "tenantHost": "jpmc.fa.oraclecloud.com",
  "siteNumber": "CX_1001",
  "jobId": "210797656",
  "title": "Senior Manager of Software Engineering -FI Electronic Trading Real-Time Position & Risk TechLead",
  "jobUrl": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/job/210797656",
  "postedDate": "2026-10-07",
  "postingEndDate": null,
  "primaryLocation": "LONDON, United Kingdom",
  "country": "GB",
  "secondaryLocations": [],
  "latitude": 51.50642,
  "longitude": -0.12721,
  "workplaceType": null,
  "jobFamily": "Software Engineering",
  "jobFunction": "Technology",
  "category": "Software Engineering",
  "organization": null,
  "businessUnit": "Commercial & Investment Bank",
  "department": null,
  "legalEmployer": null,
  "workerType": null,
  "contractType": null,
  "jobSchedule": "Full time",
  "jobShift": "Day",
  "jobType": null,
  "managerLevel": null,
  "studyLevel": null,
  "numberOfOpenings": null,
  "salaryText": null,
  "hotJob": false,
  "trendingJob": false,
  "shortDescription": "Build and lead real-time position and risk technology that updates as trades happen, powering electronic trading decisions",
  "description": "Join a front-office engineering team that sits directly in the electronic trading execution path, where your work impacts decisions in real time. You will help shape a low-latency, event-driven platfo ...",
  "descriptionHtml": "<p><br> Join a front-office engineering team that sits directly in the electronic trading execution path, where your wor ...",
  "totalMatchingJobs": 1982,
  "retrievedAt": "2026-10-07T14:38:37.303Z",
  "source": "jpmc.fa.oraclecloud.com: Public career site API (Oracle Recruiting Cloud candidate experience)",
  "resultStatus": "ok",
  "message": null
}
```

### Output example with pay text

Some employers show pay in the job details. 5 of the 25 jobs in the prefill run had pay text. This is one of them, shortened:

```json
{
  "tenantHost": "jpmc.fa.oraclecloud.com",
  "siteNumber": "CX_1001",
  "jobId": "210755489",
  "title": "Luxury Travel Designer, Chase Travel",
  "jobUrl": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/job/210755489",
  "postedDate": "2026-10-07",
  "postingEndDate": "2026-11-13",
  "primaryLocation": "United States",
  "country": "US",
  "secondaryLocations": [
    "MD, United States",
    "NY, United States",
    "NJ, United States",
    "CT, United States",
    "RI, United States",
    "Washington, DC, United States",
    "IL, United States",
    "MN, United States",
    "CO, United States",
    "NV, United States",
    "WA, United States",
    "CA, United States",
    "HI, United States"
  ],
  "latitude": 39.82844,
  "longitude": -98.57939,
  "workplaceType": null,
  "jobFamily": "Travel Management",
  "jobFunction": "Client Management",
  "category": "Travel Management",
  "organization": null,
  "businessUnit": "Consumer & Community Banking",
  "department": null,
  "legalEmployer": null,
  "workerType": null,
  "contractType": null,
  "jobSchedule": "Full time",
  "jobShift": null,
  "jobType": null,
  "managerLevel": null,
  "studyLevel": null,
  "numberOfOpenings": null,
  "salaryText": "MD $60,800.00-$105,000.00; NY $62,353.20-$105,000.00; NJ $54,200.00-$105,000.00; CT $60,800.00-$105,000.00; RI $60,800.00-$92,000.00; Washington,DC $68,400.00-$ ...",
  "hotJob": false,
  "trendingJob": false,
  "shortDescription": "We are seeking a dynamic and experienced Travel Designer to join our elite team!",
  "description": "We are seeking a dynamic and experienced Travel Designer to join our elite team! The ideal candidate will have a passion for luxury travel and a keen understanding of the needs and expectations of ult ...",
  "descriptionHtml": "<p>We are seeking a dynamic and experienced Travel Designer to join our elite team! The ideal candidate will have a pass ...",
  "totalMatchingJobs": 7398,
  "retrievedAt": "2026-10-07T14:38:23.702Z",
  "source": "jpmc.fa.oraclecloud.com: Public career site API (Oracle Recruiting Cloud candidate experience)",
  "resultStatus": "ok",
  "message": null
}
```

### Output example without a match

A keyword that no job matches returns one status row. This is a real row from the keyword zzqqxxyy on 7 October 2026. It counts as one result:

```json
{
  "tenantHost": "jpmc.fa.oraclecloud.com",
  "siteNumber": "CX_1001",
  "jobId": null,
  "title": null,
  "jobUrl": null,
  "postedDate": null,
  "postingEndDate": null,
  "primaryLocation": null,
  "country": null,
  "secondaryLocations": null,
  "latitude": null,
  "longitude": null,
  "workplaceType": null,
  "jobFamily": null,
  "jobFunction": null,
  "category": null,
  "organization": null,
  "businessUnit": null,
  "department": null,
  "legalEmployer": null,
  "workerType": null,
  "contractType": null,
  "jobSchedule": null,
  "jobShift": null,
  "jobType": null,
  "managerLevel": null,
  "studyLevel": null,
  "numberOfOpenings": null,
  "salaryText": null,
  "hotJob": null,
  "trendingJob": null,
  "shortDescription": null,
  "description": null,
  "descriptionHtml": null,
  "totalMatchingJobs": 0,
  "retrievedAt": "2026-10-07T14:39:03.800Z",
  "source": "jpmc.fa.oraclecloud.com: Public career site API (Oracle Recruiting Cloud candidate experience)",
  "resultStatus": "no_jobs_found",
  "message": "Site CX_1001 on jpmc.fa.oraclecloud.com has no job that matches the keyword \"zzqqxxyy\"."
}
```

### Run it every day

Set **Only new since the last run** (`onlyNew`) to true and the Actor returns only jobs that it has not delivered before. Without it the Actor keeps no memory between runs: every run returns the newest jobs again, and you compare jobId with the rows of the day before yourself.

1. Fill in the input, set **Only new since the last run** to true, and give the monitor a **Monitor name**, for example `jpmc-london`. Click **Save as a new task**.
2. In Apify Console, open **Schedules**, click **Create new**, pick your task, and enter a cron expression for once a day, for example `0 6 * * *`.
3. The first run returns the jobs it finds, up to **Max items**, and these become the baseline. Each later run returns only jobs that were not delivered before.

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "location": "London",
  "onlyNew": true,
  "monitorName": "jpmc-london",
  "maxItems": 500
}
```

A job is identified by its career site and its job number (jobId). **Max items** counts delivered jobs only, so jobs that were delivered before do not use it up. Jobs that Max items cut off are not remembered and arrive on a later run, newest first. To take every open job as the baseline in one run, set **Max items** to at least the number that `totalMatchingJobs` shows. A job whose description cannot be read is skipped, not charged and not remembered, so the next run tries it again. A status row, such as a site that gives no jobs, is delivered once for each site and then remembered.

The memory lives in your own key-value store named `oracle-jobs-monitor-<monitorName>`. It holds only career site and job numbers, no job text. Use one monitor name per saved task. A task with another keyword or location keeps its own memory even if the name is the same. The list of career sites is not part of the memory key, so you can add a site to a saved task and only the jobs of the new site arrive as new. The Actor saves the memory after each batch of rows it delivers. Jobs that are skipped as already delivered are not charged and their descriptions are not read.

Cost example, from the prices above ($0.002 per job, $0.00005 per run start): if 40 new jobs appear on a day, that run costs 40 x $0.002 + $0.00005 = $0.08005, and 30 such days cost 30 x $0.08005 = $2.4015. A day with no new jobs costs only the $0.00005 start. The first run is charged for every job it returns: the 7,398 jobs of the site above cost 7,398 x $0.002 + $0.00005 = $14.79605. Every daily run reads the whole job list of the site to find the new jobs, 100 jobs per request, so a large site takes longer than the new jobs alone would suggest.

### Bulk lists

For many career sites, give the Actor a Dataset or a file instead of typing every address. Use **Dataset with the list** to pick an Apify Dataset and **Field in the dataset** to name the field that holds each address (empty means the first text field). Or paste a web address into **List file URL**: a .txt file, a .csv file (the first column is read) or a .json array, up to 10 MB. A header row is skipped and duplicate entries are removed. The entries are added to **Career site URLs** if you typed any.

The limit of 20 career sites per run applies to the merged list, and the price per job is the same as for typed addresses.

### FAQ

**Where does the data come from?** From the public job list of the career site itself. An Oracle Recruiting Cloud career site loads its jobs from a public address on its own host, without a login. The Actor calls the same addresses with a declared User-Agent. It uses no third-party site.

**Is it legal to use?** The job list is public and needs no login, no cookie and no key. The Actor reads /robots.txt of the host first. No file counts as no rules. A page that the host's web firewall returns instead of the file (jpmc.fa.oraclecloud.com answered HTTP 403 on 7 October 2026) also counts as no rules, because RFC 9309 says a crawler may go on when the file is unavailable. A Disallow rule for the job list stops the run and nothing is charged. We found no published terms of use for this job list address (checked on 7 October 2026). The terms of the employer's career site still apply to you. Check them and the law in your country before you reuse job text, especially for a public job board.

**Does it return personal data?** No contact data. The source can carry the name and email of a recruiter or hiring manager in some jobs. The Actor never reads those fields. It also replaces email addresses and phone numbers in the job text by a note. Free text written by the employer can still hold a name. The tests check the three contact fields and the removal of emails and phones.

**What User-Agent does the Actor send?** RecruitingJobsApiActor-bot/1.0 (Apify Actor; reads public career site job lists; no contact given). It names the tool and holds no email address.

**How do I find the address of a career site?** Open the careers page of the company. If its jobs open on a page of the form https://something.fa.something.oraclecloud.com/hcmUI/CandidateExperience/..., copy that address. If a careers page uses another address, open a job and look at the address of the job or apply page. The Actor accepts only hosts that end with oraclecloud.com. A host name alone, such as jpmc.fa.oraclecloud.com, works too and uses site CX_1001.

**What is the site number?** The part after /sites/ in the address, such as CX_1001. Some employers have several career sites on one host, for example one for campus jobs. Each site has its own code. Enter one address for each site. A wrong site code is not always an error: in a test on 7 October 2026 both jpmc.fa.oraclecloud.com and eeho.fa.us2.oraclecloud.com returned their normal job list for a site code that does not exist. Check that the jobUrl of a row opens the job you expect.

**Does it find career sites for me?** No. You give the addresses. The Actor has no company directory.

**Why do I get fewer rows than the site shows?** Max items, a keyword or a location can cut the list. The Actor also skips a job when its description cannot be read after 3 tries. Such a job is not charged.

**How does the location filter work?** The Actor filters locations itself. It reads the list from the newest job, 100 jobs per request, and keeps the jobs whose primary or other locations contain your text. For a rare place the Actor reads many pages before it has enough rows. It stops at 50,000 list rows per site.

**Why is the keyword used exactly as I type it?** The career site normally corrects spelling in its own search box. In a test it changed the word nurse to nyse. The Actor switches the correction off, so the keyword means what you typed.

**What does a status row mean?** site_not_found: the address gave no job list, or the host does not exist. site_not_public: the site asks for a login. no_jobs_found: the site has no open jobs, or none match your keyword or location. Each status row counts as one result.

**How fast does it read, and what if the site is slow?** At most about 3 requests per second, and 2 at the same time. On errors 429 and 5xx, and on network resets, the Actor tries up to 3 times, waits longer each time and follows a Retry-After header. On HTTP 403 it stops at once and does not try to get around the block. A site that cannot be read returns no rows and no charge.

**What are the limits?** Up to 20 career sites and 100,000 rows per run. Rows come newest first. The Actor shows only jobs that the public list shows. It does not show jobs that need a login or that the employer keeps internal.

**What if the run fails?** If the site does not answer, refuses the request or the answer has a new format, the run stops with a clear message and charges nothing for that site. If other sites worked, you keep their rows. Run it again later.

### Related Actors

For companies on other applicant tracking systems, the same author has [Greenhouse Jobs API](https://apify.com/conserving_celerytop/greenhouse-jobs-api), [Workday Jobs API](https://apify.com/conserving_celerytop/workday-jobs-api) and [ATS Jobs API](https://apify.com/conserving_celerytop/live-career-page-jobs-api), which reads the career pages of many other systems in one run.

If this saved you time, a rating helps others find it.

I built this Actor myself as an independent developer. Independent tool, not affiliated with Oracle. Data: the public career sites of the employers.

# Actor input Schema

## `careerSiteUrls` (type: `array`):

Enter one career site URL per line. The address has the form https://<company>.fa.<region>.oraclecloud.com/hcmUI/CandidateExperience/en/sites/<site>/jobs. Open the career site of a company, click a job and copy the address from the browser. A site that cannot be read returns one status row.

## `listDatasetId` (type: `string`):

Pick an Apify Dataset that holds your list, one entry per item. It is added to the entries typed above.

## `listDatasetField` (type: `string`):

Name of the dataset field that holds the entry. Leave empty to use the first text field it finds.

## `listFileUrl` (type: `string`):

Web address of a .txt, .csv or .json file with one entry per line. A header row is skipped. Up to 10 MB.

## `keyword` (type: `string`):

Return only jobs that match this word or phrase, such as data engineer. The career site search decides what matches. Leave empty for every job. The keyword is used as you type it, without a spelling correction.

## `location` (type: `string`):

Return only jobs in a place, such as London or Germany. The text must appear in the primary location or in another location of the job, as the site writes it (for example Plano, TX, United States). The Actor reads the list from the newest job until it has enough matches, so a rare place takes longer.

## `onlyNew` (type: `boolean`):

Return only items that this monitor has not delivered before. The first run returns everything and becomes the baseline. Use it with a daily schedule.

## `monitorName` (type: `string`):

Names the memory of this monitor. Use one name per saved task, so two tasks never share their memory.

## `maxItems` (type: `integer`):

Return at most this many rows in total, across all career sites, including status rows. Each row returned is one charged result.

## `includeDescription` (type: `boolean`):

Add the full job text, pay text, category, openings and map position to every row. This reads one more page per job, so a run takes longer. Switch it off to get the list fields only, which is much faster. The price per row is the same.

## Actor input object example

```json
{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "onlyNew": false,
  "monitorName": "default",
  "maxItems": 25,
  "includeDescription": true
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `stats` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "careerSiteUrls": [
        "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("conserving_celerytop/oracle-recruiting-jobs-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "careerSiteUrls": ["https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("conserving_celerytop/oracle-recruiting-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "careerSiteUrls": [
    "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs"
  ],
  "maxItems": 25
}' |
apify call conserving_celerytop/oracle-recruiting-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,conserving_celerytop/oracle-recruiting-jobs-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/onKUvq8mbPYRwjy84/builds/eElORgx3RQFq8iMNp/openapi.json
