# Careerviet Jobs Search Scraper (`alexist/careerviet-jobs-search-scraper`) Actor

Scrape job search results from CareerViet.vn and extract 36+ fields including salary, employer details, benefits, location, and industry data. Perfect for job aggregators, HR research, and recruitment intelligence platforms analyzing Vietnam's job market.

- **URL**: https://apify.com/alexist/careerviet-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## CareerViet Jobs Search Scraper: Extract Vietnam Job Listings Effortlessly
---

### What Is CareerViet.vn?

CareerViet.vn is Vietnam's premier job portal, hosting thousands of active job postings across diverse industries, locations, and experience levels. It serves as a central hub for both employers posting opportunities and job seekers exploring career options. However, manually collecting job listing data from search results is inefficient — the **CareerViet Jobs Search Scraper** automates this process, converting search results into structured, analyzable records.

---

### Overview

The **CareerViet Jobs Search Scraper** extracts job listings from CareerViet search result pages, capturing comprehensive employment data in a single run. It is ideal for:

- **Job aggregators** building multi-source job boards
- **HR analysts** tracking Vietnam's labor market trends
- **Recruitment platforms** enriching their databases with CareerViet opportunities
- **Researchers** studying Vietnamese employment landscapes
- **Talent acquisition teams** monitoring competitor postings

The scraper handles multiple search result pages, supports pagination, and includes safeguards like `ignore_url_failures` to ensure robust, uninterrupted data collection.

---

### Input Format

The scraper accepts a JSON configuration with three core parameters:

