
CJ Dropshipping Scraper
scrape.ly/store/shelfbright/cj-dropshipping-scraperE-commerce
2 monthly users

Scrape car listings from arabam.com search, category and listing pages: price, year, mileage, fuel, gearbox, engine, location and seller, plus optional full details (description, HD photos, paint and parts report, damage record, equipment).
Scrape car listings from arabam.com, Turkey's big car marketplace: price, model year, mileage, fuel, gearbox, engine, location, seller type and dealer for every listing in a search, category or keyword. Turn on full details to also get the seller's description, every photo in HD, the paint and parts report, the damage record amount and the equipment list. No login, no browser extension, and about 1,000 listings in under 15 seconds.
priceDropped, previousPriceText).dealerName, dealerUrl) active in a city or brand.ids with the previous run.volkswagen passat.| Field | What it does |
|---|---|
startUrls | arabam.com search, category or listing URLs (filters inside the URL are kept) or listing numbers |
searchQueries | Keywords for the arabam.com search box |
maxItems | Listings to save in total (default 20) |
maxItemsPerInput | Optional cap per URL or keyword |
minPrice / maxPrice | Price range in TL |
minYear / maxYear | Model year range |
minMileage / maxMileage | Mileage range in km |
sortBy | default, newest, oldest, price_asc, price_desc, year_desc, year_asc, mileage_asc, mileage_desc |
includeDetails | Also open each listing page for the full details (extra event per listing) |
proxyConfiguration | Defaults to residential exits in Turkey (arabam.com refuses other countries) |
{
"startUrls": ["https://www.arabam.com/ikinci-el/otomobil/bmw"],
"searchQueries": ["volkswagen passat"],
"maxItems": 200,
"minYear": 2018,
"maxPrice": 2000000,
"sortBy": "newest",
"includeDetails": false
}
One row per listing. The main fields:
| Field | Example |
|---|---|
id, url, title | 44994803, listing URL, the seller's headline |
make, series, model, modelName | BMW, 2 Serisi, 216d Gran Coupe First Edition Sport Line |
year, mileageKm | 2020, 109000 |
price, currency, priceText, previousPriceText | 1825000, TRY, 1.825.000 TL |
fuelType, transmission, engineCc, enginePowerHp, drivetrain, color | Dizel, Otomatik, 1496, 116, Önden Çekiş, Siyah |
condition, warranty, sellerType | İkinci El, Garantisi yok, Galeriden |
city, district, listedDate, updatedDate | Bursa, Osmangazi, 2026-10-22 |
imageUrl, dealerUrl | main photo, dealer page |
priceDropped, urgent, firstOwner, likeNew | listing badges |
| With full details | description, images, bodyType, fuelConsumption, fuelTank, paintAndParts, paintAndPartsReport, damageRecordAmount, damageRecordText, heavyDamageRecord, tradeIn, equipment, technicalSpecs, specs, sellerName, dealerName, dealerContactName, address, neighborhood, listedAt, listingStatus |
A row from a test run (from the result list):
{
"id": "44994803",
"url": "https://www.arabam.com/ilan/galeriden-satilik-bmw-2-serisi-216d-gran-coupe-first-edition-sport-line/bmw-216-cam-tavanli-hatasiz/44994803",
"title": "BMW 216 CAM TAVANLI HATASIZ",
"modelName": "BMW 2 Serisi 216d Gran Coupe First Edition Sport Line",
"category": "Otomobil",
"make": "BMW",
"series": "2 Serisi",
"model": "216d Gran Coupe First Edition Sport Line",
"year": 2020,
"price": 1825000,
"currency": "TRY",
"priceText": "1.825.000 TL",
"mileageKm": 109000,
"color": "Siyah",
"fuelType": "Dizel",
"transmission": "Otomatik",
"engineCc": 1496,
"enginePowerHp": 116,
"drivetrain": "Önden Çekiş",
"condition": "İkinci El",
"warranty": "Garantisi yok",
"sellerType": "Galeriden",
"city": "Bursa",
"district": "Osmangazi",
"listedDate": "2026-10-22",
"updatedDate": "2026-10-22",
"imageUrl": "https://arbstorage.mncdn.com/ilanfotograflari/2026/10/22/44994803/c96e36f0-6172-45fc-9139-b989aebace26_image_for_silan_44994803_580x435.jpg",
"priceDropped": false,
"urgent": false,
"firstOwner": false,
"likeNew": false,
"sourceUrl": "https://www.arabam.com/ikinci-el/otomobil/bmw",
"scrapedAt": "2026-10-22T09:23:42Z"
}
The extra fields with Include full listing details (trimmed; dealer and person names replaced with fictional ones):
{
"description": "2012 Model Comfortline\n• Orijinal kilometre\n• 1 parça değişen\n• 1 parça boyalı\n• Genel durumu temiz ve bakımlı",
"images": [
"https://arbstorage.mncdn.com/ilanfotograflari/2026/10/15/44843728/e55c5dca-2600-4d22-af0e-889fd2eaf7b4_image_for_silan_44843728_1920x1080.jpg"
],
"bodyType": "Sedan",
"paintAndParts": "1 değişen, 1 boyalı",
"paintAndPartsReport": [{ "part": "Sağ Arka Çamurluk", "status": "Orijinal" }],
"sellerName": "Örnek Otomotiv",
"dealerName": "Örnek Otomotiv",
"dealerContactName": "Ayşe Demir",
"address": "İstasyon Mh. Nizip, Gaziantep",
"listedAt": "2026-10-15T07:34:00Z",
"listingStatus": "Active"
}
The values are in Turkish, as arabam.com shows them (Dizel = diesel, Otomatik = automatic, Galeriden = dealer, Sahibinden = private owner).
You pay $0.70 per 1,000 listings ($0.0007 each), plus a small platform usage charge for proxy traffic and compute. In our test, 1,000 listings used about $0.01 of platform usage, so 1,000 listings ≈ $0.71 in total.
Full listing details add $0.30 per 1,000 listings for the extra page, plus its proxy traffic (listing pages are bigger, about 0.13 MB each). Listing URLs that you paste directly always come with full details and are charged as plain listings ($0.70 per 1,000).
You only pay for listings that are saved. Invalid URLs, removed listings and empty searches cost nothing beyond a few seconds of compute.
Is it legal to scrape arabam.com? The actor collects only what arabam.com shows publicly to any visitor, without logging in. You are responsible for how you use the data, including Turkish data-protection law (KVKK) and the GDPR when rows contain names of sellers or dealer staff.
Do I need an account, cookies or a proxy? No. The actor needs no login. arabam.com only answers visitors from Turkey, so the default proxy is the residential pool in Turkey. Keep that setting unless you bring your own Turkish proxies.
How many listings can I get? As many as the search has. arabam.com pages through at most 2,500 listings per search. When you ask for more, the actor splits the search into price bands and continues. Listings without a price can't be reached that way, so a few of them may be missing in very large runs.
Why is a field empty?
The seller didn't fill it in, or arabam.com doesn't show it in the result list (for example, body type, description and the damage report only come with full details). Fields with no value are null.
My keyword returned unrelated cars. Why? Keyword search uses arabam.com's own search box, which also matches loosely similar words. For exact results, browse to a make, model or category on arabam.com and paste that URL instead.
Can I schedule it or use the API? Yes. Save the input as a task, schedule it (for example daily, sorted by newest), and read the dataset through the API, or connect it to your integrations and webhooks.
/galeri/...) are not supported as inputs. Use a search or category URL instead.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalArabam.com URLs
Search, category or listing URLs from arabam.com, e.g. https://www.arabam.com/ikinci-el/otomobil/bmw, https://www.arabam.com/ikinci-el/otomobil-istanbul?minYear=2018 or https://www.arabam.com/ilan/.../44843549. Filters already in a URL are kept. A listing ID on its own works too.
searchQueriesarrayOptionalSearch keywords
Keywords for the arabam.com search box, e.g. 'volkswagen passat' or 'clio 2020'. Each keyword is searched across all vehicle types.
maxItemsintegerOptionaldefault 20Maximum listings
How many listings to save in total across all URLs and keywords. arabam.com pages through at most 2,500 listings per search, so bigger searches are split into price bands automatically (listings without a price are then skipped).
maxItemsPerInputintegerOptionalMaximum listings per URL or keyword
Optional cap for each URL or keyword, so that one big search doesn't use up the whole maximum. Leave empty for no per-input cap.
Optional. They apply to every URL and keyword and replace the same filter in a URL.
minPriceintegerOptionalMinimum price (TL)
Only listings priced at or above this amount in Turkish lira.
maxPriceintegerOptionalMaximum price (TL)
Only listings priced at or below this amount in Turkish lira.
minYearintegerOptionalModel year from
Only vehicles of this model year or newer.
maxYearintegerOptionalModel year to
Only vehicles of this model year or older.
minMileageintegerOptionalMinimum mileage (km)
Only vehicles with at least this many kilometres.
maxMileageintegerOptionalMaximum mileage (km)
Only vehicles with at most this many kilometres.
sortByenumOptionaldefault "default"Sort by
Order of the results.
includeDetailsbooleanOptionaldefault falseInclude full listing details
Also open every listing page for the seller's description, all photos in HD, body type, fuel consumption, the paint and parts report, the damage record amount, equipment, technical specs, the full address and the seller or dealer name. Costs an extra event per listing. Listing URLs always return full details.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
arabam.com only answers visitors from Turkey, so the default is the residential pool in Turkey.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | arabam.com listing number (İlan No). |
| url | string | Listing URL |
| title | string | null | The seller's headline. |
| modelName | string | null | Make, series and model, e.g. 'BMW 3 Serisi 320i Edition M Sport'. |
| category | string | null | e.g. Otomobil, Arazi, SUV & Pickup, Motosiklet. |
| make | string | null | Make |
| series | string | null | Series |
| model | string | null | Model / trim |
| year | number | null | Model year |
| price | number | null | Asking price as a number. |
| currency | string | null | Currency |
| priceText | string | null | Price as shown |
| previousPriceText | string | null | Struck-out price when the seller lowered it. |
| mileageKm | number | null | Mileage (km) |
| color | string | null | Color |
| fuelType | string | null | Fuel |
| transmission | string | null | Gearbox |
| engineCc | number | null | Engine size (cc) |
| enginePowerHp | number | null | Engine power (hp) |
| drivetrain | string | null | Drivetrain |
| condition | string | null | Condition |
| warranty | string | null | Warranty |
| sellerType | string | null | Galeriden (dealer), Sahibinden (private owner) or Yetkili Bayiden (authorised dealer). |
| city | string | null | City |
| district | string | null | District |
| listedDate | string | null | YYYY-MM-DD. |
| updatedDate | string | null | Updated on |
| imageUrl | string | null | Main photo |
| dealerUrl | string | null | Dealer page |
| priceDropped | boolean | null | Price dropped |
| urgent | boolean | null | Urgent sale |
| firstOwner | boolean | null | First owner |
| likeNew | boolean | null | Like new |
| otherSpecs | object | null | Further specs shown in the result list for some vehicle types. |
| sourceUrl | string | null | The URL or keyword this listing came from. |
| scrapedAt | string | null | Scraped at |
| description | string | null | Full listing details only. |
| images | array | null | All photos, HD where available. Full listing details only. |
| bodyType | string | null | Body type |
| fuelConsumption | string | null | Average fuel consumption |
| fuelTank | string | null | Fuel tank |
| paintAndParts | string | null | Summary, e.g. 'Tamamı orjinal' (all original). |
| heavyDamageRecord | string | null | Heavy damage record |
| tradeIn | string | null | Trade-in |
| plateOrigin | string | null | Plate origin |
| neighborhood | string | null | Neighborhood |
| address | string | null | Address |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| sellerName | string | null | Seller name |
| dealerName | string | null | Dealer name |
| dealerContactName | string | null | Dealer contact person |
| dealerLogoUrl | string | null | Dealer logo |
| sellerMembershipYears | number | null | Seller membership (years) |
| listedAt | string | null | Listed at (UTC) |
| listingStatus | string | null | Listing status |
| isSold | boolean | null | Sold |
| damageRecordAmount | number | null | Insurance damage record (Tramer) total. |
| damageRecordText | string | null | Damage record |
| paintAndPartsReport | array | null | Per body part: original, painted, locally painted or replaced. |
| equipment | array | null | Equipment |
| technicalSpecs | object | null | Technical specs |
| specs | object | null | All specs as shown |
| vehicleClass | string | null | Vehicle class |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Listing | One vehicle listing saved to the dataset. | $0.0007 |
| Full listing details | Description, all photos, paint and parts report, damage record and equipment from the listing page (only with 'Include full listing details'). | $0.0003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/arabam-scraper').call({
"startUrls": [
"https://www.arabam.com/ikinci-el/otomobil/bmw"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
],
"scrapelyProxyCountry": "TR"
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/arabam-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/arabam-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.