# Childcare AU: Centres, Fees, Vacancies & NQS Ratings (`abotapi/careforkids-com-au-scraper`) Actor

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.

- **URL**: https://apify.com/abotapi/careforkids-com-au-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## CareForKids.com.au Childcare Scraper

Scrape Australia's largest childcare directory: long day care, family day care, preschool, occasional care, before-school, after-school, and vacation care services. Returns full centre profiles with name, address, GPS, phone, daily fees, NQS rating, parent ratings, vacancies by day-of-week, age-group fee bands, services and features, gallery images, contact name and hours, social URLs, provider group, and the official ACECQA service approval number.

### Why this scraper

- **45+ fields per centre**, including precise GPS, phone, full fee table by age band, vacancy schedule per day-of-week, NQS quality area ratings (all 7 areas), gallery images, parent reviews, and the ACECQA service approval number.
- **Two input modes**: Search builder (suburbs + postcodes + care types) or URL paste (any careforkids.com.au URL). Add the `reviewsOnly` toggle to flip the output shape from one row per centre to one row per parent review.
- **Multi care-type fan-out**: pick `["longdaycare", "preschool"]` and the scraper runs both for every suburb you list.
- **Detail enrichment optional**: SERP cards already carry 25+ fields; flip `fetchDetails` ON for the full provider profile + parent reviews.
- **Proxy configurable**: leave the default for normal runs, or provide your own routing for repeated or high-volume jobs.
- **Single SERP per locality**: each suburb + postcode page returns every centre in that postcode (typically 5 to 50). No pagination to walk.

### Data You Get

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

| Field | Example |
|---|---|
| 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 | `+61200000000` |
| rating | `4.5` |
| reviewCount | `0` |
| dailyFee | `200` |
| hasVacancies | `true` |
| isVerified | `true` |
| listingType | `Premium` |
| careTypes | `["Long Day Care", "Preschool"]` |
| requestedCareType | `longdaycare` |
| services | `["Meals Provided", "Nappies & Wipes Supplied", "SunSmart Aware"]` |
| nqsRating | `Meeting` |
| hoursSummary | `7:30am to 6:00pm` |
| logoUrl | `https://img-service-cdn-...azurewebsites.net/api/img?type=UserPhoto&id=0` |
| description | `Full provider description text appears here when fetchDetails=true.` |
| contactName | `Sample Contact, Director` |
| contactTime | `7:30am to 6:00pm` |
| websiteUrl | `https://www.example.com/sample-centre` |
| facebookUrl | `https://www.facebook.com/sample` |
| instagramUrl | `https://www.instagram.com/sample` |
| serviceApprovalNumber | `SE-00000000` |
| approvedPlaces | `90` |
| nqsRatingOverall | `Meeting` |
| nqsRatingLabel | `Meeting National Quality Standard` |
| nqsAreaRatings | `["Meeting NQS", "Meeting NQS", ...]` (7 areas) |
| providerGroup | `Sample Provider Group` |
| googlePlaceId | `ChIJ0000000000` |
| galleryImageUrls | `[...image URLs...]` |
| feeGroups | `[{careType: "Long Day Care", fees: [{fromYears, toYears, maxPrice, ...}]}]` |
| vacancies | `[{careType, ageGroup, daysOfWeek: [bool x 7], ...}]` |
| highlights | `Pipe-separated highlight bullets` |
| hasWaitlist | `false` |
| dailyAverageFee | `200` |
| ratingC4k / ratingGoogle | `4.5 / 4.8` |
| reviewCountC4k / reviewCountGoogle | `0 / 0` |
| scrapedAt | `2026-01-01T00:00:00.000Z` |

### How to Use

#### Search by suburb + postcode

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

#### Search multiple suburbs and care types

```json
{
  "mode": "search",
  "locations": [
    { "suburb": "Surry Hills", "postcode": "2010" },
    { "suburb": "Bondi", "postcode": "2026" },
    { "suburb": "Manly", "postcode": "2095" }
  ],
  "careTypes": ["longdaycare", "preschool"],
  "vacanciesOnly": true,
  "fetchDetails": true
}
```

#### URL mode (paste any careforkids URL)

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

#### Detail-only single fetch

```json
{
  "mode": "url",
  "urls": ["https://www.careforkids.com.au/child-care/00000/sample-centre-suburb-2000"],
  "fetchDetails": true,
  "maxListings": 1
}
```

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

Set `reviewsOnly: true` and the dataset becomes ONE row per review (reviewer name, rating, date, full text, source, avatar URL) with centre context fields (centreId, centreName, suburb, postcode, state, GPS) attached to each row. Pairs with either Search or URL mode.

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

Or pull reviews for specific centres via URL list:

