# Glints Scraper - SEA Jobs, Salaries & Company Leads (`scrapesage/glints-scraper`) Actor

Scrape Glints jobs across Singapore, Indonesia, Vietnam, Malaysia & Taiwan: titles, real salary ranges, skills, experience, full descriptions, benefits, remote/hybrid, geo. Get rich hiring-company leads (website, size, industry, socials) and only-new monitoring. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/glints-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (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 $2.00 / 1,000 job scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## 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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Glints Scraper — Jobs, Real Salaries & Hiring-Company Leads (SG, ID, VN, MY, TW)

Extract **complete Glints job data** across Southeast Asia — including the fields other scrapers skip: **real salary ranges, required skills, years of experience, full descriptions, benefits, interview process, work arrangement (remote/hybrid/on-site), and exact office geo**. Then turn every hiring company into a **ready-to-contact B2B lead** with website, company size, industry, socials, office address and a 0–100 lead score.

Covers **Singapore, Indonesia, Vietnam, Malaysia and Taiwan**. No login, no cookies, no browser — fast JSON extraction straight from Glints' own back end.

### Why this Glints scraper?

Most job scrapers return a title and a company name and `null` for everything that matters. Glints is one of the only SEA platforms that **publishes salary ranges**, and this actor ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Real salary range + currency + period | ❌ null | ✅ e.g. `SGD 6,000–12,000 / month` |
| Required skills (with must-have flags) | ❌ | ✅ |
| Years of experience + education level | partial | ✅ |
| Full job description + benefits | partial | ✅ |
| Interview process & applicant requirements | ❌ | ✅ opt-in |
| Work arrangement (remote / hybrid / on-site) | ❌ | ✅ |
| Job location + lat/lng | ❌ | ✅ |
| Hiring-company **website, size, industry** | ❌ | ✅ |
| Company **socials** (LinkedIn, FB, IG, X) | ❌ | ✅ |
| Company **office address + coordinates** | ❌ | ✅ |
| Recruiter response rate | ❌ | ✅ opt-in |
| Deduplicated **company lead** + 0–100 score | ❌ | ✅ opt-in |
| Only-new **monitor mode** | ❌ | ✅ |

### Use cases

- **Recruitment & sourcing** — find live openings by role, salary, skills and experience across five SEA markets, then export them straight to your ATS or sheet.
- **B2B lead generation** — every hiring company is an active buyer (they need recruiting tools, HR software, payroll, training, office services). Score them by `leadScore`, `openings` and `size`, and reach them via `website`, `companyLinkedin` and office address.
- **Salary & compensation benchmarking** — Glints publishes salary ranges most boards hide; track pay by role, seniority, skill and country.
- **Talent-market intelligence** — monitor which companies are scaling, which skills are in demand, and how remote/hybrid each market is.
- **New-job alerts** — schedule the actor with `monitorMode` to emit only postings you haven't seen before — a ready-made alert feed for a saved search.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Glints Scraper**, enter search queries and pick a country (or paste Glints URLs), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchQueries": ["software engineer", "data analyst"],
    "country": "SG",
    "includeJobDetails": true,
    "outputCompanyLeads": true,
    "sortBy": "latest",
    "maxItems": 100
}
```

- **searchQueries** — keywords or job titles. Each query returns up to 50 jobs for the selected country; add several for broader coverage.
- **country** — `SG` (Singapore), `ID` (Indonesia), `VN` (Vietnam), `MY` (Malaysia) or `TW` (Taiwan). Sets the market and salary currency.
- **companyIds** — Glints company UUIDs to pull all current openings for specific companies.
- **startUrls** — paste Glints job pages, company pages, or explore/search pages directly.
- **jobIds** — specific Glints job URLs or UUIDs, each fetched as a full detail-enriched record.
- **jobType / workArrangement / educationLevel** — filter by employment type, remote/hybrid/on-site, or minimum education.
- **minSalary / maxSalary** — salary band in the country's currency (per month).
- **minYearsExperience / maxYearsExperience** — experience band.
- **sortBy** — `relevance` (default) or `latest` (best for monitoring).
- **includeJobDetails** *(default true)* — full description, benefits, interview process, company office address + geo, recruiter response rate and applicant requirements (one extra request per job). Turn off for fast, cheap listing-only runs.
- **includeJobDescriptionHtml** *(default false)* — also include the description as simple HTML.
- **outputCompanyLeads** *(default false)* — also output one deduplicated company lead per hiring company (`type: "company"`).
- **monitorMode / monitorKey** — emit only postings not seen in previous runs (named key-value store).
- **maxItems** *(default 100)* — cap on job records (company leads don't count toward it).

### Output

One record per job (`type: "job"`), plus optional company lead records (`type: "company"`):

```json
{
    "type": "job",
    "jobId": "dbce705e-7ac2-4ce5-93c2-a8863c799174",
    "title": "Software Engineer",
    "url": "https://glints.com/sg/opportunities/jobs/software-engineer/dbce705e-...",
    "status": "OPEN",
    "employmentType": "FULL_TIME",
    "workArrangement": "HYBRID",
    "educationLevel": "BACHELOR",
    "minYearsExperience": 2,
    "maxYearsExperience": 5,
    "experienceText": "2–5 yrs",
    "salaryMin": 6000,
    "salaryMax": 12000,
    "salaryCurrency": "SGD",
    "salaryPeriod": "month",
    "salaryText": "SGD 6,000–12,000 / month",
    "skills": ["Python", "React.js", "AWS"],
    "mustHaveSkills": ["Python", "React.js"],
    "category": "Backend Developer",
    "categoryGroup": "Computer & Software",
    "country": "SG",
    "locationName": "Downtown Core",
    "latitude": 1.2868,
    "longitude": 103.8555,
    "companyId": "e78ed9db-7351-4468-bd80-c686710db186",
    "companyName": "Rakuten Asia",
    "companyUrl": "https://glints.com/sg/companies/rakuten-asia/e78ed9db-...",
    "companyIndustry": "Information Technology and Services",
    "companyWebsite": "https://global.rakuten.com/corp",
    "companySize": "201-500 employees",
    "companyLinkedin": "https://www.linkedin.com/company/rakuten-asia-pte-ltd",
    "descriptionText": "We are looking for a Software Engineer to…",
    "benefits": ["Health Insurance", "Free Meals", "Team-building events"],
    "companyOfficeAddress": "138 Market St, Singapore 048946",
    "companyOfficeLatitude": 1.282,
    "companyOfficeLongitude": 103.85,
    "createdAt": "2026-06-20T08:20:47.305Z",
    "searchQuery": "software engineer",
    "scrapedAt": "2026-06-26T16:00:00.000Z"
}
```

Company lead record (`type: "company"`): `companyName`, `website`, `size`, `industry`, `linkedin`/`facebook`/`instagram`/`twitter`, `officeAddress` + `latitude`/`longitude`, `openings`, `sampleJobTitles`, `salaryRangeSeen`, `leadScore` (0–100) and `companyUrl`.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily/weekly with `monitorMode` to capture only new postings; perfect for alerts and lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/glints-scraper').call({
    searchQueries: ['software engineer'],
    country: 'SG',
    includeJobDetails: true,
    outputCompanyLeads: true,
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} jobs & company leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new company leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new jobs.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find senior backend jobs in Singapore paying over 8,000 SGD and list the hiring companies' contacts" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **SEA jobs + lead-gen stack**:

- **[JobStreet Singapore Scraper](https://apify.com/scrapesage/jobstreet-singapore-scraper)** — SG/SEA jobs, salaries and company reviews.
- **[MyCareersFuture Scraper](https://apify.com/scrapesage/mycareersfuture-scraper)** — Singapore government job board (SSOC, salaries, schemes).
- **[Talent.com Jobs Scraper](https://apify.com/scrapesage/talent-com-jobs-scraper)** — global job aggregator with salaries and employer leads.
- **[Seek Job Scraper](https://apify.com/scrapesage/seek-job-scraper)** — Australia & New Zealand jobs and company data.
- **[Levels.fyi Scraper](https://apify.com/scrapesage/levels-fyi-scraper)** — tech salaries and compensation benchmarks.
- **[LinkedIn Company Scraper](https://apify.com/scrapesage/linkedin-company-scraper)** — full company profiles for B2B prospecting.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** — turn any company website into emails, phones and socials.
- **[99.co Property Scraper](https://apify.com/scrapesage/99-co-property-scraper)** — Singapore property listings and agent leads.
- **[PropertyGuru Scraper](https://apify.com/scrapesage/propertyguru-scraper)** — Singapore's biggest property portal + agent leads.
- **[Burpple Scraper](https://apify.com/scrapesage/burpple-scraper)** — Singapore restaurant & cafe leads.

### Tips

- **Broad coverage**: Glints serves up to 50 jobs per search query to anonymous users (deeper pages require login). To exhaust a market, add several `searchQueries` (e.g. `software engineer`, `backend`, `frontend`, `data`) and/or narrow with filters — each combination returns its own set.
- **Cheaper runs**: turn off `includeJobDetails` for fast listing-only scraping (you still get salary, skills, company, geo from the search feed).
- **Company leads**: enable `outputCompanyLeads` to get one scored, deduplicated record per hiring company — ideal for sales and recruitment-agency prospecting.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` and `sortBy: "latest"` to track only newly listed jobs.
- **Proxies**: keep the default residential proxy; the clean JSON API also works on datacenter proxies if you want to lower cost.

