# Bobaedream Scraper: Used & New Cars in South Korea (`recordsdata/bobaedream-scraper`) Actor

Scrape bobaedream.co.kr (보배드림), a major Korean car marketplace: used and new cars from dealers and private sellers with KRW price, mileage, make, model, year, fuel, photos, dealers and new-listing monitoring. No login, no proxy. Export JSON, CSV or Excel.

- **URL**: https://apify.com/recordsdata/bobaedream-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $22.00 / 1,000 vehicle listings

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

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## Bobaedream Scraper: Used and New Cars in South Korea (보배드림)

> Bobaedream Scraper is an Apify Actor that extracts car listings from bobaedream.co.kr (보배드림), one of South Korea's biggest car marketplaces: domestic and imported used cars, new cars, lease and rent takeovers, from dealers and private sellers. Each listing comes with the price in Korean won, mileage, make, model, generation, trim, year, fuel, gearbox, drive type, color, engine size, photos, equipment list, accident-history summary, region and seller type. It also lists the dealers behind the ads. No login, no proxy, no browser. Export to JSON, CSV or Excel.

### What can you scrape from Bobaedream?

- **Vehicle listings** from the two sections of the site: Buy My Car (dealers and private sellers) and the Cyber Store (dealer premium display). On 2026-10-23 the site held about 3,160 active ads: 1,078 domestic and 2,086 imported.
- **Listing pages** (optional): exact mileage, first registration, color, engine size and power, full equipment list, insurance-claim counts, owner changes, up to 30 photos and the seller's text.
- **Dealers**: the dealer directory with business name, address and map position, trade association, member since, ads in stock and cars sold.
- **Lease and rent takeovers**: upfront payment, monthly payment and months left.
- **Monitoring**: a repeat run returns only new listings, and a repriced listing comes back with its previous price.

### Why use this actor?

- **Real filters, checked again on every row**: origin, make, model, year, price, mileage, fuel, gearbox, drive type, color, seats, engine size, region, seller type and offer type. Every row that leaves the actor is tested against your filters, so the output never contains an ad that does not match.
- **Both price units**: `price` is the full amount in won, `priceManWon` is the 만원 (10,000 won) figure exactly as the site prints it.
- **Make, model and generation decoded**: Korean titles such as `벤츠 6세대 S450L 4매틱` become `make: Mercedes-Benz`, `model: S-Class`, `generation: Gen 6 (2013-2021)`, `trim: S450L 4매틱`. You can filter by English names (`BMW`, `3 Series`, `Sportage`) or by the Korean ones.
- **Clean, typed output**: numbers are numbers, dates are ISO 8601, fuel, gearbox and drive type are English values, and absent values are left out instead of being filled with nulls.
- **Privacy built in**: seller names, private sellers' addresses, phone numbers and license plates are never output. Dealer business phones appear only when you switch them on.
- **No depth limit**: a search of 1,500 imported cars (22 result pages) ran in about 2.5 minutes with no duplicates.

### How to scrape Bobaedream listings in four steps

1. Pick the **Origin** (domestic, imported or both) on the actor page.
2. Add a make such as `Hyundai` and a model such as `Sportage`, or leave them empty, and set filters such as year, price or fuel.
3. Set the maximum number of results and click **Start**.
4. Download the dataset from the **Storage** tab as JSON, CSV or Excel.

Three modes: `search` by filters, `urls` to read listings you already know (links or numbers like `M2264013`, also dealer pages) and `dealers` for the dealer directory. Make and model names are not case sensitive; an unknown name ends the run with one free error row that lists valid examples.

### What data do you get?

Every row is a vehicle listing or a dealer. Fields that do not apply, or that the seller left empty, are left out.