```json
{
  "mode": "url",
  "urls": [
    "https://www.careforkids.com.au/child-care/00000/sample-centre-a-suburb-2000",
    "https://www.careforkids.com.au/child-care/00001/sample-centre-b-suburb-2010"
  ],
  "reviewsOnly": true,
  "maxReviewsPerCentre": 10
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` builds URLs from `locations` and `careTypes`; `url` passes through `urls` directly. |
| `reviewsOnly` | boolean | `false` | When ON, emit one row per parent review instead of one per centre. Forces detail-page fetch internally. Pairs with either Search or URL mode. |
| `locations` | array | Sydney 2000 | Each entry is `{ "suburb": "...", "postcode": "0000" }`. Suburb name is slugified automatically. Multiple locations supported. |
| `careTypes` | array | `["all"]` | Service types to search. `all` fetches every type at once. Multi-select supported: each (location × type) becomes a separate fetch. |
| `verifiedOnly` | boolean | `false` | Drop centres not flagged as verified by careforkids.com.au. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL. |
| `vacanciesOnly` | boolean | `false` | Drop centres reporting no current vacancies. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL. |
| `minRating` | integer | (off) | Minimum 1-5 parent rating. Centres without a rating are kept. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL. |
| `maxDailyFee` | integer | (off) | Maximum advertised average daily fee in AUD. Centres without an advertised fee are kept. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL. |
| `urls` | array | (one example) | URL mode only. Paste any careforkids.com.au URL: search SERP, care-type-filtered SERP, or single-centre detail page. `verifiedOnly`, `vacanciesOnly`, `minRating`, `maxDailyFee` above still apply, including to a single pasted centre URL. |
| `maxListings` | integer | `0` (no cap) | Hard cap across all searches. |
| `fetchDetails` | boolean | `false` | When ON, fetch each centre's profile page for description, full fee schedule by age band, vacancy schedule per day, NQS area ratings, gallery, contact name + hours, website + socials, ACECQA service approval number, and parent reviews. |
| `maxReviewsPerCentre` | integer | `0` (no cap) | Reviews mode only. Cap reviews emitted per centre. |
| `proxy` | object | Default proxy settings | Optional proxy configuration for repeated or high-volume runs. |

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

### Output Example

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

