# OnlineJobs.ph Scraper: Philippines Remote Jobs with Pay Filters (`getascraper/onlinejobs-ph-scraper`) Actor

Scrape OnlineJobs.ph remote job postings for Filipino virtual assistants and freelancers by keyword, skill, job type, posting date and hourly rate. Pay comes as numbers with an hourly USD rate. Exclude keywords, new-posting monitor, full details, JSON/CSV/Excel. No login.

- **URL**: https://apify.com/getascraper/onlinejobs-ph-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.38 / 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

## OnlineJobs.ph Scraper: Philippines Remote Jobs with Pay Filters

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EAF5F7;border:1px solid #C2E0E6;border-top:4px solid #0B7285;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every OnlineJobs.ph posting, with the pay already turned into numbers</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Filter by skill, job type, how recent and hourly rate. Get clean, spreadsheet-ready postings from the Philippines remote hiring board, or only the ones you have not seen before.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C2E0E6;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#0B7285">💵 Pay as numbers</span><br>
<span style="font-size:12px;color:#57534E">Minimum, maximum, currency, period and hourly dollar rate, plus rate filters.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C2E0E6;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0B7285">🧩 Skills by name</span><br>
<span style="font-size:12px;color:#57534E">Type Video Editing or Bookkeeping and get exactly those roles.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C2E0E6;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0B7285">🔁 New postings only</span><br>
<span style="font-size:12px;color:#57534E">Name a search, schedule it, and skip what you already have.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C2E0E6;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#0B7285">📈 Go deep</span><br>
<span style="font-size:12px;color:#57534E">Collect far more than the roughly 300 postings a single search shows.</span>
</td>
</tr>
</table>

**Collect OnlineJobs.ph job postings by keyword, skill, job type and hourly rate, and download them as JSON, CSV or Excel in minutes.** Each posting comes with the title, job type, exact posting time, pay as posted and as numbers, skills and categories, and the employer name and logo when the employer makes them public. Switch on full details to add the complete description, hours per week and last updated date.

***

### 🔍 What can you do with it?

- **I run a business and hire Filipino virtual assistants.** I check what similar roles pay per hour and how fast they get posted, so my offer is competitive from day one.
- **I work at a staffing or recruiting agency.** I watch new postings in my niche every morning, so I can reach employers while the role is still open.
- **I am a Filipino freelancer or career coach.** I look for fresh gigs by skill, and see which skills pay the most per hour right now.
- **I research the Philippines remote work market.** I track demand by skill and category, pay levels and posting volume over time.

***

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0"><tr>
<td style="border:none;padding:12px 18px;background:#EAF5F7;border-left:4px solid #0B7285;color:#1C1917">
<span style="font-size:15px;color:#1C1917">&#9889; <b>No login, no account.</b> Only public postings. Ready for the Apify scheduler: set it once and receive only new postings on every run.</span>
</td>
</tr></table>

### 🚀 How to use it

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF5F7;border:1px solid #C2E0E6;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0B7285;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Describe the roles</span><br>
<span style="font-size:12px;color:#57534E">Enter keywords and skills, or paste a page copied from onlinejobs.ph.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF5F7;border:1px solid #C2E0E6;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0B7285;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Narrow it down</span><br>
<span style="font-size:12px;color:#57534E">Choose job type, how recent, and the hourly rate range you care about.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF5F7;border:1px solid #C2E0E6;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0B7285;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run and download</span><br>
<span style="font-size:12px;color:#57534E">Click Start, then export JSON, CSV or Excel.</span>
</td>
</tr>
</table>

### ⚙️ Input

All fields are optional. With no changes, the Actor returns 25 recent postings that match the keyword virtual assistant.

| Field | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| Search keywords | array of text | No | Job titles or keywords, one per line. Each is searched separately and every row shows which keyword found it. |
| Skills or categories | array of text | No | Skill or category names as OnlineJobs.ph lists them, such as Video Editing, Real Estate or Bookkeeping. |
| OnlineJobs.ph pages | array of URLs | No | Paste search pages, skill pages or single job pages. When filled, the keyword and skill fields are ignored. |
| Job types | array of enums | No | Full time, part time or gig. Empty means all types. |
| Posted within (days) | integer | No | Keep only postings from the last N days. 0 means any age. |
| Strict keyword match | boolean | No | Keep only postings that contain every word of the keyword in the title, preview or skills. |
| Exclude keywords | array of text | No | Drop postings that contain any of these words. |
| Minimum hourly rate (USD) | number | No | Keep postings that state an hourly dollar rate reaching at least this amount. |
| Maximum hourly rate (USD) | number | No | Keep postings that state an hourly dollar rate starting at or below this amount. |
| Only postings with a stated salary | boolean | No | Skip postings that give no pay figure. |
| Max results | integer | No | Total postings to return, 1 to 20,000. Default 25. |
| Full job details | boolean | No | Adds the full description, hours per week and last updated date. Slower. Off by default. |
| Monitor name | text | No | Name a search to return only postings you have not received before. |

***

### 📦 Output

