ParseForge Scrapers

JobStreet Jobs Scraper (MY, SG, PH, ID)

parseforge/jobstreet-scraper

JobsLead generationAutomation

Scrape JobStreet job listings from Malaysia, Singapore, the Philippines and Indonesia with full descriptions, parsed salaries and company profiles. Export to CSV, Excel, JSON or XML.

Run this scraper See the API call
Total runs
4
Bookmarked
0
Last modified
24 hours ago

This scraper was last updated on .

What does the JobStreet Jobs Scraper (MY, SG, PH, ID) return?

ParseForge Banner

๐Ÿ’ผ JobStreet Jobs Scraper

๐Ÿš€ Export JobStreet job listings from Malaysia, Singapore, the Philippines and Indonesia in seconds. 48 fields per job, full descriptions, salaries parsed into numbers, exact ISO listing and expiry dates, and the employer's profile (industry, size, rating, website) on every row.

This Actor collects job listings from the four JobStreet country sites (my.jobstreet.com, sg.jobstreet.com, ph.jobstreet.com and id.jobstreet.com). It reads the same JSON endpoints the JobStreet website itself uses, so every field you see on a listing page is in your dataset, plus the fields the page hides: the exact listing timestamp, the expiry date, the application screening questions and the employer's company profile.

Coverage at the time of writing: 15,571 live "engineer" jobs in Malaysia, 22,472 in Singapore, 14,505 in the Philippines and 9,016 in Indonesia, all reachable to the last page. Search by keyword, location, classification (29 industries, 336 sub-classifications), work type, work arrangement, listing date and salary band, or paste JobStreet search and job URLs directly.

๐ŸŽฏ Target Audience ๐Ÿ’ก Primary Use Cases
Recruiters and staffing agencies in Southeast Asia Build daily feeds of new openings per role, city or industry
HR analysts and compensation teams Benchmark salary bands with numeric min/max/currency/period
Job boards and aggregators Syndicate listings with full descriptions and employer logos
Sales and lead generation teams Spot companies that are hiring, with size, industry and website
Researchers and journalists Track hiring demand across MY, SG, PH and ID over time

๐Ÿ“‹ What the JobStreet Jobs Scraper does

  • Searches any of the four JobStreet country sites by keyword and location, with every filter the site offers.
  • Pages through the full result set at 100 listings per call, deduplicated by job ID.
  • Optionally opens each job to add the full description (text and HTML), expiry date, status, application questions, cover image and video.
  • Attaches the employer's company profile: industry, size, website, star rating, review count and about text.
  • Parses the salary label into salaryMin, salaryMax, salaryCurrency and salaryPeriod, handling RM, S$, PHP and Indonesian Rp formats.
  • Accepts JobStreet search URLs and single job URLs as input, honouring the filters in the URL.

๐Ÿ’ก Why it matters: JobStreet shows "2d ago" and "RM 3,100 โ€“ RM 3,500 per month" as text. This Actor gives you the exact ISO timestamp, the expiry date and the salary as numbers, so you can sort, filter and chart hiring data instead of cleaning it by hand.

๐ŸŽฌ Full Demo (๐Ÿšง Coming soon)

๐Ÿ“Š Output

