# Kids Activities & Indoor Playground Intelligence (`obliging_persimmon_cki/kids-activities-playground-intelligence`) Actor

Discover and enrich kids activity venues, playgrounds, and family entertainment centers.

- **URL**: https://apify.com/obliging\_persimmon\_cki/kids-activities-playground-intelligence.md
- **Developed by:** [Dung Huynh](https://apify.com/obliging_persimmon_cki) (community)
- **Categories:** Lead generation, Other, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Kids Activities & Indoor Playground Intelligence

Discover kids’ activity venues globally, then enrich each venue with bounded official-website information. The Actor is useful for family travel products, activity directories, party marketplaces, location research, and lead-generation workflows.

### What it does

- Searches Google Maps for the selected venue types in each location.
- Keeps branches separate and removes duplicates produced by overlapping searches.
- Crawls at most the requested number of relevant official-site pages.
- Extracts deterministic evidence for ages, activities, pricing, amenities, booking, and rules.
- Classifies venue types from business names, source categories, and extracted activities rather than copying the discovery query.
- Uses stable English taxonomy IDs while preserving source-language text when requested.
- Supports English and Vietnamese search and extraction cues; the locale dictionary is extensible.

### Input

Use [sample-input.json](sample-input.json) as a starting point. Locations are plain strings; include the country name when a city or region could be ambiguous:

```json
{
  "locations": ["London, United Kingdom", "Ho Chi Minh City, Vietnam"],
  "venueTypes": ["indoor_playground", "soft_play_center", "trampoline_park"],
  "maxPlacesPerLocation": 10,
  "maxWebsitePagesPerPlace": 3,
  "includeWebsiteEnrichment": true,
  "includeReviews": false,
  "extractPricing": true,
  "extractAgeSuitability": true,
  "extractActivities": true,
  "extractAmenities": true,
  "extractBookingInfo": true,
  "preserveOriginalText": true,
  "sourceLanguages": ["auto"],
  "normalizedOutputLanguage": "en"
}
```

Duplicate locations are removed case-insensitively. The Actor normalizes each string internally and infers known country aliases for locale selection; when a country cannot be inferred, its normalized country code remains `null`.

Important controls are `maxPlacesPerLocation` (1–50), `maxWebsitePagesPerPlace` (1–10), and `maxReviewsPerPlace` (1–50). `maxPlacesPerLocation` is a hard output cap after deduplication. Set `includeWebsiteEnrichment` to `false` for inexpensive discovery-only runs.

The sample explicitly enables every deterministic extraction switch. This avoids accidentally benchmarking discovery alone when an existing Console input has those switches disabled.

### Output

Every emitted dataset item has `actorOutputSchemaVersion: 1`, a stable `venueId`, source metadata, contact and location fields, venue/activity taxonomies, enrichment fields, review insights, language metadata, and warnings. Unknown values are `null`; the Actor does not claim that a venue is safe for children. `safetyReviewSentiment` describes only review text when review data is available.

Venue types use name, source-category, and website-activity evidence. Pricing is assigned to child, adult, toddler, or family fields only when a nearby label identifies the audience; an unlabeled currency amount is not guessed. Age ranges likewise require suitability context, so a ticket-category heading such as `1–2 years` does not automatically become the venue-wide age limit.

Example abbreviated record:

```json
{
  "actorOutputSchemaVersion": 1,
  "venueId": "f4c5...",
  "name": "Example Kids Play Center",
  "venueTypes": [
    { "id": "trampoline_park", "confidence": 0.95 },
    { "id": "birthday_party_venue", "confidence": 0.78 }
  ],
  "pricing": {
    "currency": "GBP",
    "childPriceFrom": 12.5,
    "priceTextOriginal": "Children £12.50 per session"
  },
  "enrichment": {
    "officialWebsiteFound": true,
    "websiteEnrichmentStatus": "completed"
  }
}
```

### Local use

```bash
cd actors/kids-activities-playground-intelligence
npm install
cp sample-input.json storage/key_value_stores/default/INPUT.json
apify run
```

Run checks with `npm run lint && npm test && npm run build`. Validate the Console form with `apify validate-schema`.

### Limitations and responsible use

Google Maps markup and public website content can change. This MVP uses conservative deterministic extraction only and does not crawl PDFs, log in, book, infer legal compliance, or certify safety. Ambiguous age and price text remains `null`. The review taxonomy and aggregation logic are present, but live Google Maps review collection is not implemented; `includeReviews` therefore defaults to `false`. When no configured review source is available, output reports `reviewAnalysisStatus: "no_source_available"` and does not fabricate insights or reviewer data. Respect each source’s terms, robots policy, and applicable law. Pricing is normalized only to its ISO currency code; no conversion or historical tracking is performed.

### Benchmarks

See [BENCHMARK\_NOTES.md](BENCHMARK_NOTES.md) for measured cloud-run results, identified limitations, and the remaining publication checks.

### Cost control

Start with one location, 10 places, and three website pages. Website enrichment is bounded per venue; a failed site leaves the basic discovered record intact. Enable an Apify Proxy only when needed for your source access and account configuration.

# Actor input Schema

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

Cities, regions, or countries to search. Include the country name when a place could be ambiguous.

## `venueTypes` (type: `array`):

Venue taxonomy IDs to search. Output types are classified separately from venue and website evidence and may differ from the search types.

## `customSearchTerms` (type: `array`):

Additional local-language terms to search.

## `maxPlacesPerLocation` (type: `integer`):

Hard cap for discovery results per location.

## `includeWebsiteEnrichment` (type: `boolean`):

Crawl selected pages on identified official websites. Keep the individual extraction options enabled to populate their corresponding output fields.

## `includeReviews` (type: `boolean`):

Analyze public reviews when a review source is configured. Live Google Maps review collection is not available in this MVP.

## `maxReviewsPerPlace` (type: `integer`):

Hard cap for public reviews analyzed per venue.

## `maxWebsitePagesPerPlace` (type: `integer`):

Hard cap for official website pages crawled per venue.

## `extractPricing` (type: `boolean`):

Extract visible crawlable prices only when nearby text identifies child, adult, toddler, or family pricing.

## `extractAgeSuitability` (type: `boolean`):

Extract explicitly stated venue-wide age suitability and toddler areas; ambiguous ticket-category ranges remain null.

## `extractActivities` (type: `boolean`):

Extract listed activity taxonomy IDs.

## `extractAmenities` (type: `boolean`):

Extract listed venue amenities.

## `extractBookingInfo` (type: `boolean`):

Extract booking cues and URLs.

## `sourceLanguages` (type: `array`):

Expected source languages; auto detects when possible.

## `normalizedOutputLanguage` (type: `string`):

Canonical taxonomy label language.

## `preserveOriginalText` (type: `boolean`):

Keep selected source-language evidence fields such as original names, age text, prices, and booking cues.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy configuration for browser requests.

## Actor input object example

```json
{
  "locations": [
    "London, United Kingdom",
    "Ho Chi Minh City, Vietnam"
  ],
  "venueTypes": [
    "indoor_playground",
    "soft_play_center",
    "trampoline_park"
  ],
  "customSearchTerms": [],
  "maxPlacesPerLocation": 5,
  "includeWebsiteEnrichment": true,
  "includeReviews": false,
  "maxReviewsPerPlace": 5,
  "maxWebsitePagesPerPlace": 3,
  "extractPricing": true,
  "extractAgeSuitability": true,
  "extractActivities": true,
  "extractAmenities": true,
  "extractBookingInfo": true,
  "sourceLanguages": [
    "auto"
  ],
  "normalizedOutputLanguage": "en",
  "preserveOriginalText": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Deduplicated venues with evidence-classified taxonomy IDs. Disabled or ambiguous extraction fields remain null or empty.

# 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 = {
    "locations": [
        "London, United Kingdom",
        "Ho Chi Minh City, Vietnam"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("obliging_persimmon_cki/kids-activities-playground-intelligence").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 = { "locations": [
        "London, United Kingdom",
        "Ho Chi Minh City, Vietnam",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("obliging_persimmon_cki/kids-activities-playground-intelligence").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "London, United Kingdom",
    "Ho Chi Minh City, Vietnam"
  ]
}' |
apify call obliging_persimmon_cki/kids-activities-playground-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=obliging_persimmon_cki/kids-activities-playground-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/eYZzY4Hda9VB9FY9m/builds/D4FNVexrpuu6ltXgq/openapi.json