```json
{
  "urls": [
    "https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
````

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | CareerViet job search result page URLs. Supports multiple URLs for bulk scraping across different searches, filters, or pages. |
| `max_items_per_url` | Integer | Maximum job listings to extract per URL (default: `200`). Set lower values for faster, lighter runs. |
| `ignore_url_failures` | Boolean | If `true`, skips failed URLs without stopping the entire job. Recommended for large-scale scraping. |

**Example use cases:**

- Single page: `https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html`
- Multi-page searches by category: design, development, marketing, etc.
- Filtered results: by salary range, location, or experience level

***

### Output Format

**Sample output**

```json
{
  "job_id": "35C7FBAF",
  "job_title": "Chuyên viên Kế toán Công nợ",
  "emp_id": "35A917D4",
  "emp_name": "Công ty CP Bệnh Viện Đa Khoa Quốc Tế Vinmec",
  "job_salary_unit": "vnd",
  "job_active_date": "2026-07-18T03:31:41Z",
  "job_contact_hide": "00000000",
  "location_name_en": [
    "Ha Noi"
  ],
  "location_name": [
    "Hà Nội"
  ],
  "job_is_urgent_job": 0,
  "job_competition": 1,
  "top_industries": [
    2
  ],
  "emp_logo": "https://images.careerviet.vn/employer_folders/lot2/274132/174417unnamed.png",
  "job_check_profile": 1,
  "job_eoc": 0,
  "job_last_date": "2026-08-31T00:00:00Z",
  "date_view": "2026-07-18T03:31:41Z",
  "job_experience": 4,
  "job_to_experience": 10,
  "benefit_id": [
    2,
    3,
    8,
    9,
    10,
    11
  ],
  "benefit_icon": [
    "fa-medkit",
    "fa-plane",
    "fa-usd",
    "fa-user-md",
    "fa-graduation-cap",
    "fa-line-chart"
  ],
  "benefit_name_en": [
    "Insurance",
    "Travel",
    "Incentive bonus",
    "Healthcare",
    "Training Scheme",
    "Salary review"
  ],
  "benefit_name_vn": [
    "Chế độ bảo hiểm",
    "Du Lịch",
    "Chế độ thưởng",
    "Chăm sóc sức khỏe",
    "Đào tạo",
    "Tăng lương"
  ],
  "url_logo_emp_eoc": null,
  "emp_eoc_active": null,
  "job_eoc_alt": null,
  "url_emp_default": "/en/nha-tuyen-dung/cong-ty-cp-benh-vien-da-khoa-quoc-te-vinmec.35A917D4.html",
  "prize_name": "",
  "job_class_css_item": "",
  "job_link": "https://careerviet.vn/en/tim-viec-lam/chuyen-vien-ke-toan-cong-no.35C7FBAF.html",
  "job_salary_string": "Competition",
  "job_new": 1,
  "job_title_red": "",
  "job_premium_icon_item": 0,
  "has_save_job": 0,
  "premium_industries": [],
  "district_id": [],
  "industries": [],
  "from_url": "https://careerviet.vn/jobs/all-jobs-en.html"
}
```

Each job listing returns a rich record with 36+ fields spanning job details, employer info, compensation, benefits, and market signals:

#### Core Job Information

| Field | Meaning |
|---|---|
| `Job ID` | Unique identifier for the job listing |
| `Job Title` | Title of the position as posted |
| `Job Link` | Direct URL to the full job posting |
| `Highlighted Title` | Employer-highlighted or premium version of the title |
| `New Job` | Flag indicating if this is a newly posted listing |
| `Urgent Job` | Boolean flag for urgent/high-priority postings |
| `Premium Icon` | Indicator if the listing has premium placement |
| `Saved Job` | Whether the user has saved this listing (if applicable) |

#### Employer Details

| Field | Meaning |
|---|---|
| `Employer ID` | Unique company/employer identifier |
| `Employer Name` | Official company name |
| `Employer Logo` | URL to company logo image |
| `Default Employer URL` | Link to employer's company profile on CareerViet |
| `Check Profile` | Status or CTA for viewing employer profile |
| `Contact Hidden` | Boolean indicating if employer contact is anonymized |

#### Compensation & Benefits

| Field | Meaning |
|---|---|
| `Salary` | Salary range or amount (e.g., "$500-800") |
| `Salary Unit` | Currency or payment unit (VND, USD, etc.) |
| `Benefit IDs` | Internal identifiers for job benefits |
| `Benefit Icons` | Icon URLs representing benefits visually |
| `Benefit Names EN` | English names of job benefits (e.g., "Health Insurance", "Flexible Hours") |
| `Benefit Names VN` | Vietnamese names of job benefits |

#### Location & Geography

| Field | Meaning |
|---|---|
| `Location Name` | Job location in Vietnamese |
| `Location Name EN` | Job location in English |
| `District IDs` | Internal IDs for geographic districts/regions |

#### Career & Experience Requirements

| Field | Meaning |
|---|---|
| `Experience` | Minimum years of experience required |
| `Max Experience` | Maximum experience level (caps for seniority limits) |
| `Industries` | Industry categories the job belongs to (e.g., IT, Finance) |
| `Premium Industries` | Industry classifications for premium listings |
| `Top Industries` | Ranked industry categories for the position |

#### Administrative & Metadata

| Field | Meaning |
|---|---|
| `Active Date` | Date the listing became active |
| `Last Date` | Listing expiration or last update date |
| `Date View` | Last time the listing was viewed (if tracked) |
| `Competition` | Number of applicants or interest level for the role |
| `EOC` | Equal Opportunity Code or compliance flag |
| `EOC Logo URL` | Logo for EOC certifications |
| `EOC Active` | Whether EOC status is currently active |
| `EOC Alternative` | Alternative EOC designations or certifications |
| `Prize Name` | Name of any prize or incentive program |
| `CSS Class` | Technical styling class (for front-end reference) |

***

### How to Use

1. **Identify search pages** — Navigate to CareerViet.vn, filter by job title, industry, location, or salary. Copy the search result URL.
2. **Add URLs** — Paste one or more search page URLs into the `urls` array. You can add different job categories or pages in a single run.
3. **Set limits** — Adjust `max_items_per_url` to control volume. A value of `200` captures most listings per page; use `50-100` for faster testing.
4. **Enable failover** — Set `ignore_url_failures: true` for resilience if some pages fail to load.
5. **Run the scraper** — Execute and monitor the run log in real time.
6. **Export results** — Download data in JSON, CSV, or Excel format for analysis.

**Tips & best practices:**

- Test with a single page first (`max_items_per_url: 20`) to verify output quality.
- Use specific job keywords (e.g., "design", "development") to collect targeted datasets.
- For multi-page pagination, include multiple URLs to gather comprehensive results.
- Monitor `Date View` and `Competition` fields to identify trending roles.

***

### Benefits & Real-World Applications

- **Job market intelligence:** Understand salary trends, in-demand skills, and hiring hotspots across Vietnam
- **Competitive recruitment:** Benchmark your postings against industry standards and adjust compensation
- **Lead generation:** Build a database of actively hiring companies for B2B outreach
- **Research & analytics:** Analyze labor demand, skill requirements, and regional employment patterns
- **Aggregation platforms:** Power multi-source job boards with Vietnamese opportunities

By automating data collection, the CareerViet Jobs Search Scraper enables teams to make data-driven recruitment decisions and stay ahead in Vietnam's competitive talent market.

***

### Conclusion

The **CareerViet Jobs Search Scraper** transforms CareerViet search results into clean, actionable job data. With 36+ fields covering compensation, benefits, employer info, and market signals, it empowers HR professionals, researchers, and platform developers to unlock insights from Vietnam's largest job portal. Start scraping today and gain a competitive edge in recruitment intelligence.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
```

# 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 = {
    "urls": [
        "https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/careerviet-jobs-search-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 = {
    "urls": ["https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html"],
    "ignore_url_failures": True,
    "max_items_per_url": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/careerviet-jobs-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://careerviet.vn/jobs/design-ks5e3-sortdv-page-2-en.html"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}' |
apify call alexist/careerviet-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=alexist/careerviet-jobs-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Careerviet Jobs Search Scraper",
        "description": "Scrape job search results from CareerViet.vn and extract 36+ fields including salary, employer details, benefits, location, and industry data. Perfect for job aggregators, HR research, and recruitment intelligence platforms analyzing Vietnam's job market.",
        "version": "0.0",
        "x-build-id": "SHIQufQ6iEebBMerG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alexist~careerviet-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alexist-careerviet-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/alexist~careerviet-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alexist-careerviet-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/alexist~careerviet-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alexist-careerviet-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