Each row is one job posting. Fields the site does not publish are left out instead of being filled with placeholders.

```json
{
  "jobId": 1755261,
  "url": "https://www.onlinejobs.ph/jobseekers/job/experienced-real-estate-va-leasing-property-management-part-time-1755261",
  "title": "Experienced Real Estate VA - Leasing & Property Management | Part-Time",
  "jobType": "Part Time",
  "postedAt": "2026-10-23T18:32:25.000Z",
  "salaryText": "$5-8USD/hr",
  "salaryMin": 5,
  "salaryMax": 8,
  "salaryCurrency": "USD",
  "salaryPeriod": "hour",
  "hourlyRateUsdMin": 5,
  "hourlyRateUsdMax": 8,
  "skills": ["Property Management", "Gohighlevel Real Estate"],
  "skillCategories": ["Management Services", "Real Estate"],
  "descriptionSnippet": "Company: New York Online Realty. Location: Remote, Philippines. Engagement: Part-time independent contractor...",
  "matchedSearches": ["Real Estate"],
  "hoursPerWeekMin": 20,
  "hoursPerWeekMax": 20,
  "dateUpdated": "2026-10-23",
  "detailFetched": true,
  "scrapedAt": "2026-10-24T08:00:00.000Z"
}
```

#### Field reference

| Field | Type | Description |
| :--- | :--- | :--- |
| `jobId` | number | OnlineJobs.ph posting number. |
| `url` | string | Link to the posting. |
| `title` | string | Job title as published. |
| `jobType` | string | Full Time, Part Time, Gig or Any. |
| `postedAt` | string | Exact posting time in UTC. |
| `salaryText` | string | Pay exactly as the employer wrote it. |
| `salaryMin`, `salaryMax` | number | Lowest and highest figure found in the pay text. |
| `salaryCurrency`, `salaryPeriod` | string | Currency and pay period, only when the posting states them. |
| `hourlyRateUsdMin`, `hourlyRateUsdMax` | number | Hourly rate in US dollars, only when the posting states an hourly dollar rate. |
| `skills`, `skillCategories`, `skillSlugs` | array | Skill tags, their categories, and the site's tag identifiers. |
| `employerName`, `employerLogoUrl` | string | Employer name and logo, only when the employer makes them public. |
| `descriptionSnippet` | string | Opening text of the posting. |
| `matchedSearches` | array | The keyword or skill that found the posting. |
| `description` | string | Full posting text. Only with full details on. |
| `hoursPerWeekText`, `hoursPerWeekMin`, `hoursPerWeekMax` | string, number | Weekly hours as listed. Only with full details on. |
| `dateUpdated` | string | Date the employer last updated the posting. Only with full details on. |
| `externalLinks` | array | Web links written in the description. Only with full details on. |
| `detailFetched` | boolean | Whether the full details were added to the row. |
| `scrapedAt` | string | When the row was collected. |

***

### 💰 Pricing

Pricing is pay per event. You pay for each posting saved to your dataset. If you switch on full details, each posting whose details were actually retrieved is charged a second, separate Full details event. Postings where details could not be retrieved are not charged for it, and runs with no results cost nothing. Both events follow your Apify plan, so higher plans pay less per event, and the maximum charge you set for a run is always respected. There are no monthly subscriptions or hidden fees. Free-plan runs are limited to 25 postings per run, 3 runs per day, and a short wait between runs. Paid plans have no such limits.

***

### ⭐ Enjoying OnlineJobs.ph Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#EAF5F7;border:1px solid #C2E0E6;border-left:5px solid #0B7285;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saves you hours of scrolling job pages by hand, tell us about it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other business owners, recruiters and freelancers working with Philippines remote hiring data find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0B7285;border:1px solid #0B7285;border-left:5px solid #0B7285;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/onlinejobs-ph-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ✨ Tips and best practices

- **Use strict keyword match for tight lists.** The site search is broad: a short word like seo returns hundreds of loosely related postings. Strict match keeps the ones where the word is really part of the role.
- **Build a daily hiring feed.** Pick a monitor name, set Posted within to 1 or 2 days, and schedule the Actor. Every run returns only postings you have not received before. The first run delivers everything up to your result limit.
- **Compare pay by skill.** Run one skill at a time with a minimum hourly rate and sort the dataset by the hourly rate fields.
- **Go wider than one search.** Leave keywords and skills empty and raise the limit: the Actor repeats the search inside each category on its own to reach further back.
- **Add details only when you need them.** The default run is quick. Turn on full details for descriptions and weekly hours.

***

### ❓ FAQ

##### Does it need an OnlineJobs.ph account?

No. It collects publicly visible job postings and needs no login or account.

##### Does it return employer contact details or worker profiles?

No. It returns public posting information only. Employer names appear when the employer shows them publicly, and the worker and resume database is never touched.

##### How is the pay turned into numbers?

Employers write pay in many ways, such as $4.50/Hour or Php75,000 - Php108,000. The Actor reads the figures, the currency and the period only when the posting states them, and leaves them out otherwise. The hourly dollar rate is filled only for a clear hourly dollar rate.