Field Description
๐Ÿ–ผ imageUrl Employer logo
๐Ÿ“Œ title Job title
๐Ÿ”— url Canonical job URL on the country site
๐Ÿ†” id JobStreet job ID
๐Ÿข company Employer name as shown on the listing
๐ŸŒ companyUrl Employer profile URL on JobStreet
๐Ÿท companyId JobStreet company profile ID
๐Ÿ“‡ advertiserId Advertiser account ID
โœ… advertiserVerified Whether JobStreet has verified the advertiser (Yes/No)
๐Ÿ“ location Location label (suburb, city, region)
๐ŸŒ country / ๐Ÿณ countryCode Country name and ISO code
โฑ workType Full time, Part time, Contract/Temp, Casual/Vacation
๐Ÿ  workArrangement On-site, Hybrid, Remote
๐Ÿ—‚ classification / ๐Ÿ“‚ subClassification Industry classification and sub-classification, with their IDs
๐ŸŽฏ normalizedRole JobStreet's normalized role slug (e.g. data-analyst)
๐Ÿ’ฐ salary Salary label as published
๐Ÿ’ต salaryMin / ๐Ÿ’ธ salaryMax Parsed numeric bounds
๐Ÿ’ฑ salaryCurrency / ๐Ÿ“† salaryPeriod ISO currency and pay period (month, year, hour, day)
๐Ÿ“… listedAt / ๐Ÿ—“ listedAtDisplay Exact ISO listing timestamp and the "2d ago" label
โŒ› expiresAt Listing expiry timestamp
๐Ÿšฆ status / ๐Ÿ”š isExpired / โญ isFeatured / ๐Ÿ“ข adType Listing state flags
๐Ÿ“ teaser / ๐Ÿ”ธ bulletPoints Short summary and the employer's highlight bullets
๐Ÿ“„ descriptionText / ๐Ÿงฌ descriptionHtml / ๐Ÿ“ descriptionLength Full job description as plain text and HTML
โ” applicationQuestions Screening questions asked at apply time
๐Ÿ–ผ coverImageUrl / ๐ŸŽฅ videoUrl Employer branding media
๐Ÿญ companyIndustry / ๐Ÿ‘ฅ companySize / ๐Ÿ”— companyWebsite Employer profile facts
โญ companyRating / ๐Ÿ—ฃ companyReviewCount / ๐Ÿข companyDescription / ๐Ÿ”— companyJobsUrl Employer reviews and about text
๐Ÿ•’ scrapedAt When the row was collected
โŒ error Always null on data rows; error rows carry only this field and are never charged

Values the employer withholds are returned as Not Disclosed; structurally inapplicable values are N/A. No field is ever null except error.

