Childcare AU: Centres, Fees, Vacancies & NQS Ratings avatar

Childcare AU: Centres, Fees, Vacancies & NQS Ratings

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Childcare AU: Centres, Fees, Vacancies & NQS Ratings

Childcare AU: Centres, Fees, Vacancies & NQS Ratings

Scrape Australia’s largest childcare directory careforkids.com.au with long day care, preschool, family day care, OSHC, and vacation care services. Returns centre profiles with address, fees, ratings, vacancies, features, images, and ACECQA approval numbers.

Pricing

from $2.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

8 days ago

Last modified

Share

CareForKids.com.au Scraper: Childcare Centres, Fees, Vacancies & Ratings

CareForKids.com.au Scraper turns Australia's largest childcare directory into structured data. Search any suburb and postcode across long day care, family day care, preschool, occasional care, before-school, after-school and vacation care, or paste any careforkids.com.au link straight from a browser. Every centre comes with name, address, GPS, phone, daily fee, NQS quality rating, parent rating, vacancy availability and a feature list from the search results, and switching on detail fetching adds the full fee table by age band, day-by-day vacancy schedule, all seven NQS quality areas, gallery images, contact name and hours, social links, provider group, the ACECQA service approval number and parent reviews. Flip to reviews-only output for one row per parent review instead of one per centre. Resume an interrupted multi-suburb sweep, or turn on incremental mode to monitor the same search on a schedule and get back only what changed. Export to JSON, CSV or Excel, or read the dataset through the API.

Why This Scraper?

  • Two ways in. Search mode sweeps any suburb + postcode across one or more care types in a single run; URL mode accepts a pasted search page or a single centre link straight from a browser.
  • A whole suburb in one page. Each suburb + postcode combination returns every centre CareForKids lists there in one page fetch, so a single run already covers a full locality without walking extra pages.
  • Full profile on demand. Switch on detail fetching for the complete fee table by age band, day-by-day vacancy schedule, all seven NQS quality area ratings, gallery images, contact name and hours, socials, provider group and the ACECQA service approval number.
  • Reviews as their own feed. Switch to reviews-only output and get one row per parent review (name, rating, date, full text, source, avatar) with the centre's context attached, instead of one row per centre.
  • Filter before you pay. Verified-only, has-vacancies, minimum rating and maximum daily fee narrow results in Search mode and on any pasted URL, including a single centre link.
  • Built for monitoring. Resume a large multi-suburb sweep that got interrupted, or turn on incremental mode to schedule the same search and get back only new, changed, reappeared or expired centres.

Use Cases

  • Parents and relocation planners: compare fees, vacancies and NQS ratings across a shortlist of suburbs before enrolling.
  • Childcare operators and franchise groups: track competitor pricing, vacancy trends and parent reviews in nearby suburbs.
  • Directory and comparison sites: republish a normalized childcare dataset for a suburb or region alongside your own listings.
  • Researchers and policy analysts: build a dataset of NQS ratings, approved-place capacity and fee bands across a state or region.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
id00000
urlhttps://www.careforkids.com.au/child-care/00000/sample-centre-suburb-2000
nameSample Childcare Centre
suburb / postcode / stateSample Suburb / 2000 / NSW
addressSample Address, Sample Suburb, NSW
latitude / longitude-33.0000 / 151.0000
phone+61 2 0000 0000
rating / reviewCount4.5 / 0
dailyFee200
hasVacanciestrue
isVerifiedtrue
listingTypeStandard
careTypes["Long Day Care", "Preschool"]
requestedCareTypelongdaycare
services["Sample Service A", "Sample Service B"]
nqsRatingMeeting
providerGroupSample Provider Group
serviceApprovalNumberSE-00000000
approvedPlaces90
contactName / contactTimeSample Contact, Director / 7:30am to 6:00pm
websiteUrlhttps://www.example.com/sample
scrapedAt2026-01-01T00:00:00.000Z

