Foundit jobs across India, Singapore, Malaysia & Indonesia avatar

Foundit jobs across India, Singapore, Malaysia & Indonesia

Pricing

from $5.99 / 1,000 job results

Go to Apify Store
Foundit jobs across India, Singapore, Malaysia & Indonesia

Foundit jobs across India, Singapore, Malaysia & Indonesia

Scrape foundit (Monster India) jobs across India, Singapore, Malaysia and Indonesia — title, company, salary band, experience, skills, map coordinates, full description and apply URL. Straight off foundit's JSON API: no HTML parsing, no proxy. Native vs syndicated flagged per row.

Pricing

from $5.99 / 1,000 job results

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

15

Monthly active users

5 days ago

Last modified

Share

Foundit Jobs Scraper — India, Singapore, Malaysia & Indonesia

Scrape job postings from foundit (formerly Monster India) straight off its own JSON API — no HTML parsing, no browser, no proxy. Paste any search URL, SEO landing page, or direct job URL and get back 68 structured fields per job: title, company, salary band, experience range, skills, industries, map coordinates, the full job description in both HTML and plain text, and the apply URL. Covers all four regional sitesfoundit.in, foundit.sg, foundit.my, foundit.id — each of which runs a separate job pool, so you can pull four countries in one run.

How the Foundit Jobs Scraper works

Why this actor

foundit's search page is client-rendered and its public job pages are Akamai-blocked (403 Access Denied), so HTML scrapers either return empty shells or get shut out. This actor talks to the same JSON endpoints the site's own front-end uses.

  • 100% JSON, zero HTML/middleware/jobsearch for listings, /middleware/jobdetail/{id} for descriptions. Nothing to break when foundit reskins its front-end.
  • No proxy needed, none forced on you — the API answers 200 OK direct from every region. Proxy support is there if you need a specific egress, but it's off by default, so you don't burn residential bandwidth on a site that never asks for it.
  • Four regions, one run — India, Singapore, Malaysia and Indonesia are genuinely separate inventories (sampling the same query across all four found 1 shared posting in 200). Pages are pulled round-robin, so four start URLs give you four countries rather than 1,000 rows from whichever one you listed first.
  • Native vs syndicated, flagged on every row — foundit republishes a large share of its listings from other boards. Every row carries isSyndicated plus applyHost, and you can filter them out at the source with excludeSyndicated.
  • Promoted-slot deduplication — a request for 50 rows comes back with ~62, because foundit injects sponsored listings that repeat across pages. Rows are deduplicated per region before anything is billed.
  • Filters run before fetching — recency and syndication are evaluated on the listing row, so a filtered-out job never consumes your maxItems budget or triggers a detail request.
  • Real map coordinates — latitude/longitude come from the detail payload, not a geocoding guess.

Use cases

  • Job-board aggregation — build an India/SEA jobs feed with isSyndicated to avoid re-importing postings you already ingest from LinkedIn or an ATS
  • Salary benchmarking — structured salary objects with annual and monthly INR/SGD/MYR/IDR bands, paired with experienceMin/experienceMax and functions
  • Recruitment market researchtotalApplicants and views per posting show real demand, not just supply
  • Skills demand tracking — normalized skills[] per role, region and industry
  • Competitor hiring intelligence — filter by companyName / companyId and watch posting velocity via postedDate
  • Geo analysiscoordinates plus a structured locations[] array (city, state, country) for multi-location postings
  • LLM pipelinesdescriptionText gives clean plain text with bullets and paragraphs preserved, ready to embed without stripping markup yourself

Input

FieldTypeRequiredNotes
startUrlsstring[]yesAny mix of foundit search URLs (/srp/results?query=…&locations=…), SEO landing pages (/search/php-developer-jobs-in-pune), and direct job URLs (/job/{slug}-{id}), across all four regional domains. Build a search on the site, apply filters, copy the address bar — every filter in the URL is passed through to the API.
fetchDescriptionsbooleannoFetch each job's detail endpoint for the full description, descriptionText and coordinates. Costs one extra API call per job. Turn off for a roughly 2× faster run when listing fields are enough. Default true.
excludeSyndicatedbooleannoKeep only foundit-native postings, dropping ones republished from other boards. See the syndication note below — this materially changes salary coverage. Default false.
postedWithinHoursintegernoOnly jobs posted within the last N hours. 24 = last day, 72 = last 3 days. Empty/0 = everything. Evaluated on the listing row, so filtered jobs cost you nothing.
enrichEmailsbooleannoExperimental. Attempts to discover an employer contact email from the company name. Adds contactEmail / contactWebsite / emailEnrichment. Billed only when an email is found. Default false.
maxItemsintegernoHard cap on rows collected. Default 1000. Free-tier runs are capped at 100.
maxConcurrencyintegernoParallel detail requests. Default 10.
proxyobjectnoNot needed. Off by default. Only set it if you require a specific egress IP or country.