```json
{
  "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": "+61200000000",
  "rating": 4.5,
  "reviewCount": 0,
  "dailyFee": 200,
  "hasVacancies": true,
  "isVerified": true,
  "listingType": "Premium",
  "careTypes": ["Long Day Care"],
  "requestedCareType": "longdaycare",
  "services": ["Meals Provided", "Nappies & Wipes Supplied"],
  "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-service-cdn-h2avfjg4bcb8a0gw.australiaeast-01.azurewebsites.net/api/img?type=UserPhoto&id=0",
  "galleryImageUrls": [
    "https://img-service-cdn-h2avfjg4bcb8a0gw.australiaeast-01.azurewebsites.net/api/img?type=UserImage&id=00001",
    "https://img-service-cdn-h2avfjg4bcb8a0gw.australiaeast-01.azurewebsites.net/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": "Allergy & Anaphylaxis Aware", "iconId": "allergy-aware" }
  ],
  "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",
  "instagramUrl": "https://www.instagram.com/sample",
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan Requirement

- Leave the default proxy settings for normal runs.
- For repeated or high-volume jobs, provide routing that is stable for Australian directory traffic.
- If a run returns no centres for a known-good suburb, retry with a fresh proxy session before widening the search.

### Verification note (2026-08-30)

URL and search modes re-verified against the live site on 2026-08-30. Location facets returned distinct result sets (Sydney 2000: 19 centres, Bondi 2026: 24, Parramatta 2150: 39), and the care-type paths narrowed the same suburb server-side (Parramatta all types 39, pre-school 16, family day care 6). A centre profile URL (`/child-care/<id>`) resolved and parsed a full record. No defect found; version bumped so the Store listing carries a freshly dated, re-verified build.

# Actor input Schema

## `mode` (type: `string`):

Search mode = pick suburbs/postcodes + care types below. URL mode = paste any careforkids.com.au URL straight from a browser.

## `locations` (type: `array`):

One or more {suburb, postcode} pairs. Each pair becomes a SERP page on careforkids.com.au. Suburb names are slugified automatically ("Surry Hills" → "surry-hills"). Postcode is the 4-digit Australian postcode. Examples: {"suburb":"Sydney","postcode":"2000"} or {"suburb":"Melbourne","postcode":"3000"}.

## `careTypes` (type: `array`):

Filter by childcare service type. Each (location × type) pair becomes a separate SERP fetch. Pick "all" to grab every service in a suburb in one fetch (covers all the types below). Default "all" returns every centre advertising any of the seven care types.

## `verifiedOnly` (type: `boolean`):

Drop centres not flagged as verified by careforkids.com.au. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL.

## `vacanciesOnly` (type: `boolean`):

Drop centres that report no current vacancies. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL.

## `minRating` (type: `integer`):

Drop centres rated below this 1-5 score. Centres with no rating are kept. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL.

## `maxDailyFee` (type: `integer`):

Drop centres with an advertised average daily fee above this amount. Centres with no advertised fee are kept. Applies in Search mode and to any pasted URL — a search results URL or a single centre URL.

## `urls` (type: `array`):

One or more careforkids.com.au URLs. Examples: https://www.careforkids.com.au/child-care/sydney/2000 (all care types in Sydney CBD), https://www.careforkids.com.au/child-care-centre/melbourne/3000 (long day care in Melbourne CBD), or a single centre detail URL like https://www.careforkids.com.au/child-care/k60qk/ku-phillip-park-childrens-centre-woolloomooloo-2011. Multi-URL supported. Filter fields above (verifiedOnly, vacanciesOnly, minRating, maxDailyFee) still apply — including to a single pasted centre URL, not only a pasted search URL.

## `maxListings` (type: `integer`):

Stop after this many centres across all searches. 0 = no cap. Each suburb+postcode page returns roughly 5-50 centres (no pagination, single page exhausts the locality). Default 20 keeps runs bounded; raise it (or set 0) when scraping multiple suburbs.

## `fetchDetails` (type: `boolean`):

When ON, also fetch each centre's profile page for the full fee breakdown by age group, vacancy availability per day, NQS quality area ratings, gallery image URLs, contact name, contact hours, website + social links, service approval number, full feature list, and parent reviews. SERP cards already include name, address, GPS, phone, rating, average fee, vacancies, and abbreviated feature list, so simple feeds work fine with this OFF. Forced ON when Reviews-only output is enabled.

## `reviewsOnly` (type: `boolean`):

When ON, the dataset becomes one row per parent review (reviewer name, rating, date, full text, source, avatar) with centre context attached (centreId, centreName, suburb, postcode, state, GPS) instead of one row per centre. Pairs with either Search or URL mode.

## `maxReviewsPerCentre` (type: `integer`):

Only used when Reviews-only output is ON. Cap how many reviews to emit per centre. 0 = no cap (default).

## `resumeFromRunId` (type: `string`):

Paste a previous run ID or dataset ID to continue a large crawl of centres without returning or charging for centres already collected there. Use this after an interrupted run, or when continuing a suburb sweep in another run. For recurring monitoring of the same search, use Incremental mode below instead.

## `incrementalMode` (type: `boolean`):

Turn this on for daily or weekly monitoring. The first run returns all matching centres as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED centres. Turn on "Emit unchanged" or "Emit expired" only when you also want those centres returned (and billed). State is kept separately for each suburb/postcode/care-type/URL and filter/detail setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. Off by default so existing scheduled runs are unaffected.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the locations/care types/URLs and filter/detail settings — different searches then never mix state with each other.

## `emitUnchanged` (type: `boolean`):

Off by default. Turn on to also return centres that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.

## `emitExpired` (type: `boolean`):

Off by default. Turn on to also return centres that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search — not when Max listings capped it, when a search was unreachable, or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need this tracking.

## `proxy` (type: `object`):

Optional proxy configuration. Leave the default unless you need to provide your own routing for repeated or high-volume runs.

## `mcpConnectors` (type: `array`):

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

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "locations": [
    {
      "suburb": "Sydney",
      "postcode": "2000"
    }
  ],
  "careTypes": [
    "all"
  ],
  "verifiedOnly": false,
  "vacanciesOnly": false,
  "urls": [
    "https://www.careforkids.com.au/child-care/sydney/2000"
  ],
  "maxListings": 20,
  "fetchDetails": false,
  "reviewsOnly": false,
  "maxReviewsPerCentre": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `reviews` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "locations": [
        {
            "suburb": "Sydney",
            "postcode": "2000"
        }
    ],
    "urls": [
        "https://www.careforkids.com.au/child-care/sydney/2000"
    ],
    "incrementalMode": false,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/careforkids-com-au-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "locations": [{
            "suburb": "Sydney",
            "postcode": "2000",
        }],
    "urls": ["https://www.careforkids.com.au/child-care/sydney/2000"],
    "incrementalMode": False,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/careforkids-com-au-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "locations": [
    {
      "suburb": "Sydney",
      "postcode": "2000"
    }
  ],
  "urls": [
    "https://www.careforkids.com.au/child-care/sydney/2000"
  ],
  "incrementalMode": false,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/careforkids-com-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/careforkids-com-au-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lOGPlYbszMw6Rrwef/builds/7I2ibaBffkwMWZeuC/openapi.json