Sample records
{
  "imageUrl": "https://image-service-cdn.seek.com.au/7871b3842076b35de89d3ee9ccda08d1d10140db/ee4dce1061f3f616224767ad58cb2fc751b8d2dc",
  "title": "Operations Engineer",
  "url": "https://ph.jobstreet.com/job/94391238",
  "id": "94391238",
  "company": "Manila Water Company, Inc.",
  "companyUrl": "https://ph.jobstreet.com/companies/manila-water-company-inc-168557661846653",
  "companyId": "168557661846653",
  "advertiserId": "60244064",
  "advertiserVerified": "Yes",
  "location": "Metro Manila",
  "country": "Philippines",
  "countryCode": "PH",
  "workType": "Full time",
  "workArrangement": "Not Disclosed",
  "classification": "Engineering",
  "subClassification": "Other",
  "classificationId": "N/A",
  "subClassificationId": "N/A",
  "normalizedRole": "N/A",
  "salary": "Not Disclosed",
  "salaryMin": "Not Disclosed",
  "salaryMax": "Not Disclosed",
  "salaryCurrency": "Not Disclosed",
  "salaryPeriod": "Not Disclosed",
  "listedAt": "2026-09-03T06:25:28.045Z",
  "listedAtDisplay": "14h ago",
  "expiresAt": "2026-10-03T13:59:59.999Z",
  "status": "Active",
  "isExpired": "No",
  "isFeatured": "No",
  "adType": "N/A",
  "teaser": "Conduct hands-on operation of the wastewater plant for implementation of operational philosophies, programs, and plans.",
  "bulletPoints": [],
  "descriptionText": "QUALIFICATIONS:\nโ€ข Candidate must possess at least a Bachelor's/College Degree in Engineering (Mechanical, Electrical, Chemical, or Sanitary).\n\nโ€ข Fresh grad or a...",
  "descriptionHtml": "<p><strong>QUALIFICATIONS:</strong></p><ul><li><p>Candidate must possess at leas...",
  "descriptionLength": 1661,
  "applicationQuestions": [
    "How many years' experience do you have as an Operations Engineer?",
    "Which of the following types of qualifications do you have?",
    "What's your expected monthly basic salary?",
    "Do you have a valid Philippine driver's licence?",
    "Are you willing to relocate for this role?"
  ],
  "coverImageUrl": "Not Disclosed",
  "videoUrl": "Not Disclosed",
  "companyIndustry": "Electricity, Gas & Water Services",
  "companySize": "1,001-5,000 employees",
  "companyWebsite": "http://www.manilawater.com",
  "companyRating": 4.4,
  "companyReviewCount": 67,
  "companyDescription": "At Manila Water, we take pride in our way of working, serving, and caring that defines who we are...",
  "companyJobsUrl": "https://ph.jobstreet.com/Manila-Water-Company,-Inc.-jobs/at-this-company",
  "scrapedAt": "2026-09-03T21:03:50.959Z",
  "error": null
}
{
  "imageUrl": "https://bx-branding-gateway.cloud.seek.com.au/bd3c8728-5406-4c44-962c-023d472a6e0e.1/jdpLogo",
  "title": "Business Analyst - Data Analytics (Chief Data Office)",
  "url": "https://sg.jobstreet.com/job/94400061",
  "id": "94400061",
  "company": "Synapxe",
  "companyUrl": "https://sg.jobstreet.com/companies/synapxe-175608056282578",
  "companyId": "175608056282578",
  "advertiserId": "60286019",
  "advertiserVerified": "Yes",
  "location": "One North, Central Region",
  "country": "Singapore",
  "countryCode": "SG",
  "workType": "Full time",
  "workArrangement": "On-site",
  "classification": "Information & Communication Technology",
  "subClassification": "Business/Systems Analysts",
  "classificationId": "6281",
  "subClassificationId": "6283",
  "normalizedRole": "Data-Business-Analyst",
  "salary": "Not Disclosed",
  "salaryMin": "Not Disclosed",
  "salaryMax": "Not Disclosed",
  "salaryCurrency": "Not Disclosed",
  "salaryPeriod": "Not Disclosed",
  "listedAt": "2026-09-03T10:05:17Z",
  "listedAtDisplay": "10h ago",
  "expiresAt": "2026-10-03T09:56:03.000Z",
  "status": "Active",
  "isExpired": "No",
  "isFeatured": "No",
  "adType": "ORGANIC",
  "teaser": "Business Intelligence, Business Analyst",
  "bulletPoints": [
    "Pioneer innovative HealthTech solutions",
    "Grow your professional knowledge via Synapxe academy",
    "Enjoy vibrant work environment with competitive perks!"
  ],
  "descriptionText": "Company description:\n\nSynapxe is the national HealthTech agency inspiring tomorrow's health...",
  "descriptionHtml": "Company description:<br><br><p>Synapxe is the national HealthTech agency inspiri...",
  "descriptionLength": 2561,
  "applicationQuestions": [],
  "coverImageUrl": "https://image-service-cdn.seek.com.au/d0b46c3f084dac71482e8029dad811e79976fdbf/a868bcb8fbb284f4e8301904535744d488ea93c1",
  "videoUrl": "Not Disclosed",
  "companyIndustry": "Computer Software & Networking",
  "companySize": "1,001-5,000 employees",
  "companyWebsite": "https://www.synapxe.sg/",
  "companyRating": "Not Disclosed",
  "companyReviewCount": "Not Disclosed",
  "companyDescription": "Synapxe is the national HealthTech agency inspiring tomorrow's health. The nexus of HealthTech, we connect people and sy...",
  "companyJobsUrl": "https://sg.jobstreet.com/Synapxe-jobs/at-this-company",
  "scrapedAt": "2026-09-03T21:03:53.370Z",
  "error": null
}
{
  "imageUrl": "https://bx-branding-gateway.cloud.seek.com.au/458bfe2b-6e68-499f-908a-dc049293e6c4.1/jdpLogo",
  "title": "FIELD ENGINEER",
  "url": "https://my.jobstreet.com/job/94354951",
  "id": "94354951",
  "company": "GroWTh Avenue",
  "companyUrl": "https://my.jobstreet.com/companies/growth-avenue-168555825327536",
  "companyId": "168555825327536",
  "advertiserId": "60179686",
  "advertiserVerified": "Yes",
  "location": "Shah Alam/Subang",
  "country": "Malaysia",
  "countryCode": "MY",
  "workType": "Full time",
  "workArrangement": "On-site",
  "classification": "Engineering",
  "subClassification": "Field Engineering",
  "classificationId": "1209",
  "subClassificationId": "6030",
  "normalizedRole": "field-engineer",
  "salary": "RM 3,500 โ€“ RM 4,500 per month",
  "salaryMin": 3500,
  "salaryMax": 4500,
  "salaryCurrency": "MYR",
  "salaryPeriod": "month",
  "listedAt": "2026-09-02T02:42:35Z",
  "listedAtDisplay": "1d ago",
  "expiresAt": "2026-10-02T13:59:59.999Z",
  "status": "Active",
  "isExpired": "No",
  "isFeatured": "No",
  "adType": "ORGANIC",
  "teaser": "Degree in any relevant engineering field (Mechanical/Civil/Instrumentation/Electornics etc.) The ability to build and maintain strong working...",
  "bulletPoints": [
    "Attractive salary package",
    "Career growth opportunity",
    "Good working culture"
  ],
  "descriptionText": "โ€ข Degree in any relevant engineering field (Mechanical/Civil/Instrumentation/Electornics etc.)\n\nโ€ข The ability to build and maintain strong working relationships...",
  "descriptionHtml": "<ul><li><p>Degree in any relevant engineering field...",
  "descriptionLength": 1434,
  "applicationQuestions": [
    "Which of the following statements best describes your right to work in Malaysia?",
    "What's your expected monthly basic salary?",
    "Which of the following types of qualifications do you have?",
    "How many years' experience do you have as a field engineer?"
  ],
  "coverImageUrl": "https://image-service-cdn.seek.com.au/39d355047bc6079f7dcd785974fe013ba9edc463/a868bcb8fbb284f4e8301904535744d488ea93c1",
  "videoUrl": "Not Disclosed",
  "companyIndustry": "Professional Services",
  "companySize": "11-50 employees",
  "companyWebsite": "http://www.growthavenue.com.my/",
  "companyRating": "Not Disclosed",
  "companyReviewCount": "Not Disclosed",
  "companyDescription": "Growth Avenue Sdn Bhd (GASB) is a wholly own Bumiputra company. We are specialising in the field of...",
  "companyJobsUrl": "https://my.jobstreet.com/GroWTh-Avenue-jobs/at-this-company",
  "scrapedAt": "2026-09-03T21:02:25.540Z",
  "error": null
}