With Fetch detail pages on, a record also carries a description, Facebook and Instagram links, a logo and gallery image list, the provider's internal group id, a Google Place id, the full fee table (feeGroups, by age band), the day-by-day vacancy schedule (vacancies), the overall and all-seven-area NQS ratings (nqsRatingOverall, nqsRatingLabel, nqsAreaRatings), highlight bullets, a waitlist flag and URL, an average daily fee, a rating and review count broken out by source, an overnight-care flag, an embedded reviews list, and the full source object under raw. Reviews-only output (reviewsOnly: true) replaces all of this with one row per review: centreId, centreName, centreUrl, suburb, postcode, state, GPS, reviewerName, rating, date, text, avatarUrl, source and scrapedAt. With Incremental mode on, every centre record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt.

How to Use

  1. Pick a mode: Search (list suburb + postcode pairs and care types) or URL (paste any careforkids.com.au link).
  2. In Search mode, add one or more suburb + postcode pairs and pick care types. In URL mode, paste search-result pages or single centre links. The result filters (Verified centres only, Vacancies only, Minimum rating, Maximum daily fee) apply to both modes and to a single pasted centre link too.
  3. Turn on Fetch detail pages for the full profile, or turn on Reviews-only output to get one row per parent review instead.
  4. Set Max listings to control run size, click Start, then download the dataset or read it through the API.

Search by suburb + postcode:

{
"mode": "search",
"locations": [
{ "suburb": "Sydney", "postcode": "2000" }
],
"careTypes": ["all"],
"fetchDetails": false,
"maxListings": 20
}

Multiple suburbs, specific care types, vacancies only, full profile:

{
"mode": "search",
"locations": [
{ "suburb": "Sydney", "postcode": "2000" },
{ "suburb": "Bondi", "postcode": "2026" },
{ "suburb": "Parramatta", "postcode": "2150" }
],
"careTypes": ["longdaycare", "preschool"],
"vacanciesOnly": true,
"fetchDetails": true
}

URL mode, paste search pages:

{
"mode": "url",
"urls": [
"https://www.careforkids.com.au/child-care/sydney/2000",
"https://www.careforkids.com.au/family-day-care/melbourne/3000"
],
"fetchDetails": true
}

Reviews-only output (one record per parent review):

