Zigbang Scraper icon

Zigbang Scraper

Scrape Zigbang property listings across Seoul and South Korea, including one-room, villa and officetel rentals and sales. Extract deposits, monthly…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Zigbang Scraper at a glance

Zigbang Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes itemid, title, servicetype, salestype and deposit, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$1.80 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
32 options

Scrape Zigbang property listings across Seoul and South Korea, including one-room, villa and officetel rentals and sales. Extract deposits, monthly rent, prices, floor plans, property details, subway access, locations and agent contacts.

What Zigbang Scraper can do

  • Two ways in. Resolve a Korean location keyword (a subway station, neighbourhood or district) and read every listing around it, or paste listing URLs or bare numeric ids and read exactly those.
  • Three listing verticals. Oneroom, villa and officetel, each with server side deal type, deposit, rent, maintenance fee and size filters, so a filtered run reads only the matching slice.
  • Detail enrichment on demand. Switch on a per listing pass for the full description, options, elevator, bathroom count, direction, parking, move in date, nearby subway lines and the agent's public office contact block, and pay the surcharge only for listings you actually get back.
  • Resume picks up where you left off. Continue an interrupted pull without paying again for records a previous run already collected.
  • Incremental mode for recurring searches. Schedule the same search again and again and get every listing classified NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against your own stored baseline.
  • A refused run fails loudly. If nothing could be read at all, the run stops with a clear message instead of quietly returning an empty dataset, so "no listings matched" is never confused with "the connection failed."

Choose what to collect

These inputs let you configure Zigbang Scraper - Korea Property Listings, Rent & Agents. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredsearch finds listings around a location keyword (a subway station, a neighbourhood, a district). url reads the exact listings you paste.

Choices: search, url

