JobStreet $1๐Ÿ’ฐ Companies | Reviews Scraper avatar

JobStreet $1๐Ÿ’ฐ Companies | Reviews Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
JobStreet $1๐Ÿ’ฐ Companies | Reviews Scraper

JobStreet $1๐Ÿ’ฐ Companies | Reviews Scraper

From $1/1K. Pull JobStreet company profiles and employee reviews across Malaysia, Singapore, Indonesia, and the Philippines. Search by company, industry, or URL. Returns rich company records with embedded reviews or flat review datasets, with optional open job listings included.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

JobStreet Scraper: Company Profiles and Employee Reviews

JobStreet Scraper pulls company profiles and employee reviews from JobStreet's four Southeast Asian sites: Malaysia, Singapore, the Philippines and Indonesia. Choose one row per company with the top reviews embedded, or one row per individual review for sentiment and NLP pipelines. Source companies by pasting URLs, searching by name, or browsing a whole industry, and optionally attach each company's open jobs. Export to JSON, CSV or Excel, or read results straight from the API.

Why This Scraper?

  • Four Southeast Asian markets in one actor: Malaysia, Singapore, the Philippines and Indonesia, with the country auto-detected from every pasted URL.
  • Two output shapes from one run: company aggregates with embedded top reviews, or one row per individual review.
  • Deep review fields: title, pros, cons, full experience text, job title, employment status, work location, per-category star ratings, a recommended flag, upvotes and the review date.
  • Company aggregates carry the overall rating, review count, recommended percentage, salary perception, the full star distribution, per-category ratings, perks, awards and an AI-written review summary when the company has published one.
  • Reviews beyond the first 30 are paginated automatically, so a company's full review history is reachable, not just the front page.
  • Optional open-jobs embedding attaches each company's current listings (title, location, salary, work type, listing date and link) to its record.
  • A refused connection fails the run loudly instead of returning an empty dataset that looks like a clean zero-match search.

Use Cases

  • HR and employer-branding teams: benchmark your own review scores and star breakdown against competitors in the same market.
  • Sentiment and NLP teams: pull one row per review to train or evaluate models on real employee feedback text.
  • Recruitment agencies: cross-reference a company's review sentiment with its currently open jobs before reaching out to candidates.
  • Market researchers: browse a whole industry in one run to compare pay perception and recommendation rates across many employers at once.

Data You Get

Sample shape: values are illustrative placeholders, not from a live profile or review.

FieldExample
id"000000000000000"
name"Sample Company"
url"https://my.jobstreet.com/companies/sample-company-000000000000000"
region"MY"
industry"Information & Communication Technology"
totalJobs42
ratingOverall4
reviewCount320
recommendedPercent82
salaryRating3
ratingBreakdown{ "companyRating5StarCount": 90, "companyRating1StarCount": 12 }
categoryRatings[{ "description": "Work/Life balance", "rating": 4, "count": 95 }]
perks["Medical coverage", "Annual bonus"]
awards[{ "name": "Sample Employer Award", "year": 2025 }]
aiSummary{ "headline": "...", "summary": "...", "pros": "...", "cons": "...", "themes": ["..."] } (when enabled and available)
topReviews[ { review object }, ... ]
topReviewCount1
jobs[ { job object }, ... ] (when Include open jobs is on)
jobsEmbeddedCount1 (when Include open jobs is on)
scrapedAt"2026-01-01T00:00:00.000Z"

Reviews mode returns one flat record per review instead: reviewId, companyId, companyName, title, pros, cons, overallExperienceDetails, jobTitle, workLocation, employmentStatus, salarySummary, recommended, recommendedLabel, per-category ratings, overallRating, createdAt, upvotes, a hasBeenFlagged moderation flag, the company url and scrapedAt. Company records also carry isClaimed, logoUrl, coverImageUrl, brandId, overviewText and a customStatement when the company has published one.

How to Use

  1. Pick a mode: companies (one row per company, top reviews embedded) or reviews (one row per review).
  2. Choose a source: paste Company URLs, or leave URLs empty and set Keywords, Industry, or both to discover companies. Industry has a real default value, so a name-only search must explicitly set it to blank, otherwise your keyword is narrowed to matching names inside that default industry, which usually returns nothing.
  3. Set Max reviews per company and, if you want them, switch on Include open jobs.
  4. Set Max items to cap the run, then click Start.

