# Oracle Recruiting Jobs Scraper: Oracle Cloud Careers Sites (`glitchbound/oracle-jobs-scraper`) Actor

Every open role from any Oracle Recruiting Cloud careers site, the one Marriott, Oracle and onsemi post on. Type a company name from the verified map, or paste the careers URL. Titles, locations, categories, dates and descriptions as clean JSON. No API key, no login.

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

## Pricing

from $0.20 / 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.
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

## Oracle Recruiting Jobs Scraper: Oracle Cloud Careers Sites

**Every open role from any Oracle Recruiting Cloud careers site, the system Marriott, Oracle and onsemi hire on. Type a company name for one of the 762 employers this Actor has already verified, or paste the careers URL. Titles, locations, categories, dates and descriptions as clean JSON, with no API key and no login.**

### Features

- **Type a company name, for 762 employers.** The Actor ships a map of 1,439 Oracle careers sites it has already read open jobs from (over 270,000 jobs when it was built), so `Marriott` works without you hunting for an `ejwl.fa.us2.oraclecloud.com` address. A company that runs several sites (campus, lateral, regional) gets all of them.
- **Any Oracle careers URL.** Paste the page your browser shows: the site page, a `/requisitions` page or a single job page all work, in any language.
- **The right site, checked.** Oracle quietly answers an unknown site with the employer's default one, so a mistyped address would hand you another site's jobs with no error. This Actor checks the site against the employer's own site list first, and a wrong one comes back as an error row naming the sites that do exist.
- **Every posting, not the first page.** 200 jobs per request, paged to the end: Marriott alone lists over 13,000.
- **Remote, hybrid or on-site as the employer filed it**, on every row, so `remoteOnly` returns what the employer calls remote. Hilton, for one, files 21 of its 4,596 roles as remote and 51 as hybrid.
- **Full details when you want them.** `includeDescription` adds the full description, the exact posting time, the closing date, full or part time, the workplace type and every other work location.
- **One row per job, as clean JSON**, with the same fields as our [Workday](https://apify.com/glitchbound/workday-jobs-scraper) and [Greenhouse](https://apify.com/glitchbound/greenhouse-jobs-scraper) scrapers, so the outputs stack.
- **Filters that cost you nothing.** Rows dropped by `titleKeywords`, `locationKeywords` or `remoteOnly` are never charged.
- **Errors are per company.** One bad address does not end the run, and error rows are not charged.

### How to use it

1. Click **Try for free**.
2. Put company names in `companies`, or careers URLs in `boards`. The example below is real.
3. Optionally narrow it with `titleKeywords`, `locationKeywords` or `remoteOnly`.
4. Run it, and download the rows as JSON, CSV or Excel, or read them through the API.

### Input

```json
{
  "companies": ["Marriott"],
  "boards": ["https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch"],
  "titleKeywords": ["engineer", "sales"],
  "locationKeywords": ["United States"],
  "includeDescription": true,
  "maxResultsPerCompany": 300
}
```

| Field | What it does | Default |
|---|---|---|
| `companies` | company names from the verified map, e.g. `Marriott`, `Oracle`, `onsemi` | none |
| `boards` | Oracle careers URLs, as the browser shows them | none |
| `titleKeywords` | keep roles whose title contains any of these | all |
| `locationKeywords` | keep roles whose location or other work locations contain any of these | all |
| `remoteOnly` | keep roles the employer marks remote, or whose title or place says remote | off |
| `includeDescription` | read each job's own record for the full details | off |
| `maxResultsPerCompany` | ceiling per careers site | 1,000 |
| `maxItems` | ceiling for the whole run | none |

### Output

```json
{
  "jobId": "26073341",
  "title": "Director of F&B",
  "company": "Marriott",
  "location": "Petaling Jaya, Selangor, Malaysia",
  "offices": ["Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur, Malaysia"],
  "city": "Petaling Jaya",
  "region": "Selangor",
  "country": "Malaysia",
  "departments": ["Food and Beverage & Culinary"],
  "employmentType": "full-time",
  "seniority": "director",
  "workArrangement": "onsite",
  "isRemote": false,
  "postedAt": "2026-09-17T03:20:46Z",
  "url": "https://ejwl.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX/job/26073341",
  "description": "Position Summary ...",
  "atsPlatform": "oracle",
  "boardToken": "https://ejwl.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX",
  "boardTokenResolved": "CX"
}
```

| Field | What it is |
|---|---|
| `jobId`, `title`, `url` | the requisition, and a link that opens that job |
| `company` | the employer, from the careers site's own name; the tenant label when the site names nobody |
| `location`, `offices` | the primary place, and every other place the job is open in |
| `city`, `region`, `country` | the primary place, split |
| `departments` | the job category the employer assigned |
| `workArrangement`, `isRemote` | the employer's own label (on-site, hybrid, remote), read from Oracle for every job |
| `employmentType` | full or part time, from the job's record with `includeDescription`, otherwise read from the title |
| `seniority` | read from the title |
| `postedAt` | when the job was posted; the exact time with `includeDescription` |
| `applicationDeadlineText` | the closing date, when the employer sets one (with `includeDescription`) |
| `description` | the full text with `includeDescription`, Oracle's short summary without it |

### A company name, or the exact URL

An Oracle careers address is a tenant host and a site code, `ejwl.fa.us2.oraclecloud.com` and `CX` for Marriott, and neither can be worked out from `marriott.com`. So a name only works when this Actor already holds the address, which it does for 762 employers, found in Common Crawl's public URL index and each confirmed against Oracle's live API with at least one open job. A name outside that map is refused with an error row, never guessed. For those, open the company's careers page, click through to the job search, and paste that address into `boards`.

### What people use this for

- **Job boards and aggregators** backfilling enterprise roles that never reach LinkedIn in full.
- **Recruiters and staffing firms** watching which large employers are hiring, where, and for what.
- **Sales teams** using open roles as a buying signal: a hotel group hiring 40 revenue managers is a lead.
- **Market and labour research** across hospitality, healthcare, manufacturing and banking, the sectors that run on Oracle HCM.

### Pricing

**$0.50 per 1,000 jobs, down to $0.20 per 1,000 on higher Apify plans.** No subscription. Error rows and filtered rows are free, and `maxItems` caps the whole run.

### Integrations and API

Run it from the Apify API, a schedule, Make, Zapier, n8n or any MCP client. Every run's rows are in its default dataset.

### FAQ

**Do I need an Oracle account or an API key?** No. This reads the same public API every Oracle careers page calls.

**Does it cover Taleo?** No. Taleo is Oracle's older recruiting product with a different system; this Actor reads Oracle Recruiting Cloud (Fusion HCM Candidate Experience), which is what employers moved to.

**Why does a company show a short code instead of its name?** Some employers name their careers site "Candidate Experience site", which says nothing, so the Actor shows the tenant label instead of guessing a name.

**Can I schedule it?** Yes, and every row carries `postedAt`, so daily runs show who started hiring and when.

### Related

- [Oracle Jobs API](https://apify.com/glitchbound/oracle-jobs-api): search about 269,000 Oracle roles at once, no company list needed, with a companies mode that shows who is hiring fastest
- [Workday Jobs Scraper](https://apify.com/glitchbound/workday-jobs-scraper): the other enterprise careers system
- [ATS Jobs Search](https://apify.com/glitchbound/ats-jobs-search): search one index of jobs across many careers systems
- [ATS Finder](https://apify.com/glitchbound/ats-finder): which careers system a company uses

### Use it from an AI agent

This Actor is a ready-made tool for Claude, ChatGPT, Cursor or any other MCP
client, through Apify's MCP server. Add it as a connector at:

```
https://mcp.apify.com?tools=glitchbound/oracle-jobs-scraper
```

In Cursor or VS Code the same address goes in `mcp.json`:

```json
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=glitchbound/oracle-jobs-scraper" } } }
```

The first call asks you to sign in to Apify, or takes an API token. From then
on the agent sees this Actor's input fields and calls it directly.

### Feedback

If this saved you time, a review on the Actor's Store page helps other people
find it. If something is missing or wrong, the Issues tab on the same page is
the fastest way to reach me, and it gets read.

# Actor input Schema

## `companies` (type: `array`):

Company names, one per line, e.g. 'Marriott' or 'Oracle'. This Actor ships a map of Oracle Recruiting career sites it has already read open jobs from, so a name in that map resolves without you finding the careers URL, and a company with several sites (campus, lateral, regional) gets all of them. A name that is NOT in the map is refused rather than guessed at: an Oracle careers address carries a tenant host and a site code, neither of which can be derived from a domain. Use `boards` with the careers URL for those.

## `boards` (type: `array`):

Oracle Recruiting careers page addresses, one per line, exactly as the browser shows them, e.g. https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch. A job page or a /requisitions page works too. The site is checked against the employer's own site list first, because Oracle quietly answers an unknown site with a different one.

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

Keep only roles whose title contains any of these, one per line, e.g. security or staff engineer. Matched as plain text, case-insensitive, so c++ and node.js mean exactly that. Filtered rows are not charged.

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

Keep only roles whose location contains any of these, one per line, e.g. London or Israel. Filtered rows are not charged.

## `remoteOnly` (type: `boolean`):

Keep only roles the employer marks remote, or whose title or location says remote or anywhere.

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

Reads each job's own record for the full description, the exact posting time, the closing date, the schedule (full or part time), the workplace type and every other work location. One extra request per job, so it is off by default; without it each row still carries Oracle's short summary.

## `maxResultsPerCompany` (type: `integer`):

Ceiling on roles taken from any single career site. Marriott alone lists over 13,000.

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

A hard ceiling on rows for the entire run, across every company. The per-company limit above caps each one separately, so fifty companies at a thousand each is still fifty thousand rows; this caps the total. The run stops cleanly when it is reached and nothing beyond that point is fetched or charged. Leave empty for no ceiling.

## `proxyConfiguration` (type: `object`):

Proxy settings. Oracle's careers API is public and answers datacenter addresses, so the default is fine.

## Actor input object example

```json
{
  "boards": [
    "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch"
  ],
  "remoteOnly": false,
  "includeDescription": false,
  "maxResultsPerCompany": 300,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All rows this run produced, as JSON.

# 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 = {
    "boards": [
        "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch"
    ],
    "maxResultsPerCompany": 300
};

// Run the Actor and wait for it to finish
const run = await client.actor("glitchbound/oracle-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 = {
    "boards": ["https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch"],
    "maxResultsPerCompany": 300,
}

# Run the Actor and wait for it to finish
run = client.actor("glitchbound/oracle-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 '{
  "boards": [
    "https://eeho.fa.us2.oraclecloud.com/hcmUI/CandidateExperience/en/sites/jobsearch"
  ],
  "maxResultsPerCompany": 300
}' |
apify call glitchbound/oracle-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,glitchbound/oracle-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/iNmYoAnlNT3ml6dwg/builds/z4CD6gkatRFZHBJEe/openapi.json
