JobStreet at a glance
JobStreet is a ready-to-run Apify actor from abotapi for collecting automation data. Its documented output includes record type, review id, company id, company name and company (on review), which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Automation, Lead Generation, Jobs
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 20 options
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.
What JobStreet $1💰 Companies can do
- 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. Get company aggregates with embedded top reviews, or one row per individual review.
- Deep review fields. Each review carries its title, pros, cons, full experience text, job title, employment status, work location, per-category star ratings, a recommended flag, upvotes and the review date.
- Rich company aggregates. Overall rating, review count, recommended percentage, salary perception, the full star distribution, per-category ratings, company size, perks, awards and an AI-written review summary when the company has published one.
- Full review history. Reviews beyond the first 30 are paginated automatically; on a 137-review company a test run returned all 137 reviews with no repeats, so the whole history is reachable, not just the front page.
- Open jobs on demand. Switch on Include open jobs to attach each company's current listings (title, location, salary text, work type, work arrangement, category, listing date and link) to its record.
Choose what to collect
These inputs let you configure JobStreet $1💰 Companies | Reviews Scraper. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | companies -> one row per company with embedded top reviews. reviews -> one row per individual review, fanned out across the resolved companies. |
urlsarray | Paste JobStreet company URLs: profile, /reviews, /jobs, with or without trailing slash, query or http://; numeric-id-only /companies/; any MY/SG/PH/ID host. A /companies directory URL (optionally ?keywords=dbs) switches to country discovery / name search, but only when no company URL is in the list; otherwise it is ignored with a warning. A ?sortBy=recent or ?sortBy=helpful on a company link sets the review sort for that company; a ?page= number is ignored (reviews are always fetched from the first page). Country is auto-detected per URL. The two sample URLs are filled in when you leave this empty in the API; set Keywords, a different Industry or a different Country (without URLs) to use discovery instead. |
keywordsstring | Optional. Search by company name (e.g. 'maybank', 'grab', 'shopee'). Combined with 'Industry' below, the actor browses the industry then filters to companies whose name contains the keyword. |
industrystring | Optional. Select an industry to browse up to 30 companies in it. Combined with 'Keywords' above, narrows the industry to companies whose name matches the keyword. Leave blank to use keyword-only or URL-only sourcing. |
countrystring | Country market to search in Option B (keywords / industry). MY = my.jobstreet.com, SG = sg.jobstreet.com, PH = ph.jobstreet.com, ID = id.jobstreet.com. Ignored for pasted URLs: the country is auto-detected per URL. |
maxReviewsPerCompanyinteger | Companies mode: how many top reviews to embed per company record (1-30 from the SSR snapshot, more triggers extra requests). Reviews mode: how many reviews to fan out per company. Set 0 to use the SSR snapshot of 30. Capped at 1000 so a run cannot fetch unbounded reviews. |
reviewSortstring | How reviews are ordered. 'helpful' = most upvoted first (best for companies-mode top-N). 'recent' = newest first (best for ongoing sentiment monitoring). |
Show 13 more inputs
| Input | What it controls |
|---|---|
includeAISummaryboolean | Companies mode only. When the company has one, a short AI-generated summary of its reviews (pros, cons, themes) is embedded. No extra request, already in the SSR. Disable to drop the field. |
includeJobsboolean | Companies mode only. When true, embeds a jobs array on each company record with the company's currently-listed jobs (id, title, location, salary, workType, listingDate, url). Adds 1-2 extra API calls per company. Capped by maxJobsPerCompany. |
maxJobsPerCompanyinteger | Hard cap on jobs embedded per company when includeJobs is true. The actor pulls jobs page-by-page and stops as soon as this many matching jobs have been collected (or the company runs out). Set 0 to pull every open job for the company. This is THE cap on jobs; no other field overrides it. |
maxItemsinteger | Total cap across all URLs / search results. Default 1000, maximum 100000; 0 is read as 100000. In reviews mode counts individual reviews; in companies mode counts companies. The maxJobsPerCompany cap applies independently to each company's embedded jobs and is not affected by this field. |
maxTimeSecinteger | Wall-clock cap. When exceeded, the actor flushes whatever it already fetched and exits cleanly. 0 = no time limit. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning or charging for companies (companies mode) or reviews (reviews mode) already collected there. Use this after an interrupted run. For recurring monitoring of the same input, use Incremental mode below instead. |
incrementalModeboolean | For a company set you run on a schedule: the actor remembers a baseline for this exact input and returns only NEW or UPDATED rows next time. Companies mode tracks each company by its id and compares ratings, review counts, perks, awards, overview, embedded reviews and jobs; reviews mode tracks each review by reviewId and compares its text, ratings and fields. Scrape timestamp, upvote counts, logo/cover image URLs, the relative job listing age (listingDateDisplay) and the tracking columns (firstSeenAt, lastSeenAt, contentHash) never count as a change, and the order of embedded jobs and reviews is ignored. Unchanged rows are not returned and not billed. Rows that stop appearing are never reported as expired, because capped or filtered scans are partial. Off by default so a normal run is unchanged. |
stateKeystring | Only used with Incremental mode. Leave empty to key the baseline automatically off this run's mode, country, URLs, keywords, industry and review settings, so two different searches never share state. Set your own text to share or isolate a baseline on purpose. The mode is always part of the key. |
emitUnchangedboolean | Only used with Incremental mode. By default an unchanged company or review is not returned and not billed. Turn this on to also return every unchanged row each run; every returned row is billed. |
ignoreFieldsForChangesarray | Output field names that should not make a row count as UPDATED, even when they changed. Always ignored: scrapedAt, upvotes, logoUrl, coverImageUrl, listingDateDisplay, firstSeenAt, lastSeenAt, contentHash. Matches a field name at any nesting depth (for example totalJobs or reviewCount). Ignored fields are still returned in the output. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordTypeRecord type (text)reviewIdReview ID (text)idCompany ID (text)nameCompany Name (text)companyNameCompany (on review) (text)urlURL (link)regionCountry (text)industryIndustry (text)ratingOverallCompany Rating (number)overallRatingReview Rating (number)reviewCount# Reviews (number)recommendedPercentRecommend % (number)Show 10 more fields
recommendedRecommended (boolean)totalJobsOpen jobs (number)titleReview Title (text)jobTitleJob Title (text)employmentStatusEmployment (text)workLocationLocation (text)createdAtReview Date (text)upvotesUpvotes (number)topReviewCountTop reviews embedded (number)scrapedAtScraped (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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": {
"summary": "Reviewers describe a friendly team and manageable workload, with some noting slower promotions."
},
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does JobStreet return?
The documented output for JobStreet includes record type, review id, company id, company name, company (on review), url, country and industry. Availability of each field depends on the source page and the selected mode.
How much does JobStreet cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
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.