urlsarrayListing page URLs (m.zigbang.com or www.zigbang.com /home//items/12345678, or the /v3/items/12345678 API form), bare numeric listing ids, or a keyword search API URL (/v3/search?q=...), which is read like search mode. Each pasted listing decides its own scope: the search filters below are ignored here.
querystringA subway station, neighbourhood or district name in Korean, for example 강남역, 홍대입구 or 마포구. The best subway match is used with the radius below; otherwise the area around the resolved location is read.
serviceTypestringoneroom = studio/one-room (원룸), villa = low-rise residential (빌라), officetel = live-work (오피스텔).

Choices: oneroom, villa, officetel

subwayRadiusKmintegerUsed when the location keyword resolves to a subway station: read listings within this many km of the station.
geohashstringRead this geohash cell directly instead of resolving the keyword. A 4-character cell is roughly 39 km by 20 km; leave empty to use the keyword.
latnumberSearch around a coordinate instead of a keyword (give lat and lng together). Precision and ring below set the area; a geohash cell, when filled, wins over this.
Show 25 more inputs
More input fields
InputWhat it controls
lngnumberCentre longitude for the coordinate search (give with latitude).
precisionintegerCell size of the coordinate search: 4 is about 39 km by 20 km, 6 about 1.2 km by 0.6 km, 8 about 38 m by 19 m. Advanced.
ringintegerCells read around the centre cell: 0 = centre only, 1 = 3x3 cells, up to 3.
searchUrlsarrayPasted apis.zigbang.com listing list URLs (.../house/property/v1/items/onerooms?geohash=wydm6&depositMax=1000). When filled they define the search scope in search mode; price/size filters inside the URL are kept.
sortBystringThe source has no sort, so listings are ordered after reading them all: newest (registered date), price (deposit plus 100 times monthly rent), size (m2). Rows missing the value go last. maxItems then keeps the first N of the ordered list. none keeps the source order.

Choices: none, newest, priceAsc, priceDesc, sizeAsc, sizeDesc

salesTypesarrayNarrow by deal type, one per entry. Valid values: jeonse (전세, lump-sum key-money lease), wolse (월세, deposit plus monthly rent), maede (매매, purchase), dongi (단기, short term). Leave empty for all types available on the chosen listing type. Note: oneroom listings have no sale (maede) type on the source. Unknown values fail the run loudly.
depositMinintegerLowest deposit (보증금) to include, in 10,000 KRW units.
depositMaxintegerHighest deposit (보증금) to include, in 10,000 KRW units.
rentMinintegerLowest monthly rent (월세) to include, in 10,000 KRW units.
rentMaxintegerHighest monthly rent (월세) to include, in 10,000 KRW units.
manageCostMinintegerLowest building maintenance fee (관리비) to include.
manageCostMaxintegerHighest building maintenance fee (관리비) to include.
sizeMinnumberSmallest floor size (전용면적) to include, in square meters.
sizeMaxnumberLargest floor size (전용면적) to include, in square meters.
fetchDetailsbooleanFetch each listing's detail payload: full description, options (appliances, furniture), elevator, bathroom count, direction, parking, move-in date, nearby subway lines and the agent's public contact block. Adds one request per listing and bills the detail-enrichment surcharge per listing.
maxItemsintegerStop after this many listing records. 0 means no limit: the run reads every listing in the scope.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning items already collected there.
incrementalModebooleanRemember the previous run of the same search and classify every listing as NEW, UPDATED, UNCHANGED or EXPIRED. Every field is compared (price, deposit, rent, management cost, size, floor, address, photos, tags, options and the rest) except viewCount, isNew and badges, which change without a real listing change and stay in the output but never trigger UPDATED. Unchanged listings are suppressed unless emitUnchanged is on.
stateKeystringName the incremental baseline yourself when you run several searches that you want tracked separately but that share the same inputs. Leave empty to key the baseline on the search itself.
emitUnchangedbooleanWith incremental mode on, also return UNCHANGED rows. These are extra billed rows.
emitExpiredbooleanWith incremental mode on, also return EXPIRED rows for listings from the previous baseline that no longer appear. These are extra billed rows. Only a complete, uncapped scan can mark listings expired.
ignoreFieldsForChangesarrayOptional. Field names that must NOT make a listing count as UPDATED, for example "tags" or "agent.phone" (dotted paths reach nested fields). Ignored fields stay in the output and the saved baseline; they are only left out of the comparison and of changedFields. Leave empty to compare every field except viewCount, isNew and badges.
mcpConnectorsarrayConnector ids to export results into (for example a Notion connector id). Optional; results are unaffected when export fails.
notionParentPageUrlstringWhen a Notion connector is selected, pages are created under this parent page URL.
maxNotifyListingsintegerCap how many of this run's records the connector export sends.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

itemIditemId
titletitle
serviceTypeserviceType
salesTypesalesType
depositdeposit
rentrent
manageCostmanageCost
sizeM2sizeM2
floorfloor
districtdistrict
neighborhoodneighborhood
addressaddress
Show 39 more fields
isNewisNew
registeredAtregisteredAt
urlurl
thumbnailUrlthumbnailUrl
changeTypechangeType
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt
deposit_krwdeposit_krw
rent_krwrent_krw
currencycurrency
rent_per_m2_krwrent_per_m2_krw
address_regionaddress_region
descriptiondescription
optionsoptions
elevatorelevator
bathroomCountbathroomCount
roomDirectionroomDirection
parkingAvailableTextparkingAvailableText
moveinDatemoveinDate
viewCountviewCount
imageUrlimageUrl
subwayssubways
agentagent
changedFieldschangedFields
pnupnu
bjd_codebjd_code
building_idbuilding_id
danji_namedanji_name
manage_cost_includesmanage_cost_includes
imagesimages
image_countimage_count
approve_dateapprove_date
direction_criteriondirection_criterion
address_jibunaddress_jibun
updated_atupdated_at
agent_nameagent_name
agent_phoneagent_phone
agent_addressagent_address
statusstatus

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "itemId": 12345678,
  "url": "https://www.zigbang.com/home/oneroom/items/12345678",
  "serviceType": "원룸",
  "title": "Newly painted one room with a private entrance",
  "salesType": "월세",
  "deposit": 1000,
  "rent": 55,
  "manageCost": "60000",
  "sizeM2": 21.4,
  "supplyAreaM2": 25.2,
  "exclusiveAreaM2": 18.6,
  "roomType": "02",
  "roomTypeTitle": "원룸",
  "floor": "4층",
  "buildingFloor": "6",
  "registeredAt": "2026-08-20T09:15:00+09:00",
  "isNew": true,
  "status": true,
  "tags": [
    "역세권",
    "반려동물가능"
  ],
  "badges": [],
  "address": "서울시 샘플구 샘플동 12-3",
  "city": "서울시",
  "district": "샘플구",
  "neighborhood": "샘플동",
  "lat": 37.55,
  "lng": 127,
  "thumbnailUrl": "https://ic.zigbang.com/ic/items/12345678/1.jpg",
  "description": "Recently renovated one room with a bright south facing window.",
  "options": [
    "에어컨",
    "냉장고",
    "세탁기"
  ],
  "elevator": true,
  "bathroomCount": 1,
  "roomDirection": "남향",
  "parkingAvailableText": "가능",
  "moveinDate": "즉시입주",
  "viewCount": 312,
  "imageUrl": "https://ic.zigbang.com/ic/items/12345678/1.jpg",
  "subways": [
    {
      "name": "샘플역",
      "lines": "2호선"
    }
  ],
  "agent": {
    "name": "김민수",
    "officeName": "샘플공인중개사사무소",
    "officePhone": "02-1234-5678",
    "officeAddress": "서울시 샘플구 샘플로 10",
    "officeRegNumber": "12345-2026-00001"
  },
  "changeType": "UPDATED",
  "changedFields": [
    "rent"
  ],
  "firstSeenAt": "2026-08-01T02:00:00.000Z",
  "lastSeenAt": "2026-09-20T02:00:00.000Z"
}

Ways to use this data

  • Renters and relocation services: compare oneroom, villa and officetel options around a subway line before booking viewings.
  • Brokerage and property management tools: refresh a district's market snapshot on a schedule and act only on the listings that actually changed.
  • Market research and pricing analysts: track deposit and monthly rent ranges by neighbourhood over time.
  • Real estate apps and aggregators: pull structured listing data, including public agent contacts, behind your own API or app.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Zigbang Scraper return?

The documented output for Zigbang Scraper includes itemid, title, servicetype, salestype, deposit, rent, managecost and sizem2. Availability of each field depends on the source page and the selected mode.

How much does Zigbang Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Unchanged listings are suppressed and not billed unless you also turn on Emit unchanged listings.

Can I use Resume and Incremental mode together?

No. They solve two different problems: Resume continues one specific interrupted run, Incremental mode tracks a recurring search over time. Setting both fails the run immediately with a message asking you to use one, not both.

Why did my run fail instead of returning an empty dataset?

If every request this run made was refused, the run stops with a clear connection problem message instead of returning an empty dataset, so "no listings matched" is never confused with "the connection failed." A search that genuinely matches nothing, or a pasted id the source does not recognize, still succeeds with an empty result.

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 a summary of results into Notion, Linear or Airtable.

Ready to collect with Zigbang Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.