โœจ Why choose this Actor

  • Four countries, one input. Pick Malaysia, Singapore, the Philippines or Indonesia, or paste URLs from any of the four sites in one run.
  • Numbers, not labels. Salary bounds, currency and period are parsed on every listing that publishes a salary; listing and expiry dates are exact ISO timestamps.
  • The employer comes with the job. Industry, company size, website, star rating, review count and about text are attached without a second Actor.
  • Every JobStreet filter, verified. All 29 classifications and 336 sub-classifications were enumerated against the live API, so the dropdowns only contain values that return results.
  • Application questions. The screening questions candidates must answer are exposed per job, a field most alternatives skip.
  • Honest sentinels. Not Disclosed means the employer withheld it; N/A means it does not apply. You never get a silent null.

๐Ÿ“ˆ How it compares to alternatives

This Actor Typical JobStreet scrapers
Countries MY, SG, PH, ID Often one or two
Fields per job 48 15 to 25
Salary Label plus parsed min/max/currency/period Label only
Dates Exact ISO listing and expiry timestamps "2d ago" strings
Employer profile Industry, size, website, rating, reviews, about Company name only
Application questions Yes No
Filters Classification (29) and sub-classification (336) dropdowns, work type, arrangement, date, salary band, sort Keyword and location
Input Keywords or JobStreet search/job URLs Keywords only
Depth Full result set, 100 listings per call Sometimes capped at a few pages

Per-call detail fetching means a job costs one extra API request when "Fetch full job details" is on. Turn it off for a listing-only run that is several times faster.

๐Ÿš€ How to use

  1. Create a free Apify account and get $5 of free monthly usage credit.
  2. Open the JobStreet Jobs Scraper page and click Try for free.
  3. Type your keywords (e.g. data analyst), pick a country and optionally a location, then set any filters.
  4. Set Max Items and click Start.
  5. Download the dataset as CSV, Excel, JSON or XML, or pull it through the API.