| Field | Description |
|---|---|
| `listingId`, `url`, `title` | Listing number (`M` Buy My Car, `C` Cyber Store), canonical address and the title as printed |
| `listingType`, `listingStatus`, `inventory` | `sale`, `lease`, `rent`; `active`, `sold`, `expired`, `contracted`, `on-hold`; `mycar` or `cyber` |
| `price`, `priceManWon`, `currency`, `priceOnRequest` | Price in won, the same in 만원, `KRW`, and a flag for ads that say "price on request" (no price is output) |
| `upfrontPayment`, `monthlyPayment`, `contractMonths`, `remainingMonths`, `takeoverSupport` | Lease and rent terms |
| `changeType`, `previousPrice`, `priceChange`, `priceChangePct` | Monitor rows: `new`, `price-drop` or `price-increase`, old price, difference and percent |
| `make`, `model`, `generation`, `trim`, `year`, `firstRegistration` | Make, model group, generation with years, trim, model year and first registration (`2023-03`) |
| `mileage`, `mileageUnit`, `mileageRounded` | Odometer, `km` or `mi`, and whether it is the site's rounded list value |
| `fuelType`, `transmission`, `driveType`, `bodyType`, `sizeClass`, `color`, `colorName` | English values such as `Gasoline`, `Automatic`, `AWD`, `SUV` |
| `engineSize`, `engineSizeUnit`, `powerHp`, `cylinders`, `seats` | Engine size in cc, horsepower, cylinders and seats |
| `features`, `warranty`, `description`, `tagline` | Equipment list (Korean), manufacturer warranty, the seller's text with contact details removed, and the headline |
| `ownerChanges`, `ownDamageClaims`, `ownDamageClaimsKrw`, `otherDamageClaims`, `otherDamageClaimsKrw`, `recordLabels` | Insurance-history summary and record badges |
| `city`, `region`, `address`, `latitude`, `longitude`, `locationText` | Where the car is; address and map position for dealers only |
| `images`, `imageCount`, `videoUrl`, `hasVideo` | Photos (real photos only), count and video link |
| `publishedAt`, `views`, `favorites`, `percentOfNewPrice` | Listing date, view and favorite counts, price as a percent of the new price |
| `isPrivateSeller`, `sellerType`, `sellerName`, `sellerUrl`, `sellerPhone`, `sellerCertified`, `sellerListingCount`, `sellerSoldCount` | Seller type; the company name for dealers only; phone only with **Include dealer contact details** |
| `dealerId`, `name`, `phone`, `association`, `memberSince`, `activeListings`, `soldLastYear`, `soldTotal` | Dealer rows |
| `referenceCode`, `cyberListingId` | Registration number of the ad and the Cyber Store number of a mirrored ad |
| `sourceSite`, `country`, `vehicleType`, `scrapedAt`, `raw` | Source, country code, vehicle type, extraction time and a few untouched site values |

#### Sample output

A real vehicle row from a cloud run with listing pages on (shortened):

