# 999.md Scraper: Vehicle Classified Ads Moldova (`recordsdata/999-md-scraper`) Actor

Scrape 999.md, the largest classifieds site in Moldova: cars, vans, trucks, motorcycles, tractors, trailers and more, with price in EUR, USD and lei, mileage, equipment, photos and seller data, plus dealer profiles. No login, no proxy. Export JSON, CSV or Excel.

- **URL**: https://apify.com/recordsdata/999-md-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 ads

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)

## 999.md Scraper: Vehicle Classified Ads from Moldova

> 999.md Scraper is an Apify Actor that extracts vehicle classified ads from 999.md, the largest classifieds site in Moldova. It reads 14 vehicle sections (about 104,800 ads for sale on 2026-10-19) and returns the price in euro, dollar and lei, make, model, year, mileage, fuel, gearbox, photos, region and seller type. No login, proxy or browser is needed.

Export the result as JSON, CSV, Excel, XML or HTML, or read it through the Apify API. The actor calls the same public GraphQL endpoint that the 999.md website uses for its own search pages, at about four requests per second.

### What can you scrape from 999.md?

| Section (`categories`) | Ads for sale on 2026-10-19 | Notes |
|---|---|---|
| `cars` | 81,663 | Make, model, generation, body, drive, VIN where given |
| `vans` | 6,336 | |
| `trucks` | 2,101 | Body, axle layout, payload |
| `buses` | 213 | |
| `motorcycles` | 4,770 | |
| `bicycles` | 2,974 | |
| `electric-scooters` | 1,382 | The section also holds accessories and parts |
| `construction-equipment` | 1,600 | |
| `tractors` | 1,370 | |
| `combines` | 365 | |
| `trailers` | 1,480 | |
| `retro-cars` | 177 | Classic cars |
| `watercraft` | 365 | Boats and other watercraft |
| `aircraft` | 18 | Includes light aircraft and paramotors |

Each row has up to 87 typed fields (the ones a listing does not have are left out): price in the listed currency plus `priceEur`, `priceUsd` and `priceMdl`, `make`, `model`, `year`, `mileage`, `fuelType`, `transmission`, `bodyType`, `driveType`, `engineSize`, `powerHp`, `color`, `condition`, `registration`, `region`, the full photo list, `videoUrl`, `publishedAt`, `updatedAt` and the seller block.

### Why use this actor?

- **The whole site is reachable.** Search depth is not capped. A local test read 1,500 cars in 27 seconds, and a daily monitor needs only the first page or two.
- **Real filters, applied by 999.md itself.** 150 car makes with their models, 44 regions and localities, price with EUR, USD or MDL, year, mileage, power, fuel, gearbox, body, drive, color, condition, registration, seller type and ads with video. A section that lacks a filter says so instead of ignoring it.
- **Three currencies in every row.** Ads listed in lei, euro or dollars come back with the three converted prices at the site's own rate.
- **Clean, typed output.** Numbers are numbers, enums are lowercase English (`diesel`, `automatic`, `suv`, `4x4`), dates are ISO 8601, and empty values are left out.
- **Monitoring built in.** Scheduled runs return only new ads and, if you ask, ads whose price changed.
- **Privacy built in.** Names, phone numbers and emails of private sellers are never output.

### How to scrape 999.md vehicle ads in four steps

1. Create a free account at https://console.apify.com and open the actor.
2. Pick the sections, then add filters such as makes `Toyota`, regions `Chișinău` or a price range.
3. Set the maximum number of results and click **Start**.
4. Download the dataset from the **Storage** tab as JSON, CSV or Excel.

Minimal example input:

```json
{
  "mode": "search",
  "categories": ["cars"],
  "makes": ["BMW"],
  "models": ["X5"],
  "yearFrom": 2015,
  "fuelTypes": ["diesel"],
  "sortBy": "price-asc",
  "maxItems": 100
}
```

### Three ways to collect data

| Mode (`mode`) | Use it to | Record types |
|---|---|---|
| `search` | Find ads by section, make, model, region and the full filter set | `vehicle`, `price-change`, `seller` |
| `urls` | Refresh known ads by number or address, read a seller profile, or read a vehicle list address | `vehicle`, `seller` |
| `sellers` | Read dealer and company profiles, and optionally all their vehicles | `seller`, `vehicle` |

Make, model and region names are looked up on the site and are not case sensitive. An unknown name ends the run with one free error row that lists close matches.

### What data do you get?

Every row has a `recordType`: `vehicle`, `price-change` or `seller`.

