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.
| Input | What it controls |
|---|---|
modestring · required | search finds listings around a location keyword (a subway station, a neighbourhood, a district). url reads the exact listings you paste. |
urlsarray | Listing 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. |
querystring | A 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. |
serviceTypestring | oneroom = studio/one-room (원룸), villa = low-rise residential (빌라), officetel = live-work (오피스텔). |
subwayRadiusKminteger | Used when the location keyword resolves to a subway station: read listings within this many km of the station. |
geohashstring | Read 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. |
latnumber | Search 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
| Input | What it controls |
|---|---|
lngnumber | Centre longitude for the coordinate search (give with latitude). |
precisioninteger | Cell 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. |
ringinteger | Cells read around the centre cell: 0 = centre only, 1 = 3x3 cells, up to 3. |
searchUrlsarray | Pasted 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. |
sortBystring | The 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. |
salesTypesarray | Narrow 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. |
depositMininteger | Lowest deposit (보증금) to include, in 10,000 KRW units. |
depositMaxinteger | Highest deposit (보증금) to include, in 10,000 KRW units. |
rentMininteger | Lowest monthly rent (월세) to include, in 10,000 KRW units. |
rentMaxinteger | Highest monthly rent (월세) to include, in 10,000 KRW units. |
manageCostMininteger | Lowest building maintenance fee (관리비) to include. |
manageCostMaxinteger | Highest building maintenance fee (관리비) to include. |
sizeMinnumber | Smallest floor size (전용면적) to include, in square meters. |
sizeMaxnumber | Largest floor size (전용면적) to include, in square meters. |
fetchDetailsboolean | Fetch 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. |
maxItemsinteger | Stop after this many listing records. 0 means no limit: the run reads every listing in the scope. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there. |
incrementalModeboolean | Remember 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. |
stateKeystring | Name 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. |
emitUnchangedboolean | With incremental mode on, also return UNCHANGED rows. These are extra billed rows. |
emitExpiredboolean | With 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. |
ignoreFieldsForChangesarray | Optional. 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. |
mcpConnectorsarray | Connector ids to export results into (for example a Notion connector id). Optional; results are unaffected when export fails. |
notionParentPageUrlstring | When a Notion connector is selected, pages are created under this parent page URL. |
maxNotifyListingsinteger | Cap 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.
itemIditemIdtitletitleserviceTypeserviceTypesalesTypesalesTypedepositdepositrentrentmanageCostmanageCostsizeM2sizeM2floorfloordistrictdistrictneighborhoodneighborhoodaddressaddressShow 39 more fields
isNewisNewregisteredAtregisteredAturlurlthumbnailUrlthumbnailUrlchangeTypechangeTypefirstSeenAtfirstSeenAtlastSeenAtlastSeenAtdeposit_krwdeposit_krwrent_krwrent_krwcurrencycurrencyrent_per_m2_krwrent_per_m2_krwaddress_regionaddress_regiondescriptiondescriptionoptionsoptionselevatorelevatorbathroomCountbathroomCountroomDirectionroomDirectionparkingAvailableTextparkingAvailableTextmoveinDatemoveinDateviewCountviewCountimageUrlimageUrlsubwayssubwaysagentagentchangedFieldschangedFieldspnupnubjd_codebjd_codebuilding_idbuilding_iddanji_namedanji_namemanage_cost_includesmanage_cost_includesimagesimagesimage_countimage_countapprove_dateapprove_datedirection_criteriondirection_criterionaddress_jibunaddress_jibunupdated_atupdated_atagent_nameagent_nameagent_phoneagent_phoneagent_addressagent_addressstatusstatusExample 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.