### FAQ

**Which countries are covered?** Singapore, Indonesia, Vietnam, Malaysia and Taiwan — Glints' active markets. Pick one per run with the `country` field (each sets the right salary currency).

**Does it need the Glints API or a login?** No. This actor reads the same public data Glints' own website uses — no API key, login, or browser required.

**Where do salaries come from?** Glints asks employers to publish a salary range, and this actor extracts it directly (`salaryMin`, `salaryMax`, `salaryCurrency`, `salaryText`). When an employer chooses not to publish one, the salary fields are simply absent.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new jobs automatically?** Turn on `monitorMode`, set `sortBy: "latest"`, and create a [Schedule](https://docs.apify.com/platform/schedules) (e.g. daily). Add a [webhook](https://docs.apify.com/platform/integrations/webhooks) or [Zapier zap](https://docs.apify.com/platform/integrations/zapier) to push new postings or company leads into your CRM as they appear.

**Where do company websites and socials come from?** From each company's own public Glints profile, where they list their website and social links. About half of companies add them — when they don't, the field is simply absent.

**A field is empty — why?** Some jobs don't publish a salary, some companies don't add a website or socials, and some postings don't document an interview process. Fields are blank only when the data doesn't exist on Glints — never because the scraper skipped it.

**Is scraping Glints legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/PDPA for personal data) and Glints' terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords or job titles to search on Glints, e.g. <code>software engineer</code>, <code>marketing</code>, <code>data analyst</code>, <code>finance</code>. Each query returns up to 50 jobs for the selected country. Add several queries for broader coverage.