Example input

{
"startUrls": [
"https://www.foundit.in/srp/results?query=software%20engineer&locations=Bangalore",
"https://www.foundit.sg/srp/results?query=engineer",
"https://www.foundit.my/srp/results?query=engineer",
"https://www.foundit.id/srp/results?query=engineer"
],
"fetchDescriptions": true,
"excludeSyndicated": false,
"postedWithinHours": 24,
"maxItems": 1000
}

Four regions, cycled a page at a time, capped at 1,000 rows total and limited to postings from the last day.

Native vs syndicated — read this before setting excludeSyndicated

foundit carries two kinds of listing, and the difference decides what data you actually get:

Native (jobSource: "ORGANIC")Syndicated (jobSource: "SCRAPPING")
applyUrlThe foundit job pageOff-site — LinkedIn, the employer's ATS, another board
applyType"internal""external"
Salary disclosedOftenRarely
totalApplicants / viewsReal engagement numbersUsually 0

Syndication rate varies enormously by query, and salary coverage moves inversely with it. Measured across four live searches:

QuerySyndicatedHas salary
Pune (no keyword)18%80%
nurse · Delhi63%33%
sales manager · Chennai94%4%
accountant · Mumbai96%2%

So: if you need salary data, set excludeSyndicated: true. If you need maximum coverage, leave it false and filter later — the flag is on every row either way.

⚠️ On a heavily syndicated query, excludeSyndicated: true can legitimately return very few or zero rows. The actor paginates deeper to try to fill your maxItems and fails loudly rather than handing you a silent empty dataset.

Output

One row per job. 68 fields, all flat except salary, coordinates and locations.

Sample — syndicated posting

{
"jobId": "62580094",
"title": "MuleSoft Support Engineer",
"jobUrl": "https://www.foundit.in/job/mulesoft-support-engineer-ntt-data-pune-india-62580094",
"companyName": "NTT Data",
"companyId": 510094,
"location": "Pune, Maharashtra, India",
"coordinates": { "latitude": 18.52043, "longitude": 73.856744 },
"country": "India",
"region": "India",
"sourceSite": "www.foundit.in",
"salary": null,
"experienceMin": 4,
"experienceMax": 6,
"experienceRaw": "4-6 Years",
"industries": ["IT/Computers - Software"],
"functions": ["Information Technology"],
"employmentTypes": ["Full time"],
"skills": ["Servicenow", "Sql Basics", "Json", "Rabbitmq", "Xml", "Rest Apis"],
"postedDate": "2026-08-14T00:01:50.000Z",
"closingDate": "2026-09-27T13:00:00.000Z",
"applyType": "external",
"applyUrl": "https://careers-inc.nttdata.com/job/Pune-MuleSoft-Support-Engineer-MH/1419001700/",
"applyHost": "careers-inc.nttdata.com",
"isSyndicated": true,
"jobSource": "SCRAPPING",
"totalApplicants": 1,
"views": 3
}

Sample — native posting (with salary)

{
"jobId": "62628690",
"title": "Sap Fico Consultant",
"companyName": null,
"companyConfidential": true,
"location": "Hyderabad / Secunderabad, Telangana, India | Mumbai, Maharashtra, India | Pune, Maharashtra, India",
"salary": {
"currency": "INR",
"min": 450000,
"max": 550000,
"minMonthly": 37500,
"maxMonthly": 45833,
"raw": "450,000-550,000"
},
"skills": ["Sap Fico", "SAP Integration"],
"applyType": "internal",
"applyUrl": "https://www.foundit.in/job/sap-fico-consultant-hyderabad-secunderabad-telangana-mumbai-pune-62628690",
"applyHost": "foundit.in",
"isSyndicated": false,
"jobSource": "ORGANIC",
"totalApplicants": 115,
"views": 129
}

Key output fields

FieldTypeNotes
jobIdstringUnique per region only — the four pools have independent ID spaces. Key on sourceSite + jobId.
title, jobUrlstringAlways populated.
companyNamestring | nullnull when the employer posted confidentially; companyConfidential tells you which.
salaryobject | null{ currency, min, max, minMonthly, maxMonthly, raw }. null when undisclosed — foundit writes 0-0 for "not disclosed" and that is deliberately not published as a real ₹0 band.
experienceMin / experienceMaxnumber | nullYears. null when unspecified — again, foundit's 0–0 marker is not published as a real entry-level band.
locationstringHuman-readable, joined across multi-location postings.
locationsobject[]{ city, state, country, countryCode } per location.
coordinatesobject | null{ latitude, longitude }. Requires fetchDescriptions: true. Absent on fully-remote postings with no city.
descriptionstringFull job description, original HTML. Requires fetchDescriptions: true.
descriptionTextstringSame content as clean plain text — bullets and paragraph breaks preserved, entities decoded. Ready for LLMs and CSV.
skillsstring[]Normalized and de-duplicated.
postedDate / closingDate / updatedDateISO 8601
applyUrl / applyType / applyHoststringinternal → foundit page; external → off-site. applyHost is the bare hostname for grouping.
isSyndicated / jobSource / jobClassificationboolean / stringProvenance. See the section above.
totalApplicants / viewsnumberReal engagement, meaningful mostly on native postings.
region / sourceSite / country / countryCodestringWhich regional site the row came from, and where the job is.