Example input for the freshest hybrid ICT jobs in Singapore:

{
  "keywords": "software engineer",
  "country": "SG",
  "classification": "6281",
  "workArrangement": "Hybrid",
  "dateRange": "7",
  "sortMode": "ListedDate",
  "maxItems": 200
}

๐Ÿ’ผ Business use cases

Recruitment and staffing

Run the Actor every morning with dateRange: "1" and sortMode: "ListedDate" to get every job posted in the last 24 hours for the roles you place, complete with the hiring company's size and website for outreach.

Compensation benchmarking

Filter by classification and location, then group salaryMin and salaryMax by subClassification to build pay bands per city. The salaryPeriod and salaryCurrency fields keep monthly RM and annual S$ figures from being mixed.

Lead generation

Employers posting many jobs are growing. Count rows per companyId, join companyIndustry, companySize and companyWebsite, and hand the list to sales.

Job aggregation

Syndicate listings with descriptionHtml, imageUrl and expiresAt, and drop rows automatically once isExpired flips to Yes on a re-run.

๐Ÿ”Œ Automating JobStreet Jobs Scraper

  • Make / Zapier: trigger the Actor on a schedule and push new rows into Google Sheets, HubSpot or Airtable.
  • Slack: post a daily digest of new jobs matching your filters.
  • Airbyte: load the dataset into your warehouse for trend analysis.
  • GitHub Actions: call the Apify API from a workflow to refresh a public jobs page.
  • Google Drive: export the dataset as Excel after every run.

๐ŸŒŸ Beyond business use cases

  • Research: measure hiring demand by industry and city across Southeast Asia over time.
  • Personal: watch a handful of employers and get notified when they post a role that matches you.
  • Non-profit: track public-sector and healthcare openings for community job boards.
  • Experimentation: feed descriptionText into an LLM to extract skills, seniority and visa requirements.

๐Ÿค– Ask an AI assistant about this scraper

I want to collect job postings from JobStreet. Look at https://apify.com/parseforge/jobstreet-scraper and tell me how to configure a run that pulls every Engineering job posted in the last 7 days in Penang, Malaysia, and how to turn the salaryMin and salaryMax fields into a pay-band report.

โ“ Frequently Asked Questions

๐ŸŒ Which JobStreet sites are supported?

Malaysia (my.jobstreet.com), Singapore (sg.jobstreet.com), the Philippines (ph.jobstreet.com) and Indonesia (id.jobstreet.com). Pick one in the Country field or paste URLs from any of them.

๐Ÿ”‘ Do I need a JobStreet account or cookies?

No. Everything comes from the public endpoints the JobStreet website itself uses.

๐Ÿ’ฐ Why is the salary "Not Disclosed" on many rows?

Because the employer did not publish one. JobStreet does not force employers to show a salary, and the Actor never invents a number. When a salary is published, it is returned both as the original label and as parsed numbers.

๐Ÿ“… What is the difference between listedAt and listedAtDisplay?

listedAt is the exact ISO timestamp from JobStreet's data; listedAtDisplay is the "2d ago" text shown on the page.

๐Ÿ—‚ How do I filter by industry?

Use the Classification dropdown (29 industries) and optionally Sub-classification (336 role families). Both lists were verified against the live site, and the IDs are the same across all four countries.

๐Ÿ”— Can I paste a JobStreet URL?

Yes. Search URLs such as https://my.jobstreet.com/engineer-jobs/in-Kuala-Lumpur?daterange=7 are parsed, including the filters in the query string, and job URLs such as https://sg.jobstreet.com/job/94383160 return that single job.

โšก How fast is it?

Listing-only runs fetch 100 jobs per request. With "Fetch full job details" on, each job costs one extra request; a 1,000-job run typically finishes in a few minutes.

๐Ÿ›ก Do I need a proxy?

Not at moderate volume. The proxy option is off by default. Turn on Apify Proxy (datacenter is enough) for very large runs, or if you see rate-limit retries in the log.

๐Ÿ“‰ Is there a ceiling on results?

The Actor pages to the end of JobStreet's result set for the query, so the ceiling is the number of jobs matching your filters. Narrow queries with classification or location to keep runs focused.

