# Oracle Recruiting Jobs Scraper - Any ORC Career Site (`fulox/oracle-recruiting-jobs-scraper`) Actor

Oracle Recruiting Cloud careers sites to clean job rows: pay range in fields (min, max, currency, period), real ISO posting date filter, filters free before the charge. Takes oraclecloud.com or vanity addresses like careers.oracle.com. From $0.45 per 1,000 jobs.

- **URL**: https://apify.com/fulox/oracle-recruiting-jobs-scraper.md
- **Developed by:** [Fulox](https://apify.com/fulox) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Oracle Recruiting Jobs Scraper - Any ORC Career Site

Paste the careers URL of any company on Oracle Recruiting Cloud (oraclecloud.com) and get one clean row per open job: title, locations, real posting date, requisition ID, job family, employment type, description text and the pay range, ready for recruiting, staffing and sales prospecting.

### What you get

- Pay range parsed into fields: `payMin`, `payMax`, `payCurrency` and `payPeriod`, straight from the posting text.
- Filter by posting age on the real ISO posting date (`postedWithinDays`); the newest-first list stops paging at the cutoff.
- Keyword, location and date filters run on the list before the detail call and before the charge, so filtered-out jobs cost nothing.
- The same columns as the Workday Jobs Scraper, so one table can hold both ATS sources.
- Accepts a company's vanity careers address (careers.oracle.com) as well as the fa.\*.oraclecloud.com one.
- Email addresses are removed from description text, so the output holds company data only.

### Example output

```json
{
  "careersUrl": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001",
  "company": "jpmc",
  "title": "Digital Markets - Digital Product for Neovest - Analyst/Associate",
  "locations": ["Hong Kong"],
  "country": "HK",
  "postedDate": "2026-11-02",
  "jobId": "210802409",
  "employmentType": "Full time",
  "url": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/job/210802409",
  "descriptionText": "Drive global digital product delivery ...",
  "payMin": 120000,
  "payMax": 180000,
  "payCurrency": "USD",
  "payPeriod": "year",
  "siteNumber": "CX_1001",
  "requisitionId": "210802409",
  "jobFamily": "Digital",
  "jobFunction": "Product/Investment Mgmt",
  "workplaceType": null
}
```

`payPeriod` is `year`, `month` or `hour` when the posting says so, otherwise `null`. The pay fields are `null` when a posting states no range. `country` is the country code Oracle gives.

### How to use it

1. Paste one or more careers URLs (for example `https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001`). Job-page URLs and other language segments work too.
2. Optionally add title keywords, location keywords or a posting age, then click Start.
3. Download the jobs as JSON, CSV or Excel, or connect the Actor to Google Sheets, Make, Zapier or n8n. Run it weekly with a schedule to follow new postings.

### Input

| Field | What it does | Default |
|---|---|---|
| `startUrls` | Careers URLs, up to 100. Host ends in `.oraclecloud.com`, or a company address that redirects to one. | Oracle's own careers site |
| `titleKeywords` | Keep jobs whose title contains any of these words. | none |
| `locationKeywords` | Keep jobs in any of these places (city, state, country or country code). | none |
| `postedWithinDays` | Keep jobs posted in the last N days (1-365), on the real posting date. | no filter |
| `maxItemsPerSite` | Most jobs per careers URL, counted after the filters (1-3,000). | 500 |
| `includeDescription` | Return the description text. Pay ranges are parsed either way. | on |

### Pricing

$0.45 per 1,000 jobs ($0.00045 per job), the same on every plan. You pay only for job rows delivered. Jobs removed by your filters, jobs that closed while the run was going, careers URLs that fail and explanation rows are free. Set a maximum cost per run to stay in control. A run returns at most 3,000 jobs. Reading the job lists is capped at 300 list pages per run and 20% of the run timeout; if that cap is hit, a free `listing_stopped` row says so and the jobs found so far are still delivered.

### Limitations

- Oracle Recruiting Cloud careers sites only (`*.oraclecloud.com`). Other career systems give a free `site_failed` row.
- Input is a careers URL; there is no lookup by company name.
- Pay is read from the description text with fixed rules. It is filled only when the posting states a range next to a pay word such as salary, base or compensation.
- Description text is cut at 20,000 characters.
- Jobs are read one at a time, so very large sites take a few minutes per thousand jobs.
- If a site blocks the requests, the run stops after three blocked jobs in a row; earlier rows are kept.

### FAQ

**How fresh is the data?** Every run reads the live career site.

**Is personal data included?** No. Only job postings are returned and email addresses are removed from descriptions.

**Which formats can I download?** JSON, CSV, Excel, XML and HTML from the dataset, or the API.

**What if a site returns nothing?** The dataset gets a free row with `status` `site_failed` or `no_results` and the reason, and the run summary lists the counts.

### Changelog

- 2026-11-04: first version.

# Actor input Schema

## `startUrls` (type: `array`):

One or more Oracle Recruiting Cloud careers URLs, for example https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001 (up to 100). The host must end in .oraclecloud.com; a company address such as careers.oracle.com that redirects to one is also accepted.

## `titleKeywords` (type: `array`):

Keep only jobs whose title contains any of these words (not case sensitive). Filtered-out jobs are free.

## `locationKeywords` (type: `array`):

Keep only jobs located in any of these places, for example a city, state or country (not case sensitive). Filtered-out jobs are free.

## `postedWithinDays` (type: `integer`):

Keep only jobs posted in the last N days, checked on the real posting date. Leave empty for all jobs.

## `maxItemsPerSite` (type: `integer`):

Stop listing a careers site after this many jobs that pass the title, location and age filters. A run never returns more than 3,000 jobs in total (that many fit in the run's time limit). With filters, listing also stops after 300 list pages or 20% of the run timeout; a free listing_stopped row then says so and the jobs found are still delivered.

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

Turn off to leave out the full description text. Pay ranges are still parsed.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001"
    }
  ],
  "maxItemsPerSite": 25,
  "includeDescription": true
}
```

# Actor output Schema

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

One row per job posting, plus free rows that explain a failed site or an empty run.

## `summary` (type: `string`):

Counts for the run: jobs listed, delivered, charged, filtered out, stop reason.

# 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 = {
    "startUrls": [
        {
            "url": "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001"
        }
    ],
    "maxItemsPerSite": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("fulox/oracle-recruiting-jobs-scraper").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 = {
    "startUrls": [{ "url": "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001" }],
    "maxItemsPerSite": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("fulox/oracle-recruiting-jobs-scraper").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 '{
  "startUrls": [
    {
      "url": "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_45001"
    }
  ],
  "maxItemsPerSite": 25
}' |
apify call fulox/oracle-recruiting-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

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/2E5V9QNbgna1Hb6oZ/builds/vklyU6YJPyXilAcme/openapi.json