Fields that are always empty for foundit

These belong to the shared job-row schema used across this actor family, and foundit simply doesn't publish them. They are present for schema stability, never populated:

applyEmail, categories, contractType, externalApplyUrl, hours, modifiedDate, source

companyWebsite and companyDomain populate only when enrichEmails is enabled.

How it works

  1. Each start URL is classified — search page, SEO landing page, or direct job URL — and mapped to its regional host.
  2. Listings are paged through /middleware/jobsearch?start=N&limit=50, round-robin across every start URL so no single region monopolizes the run.
  3. Each page is deduplicated (foundit injects repeating promoted slots), then screened against excludeSyndicated and postedWithinHours before anything is fetched or billed.
  4. Surviving jobs hit /middleware/jobdetail/{id} in parallel for the full description and coordinates.
  5. The listing and detail payloads are merged field-by-field — the two endpoints disagree about which fields they populate, and in several cases about a field's type, so the merge is shape-aware rather than a blind overwrite.
  6. Rows are pushed as they complete; pagination continues while details are still in flight.

Notes & limitations

  • Region ID collisionjobId is unique per regional pool, not globally. Always key on sourceSite + jobId.
  • foundit.ph is not supported. The Philippines site sits behind a JavaScript/JWT redirect challenge the other four don't use. It is deliberately excluded rather than worked around.
  • foundit.ae, foundit.com.hk, foundit.vn no longer resolve — those markets appear to be closed.
  • Deep pagination is real but finite. foundit serves distinct results well past start=900; when a page returns only already-seen IDs, that region stops.
  • Descriptions cost an API call each. With fetchDescriptions: false you keep every listing field and lose only description, descriptionText and coordinates.
  • Empty runs fail loudly. If nothing is scraped, the run errors with the likely cause rather than silently succeeding with an empty dataset.

FAQ

Do I need a proxy? No. foundit's API answers directly from every region with no anti-bot challenge. Proxy support exists for callers with egress requirements, but it is off by default.

Why did excludeSyndicated: true return almost nothing? Your query is probably in a heavily syndicated segment — some return 96% syndicated. Try a broader location-only search, or leave the filter off and use the isSyndicated field afterwards.

Why is salary null on most rows? Because foundit doesn't disclose it on most syndicated postings. Salary coverage rises sharply on native ones — see the syndication table above.

Can I scrape all four countries at once? Yes. Put one URL per region in startUrls; pages are cycled round-robin so all four are represented.

Can I filter by salary, experience, or industry? Apply those filters on foundit's own search page and paste the resulting URL — every query parameter is forwarded to the API.

How do I get only today's jobs? Set postedWithinHours: 24.

Is the job description HTML or text? Both. description keeps the original HTML; descriptionText is the cleaned plain-text version.

Support

Found a bug or need a field that isn't here? Open an issue on the actor's Issues tab and I'll take a look.

🤖 For AI Agents & LLM Apps

This actor is MCP-friendly and returns flat, self-describing rows. For retrieval and embedding pipelines use descriptionText rather than description — it's already stripped of markup with structure intact. Deduplicate on sourceSite + jobId, never jobId alone. isSyndicated is the single most useful filter for building a clean feed: syndicated rows point off-site and usually lack salary.

⚠️ Disclaimer

This actor collects only publicly available job-posting data from foundit's public endpoints. It does not access private, authenticated, or personal data, and it does not bypass any authentication or bot-protection mechanism. Users are responsible for ensuring their use complies with foundit's Terms of Service, applicable data-protection law (including the DPDP Act and GDPR where relevant), and any contractual obligations. This actor is not affiliated with, endorsed by, or connected to foundit, Monster, or Quess Corp.

SEO Keywords

foundit scraper, monster india scraper, foundit.in scraper, foundit jobs api, india job scraper, naukri alternative scraper, indian job board scraper, singapore jobs scraper, malaysia jobs scraper, indonesia jobs scraper, southeast asia jobs scraper, job listings scraper, job posting api, salary data scraper india, recruitment data scraper, hiring data api, job aggregator feed, ATS job feed, job market intelligence, foundit sg scraper, foundit my scraper, foundit id scraper