Zigbang Scraper: Korean Rentals, Jeonse, Sales & Agents
No login. No cookies. No browser.
Extracts one-room, villa and officetel listings for monthly rent, jeonse and sale from Zigbang, South Korea's rental listings app, searched by place name or coordinates anywhere in Korea. Prices arrive in KRW and in 만원, Korean labels become stable English keys with the original kept alongside, and a second row type lists the licensed agents publishing in an area.
oswaldocarabano/zigbang-scraper
{
"location": "Hongdae",
"radiusKm": 1,
"propertyTypes": ["officetel"],
"dealTypes": ["monthly_rent"],
"maxMonthlyRent": 80,
"includeDetails": true,
"maxItems": 200
}- Version
- v0.1.5
- Memory
- 512 MB
- Browser
- none
- Proxy
- None needed; switches to a Korean residential connection if refused
Short answer
The Zigbang Scraper extracts South Korean property listings from Zigbang (직방) without a login or an API key: one-rooms, villas and officetels for monthly rent (월세), jeonse (전세) and sale (매매), with deposit, rent or sale price in KRW, maintenance fee, area in m² and pyeong, coordinates and address on 100% of 718 measured listings. Detail pages add the description, photos, parcel number (PNU), nearby subway stations and the licensed agent's office, phone, email and registration number. Pricing is $0.0019 per listing, $0.00075 per detail page and $0.0019 per agent profile.
Key points
- The Zigbang Scraper covers one-rooms, villas and officetels; apartments (아파트) are excluded because Zigbang lists them through a separate complex-based system.
- Fill rates come from 718 listings with detail pages across Seoul, Busan, Gyeonggi-do, Incheon, Daegu and Daejeon, measured on the Apify platform on 1 October 2026.
- Jeonse rows carry `deposit_krw` and a `monthly_rent_krw` of null rather than 0, because a jeonse lease has no monthly rent.
- Only 72.8% of 718 listings publish a numeric floor; the rest publish only low, middle or high, and officetels publish a number on 44.1%.
- Every one of 718 detail pages measured carried a brokerage office registration number, so every advertiser observed was a licensed agent.
- Zigbang's robots.txt disallows all crawling for unnamed user agents on both www.zigbang.com and apis.zigbang.com, and the Zigbang Scraper does not apply it as a filter.
What it does
Extracts one-room, villa and officetel listings for monthly rent, jeonse and sale from Zigbang, South Korea's rental listings app, searched by place name or coordinates anywhere in Korea. Prices arrive in KRW and in 만원, Korean labels become stable English keys with the original kept alongside, and a second row type lists the licensed agents publishing in an area.
{
"record_type": "listing",
"listing_id": 50484295,
"url": "https://www.zigbang.com/home/officetel/items/50484295",
"property_type": "officetel",
"deal_type": "monthly_rent",
"deposit_krw": 139000000,
"monthly_rent_krw": 200000,
"maintenance_fee_krw": 90000,
"currency": "KRW",
"size_exclusive_m2": 19.17,
"size_supply_m2": 37.92,
"floor": null,
"floor_label": "low",
"building_floors": 15,
"room_layout": "open_studio",
"province_en": "Seoul",
"district": "마포구",
"neighborhood": "성산동",
"options": ["air_conditioner", "refrigerator", "washing_machine", "induction_cooktop"],
"building_approval_date": "2017-11-03",
"parcel_number": "1144012500105930001",
"nearby_subways": [{ "id": 371, "name": "마포구청역", "lines": "6호선" }],
"agent_office_name": "OO공인중개사사무소",
"agent_phone": "01000000000",
"agent_email": "agent@example.com",
"agent_office_registration_number": "11440-2020-00000",
"detail_scraped": true
}Why this one
Korean labels become stable keys, with the original kept
Zigbang publishes options, room layouts and deal types as Korean text. The Zigbang Scraper maps them to stable English keys — `monthly_rent`, `open_studio`, `air_conditioner` — and keeps the original in a `*_raw` field beside each one, so nothing is lost in translation and nothing breaks when a label is reworded.
Land-registry join keys on every detail row
Detail pages carry the 19-digit parcel number (PNU), the legal-dong code and the jibun address. Those are the keys Korean public land and building registers use, so a listing can be joined to official records without geocoding.
Licensed agents as a second row type
With `outputType: agents` the Zigbang Scraper returns one row per licensed agent publishing in an area, ranked by listing count, with office, phones, email, registration numbers, listing counts by type and deal, and response rates. On 60 agents around Jamsil and Bundang the contact and registration fields were 100% filled.
Use cases
- Research monthly rent and jeonse deposits by district, subway station or radius.
- Compare jeonse against monthly-rent offers for the same property type and area.
- Shortlist studios near a campus or office for relocation, with photos, options and the agent to call.
- Screen villas and officetels for sale with price per m², building age and a parcel number to join with land records.
- Build a list of licensed brokers active in an area, with office contacts and listing counts.
Input
Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.
| Field | Default | What it does |
|---|---|---|
outputTypeselect | "listings" | What to collect`listings` or `agents`. One row type per run. |
locationstring | empty = Gangnam-gu | LocationA district (마포구), neighbourhood (역삼동) or subway station (강남역), resolved with Zigbang's own place search. Common English names such as Seoul, Busan, Hongdae and Jamsil are translated. |
radiusKmnumber | 1.5 | Radius (km)0.2 to 20. Measured: 310 listings within 1.5 km of the Gangnam-gu centre, 475 around Hongik University station. |
latitudenumber | — | Latitude / longitudeSearch around exact coordinates instead of a place name. Both must be set, inside South Korea. |
propertyTypesstring[] | all three | Property types`oneroom`, `villa`, `officetel`. |
dealTypesstring[] | all three | Deal types`monthly_rent`, `jeonse`, `sale`. Sale exists for villas and officetels only. |
maxItemsinteger | 100 | Maximum rowsUp to 10,000. |
sortByselect | "newest" | Order`newest` or `nearest` to the location's centre. |
includeDetailsboolean | false | Add the detail pageDescription, photos, options, bathrooms, orientation, parking, elevator, approval date, PNU, nearby subway stations and amenities, complex, and the agent's contacts. One extra request and one extra event per listing. |
minDepositinteger | — | Price filters (만원)With `maxDeposit`, `minMonthlyRent`, `maxMonthlyRent`, `minSalePrice` and `maxSalePrice`, all in units of 10,000 KRW: 1000 = 10,000,000 KRW. |
includePrivateSellerContactboolean | false | Include contact of unregistered advertiserspersonal dataLicensed agents' business contacts are always included. Enable only with a lawful basis to process private individuals' contact data. |
maxConcurrencyinteger | 4 | Parallel requests1 to 8. 4 finished every test run cleanly; 6 in parallel were measured without a refusal. |
Output and fill rates
A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.
| Field | Filled | Meaning |
|---|---|---|
listing_idinteger | 100% | Zigbang's listing ID, stable across runs. |
deal_typestring | 100% | `monthly_rent`, `jeonse` or `sale`, with the Korean original in `deal_type_raw`. |
deposit_krwnumber | not measured | Deposit in KRW for rent and jeonse, with `deposit_10k_krw` in 만원. The price for the row's own deal type was present on 718 of 718 listings. |
monthly_rent_krwnumber | not measured | Null on jeonse, never 0. With `monthly_rent_10k_krw`. |
sale_price_krwnumber | not measured | Sale listings only, with `sale_price_10k_krw`. |
maintenance_fee_krwnumber | 100% | Monthly maintenance fee. |
size_exclusive_m2number | 100% | With `size_supply_m2` and the pyeong equivalents. |
size_contract_m2number | 37.9% | Officetels only: 100% there, 0% on one-rooms and villas. |
floornumber | 72.8% | Numeric floor. The rest publish only `floor_label` (low, middle, high); officetels 44.1%. |
latitudenumber | 100% | With `longitude`: the point Zigbang shows on its map. |
addressstring | 100% | With `province`, `province_en`, `district`, `neighborhood` and `lot_number`. |
move_in_datestring | 40.9% | When the property is available. |
parcel_numberstring | 100% | Detail pages: the 19-digit PNU, with `legal_dong_code` and `jibun_address`. |
optionsstring[] | 96.8% | Detail pages: furnishing options as English keys, original in `options_raw`. |
building_approval_datedate | 93.7% | Detail pages: normalised approval date. |
nearby_subwaysobject[] | 94.7% | Detail pages: stations with their lines. |
parking_spacesnumber | 75.3% | Detail pages. |
complex_namestring | 37.9% | Detail pages: officetel complexes only, so 0% on one-rooms and villas. |
agent_office_registration_numberstring | 100% | Detail pages, with the agent's office, mobile, office phone and email, each 100%. |
agent_languagesstring[] | 34.1% | Detail pages: share of listings whose agent speaks a language other than Korean. |
Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.
Datasets
Different record types go to different datasets, so the main table never carries columns that are blank on most rows.
defaultOne row per listing, or one per licensed agent with `outputType: agents`.billedRun summary and errors (key-value store)What was collected, and why anything was skipped.never billed
Pricing
Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.
| Event | Price | Notes |
|---|---|---|
apify-actor-startActor start | $0.00001 | Charged when the run starts. |
listingListing | $0.0019 | One Zigbang listing. Failed requests, error rows and duplicates within a run are not charged. |
listing-detailListing detail page | $0.00075 | Only with `includeDetails`: a listing with its detail page costs $0.00265. |
agentAgent profile | $0.0019 | Only with `outputType: agents`: one licensed agent. |
Measurements
Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.
Fill-rate sample
718 listings with detail pages
Seoul, Busan, Gyeonggi-do, Incheon, Daegu and Daejeon on the Apify platform, 1 October 2026, plus 1,000 search-only listings around central Seoul.
Numeric floor published
72.8% of 718
One-room 89.4%, villa 91.4%, officetel 44.1%. The rest publish only low, middle or high.
Licensed advertisers
718 of 718
Detail pages carrying a brokerage office registration number on 1 October 2026; 301 of 301 on 23 September.
Throughput
1,000 listings in 18 seconds
One platform run, Seoul with a 5 km radius, search-only, 63 MB peak memory, 0 duplicates.
Agent rows
Contacts 100%; call response rate 96.7%
60 agents around Jamsil and Bundang.
What it will not do
Stated plainly so you can judge fit before spending anything.
- No apartments (아파트): Zigbang lists them through a different, complex-based system.
- Sale exists only for villas and officetels; one-rooms are rentals only.
- `maxItems` caps a run at 10,000 rows.
- Coordinates are the point Zigbang shows on its map, which may be offset from the exact building.
- English place names work for common districts and areas; anything else works best in Korean.
- Inventory depends on Zigbang: a search for villas on jeonse within 3 km of Busan city hall returned 1 listing on 1 October 2026.
Privacy
- Licensed agents' office phone, business mobile and email are published on Zigbang for customer calls and are delivered as business contact data.
- 718 of 718 detail pages measured on 1 October 2026 carried a brokerage registration number: no private advertiser was observed.
- If an advertiser without a broker registration number appears, their phones and email are removed and phone numbers in their text are masked, unless `includePrivateSellerContact` is enabled.
- Removal requests: privacy@actorstack.dev
See also the data removal process.