```json
{
  "listingId": "M2266510",
  "url": "https://www.bobaedream.co.kr/mycar/mycar_view.php?no=2266510&gubun=K",
  "sourceSite": "bobaedream.co.kr",
  "country": "KR",
  "listingType": "sale",
  "vehicleType": "car",
  "title": "르노코리아 QM5 네오 2.0 가솔린 2WD LE",
  "description": "신조1인소유로 순수자가용으로 사용한 무사고 차입니다 ...",
  "price": 5800000,
  "currency": "KRW",
  "make": "Renault Korea",
  "model": "QM5",
  "trim": "네오 2.0 가솔린 2WD LE",
  "year": 2015,
  "mileage": 87824,
  "mileageUnit": "km",
  "fuelType": "Gasoline",
  "transmission": "Automatic",
  "engineSize": 1998,
  "powerHp": 143,
  "bodyType": "SUV",
  "driveType": "FWD",
  "color": "Dark grey",
  "seats": 5,
  "warranty": "Expired",
  "features": [
    "알루미늄휠",
    "전동사이드미러",
    "LED리어램프"
  ],
  "city": "광명시",
  "region": "Gyeonggi",
  "address": "경기 광명시 오리로651번길 6 (하안동) 다카빌딩 211호",
  "images": [
    "https://file4.bobaedream.co.kr/direct/2026/10/16/Eh11831792115403_1.jpg",
    "https://file4.bobaedream.co.kr/direct/2026/10/16/Eh11831792115403_2.jpg"
  ],
  "publishedAt": "2026-10-16",
  "sellerName": "광명단지 상승자동차",
  "sellerUrl": "https://www.bobaedream.co.kr/mycar/mycar_holding_list.php?sellerID=b3BocTlvcGhxZm9waHIwb3BocjFvcGhyM29waHFn",
  "isPrivateSeller": false,
  "referenceCode": "2635002128",
  "priceManWon": 580,
  "generation": "네오 (2014-2016)",
  "firstRegistration": "2015-07",
  "engineSizeUnit": "cc",
  "cylinders": 4,
  "imageCount": 20,
  "inventory": "mycar",
  "listingStatus": "active",
  "recordLabels": [
    "성능기록",
    "보험이력"
  ],
  "views": 117,
  "percentOfNewPrice": 23,
  "sellerType": "dealer",
  "sellerCertified": true,
  "sellerListingCount": 32,
  "sellerSoldCount": 13,
  "ownerChanges": 0,
  "ownDamageClaims": 0,
  "ownDamageClaimsKrw": 0,
  "otherDamageClaims": 0,
  "otherDamageClaimsKrw": 0,
  "scrapedAt": "2026-10-23T19:36:48.088Z"
}
```

### Monitor new listings and repriced ads

Switch on **Only new listings (monitor)** and the actor remembers every listing it delivered, in a named key-value store of your own account. Scheduled runs of the same search return only unseen listings. Add **Report price changes** and a repriced listing comes back with `previousPrice`, `priceChange` and `priceChangePct`. Use **Monitor name** to keep several searches apart and **Forget seen listings** to start over. Listings skipped by the monitor are never charged.

### How does it compare with other Bobaedream scrapers?

The only other Bobaedream car scraper on the Apify Store, read on 2026-10-23, returns 11 fields per listing, including the plate number and the seller's phone. This actor returns more than 80 fields and leaves out the plate number, the seller's name and private phones on purpose.

| | Bobaedream Scraper | Other Bobaedream scraper |
|---|---|---|
| Fields per listing | More than 80, flat and typed | 11 |
| Filters | Over 20 (make, model, year, price, mileage, fuel, gearbox, drive, color, seats, engine size, region, seller and offer type) | Not listed |
| Dealers, lease and rent, monitor mode | Yes | Not listed |
| Make, model, generation and trim split | Yes | Title only |
| Plate numbers and private phones | Never output | Output |

### Is it legal to scrape Bobaedream? Limits and responsible use

The actor reads public listing pages and the public result lists of the site. It does not log in or bypass any protection, and the robots.txt of the site allows these pages. Seller names, private sellers' addresses and phone numbers, and license plates are never output; dealer business phones only appear with **Include dealer contact details**. You are responsible for using the data in line with the site terms and the data protection law that applies to you, including the Korean Personal Information Protection Act.

Limits:

- The result list shows rounded mileage (10,000 km steps above 10,000 km, 1,000 km steps below) and a month-and-day date without a year. Switch on **Read the listing page of every ad** for exact mileage, the exact first registration, color and engine size.
- Color and engine size filters work from the listing page, so they read every candidate page and are slower than the other filters.
- The site's own search is Korean: a keyword in English finds nothing. Make and model names accept English.
- Many imported cars carry "price on request" instead of a price (more than half of the imported ads on 2026-10-23). They have `priceOnRequest: true` and no `price`. When you set a price bound they are not returned, as on the site itself.
- Sellers type their own prices: a few ads carry obvious typing errors, and a sort by price shows them first.
- Titles, equipment and descriptions are in Korean, as written by the sellers.
- Wanted ads, parts and the valuation tables of the site are not covered.
- Free Apify plans are limited to 10 results per run.

### Use with AI agents (MCP)

Connect the Apify MCP server to Claude, Cursor or another MCP client and this actor appears as a tool: `https://mcp.apify.com?tools=RecordsData/bobaedream-scraper`.