##### How do I get only new postings every day?

Give your search a Monitor name and schedule the Actor. Each run returns only postings that were not delivered under that name before.

##### How do I find remote virtual assistant jobs in the Philippines with an hourly rate?

Enter virtual assistant as the keyword, set Posted within to a few days, and add a minimum hourly rate. Export the result as Excel or CSV.

***

### 🛡️ Disclaimers and support

- **Disclaimer:** This Actor retrieves publicly available job postings. It is an independent tool and is not affiliated with or endorsed by OnlineJobs.ph. Make sure your use complies with the site's terms and applicable laws.
- **Support:** Open an issue from the Actor page in the Apify Console for bug reports or feature requests.

### 🔗 Other actors

- [WeWorkRemotely Jobs Scraper: Remote Jobs, Salary and New Alerts](https://apify.com/getascraper/weworkremotely-jobs-scraper) ↗ - Remote jobs worldwide with salary and new-posting alerts.
- [Workable Jobs Scraper: Search All Companies by Keyword, Location and Remote](https://apify.com/getascraper/workable-jobs-scraper) ↗ - Jobs across thousands of companies, with a remote filter.
- [MyCareersFuture Singapore Scraper: Jobs, Salaries, Skills & UEN](https://apify.com/getascraper/mycareersfuture-jobs-scraper) ↗ - Singapore jobs with salary ranges and skills.
- [Kariyer.net Jobs Scraper: İş İlanları Türkiye with Filters](https://apify.com/getascraper/kariyer-net-jobs-scraper) ↗ - Turkey job postings by city, sector and seniority.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/onlinejobs-ph-scraper/changelog.md

# Actor input Schema

## `searchTerms` (type: `array`):

Job titles or keywords, one per line. Each keyword is searched separately and every row records which keyword found it. Leave empty (with no skills) to collect the latest postings.

## `skills` (type: `array`):

Skill or category names exactly as OnlineJobs.ph lists them, for example Video Editing, Real Estate, Bookkeeping or GoHighLevel. A name that is also a top-level category returns that whole category. Names that do not exist are skipped with a warning in the log.

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

Optional. Paste search result pages, skill pages or single job pages from onlinejobs.ph. When this is filled, the keyword and skill fields above are ignored. Single job pages are always read in full.

## `jobTypes` (type: `array`):

Limit to full-time, part-time or gig work. Leave empty for all types. The site also lists postings that accept any type, and those stay included.

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

Keep only postings from the last N days, based on the exact posting time. 0 means any age. Results come newest first, so a short window also finishes sooner.

## `strictKeywordMatch` (type: `boolean`):

The site search is broad: a keyword like seo returns hundreds of loosely related postings. Turn this on to keep only postings whose title, preview text or skill tags contain every word of the keyword.

## `excludeKeywords` (type: `array`):

Drop postings whose title, preview text or skill tags contain any of these words, for example cold calling or commission only.

## `minHourlyRateUsd` (type: `number`):

Keep only postings that state an hourly rate in US dollars and pay at least this much at the top of their range. Postings with monthly pay, pesos or no stated rate are left out while this is set.

## `maxHourlyRateUsd` (type: `number`):

Keep only postings that state an hourly rate in US dollars and start at or below this amount. Useful for budget-friendly roles.

## `requireSalary` (type: `boolean`):

Skip postings that give no pay figure at all.

## `maxResults` (type: `integer`):

Stop after this many postings. Large values work: when one search reaches the site's own limit of roughly 300 postings, the run repeats it inside each top-level category to reach more.

## `includeDetails` (type: `boolean`):

Open every posting to add the full description, hours per week, last updated date and links written in the description. This makes the run slower, and full details are billed as a separate event per posting.

## `monitorScope` (type: `string`):

Give a name to turn on monitor mode: the run remembers every posting it has delivered under that name and returns only new postings next time. Use a different name for each saved search. Leave empty to always get everything that matches.

## Actor input object example

```json
{
  "searchTerms": [
    "virtual assistant"
  ],
  "postedWithinDays": 0,
  "strictKeywordMatch": false,
  "requireSalary": false,
  "maxResults": 25,
  "includeDetails": false
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "virtual assistant"
    ],
    "postedWithinDays": 0,
    "strictKeywordMatch": false,
    "requireSalary": false,
    "maxResults": 25,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/onlinejobs-ph-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 = {
    "searchTerms": ["virtual assistant"],
    "postedWithinDays": 0,
    "strictKeywordMatch": False,
    "requireSalary": False,
    "maxResults": 25,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/onlinejobs-ph-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 '{
  "searchTerms": [
    "virtual assistant"
  ],
  "postedWithinDays": 0,
  "strictKeywordMatch": false,
  "requireSalary": false,
  "maxResults": 25,
  "includeDetails": false
}' |
apify call getascraper/onlinejobs-ph-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/onlinejobs-ph-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/19ss6rehO4gfHzzSs/builds/tAZHDr8vO4uWV79eu/openapi.json