One company, with top reviews (companies mode):

{
"mode": "companies",
"urls": ["https://my.jobstreet.com/companies/aeon-168552725744507"],
"maxReviewsPerCompany": 10,
"includeAISummary": true
}

Up to 50 reviews for a company, sorted newest first (reviews mode):

{
"mode": "reviews",
"urls": ["https://my.jobstreet.com/companies/aeon-168552725744507"],
"maxReviewsPerCompany": 50,
"reviewSort": "recent",
"maxItems": 50
}

Browse an industry in Singapore:

{
"mode": "companies",
"country": "SG",
"industry": "Information & Communication Technology",
"maxReviewsPerCompany": 5,
"maxItems": 20
}

Search by name and embed open jobs:

{
"mode": "companies",
"country": "MY",
"keywords": "maybank",
"industry": "",
"includeJobs": true,
"maxJobsPerCompany": 20,
"maxItems": 5
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/jobstreet-companies-reviews-scraper").call(run_input={
"mode": "companies",
"urls": ["https://my.jobstreet.com/companies/aeon-168552725744507"],
"maxReviewsPerCompany": 10,
})
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
print(company["name"], company["ratingOverall"], company["reviewCount"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/jobstreet-companies-reviews-scraper').call({
mode: 'companies',
urls: ['https://my.jobstreet.com/companies/aeon-168552725744507'],
maxReviewsPerCompany: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Reviews and jobs caps

  • Max reviews per company controls how many reviews are embedded (companies mode) or fanned out (reviews mode) per company, from 0 up to 1000. The first 30 reviews come from the same request that fetches the company profile; anything beyond 30 costs one extra request per additional 30 reviews. Setting this field to 0 currently returns 5 reviews, the same as leaving it at its default, rather than the full 30-review snapshot its own field description mentions. Set an explicit number (for example 30 or 80) to get more than 5.
  • Max jobs per company caps the jobs embedded when Include open jobs is on, from 0 up to 1000. Setting this field to 0 currently caps at 20 jobs rather than pulling every open job as its field description mentions. Set an explicit higher number if you need more than 20.
  • Max items caps the total company or review count for the whole run, from 0 upward, and 0 genuinely means unlimited here. It applies independently of the two per-company caps above.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestring"companies"companies (one row per company, top reviews embedded) or reviews (one row per review).
countrystring"MY"Market: MY, SG, PH, or ID. Overridden per URL when URLs are given.
urlsarray[]Company URLs. Takes priority over keywords and industry; country is auto-detected per URL. Prefilled with one Singapore example URL.
keywordsstring(empty)Company-name search, used when URLs is empty. Combined with industry, narrows the industry browse to matching names.
industrystring"Information & Communication Technology"Browse up to 30 companies in an industry, used when URLs is empty. Leave blank for keyword-only or URL-only sourcing.
maxReviewsPerCompanyinteger5Reviews embedded (companies mode) or fanned out (reviews mode) per company. Minimum 0, maximum 1000. See Reviews and jobs caps above for what 0 actually does today.
reviewSortstring"helpful"helpful (most upvoted first) or recent (newest first). The site itself always returns reviews in its own default order; this only re-sorts the reviews already fetched by Max reviews per company, it does not change which reviews get fetched, so it can't guarantee you the company's truly newest reviews if the cap is smaller than its total review count.
includeAISummarybooleantrueCompanies mode. Embed the AI-written review summary when the company has published one.
includeJobsbooleanfalseCompanies mode. Embed the company's currently open jobs.
maxJobsPerCompanyinteger50Cap on jobs embedded per company when Include open jobs is on. Minimum 0, maximum 1000. See Reviews and jobs caps above for what 0 actually does today.
maxItemsinteger0Total cap across all companies or reviews in the run. Minimum 0. 0 means unlimited.
maxTimeSecinteger0Wall-clock cap in seconds. Minimum 0. 0 means no limit; partial results are flushed when the deadline hits.
proxyConfigurationobjectApify datacenter proxyProxy settings. See Plan Requirement below.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Minimum 1, maximum 1000. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live profile or review.

{
"id": "000000000000000",
"slug": "sample-company-000000000000000",
"url": "https://my.jobstreet.com/companies/sample-company-000000000000000",
"region": "MY",
"name": "Sample Company",
"industry": "Information & Communication Technology",
"totalJobs": 42,
"ratingOverall": 4,
"reviewCount": 320,
"salaryRating": 3,
"recommendedPercent": 82,
"ratingBreakdown": { "companyRating5StarCount": 90, "companyRating1StarCount": 12 },
"categoryRatings": [
{ "description": "Work/Life balance", "rating": 4, "count": 95 },
{ "description": "Career development", "rating": 3, "count": 88 }
],
"perks": ["Medical coverage", "Annual bonus"],
"aiSummary": {
"headline": "Supportive culture with room to grow",
"summary": "Reviewers describe a friendly team and manageable workload, with some noting slower promotions.",
"pros": "Good work-life balance and approachable managers.",
"cons": "Limited career progression for senior roles.",
"themes": ["Work-life balance", "Management"]
},
"topReviews": [
{
"reviewId": "000000000000001",
"title": "Decent benefits, growth is slow",
"pros": "Friendly colleagues and flexible working hours.",
"cons": "Promotions can take a long time to come through.",
"jobTitle": "Operations Executive",
"overallRating": 4,
"recommended": true,
"createdAt": "1 January 2026"
}
],
"topReviewCount": 1,
"jobs": [
{
"id": "000000000000002",
"title": "Sample Job Title",
"location": "Sample City",
"salaryLabel": "Salary range shown here",
"workTypes": ["Full time"],
"listingDateDisplay": "1d ago",
"url": "https://my.jobstreet.com/job/000000000000002"
}
],
"jobsEmbeddedCount": 1,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

The default proxy setting builds one connection for the run; if it cannot be built, the actor continues over a direct connection rather than failing the run outright. For heavier or more frequent runs, the residential proxy group can give more headroom against rate limits; set proxyConfiguration.apifyProxyGroups to ["RESIDENTIAL"] under Connection if your plan includes it.

FAQ

How much does it cost?

You pay per record returned; embedding open jobs adds a separate charge only when Include open jobs is switched on. The Pricing tab shows current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available company and review data. You are responsible for how you use it: follow JobStreet's terms and the laws that apply to you, and get legal advice before any commercial redistribution of reviewer-authored text.

Can I get reviews for many companies in one run?

Yes. Paste multiple company URLs (any mix of Malaysia, Singapore, the Philippines and Indonesia), or use Industry, Keywords, or both to discover many companies at once; each one is fetched independently.

Can I get only new or changed reviews on a schedule?

This actor has no incremental or resume mode of its own; every run is a fresh, independent fetch of whatever companies or reviews you asked for, and reviews mode has no way to ask only for what's new since last time. To monitor a company on a schedule, run it periodically with reviewSort: "recent" and deduplicate on reviewId yourself against what you already have.

Why did my run fail instead of returning an empty dataset?

If a company lookup or every resolved company's fetch is refused, the run fails with a clear message instead of reporting a false empty result. A genuine zero-match search, one where your keyword or industry filter matched nothing, still exits cleanly with zero records and no charge; but in reviews mode, if every resolved company genuinely has zero reviews, or the run's time limit is reached before anything is pushed, the run fails with the same connection-problem message even though nothing was actually blocked.

What is the difference between Max reviews per company, Max jobs per company and Max items?

The first two apply per company, independently of each other. Max items caps the total record count for the whole run on top of that. See Reviews and jobs caps under How to Use for what 0 does on each field today.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— Want more JobStreet data?

Pair this actor with these related scrapers from the same team:

๐Ÿ’ผ JobStreet
From $1/1K. Scrape JobStreet listings across Malaysia, Singapore, Indonesia, and the...
๐Ÿ’ผ SEEK Company Reviews
From $1/1K. Scrape SEEK Australia and New Zealand company profiles and employee reviews...
๐Ÿจ Comparably
From $1/1K. Extract rich company data from comparably.com using company names or profile...
๐Ÿ’ผ RepVue Scraper
Scrape RepVue company profiles, RepVue Score, sales-rep reviews, and compensation by role...
๐Ÿ’ผ Bayt.com Scraper
Scrape Bayt.com job listings by keyword, country, or URL. Extract structured data...
๐Ÿ’ผ Gupy Jobs Scraper
Scrape public jobs from Gupy.io by keyword, state, city, workplace type, job type...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.