Example prompt: "Find the 20 cheapest diesel Kia Sportage cars from 2019 or newer on Bobaedream and list price, mileage, region and seller type." The agent sends `{ "mode": "search", "make": "Kia", "model": "Sportage", "fuelType": "diesel", "yearFrom": 2019, "sortBy": "price-asc", "maxItems": 20 }` and analyzes the rows.

### Run it from code

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('RecordsData/bobaedream-scraper').call({
    mode: 'search',
    origin: 'imported',
    make: 'BMW',
    yearFrom: 2020,
    maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].price);
```

You can also use the Python client, Make, Zapier or n8n, and schedule runs in the Apify Console.

### Frequently Asked Questions

#### Which listings does Bobaedream Scraper cover?

Used and new cars sold on bobaedream.co.kr: domestic and imported, dealers and private sellers, sale, lease takeover and rent takeover ads, in both the Buy My Car section and the Cyber Store. By default only active ads are returned; switch on **Include sold and expired ads** to get the others, marked by `listingStatus`.

#### Do I need a proxy, a login or an API key?

No. The actor makes plain HTTP requests to the public site and needs no proxy, browser or Bobaedream account. You only need an Apify account to start runs, and the free plan returns up to 10 results per run. The input accepts a proxy if the site ever starts blocking.

#### Is it legal to scrape bobaedream.co.kr?

The actor reads publicly visible listings and does not log in. It respects the site's robots.txt. Seller names, private sellers' phones and addresses and license plates are not output, and you remain responsible for using the data in line with the site terms and the data protection law that applies to you.

#### How much does a run cost?

The actor is billed per event: one price for a vehicle listing from the result list, one for a listing with its full page, and one for a dealer. The Pricing tab of the actor page shows the live rates. Error rows, empty searches and listings skipped by monitoring are never charged.

#### What is the difference between a vehicle record and a vehicle detail record?

A vehicle record comes from the result list and already holds price, make, model, generation, year, rounded mileage, fuel, gearbox, region, a thumbnail and the seller type. Switch on **Read the listing page of every ad** to get a vehicle detail record with exact mileage, color, engine size and power, the equipment list, insurance-claim counts, owner changes, all photos and the seller's text.

#### Why do many imported cars have no price?

Sellers of imported cars often write "price on request" (가격상담) instead of an amount. Those rows have `priceOnRequest: true` and no `price` or `currency`, so they are never read as a price of zero. Filter on that flag in the dataset to find them or leave them out. When you set a price bound they are dropped.

#### What do price and priceManWon mean?

The site quotes prices in 만원 (man-won), units of 10,000 won: `620만원` is 6,200,000 won. `priceManWon` is that figure, `price` is the full amount in won (`priceManWon` times 10,000), and `currency` is `KRW`.

#### Why is the mileage sometimes rounded?

The result list prints rounded values such as `7만km`. Rows built from the list have `mileageRounded: true`. With **Read the listing page of every ad** you get the exact odometer reading. A few imported cars report miles; their `mileageUnit` is `mi`.

#### Why is there no seller name or phone number in the rows?

Seller names on the site are personal names and private sellers' phones are personal data, so they are not output. For dealers the business name is output, and the dealer's business phone is returned only when you switch on **Include dealer contact details**. To reach a seller, use the contact options on the listing page of the site itself.

#### Can I search in English?

Make and model accept English names (`Mercedes-Benz`, `E-Class`, `Sportage`) and Korean ones. The free-text **Keyword** goes to the site's own Korean search, so use Korean words there, for example `스포티지`.

#### Can I get only the listings published since my last run?

Yes. Switch on **Only new listings (monitor)** and keep the same search settings, or the same **Monitor name**. Add **Report price changes** to also get a row, with `changeType`, `previousPrice` and `priceChangePct`, when the price of a known listing moves.

#### What happens when the search finds nothing or the input is wrong?

A search with no hits ends as succeeded with an empty dataset and charges nothing. A wrong input value, such as a minimum year above the maximum or an unknown make, ends as succeeded with one free error row that explains the problem, so a typo never costs you money.

### Support

Questions, a missing field or a feature request: contact.punkrecordsdata@gmail.com. Reviews on the actor page help other people find it.

This actor is an independent tool and is not affiliated with bobaedream.co.kr.

# Actor input Schema

## `mode` (type: `string`):

search = used and new car ads for the make, model and filters below. urls = the listings, listing numbers and dealer pages you list. dealers = the dealerships that sell what the search filters describe, or the dealer pages you list, with company, address, coordinates, association and stock counts.

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

Stops after this many rows (all record types together). Free plans are limited to 10 items per run. The site has no depth limit: a search with 7,500 results can be read to the end.

## `origin` (type: `string`):

Domestic = Korean makes (Hyundai, Kia, Genesis, KG Mobility, Renault Korea, Chevrolet Korea). Imported = every other make. Both reads the two catalogues one after the other. A make that is sold in only one origin with the other one chosen returns a clear error row.

## `inventory` (type: `string`):

Buy My Car (mycar) is the full catalogue: dealer and private ads. Cyber Store (cyber) is the narrower premium display of dealer cars; every active Cyber Store car is also in Buy My Car, so choose it only when you want that subset.

## `make` (type: `string`):

Make in English or Korean, for example Hyundai, Kia, BMW, Mercedes-Benz, Porsche, 현대 or 벤츠. Case does not matter. An unknown make returns a clear error row listing examples. Empty means every make.

## `model` (type: `string`):

Model of the make above, for example Avante, Sonata, Sportage, 3 Series, 911 or 아반떼. Needs a make. A model the make does not have returns a clear error row listing examples. Empty means every model.

## `keyword` (type: `string`):

Free text matched by the site against make, model and ad title, usually in Korean (for example 스포티지 or 하이브리드). Empty means no text filter.

## `listingType` (type: `string`):

Sale = cars sold outright. Lease takeover = cars whose lease contract is handed over (price is the transfer cost). Rent = long-term rental cars. Rent ads have no filter on the site, so the actor reads on until it finds them; a rare combination can take many pages.

## `sellerType` (type: `string`):

Dealer = car dealers and their showrooms. Private = individual owners (ads of repeat sellers are not counted as private by the site). Private sellers are never named and their phone numbers are never output.

## `includeInactive` (type: `boolean`):

Off returns ads that are for sale now. On also returns ads the site still lists as sold, expired, under contract or on hold (the listing status field tells them apart).

## `yearFrom` (type: `integer`):

Only cars first registered or built in this year or later (the site matches either year). Empty means no limit.

## `yearTo` (type: `integer`):

Only cars first registered or built in this year or earlier. Empty means no limit.

## `minPrice` (type: `integer`):

Only ads priced at or above this amount in won, for example 10000000 for 10 million won. The site works in units of 10,000 won, so the amount is rounded up to the next full unit. Ads without a price are left out when a price filter is set.

## `maxPrice` (type: `integer`):

Only ads priced at or below this amount in won, for example 30000000. Rounded down to a full 10,000 won.

## `minMileage` (type: `integer`):

Only cars with at least this odometer reading in kilometres. Search results show the mileage rounded to a thousand or ten thousand km; the exact value is on the listing page (fetch listing pages).

## `maxMileage` (type: `integer`):

Only cars with at most this odometer reading in kilometres, for example 50000.

## `fuelType` (type: `string`):

Fuel or drivetrain. Hybrid (gasoline) covers plug-in and regular hybrids that the site lists as gasoline plus electric.

## `transmission` (type: `string`):

Automatic covers conventional automatic, CVT and dual-clutch. CVT and dual clutch narrow the search on the site, but the result rows only say Automatic because the site prints no finer type.

## `driveType` (type: `string`):

Which wheels are driven. Uses the site's own drive filter; ads that do not state a drive type are not returned when this is set.

## `color` (type: `string`):

Exterior colour as the site names it. The colour is only shown on the listing page, so rows of this search always include the listing page data.

## `region` (type: `string`):

Province or metropolitan city of the seller. Dealers in the large car markets list the market hall instead, and are still found through the site filter.

## `seats` (type: `integer`):

Number of seats, for example 5 or 7. The site groups 3 or fewer together and 10 or more together, so 2 returns every car with three seats or fewer and 12 returns ten seats or more.

## `minEngineCc` (type: `integer`):

Only cars with at least this displacement in cubic centimetres, for example 1600. Electric cars have none and are left out when set.

## `maxEngineCc` (type: `integer`):

Only cars with at most this displacement in cubic centimetres, for example 2000.

## `sortBy` (type: `string`):

Order of the results. Newest listings first is the default and the best choice for monitoring. Ordering by price, year or mileage uses the site's own sort over the whole result set.

## `startUrls` (type: `array`):

urls mode: listing addresses (www.bobaedream.co.kr/mycar/mycar_view.php?no=... or /cyber/CyberCar_view.php?no=...). dealers mode: dealer pages (mycar/mycar_holding_list.php?sellerID=...) or listing addresses, from which the dealer is read. Listing numbers can go in the next field.

## `listingIds` (type: `array`):

The letter C (Cyber Store) or M (Buy My Car) followed by the listing number, for example M2264013 or C785404. The number is the "no" value of the listing address.

## `fetchDetails` (type: `boolean`):

Off returns the data of the search result card, which is quick. On also opens each listing page for exact mileage, first registration date, engine size, colour, fuel economy, accident and ownership history, seller company and all photos. Listings from the addresses and numbers above always include the listing page.

## `includeContactDetails` (type: `boolean`):

Adds the business landline of dealerships and keeps business phone numbers inside their descriptions. Private sellers' names, phone numbers, plate numbers and addresses are never output, whatever this setting says.

## `onlyNew` (type: `boolean`):

Skips every listing seen in an earlier run with the same filters and monitor name, so scheduled runs return only what is new. Use the newest-first sort.

## `trackPriceChanges` (type: `boolean`):

Needs Only new listings. A listing seen before whose price changed comes back again with the previous price, the change and the change in percent.

## `resetSeen` (type: `boolean`):

Clears the memory of this monitor before the run, so everything counts as new again.

## `stateKey` (type: `string`):

Name of the memory used by Only new listings. Use one name per saved search. Empty derives a name from your filters.

## `maxConcurrency` (type: `integer`):

How many listing pages are read at the same time (1 to 5). Requests are paced to about four per second in total, so a higher value adds little.

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

Optional. Empty means direct requests, which work. Add a proxy only if your own network needs one.

## Actor input object example

```json
{
  "mode": "search",
  "maxItems": 10,
  "origin": "both",
  "inventory": "mycar",
  "make": "",
  "model": "",
  "keyword": "",
  "listingType": "any",
  "sellerType": "any",
  "includeInactive": false,
  "fuelType": "any",
  "transmission": "any",
  "driveType": "any",
  "color": "any",
  "region": "any",
  "sortBy": "newest",
  "startUrls": [],
  "listingIds": [],
  "fetchDetails": false,
  "includeContactDetails": false,
  "onlyNew": false,
  "trackPriceChanges": false,
  "resetSeen": false,
  "stateKey": "",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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": 10,
    "make": "",
    "model": "",
    "keyword": "",
    "startUrls": [],
    "listingIds": [],
    "stateKey": "",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/bobaedream-scraper").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": 10,
    "make": "",
    "model": "",
    "keyword": "",
    "startUrls": [],
    "listingIds": [],
    "stateKey": "",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/bobaedream-scraper").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": 10,
  "make": "",
  "model": "",
  "keyword": "",
  "startUrls": [],
  "listingIds": [],
  "stateKey": "",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/bobaedream-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/bobaedream-scraper"
        }
    }
}
```

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/u0hCQ2BixRIDYKC8P/builds/NfeovXv5WhKT6PdN1/openapi.json