| Field | Description |
|---|---|
| `listingId`, `url`, `title`, `imageUrl` | Ad number, canonical address, title and cover photo |
| `vehicleType`, `make`, `model`, `generation`, `year` | Type (`car`, `van`, `truck`, `bus`, `motorcycle`, `bicycle`, `electric-scooter`, `machinery`, `tractor`, `trailer`, `boat`, `aircraft`), make, model, generation and model year |
| `bodyType`, `fuelType`, `transmission`, `driveType`, `steeringSide`, `color`, `doors`, `seats` | Specification as lowercase English enums |
| `engineSize`, `powerHp`, `electricRangeKm`, `batteryCapacityKwh`, `payloadKg` | Engine volume in cc, power, electric range, battery and truck payload |
| `mileage`, `mileageUnit`, `condition`, `registration`, `originCountry`, `availability`, `vin` | Odometer in km or miles, condition, where the vehicle is registered, origin, stock status and VIN |
| `price`, `currency`, `priceMode`, `downPayment`, `priceEur`, `priceUsd`, `priceMdl`, `priceOnRequest` | Asking price as listed, the three converted prices, and a flag for ads without a price |
| `region`, `city`, `address`, `latitude`, `longitude` | Location as far as the ad gives it |
| `description`, `features`, `specs`, `images`, `imageCount`, `videoUrl` | Seller text, equipment, extra specifications, full-size photos and video link |
| `publishedAt`, `updatedAt`, `expiresAt`, `isExpired` | First publication, last renewal, expiry and expired flag |
| `sellerType`, `isPrivateSeller`, `sellerName`, `sellerUrl`, `isVerifiedSeller`, `sellerPhone` | `dealer` or `private`; identity and phone are filled for dealers only (phone needs **Include dealer contact details**) |
| `marketMedianPriceEur`, `marketAveragePriceEur`, `marketSampleSize`, `marketConfidence` | Optional market statistics for the make and model (cars) |
| `previousPrice`, `priceChange`, `priceChangePct`, `changeType` | `price-change` rows: old price, difference, percent, `price-drop` or `price-increase` |
| `sellerLogin`, `businessPlan`, `sellerSince`, `socialLinks`, `openingHours`, `branches`, `vehicleCount` | `seller` rows: login, plan, member since, links, hours, branches with coordinates and number of vehicles |

#### Sample output

A real `vehicle` row from a cloud run (description and photo list shortened):

```json
{
  "imageUrl": "https://i.simpalsmedia.com/999.md/BoardImages/900x900/e6042200f50e9a6703e27565c566b449.jpg",
  "recordType": "vehicle",
  "title": "BMW X5",
  "listingId": "60569007",
  "url": "https://999.md/ro/60569007",
  "sourceSite": "999.md",
  "country": "MD",
  "listingType": "sale",
  "vehicleType": "car",
  "make": "BMW",
  "model": "X5",
  "generation": "G05 (2018 - prezent)",
  "year": 2021,
  "bodyType": "suv",
  "fuelType": "diesel",
  "transmission": "automatic",
  "driveType": "4x4",
  "steeringSide": "left",
  "doors": 5,
  "seats": 5,
  "engineSize": 2000,
  "mileage": 2000,
  "mileageUnit": "km",
  "condition": "used",
  "registration": "moldova",
  "originCountry": "euro-zone",
  "availability": "in-stock",
  "price": 32990,
  "currency": "EUR",
  "priceEur": 32990,
  "priceUsd": 37143.43,
  "priceMdl": 663095.7,
  "region": "Chișinău mun.",
  "description": "Garanție și suport tehnic - 1 an ...",
  "images": [
    "https://i.simpalsmedia.com/999.md/BoardImages/900x900/e6042200f50e9a6703e27565c566b449.jpg",
    "https://i.simpalsmedia.com/999.md/BoardImages/900x900/d0434e6ce17b11272f77cbbe031c7964.jpg"
  ],
  "imageCount": 15,
  "videoUrl": "https://i.simpalsmedia.com/video/6e3b59b6-e76f-4e7c-a6e0-4894d5d8c67a/master.m3u8",
  "publishedAt": "2019-08-07T07:24:20.000Z",
  "updatedAt": "2026-10-19T08:02:03.000Z",
  "expiresAt": "2026-11-18T08:02:03.000Z",
  "sellerType": "dealer",
  "isPrivateSeller": false,
  "sellerName": "AUTOPLAZA-BOTANICA",
  "sellerUrl": "https://999.md/ro/profile/AUTOPLAZA-BOTANICA",
  "isVerifiedSeller": true,
  "scrapedAt": "2026-10-19T08:19:59.122Z"
}
```