๐Ÿงพ What happens on an error?

Errors are written as rows containing only the error field so you can see what failed. Error rows are never charged.

๐Ÿ” Can I re-run to detect expired jobs?

Yes. Paste the job URLs (or re-run the search) and check isExpired and status on each row.

๐Ÿ’ณ How am I charged?

Per result row delivered. Error rows are free.

๐Ÿ”Œ Integrate with any app

The dataset is available through the Apify API and every Apify integration: Google Sheets, Make, Zapier, Airbyte, Slack, webhooks, and the Apify SDKs for JavaScript and Python.

๐Ÿ”— Recommended Actors

๐Ÿ’ก Pro Tip: browse the complete ParseForge collection.

๐Ÿ†˜ Need Help? Open our contact form

โš ๏ธ Disclaimer: this is an independent tool and is not affiliated with, endorsed by, or connected to JobStreet, SEEK or any employer whose listings you scrape. It collects only publicly available data.

What input does the JobStreet Jobs Scraper (MY, SG, PH, ID) accept?

FieldTypeWhat it doesDefault
startUrls array Optional. JobStreet search URLs (e.g. https://my.jobstreet.com/engineer-jobs/in-Kuala-Lumpur?daterange=7) or single job URLs (https://sg.jobstreet.com/job/94383160). When set, these override the keyword/country fields below. Filters in the URL query string are honoured. not set
keywords string Job title, skill or company to search for. Leave empty to list every job in the selected country (optionally narrowed by the filters below). engineer
country string (4 options) Which JobStreet site to search. Each country is a separate site with its own listings. MY
location string Optional city, state or region as JobStreet spells it, e.g. "Kuala Lumpur", "Penang", "Central Region", "Metro Manila", "Jakarta Selatan". not set
maxItems integer Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000 10
classification string (30 options) Industry classification, same list as the JobStreet search page. not set
subClassification string (337 options) Narrower role family inside a classification. Works on its own or together with Classification. not set
workType string (5 options) Employment type filter. not set
workArrangement string (4 options) Where the work happens. not set
dateRange string (6 options) Only jobs listed within this many days. not set
salaryMin integer Lower bound of the salary filter, in local currency (RM, S$, PHP or Rp). JobStreet snaps the value to its own salary bands (e.g. 3,000 / 4,500 / 6,000 / 8,000 monthly in Singapore), so use round figures. Leave empty for no minimum. not set
salaryMax integer Upper bound of the salary filter, in local currency, snapped to JobStreet's salary bands. Leave empty for no maximum. not set
salaryType string (2 options) Whether the salary bounds above are monthly or annual figures. monthly
sortMode string (2 options) Result order. Use "Date listed" together with Max Items to grab only the freshest postings. KeywordRelevance
includeDetails boolean Opens each job (one extra API call) to add the full description, expiry date, application questions and the employer profile (industry, size, rating, website). Turn off for a faster, listing-only run. true
proxyConfiguration object Off by default; JobStreet's public API answers without a proxy at moderate volume. Switch on Apify Proxy (datacenter is enough) for large runs or if you see rate limiting. {"useApifyProxy":false}

How much does the JobStreet Jobs Scraper (MY, SG, PH, ID) cost?

from $1.50 per 1,000 results

Charged forWhat it isPrice each
Job listing One JobStreet job listing delivered to the dataset (error rows are free). $0.0015 to $0.0019

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

How do I call the JobStreet Jobs Scraper (MY, SG, PH, ID) API?

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~jobstreet-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "keywords": "engineer",
    "country": "MY",
    "maxItems": 10,
    "salaryType": "monthly",
    "sortMode": "KeywordRelevance"
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "keywords": "engineer",
  "country": "MY",
  "maxItems": 10,
  "salaryType": "monthly",
  "sortMode": "KeywordRelevance"
}

What do users say about the JobStreet Jobs Scraper (MY, SG, PH, ID)?

No reviews yet. Be the first.

How do I report an issue with the JobStreet Jobs Scraper (MY, SG, PH, ID)?

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

What related scrapers can I use?

Run JobStreet Jobs Scraper (MY, SG, PH, ID) on Apify All scrapers