# Korean City Parks API - Data.go.kr Open Data (`ingenuous_signature/korea-open-data-api-kr`) Actor

Export official Korean city parks (15012890) to normalized location JSON/CSV. No API key needed; your own approved data.go.kr key is optional. One API page per run; no live park status.

- **URL**: https://apify.com/ingenuous\_signature/korea-open-data-api-kr.md
- **Developed by:** [종현 김](https://apify.com/ingenuous_signature) (community)
- **Categories:** Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$100.00 / 1,000 100 api records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Korea Open Data API KR do?

**A thin wrapper over the official national city-parks standard API, not a web scraper.** It makes one HTTPS request to data.go.kr and normalizes Korean park identifiers, names, categories, road/lot addresses, coordinates, area, managing agency and source reference dates. This version supports only **전국도시공원정보표준데이터 (15012890)**, not every API on the portal.

**공공데이터포털 전국도시공원정보표준데이터를 정규화합니다.** 다른 지도 서비스나 제3자 사이트를 수집하지 않습니다. API 키 없이 실행할 수 있고, 승인받은 본인 키를 선택적으로 사용할 수 있습니다. Apify offers API access, monitoring, scheduling and JSON/CSV/Excel exports around that single official API call.

### Why use it?

The wrapper removes repeated integration work: encoded/decoded key handling, Korean Unicode normalization, source error detection, empty numeric values, separate road-name and lot-number addresses and deterministic output fields. Use it for park inventories, public-facility dashboards or location-reference enrichment. It does not provide navigation, safety ratings, visitor data, reviews or real-time opening status.

### How to use / 사용 방법

1. Run without an API key; the Actor uses its own approved key for [dataset 15012890](https://www.data.go.kr/data/15012890/standard.do).
2. Optionally enter **your own** approved key in the secret `serviceKey` field to use your own quota. A general portal key may still require this API's utilization approval.
3. Leave `maxItems` at 1 for a small first run.
4. Start the Actor, inspect the dataset and export it. Never paste your key into an issue, public example or log.

Keys are passed to the official fixed HTTPS endpoint only. Redirects are rejected. Input is marked secret in the Console schema; the Actor never prints keys, request URLs or raw error responses. There is no proxy configuration, arbitrary endpoint input, login automation or automatic retry.

### Input

| Field | Default | Meaning |
|---|---|---|
| `serviceKey` | Optional | Bring your own approved key; encoded or decoded form accepted |
| `maxItems` | 1 | 1-1000 results from a single API page |
| `pageNo` | 0 | Source page number, 0-10000; catalog example starts at 0 |
| `parkName` | None | `PARK_NM` source-side name filter |
| `parkType` | None | `PARK_SE` source-side category filter, e.g. `근린공원` |

No API key needed. Working example settings:

```json
{"maxItems":1,"pageNo":0}
```

The example runs with the Actor's approved secret version key. The Actor makes at most one source request per run; our approved development quota is 10,000 requests per day and may be shared by all no-key users. An exhausted quota fails explicitly; use your own approved key or retry after reset.

### Output and data table

| Field | Meaning |
|---|---|
| `id`, `name` | Source management number and Korean park name |
| `category` | Source park classification |
| `roadAddress`, `lotAddress` | Distinct Korean address systems, null if absent |
| `latitude`, `longitude` | Numeric geographic coordinates; malformed/out-of-range values become null |
| `areaSquareMeters` | Source park area, numeric or null |
| `managingAgency` | Public managing institution, not an individual contact |
| `referenceDate` | Source data reference date, `YYYY-MM-DD`, not Actor execution time |
| `officialSource` | Permanent data.go.kr catalog link |

Example using synthetic data only:

```json
{"id":"TEST-001","name":"테스트공원","category":"근린공원","roadAddress":null,"lotAddress":null,"latitude":37.371378,"longitude":126.813132,"areaSquareMeters":10842,"managingAgency":null,"referenceDate":"2026-09-01","officialSource":"https://www.data.go.kr/data/15012890/standard.do"}
```

Duplicates are removed by management number within the one returned page. Missing IDs or names fail rather than silently inventing data. The dataset can be downloaded as JSON, HTML, CSV or Excel. No phone numbers, user key or raw payload are exported.

### Pricing / 요금

PPE: **`records-100`, USD 0.10 per started block of up to 100 emitted records**. 1-100 cost $0.10; 101-200 cost $0.20; zero returned results emit no event. No start fee or additional item event; platform usage is included in the price. Full-block runs equate to $1/1,000, below the reviews Actor's $3/1,000 because no browser/proxy is needed. Small separate runs round up independently. The underlying approved public API is free; the price is for Apify normalization/execution, not ownership of government data.

### Source attribution and commercial-use basis

Provider: local governments; responsible ministry: Ministry of Land, Infrastructure and Transport. [Official dataset](https://www.data.go.kr/data/15012890/standard.do). [Machine-readable official rights metadata](https://www.data.go.kr/biz/dcat/metadata/15012890.do) states **`이용허락범위 제한 없음`**, observed 2026-09-14. This is the selection basis for unrestricted reuse, not a claim that all data.go.kr APIs have identical terms. Attribution is retained even where not mandatory. Review the portal policy and your key's current conditions before deploying your use case.

### Tips, disclaimer and support

**Not a government service. 정부 서비스가 아니며 소관 부처·공공기관을 대표하지 않습니다.** This wrapper is not endorsed by the government. The catalog notes that local records are merged monthly and can lag; annual dataset maintenance does not imply daily freshness. Source coordinates or addresses may be inconsistent, and range validation cannot prove location accuracy. Source API behavior, available traffic and approval rules can change.

A run makes at most one source request, with a 20-second network timeout. Use a small page to reduce cost. Authentication/quota failures and non-JSON responses are explicit failures, not successful empty datasets. Report issues with a redacted run ID and source record ID; never include credentials.

# Actor input Schema

## `serviceKey` (type: `string`):

No API key needed: the Actor uses its approved key by default. Optionally enter your own key approved for dataset 15012890 (encoded or decoded) to use your own quota.

## `maxItems` (type: `integer`):

One official API page, 1–1000 results. $0.10 per started block of 100 returned records; zero results create no event.

## `pageNo` (type: `integer`):

Official source page number; 0 starts the first page. This Actor does not automatically paginate.

## `parkName` (type: `string`):

Optional PARK\_NM filter forwarded to the official API.

## `parkType` (type: `string`):

Optional PARK\_SE filter, e.g. 근린공원.

## Actor input object example

```json
{
  "maxItems": 1,
  "pageNo": 0
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("ingenuous_signature/korea-open-data-api-kr").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 = { "maxItems": 1 }

# Run the Actor and wait for it to finish
run = client.actor("ingenuous_signature/korea-open-data-api-kr").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 '{
  "maxItems": 1
}' |
apify call ingenuous_signature/korea-open-data-api-kr --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ingenuous_signature/korea-open-data-api-kr"
        }
    }
}
```

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/7MZBiMmq8zd3Fnahg/builds/G9SfEDVaWsK7REZWy/openapi.json