A real `seller` row (dealer profile, shortened):

```json
{
  "recordType": "seller",
  "sellerLogin": "DiplomatAuto",
  "sourceSite": "999.md",
  "country": "MD",
  "city": "Chișinău",
  "address": "str. 31 August 1989 22",
  "latitude": 47.0126011360592,
  "longitude": 28.84516976004994,
  "sellerType": "dealer",
  "sellerName": "CARS4RENT SRL",
  "sellerUrl": "https://999.md/ro/profile/DiplomatAuto",
  "businessPlan": "premium",
  "sellerSince": "2020-08-12",
  "socialLinks": { "instagram": "https://www.instagram.com/diplomatauto/" },
  "vehicleCount": 64,
  "scrapedAt": "2026-10-19T08:22:00.983Z"
}
```

### Monitor new ads and price changes

Switch on **Only new ads (monitor)** and the actor remembers every ad it delivered, in a named key-value store of your own account. Scheduled runs of the same search return only unseen ads. Add **Report price changes** and a repriced ad comes back once as a `price-change` row with the old price, the difference and the percentage. Use **Monitor name** to keep several saved searches apart, and **Reset monitor memory** to start over. Ads skipped by the monitor are never charged. Keep scheduled searches narrow and sorted by newest, because the site orders ads by their last renewal and a renewed old ad moves to the top.

### Market valuation for cars

**Add market valuation** attaches the site's own statistics for the make and model of each car: median and average price in euro, sample size and confidence. They cover all model years of that model, so read them as a price range for the model and not as a value for the exact year, mileage and trim of one car.

### How does it compare with other tools?

A search of the Apify Store on 2026-10-19 for "999.md" and for Moldova classifieds found no other Actor for 999.md. General marketplace and car-portal scrapers cover other sites. This actor adds the 999.md filters, three currencies, the seller profile, price-change rows and monitoring in one place.

| | 999.md Scraper |
|---|---|
| Source | 999.md, 14 vehicle sections |
| Fields | 87 typed keys, flat, no raw dump |
| Record types | Vehicle ads, price changes, seller profiles |
| Currencies | EUR, USD and MDL in every row |
| Monitoring | Only new ads and price-change rows |
| Access | Public endpoint, no login, no proxy |

### Is it legal to scrape 999.md? Limits and responsible use

The actor reads publicly visible ads through the endpoint the website itself uses, without a login and without bypassing any protection, and keeps to about four requests per second. The robots.txt of 999.md does not disallow this endpoint. Names, phones and emails of private sellers are never output. Dealer phone numbers appear only when you switch on **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.

Limits:

- Some ads show no price (price on request). Those rows carry `priceOnRequest: true` and no price.
- Market statistics cover all years of a model, and only cars have them.
- Sort "newest" follows the site's own order, which is the last renewal date and not the first publication date. Use **Published since** to keep only ads first published after a date.
- The electric scooter section also lists accessories and parts.
- On a vehicle row `sellerName` is the seller login; the company name is on the `seller` row.
- 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/999-md-scraper`.

Example prompt: "Find the 20 cheapest diesel BMW X5 from 2015 or newer in Chișinău on 999.md and list price, mileage and seller type." The agent sends `{ "mode": "search", "makes": ["BMW"], "models": ["X5"], "yearFrom": 2015, "fuelTypes": ["diesel"], "regions": ["Chișinău"], "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/999-md-scraper').call({
    mode: 'search',
    categories: ['cars'],
    makes: ['Toyota'],
    priceTo: 8000,
    maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].priceEur);