{
"mode": "search",
"locations": [{ "suburb": "Sydney", "postcode": "2000" }],
"careTypes": ["all"],
"reviewsOnly": true,
"maxListings": 50,
"maxReviewsPerCentre": 10
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/careforkids-com-au-scraper").call(run_input={
"mode": "search",
"locations": [{"suburb": "Sydney", "postcode": "2000"}],
"careTypes": ["all"],
})
for centre in client.dataset(run["defaultDatasetId"]).iterate_items():
print(centre["name"], centre["suburb"], centre["dailyFee"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/careforkids-com-au-scraper').call({
mode: 'search',
locations: [{ suburb: 'Sydney', postcode: '2000' }],
careTypes: ['all'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

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

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted centre-listing run: paste its run or dataset id and the actor seeds every centre id it already collected before scraping starts, so those centres are skipped instead of being re-fetched and re-billed. An id your account can't read fails the run immediately, before anything is scraped, instead of quietly starting an overlapping pull. Because each suburb + postcode combination is a single page fetch with nothing further to page through, Resume's benefit is skipping centres you already have across a large multi-suburb sweep, not resuming a paused walk through one suburb's own results. Does not apply to Reviews-only output.
  • Incremental mode (incrementalMode) is for scheduling the same search again and again. Each centre is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless Emit unchanged is on), REAPPEARED or EXPIRED. A centre is only ever marked gone, and later eligible to reappear, after a run that scanned the full tracked search end to end (uncapped, not resumed) with Emit expired switched on; a capped, resumed or partially unreachable run leaves the previous state untouched instead of guessing. State key names or shares one monitoring campaign; leave it blank and the actor derives one automatically from your locations, care types, filters and Fetch detail pages setting, so unrelated searches never mix state. Does not apply to Reviews-only output.

A single pasted centre page still returns the full profile (fees, vacancies, NQS ratings, gallery, contact, reviews) even with Fetch detail pages left off, since that page is the only source of data for a single-centre link; the detail surcharge is only charged when Fetch detail pages is switched on. The centre's own page does show a verified badge visually, but this actor doesn't currently read it from that page, so a pasted single-centre link always comes back isVerified: false regardless of the centre's real status, and turning on Verified centres only will drop it every time. Use Search mode, or paste a search-results page, when you need the Verified filter to actually narrow anything.

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
modestringsearchsearch builds URLs from Locations and Care types; url passes through Search URLs directly.
locationsarray(none; prefill: Sydney 2000)Search mode only. Each entry is { "suburb": "...", "postcode": "0000" }. Suburb name is slugified automatically. Multiple locations supported.
careTypesarray["all"]Service types to search. all fetches every type in one request. Multi-select: each location x type pair becomes a separate fetch.
verifiedOnlybooleanfalseDrop centres not flagged as verified. Applies in Search mode and to any pasted URL, including a single centre link.
vacanciesOnlybooleanfalseDrop centres reporting no current vacancies. Applies in Search mode and to any pasted URL, including a single centre link.
minRatinginteger(off)Minimum 1-5 parent rating. Centres without a rating are kept. Applies in Search mode and to any pasted URL, including a single centre link.
maxDailyFeeinteger(off)Maximum advertised average daily fee in AUD. Centres without an advertised fee are kept. Applies in Search mode and to any pasted URL, including a single centre link.
urlsarray(none; prefill: one example URL)URL mode only. Paste any careforkids.com.au link: a search page, a care-type-filtered search page, or a single centre page. The four filters above still apply, including to a single pasted centre link.
maxListingsinteger20Stop after this many centres across all searches. 0 = no cap.
fetchDetailsbooleanfalseFetch each centre's own page for the full fee table, vacancy schedule, NQS quality areas, gallery, contact and socials, ACECQA number, feature list and parent reviews. Forced on when Reviews-only output is on. A meaningful share of centre pages currently don't carry the embedded data this relies on at all, in which case every detail-only field comes back null even though the fetch itself succeeded and is still billed; for a search or category walk the base fields (name, address, phone, GPS) are unaffected since those come from the search results page, but for a pasted single-centre link, which has no other data source, this can leave the whole record null.
reviewsOnlybooleanfalseEmit one row per parent review instead of one per centre. Pairs with either Search or URL mode.
maxReviewsPerCentreinteger0Reviews-only output only. Cap reviews emitted per centre. 0 = no cap.
resumeFromRunIdstring(none)Continue one interrupted centre-listing run without re-fetching or re-billing centres it already collected. Does not apply to Reviews-only output.
incrementalModebooleanfalseTurn on for recurring monitoring of the same search. Classifies each centre as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED. Does not apply to Reviews-only output.
stateKeystring(none)Name or share an incremental-mode monitoring campaign. Leave blank to derive one automatically from the search scope.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill) centres unchanged since the last run.
emitExpiredbooleanfalseIncremental mode only. Also return (and bill) centres no longer found, once a run has scanned the full tracked search end to end.
proxyobject(none; prefill: Apify Proxy)Optional proxy configuration. Leave the default unless you need your own routing.
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. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"id": "00000",
"url": "https://www.careforkids.com.au/child-care/00000/sample-centre-suburb-2000",
"name": "Sample Childcare Centre",
"suburb": "Sample Suburb",
"postcode": "2000",
"state": "NSW",
"address": "Sample Address, Sample Suburb, NSW",
"latitude": -33.0000,
"longitude": 151.0000,
"phone": "+61 2 0000 0000",
"rating": 4.5,
"reviewCount": 0,
"dailyFee": 200,
"hasVacancies": true,
"isVerified": true,
"listingType": "Standard",
"careTypes": ["Long Day Care"],
"requestedCareType": "longdaycare",
"services": ["Sample Service A", "Sample Service B"],
"nqsRating": "Meeting",
"nqsRatingOverall": "Meeting",
"nqsRatingLabel": "Meeting National Quality Standard",
"nqsAreaRatings": [
"Meeting NQS", "Meeting NQS", "Meeting NQS",
"Meeting NQS", "Meeting NQS", "Meeting NQS", "Meeting NQS"
],
"providerGroup": "Sample Provider Group",
"googlePlaceId": "ChIJ0000000000",
"logoUrl": "https://img-cdn.example.com/api/img?type=UserPhoto&id=00000",
"galleryImageUrls": [
"https://img-cdn.example.com/api/img?type=UserImage&id=00001",
"https://img-cdn.example.com/api/img?type=UserImage&id=00002"
],
"feeGroups": [
{
"careType": "Long Day Care",
"fees": [
{ "fromWeeks": 6, "toYears": 2, "maxPrice": 200, "feeTypeDisplay": "/day" },
{ "fromYears": 2, "toYears": 5, "maxPrice": 200, "feeTypeDisplay": "/day" }
]
}
],
"vacancies": [
{
"careType": "Long Day Care",
"ageGroup": "6 wks to 2 yrs",
"ageGroupLabel": "Babies",
"daysOfWeek": [false, true, true, true, true, true, false]
}
],
"serviceExtras": [
{ "id": 1, "name": "Sample Service Feature", "iconId": "sample-feature" }
],
"highlights": "Sample highlight bullet|Another sample bullet|Final sample bullet",
"hasWaitlist": false,
"dailyAverageFee": 200,
"approvedPlaces": 90,
"serviceApprovalNumber": "SE-00000000",
"contactName": "Sample Contact, Director",
"contactTime": "7:30am to 6:00pm",
"websiteUrl": "https://www.example.com/sample",
"facebookUrl": "https://www.facebook.com/sample-childcare-centre",
"instagramUrl": "https://www.instagram.com/sample_childcare_centre",
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

The default proxy setting works out of the box, and retries automatically move to another connection tier when one is refused. For repeated or high-volume jobs, or if a run keeps coming back empty for a suburb you know has centres listed, set the proxy group to residential with country AU for steadier Australian routing.

FAQ

How much does it cost?

You pay per record returned into the dataset. In centre mode that's one charge per centre; turning on Fetch detail pages adds a one-time surcharge on top for each centre record that carries the extra detail-page fields (skipped for a centre that returned no detail data at all); a record suppressed by incremental mode's unchanged or expired settings is never charged. In Reviews-only mode, every review is its own dataset row and is billed as such, plus one detail surcharge for each centre that returned at least one review (a centre with zero reviews skips that surcharge). The Pricing tab shows the current rates, and Max listings caps the size, and cost, of any run.

This actor collects only publicly available childcare directory listings. You are responsible for how you use the data: follow CareForKids.com.au's terms and the laws that apply to you, and get legal advice before any commercial redistribution, especially of contact details or parent reviews.

Can I monitor a suburb and get only new or changed centres?

Yes. Schedule the actor and turn on Incremental mode. Each run then returns only new, updated, reappeared or expired centres for that search, and unchanged ones are not billed unless you turn Emit unchanged on. This does not apply to Reviews-only output.

Why did my run return 0 centres instead of failing?

If every request for the run's locations is refused, the run still finishes, with an empty dataset and a log message suggesting next steps: double-check the suburb and 4-digit postcode pair, try URL mode with a link copied from the site, or set the proxy to the residential group with country AU. On a schedule, watch the item count rather than the run's pass or fail state.

The site's own centre page does show a verified badge, but this actor doesn't currently read it from that page, so a pasted single-centre link always comes back isVerified: false, even when the centre is genuinely verified, and Verified centres only will always drop it as a result. Use Search mode, or paste a search-results page, when you need that filter to actually narrow anything.

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 leads data?

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

📇 TrueLocal AU Directory Listings & Reviews Scraper
Scrape TrueLocal.com.au business listings by keyword, location, or URL. Extract names...
🏠 Domain.com.au
Extract enriched Domain.com.au property listings across buy, rent, and sold, with...
🏷️ Gumtree AU Scraper
Scrape gumtree.com.au classifieds across every vertical: for-sale goods, motors, real...
🔌 Appliances Online Scraper
Scrape appliancesonline.com.au by category, keyword, or URL. Extract title, brand, AUD...
🏠 Homely.com.au
Scrape Homely.com.au properties for sale, rent, and sold, plus agent finder, suburb...
🏠 REIWA AU
Collect Western Australia real estate data from REIWA.com.au across sale, rental, sold...

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