## `country` (type: `string`):

Glints national edition to search. This selects the market and salary currency.

## `companyIds` (type: `array`):

Glints company IDs (UUIDs) — return all current openings for each company (up to 50 each). The ID is the UUID in a company URL: <code>glints.com/sg/companies/\<name>/\<UUID></code>.

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

Paste Glints URLs directly: job pages (<code>/opportunities/jobs/.../\<id></code>), company pages (<code>/companies/.../\<id></code>), or explore/search pages. The country is read from the URL when present. Used in addition to the search queries above.

## `jobIds` (type: `array`):

Specific Glints job postings to fetch — full job URLs or bare job UUIDs. Each is scraped as a full, detail-enriched job record.

## `jobType` (type: `string`):

Filter by employment type.

## `workArrangement` (type: `string`):

Filter by on-site / hybrid / remote.

## `educationLevel` (type: `string`):

Filter by minimum education level required.

## `minSalary` (type: `integer`):

Only jobs paying at least this much (in the selected country's currency, per month). Leave empty for no minimum.

## `maxSalary` (type: `integer`):

Only jobs paying at most this much (in the selected country's currency, per month). Leave empty for no maximum.

## `minYearsExperience` (type: `integer`):

Only jobs requiring at least this many years of experience.

## `maxYearsExperience` (type: `integer`):

Only jobs requiring at most this many years of experience.

## `sortBy` (type: `string`):

Result order. <code>Latest</code> is ideal for monitoring fresh postings.

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

Keep only fully-remote postings.

## `includeJobDetails` (type: `boolean`):

Fetch each job's full description, benefits, interview process, company office address + geo, recruiter response rate and applicant requirements (one extra request per job). On by default for the richest dataset; turn off for fast, cheap listing-only runs.

## `includeJobDescriptionHtml` (type: `boolean`):

Also include the job description as simple HTML (field descriptionHtml) alongside the clean text. Off by default to keep records lean.

## `outputCompanyLeads` (type: `boolean`):

In addition to job records, push one deduplicated company record (type = "company") per hiring company: website, size, industry, socials, office address, openings count, sample titles, salary range seen and a 0–100 lead score. Ideal for recruitment-agency and B2B sales prospecting.

## `deduplicateJobs` (type: `boolean`):

Skip a job whose ID was already emitted in this run (the same posting can surface under several queries).

## `monitorMode` (type: `boolean`):

Remember job IDs seen in previous runs (in a named key-value store) and emit only postings not seen before — a ready-made new-job alert feed. Combine with an Apify Schedule to run it hourly/daily.

## `monitorKey` (type: `string`):

Names the monitor's memory so separate searches keep separate histories (store: <code>glints-scraper-monitor-\<key></code>). Use one key per saved search.

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

Maximum number of job records to scrape across all queries, companies and URLs. Company-lead records do not count toward this cap.

## `maxConcurrency` (type: `integer`):

How many detail requests to run in parallel. Lower it if you hit rate limits; raise it for speed.

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

Proxies to use. Residential is the reliable default for Glints across SEA. The clean JSON API also works on datacenter proxies (cheaper) — switch the group to try it.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "country": "SG",
  "jobType": "any",
  "workArrangement": "any",
  "educationLevel": "any",
  "sortBy": "relevance",
  "remoteOnly": false,
  "includeJobDetails": true,
  "includeJobDescriptionHtml": false,
  "outputCompanyLeads": false,
  "deduplicateJobs": true,
  "monitorMode": false,
  "monitorKey": "default",
  "maxItems": 100,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped job records and optional company lead records as JSON items in the default dataset.

# 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 = {
    "searchQueries": [
        "software engineer"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/glints-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 = {
    "searchQueries": ["software engineer"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/glints-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 '{
  "searchQueries": [
    "software engineer"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/glints-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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