```

You can also call the actor from the Python client, Make, Zapier or n8n, and schedule it from the Apify Console.

### Frequently Asked Questions

#### Which vehicles does 999.md Scraper cover?

All 14 vehicle sections of 999.md: cars, vans, trucks, buses, motorcycles, bicycles, electric scooters, construction equipment, tractors, combines, trailers, classic cars, watercraft and aircraft. Each row says which type it is in `vehicleType`.

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

No. The actor sends plain requests to the public endpoint of 999.md and needs no proxy, browser or 999.md account. You only need an Apify account to start runs.

#### How many ads can I get in one run?

The site sets no practical limit: about 104,800 ads for sale are reachable. Set `maxItems` to what you need. Free Apify plans are limited to 10 results per run; paid plans use the value you set.

#### How do I get only the newest ads?

Use sort "newest" with **Published since**, for example `2026-10-19`. The actor stops reading as soon as the ads are older, so a daily run is short. For repeat runs, switch on **Only new ads (monitor)**.

#### Can I search by make, model and region?

Yes. Add makes such as `Toyota` or `BMW`, models of those makes such as `Corolla` or `X5`, and regions such as `Chișinău`, `Bălți` or `Cahul`. Names are not case sensitive, and a wrong name returns a free error row with close matches.

#### Which prices do I get?

`price` and `currency` are what the seller set. `priceEur`, `priceUsd` and `priceMdl` give the same price in all three currencies at the rate the site publishes, so you can compare ads listed in different currencies.

#### Does it return phone numbers and seller names?

For dealers and companies, yes: the seller name and profile address are in every row, and phone numbers when you switch on **Include dealer contact details**. For private sellers, names, phone numbers and emails are never output.

#### What is the market valuation?

An option for cars. It adds the median and average price in euro, the sample size and a confidence level that 999.md publishes for the make and model. The statistics cover all model years, so they set a price range and not the value of one specific car.

#### Can I read one ad or one dealer?

Yes. In `urls` mode give ad addresses such as `https://999.md/ro/105408829`, ad numbers, seller profiles such as `https://999.md/ro/profile/DiplomatAuto`, or a vehicle list address. A sold or removed ad returns one free error row.

#### Which languages are supported?

Regions, generations and equipment names come in Romanian or Russian; choose with **Language**. Titles and descriptions are written by the sellers in their own language.

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

A search with no hits ends as succeeded with an empty dataset. A wrong value, such as an unknown make or a filter the section does not have, 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 999.md. It reads only publicly available data.

# Actor input Schema

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

search = vehicle ads of the sections and filters below. urls = ad addresses, ad numbers, seller profiles and vehicle list addresses you provide. sellers = dealer and company profiles (with their stock count, address, hours and links).

## `categories` (type: `array`):

Sections to search. Each section is searched on its own and rows keep the order of the sections you pick.

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

Stops after this many rows (all record types together). Free plans are limited to 10 items per run.

## `searchText` (type: `string`):

Optional words searched in titles and descriptions, for example "panoramic roof" or "Actros". Combines with every filter below.

## `makes` (type: `array`):

Makes as written on the site, for example Toyota, BMW, Mercedes-Benz or Volkswagen. Case and spaces do not matter. The list is read from the site at run time and an unknown make is reported with close suggestions. Empty means every make.

## `models` (type: `array`):

Models of the make above, for example Corolla or X5. Cars only, and every model must belong to the makes you list. Empty means every model.

## `regions` (type: `array`):

Regions of Moldova as the site writes them, for example Chișinău, Bălți, Cahul or Transnistria. Empty means the whole country.

## `offerType` (type: `string`):

For sale is what most people want. Wanted lists buyers looking for a vehicle.

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

Order of the results. "Newest" is the site's own date order: ads are ranked by their last renewal, so a renewed ad comes before one that was only published later.

## `publishedSince` (type: `string`):

Only ads first published on or after this date or time, for example 2026-10-01 or 2026-10-01T08:00:00Z. Reading stops as soon as the ads are older, so a daily run costs little. Empty means no limit.

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

Model year, this value or newer. 0 or empty means no limit.

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

Model year, this value or older.

## `priceFrom` (type: `integer`):

Lowest price, in the currency chosen below.

## `priceTo` (type: `integer`):

Highest price, in the currency chosen below.

## `priceCurrency` (type: `string`):

Currency of the price range. The site converts ads listed in other currencies.

## `mileageFrom` (type: `integer`):

Odometer reading in kilometres, this value or more.

## `mileageTo` (type: `integer`):

Odometer reading in kilometres, this value or less.

## `powerFrom` (type: `integer`):

Engine power in horsepower, this value or more.

## `powerTo` (type: `integer`):

Engine power in horsepower, this value or less.

## `fuelTypes` (type: `array`):

Fuel or energy of the vehicle. Leave empty for all.

## `transmissions` (type: `array`):

Gearbox type. Leave empty for all.

## `bodyTypes` (type: `array`):

Body style (cars) or truck body (trucks). Leave empty for all.

## `driveTypes` (type: `array`):

Driven wheels (front, rear, all-wheel or truck axle layouts). Leave empty for all.

## `colors` (type: `array`):

Body color. "Blue" and "Green" include every shade. Leave empty for all.

## `conditions` (type: `array`):

Condition as the seller declared it. Leave empty for all.

## `registrations` (type: `array`):

Where the vehicle is registered or whether customs are paid. Leave empty for all.

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

Private persons or dealers. Cars only: the other sections have no such filter on the site.

## `withVideo` (type: `boolean`):

Keeps only ads that carry a video. Cars only.

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

urls mode. Ad addresses (https://999.md/ro/105408829), seller profiles (https://999.md/ro/profile/<login>) and vehicle list addresses (https://999.md/ro/list/transport/cars). Ad numbers can go in the next field.

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

urls mode. The number at the end of an ad address, for example 105408829.

## `sellerLogins` (type: `array`):

sellers mode. Logins (or profile addresses) of dealers and companies, for example DiplomatAuto. Empty means dealers are found through the sections and filters above.

## `includeSellerRecords` (type: `boolean`):

In search mode, adds one seller record (profile, address, opening hours, links, stock count) the first time a dealer appears.

## `includeSellerVehicles` (type: `boolean`):

In sellers mode, also collects the vehicles of each seller. Uses the sections you pick, or all 14 vehicle sections when none is picked.

## `language` (type: `string`):

Language of site texts such as regions, generations and equipment names. Ad titles and descriptions are the sellers' own words.

## `fetchMarketValuation` (type: `boolean`):

Cars only. Adds the site's own market statistics for the make and model (median and average price in euro, sample size, confidence). They cover all years of that model, so they set a price range, not a year-exact value (vehicle-detail-record).

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

Adds the phone numbers of dealers and companies and keeps phone numbers inside their descriptions. Private seller names, phones and emails are never output.

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

Skips every ad seen in an earlier run with the same monitor name, so scheduled runs return only what is new.

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

With Only new ads: an ad seen before whose price changed comes back once as a price-change row with the old price, the difference and the percentage.

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

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

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

Forgets everything remembered under this monitor name before the run starts.

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

How many result pages are read at the same time (1 to 5). Requests are paced to about four per second in any case, 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",
  "categories": [
    "cars"
  ],
  "maxItems": 10,
  "searchText": "",
  "makes": [
    "Toyota"
  ],
  "models": [],
  "regions": [],
  "offerType": "sell",
  "sortBy": "newest",
  "publishedSince": "",
  "priceCurrency": "EUR",
  "fuelTypes": [],
  "transmissions": [],
  "bodyTypes": [],
  "driveTypes": [],
  "colors": [],
  "conditions": [],
  "registrations": [],
  "sellerType": "any",
  "withVideo": false,
  "startUrls": [],
  "listingIds": [],
  "sellerLogins": [],
  "includeSellerRecords": false,
  "includeSellerVehicles": false,
  "language": "ro",
  "fetchMarketValuation": false,
  "includeContactDetails": false,
  "onlyNew": false,
  "trackPriceChanges": false,
  "stateKey": "",
  "resetSeen": false,
  "maxConcurrency": 2,
  "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 = {
    "categories": [
        "cars"
    ],
    "maxItems": 10,
    "makes": [
        "Toyota"
    ],
    "models": [],
    "regions": [],
    "yearFrom": 0,
    "yearTo": 0,
    "priceFrom": 0,
    "priceTo": 0,
    "mileageFrom": 0,
    "mileageTo": 0,
    "powerFrom": 0,
    "powerTo": 0,
    "startUrls": [],
    "listingIds": [],
    "sellerLogins": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/999-md-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 = {
    "categories": ["cars"],
    "maxItems": 10,
    "makes": ["Toyota"],
    "models": [],
    "regions": [],
    "yearFrom": 0,
    "yearTo": 0,
    "priceFrom": 0,
    "priceTo": 0,
    "mileageFrom": 0,
    "mileageTo": 0,
    "powerFrom": 0,
    "powerTo": 0,
    "startUrls": [],
    "listingIds": [],
    "sellerLogins": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/999-md-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 '{
  "categories": [
    "cars"
  ],
  "maxItems": 10,
  "makes": [
    "Toyota"
  ],
  "models": [],
  "regions": [],
  "yearFrom": 0,
  "yearTo": 0,
  "priceFrom": 0,
  "priceTo": 0,
  "mileageFrom": 0,
  "mileageTo": 0,
  "powerFrom": 0,
  "powerTo": 0,
  "startUrls": [],
  "listingIds": [],
  "sellerLogins": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/999-md-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/999-md-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/D7Mo5X2ytS4qkdUOQ/builds/4F6atrxiQtJNlJXsU/openapi.json
