Tipmoto Scraper avatar

Tipmoto Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Tipmoto Scraper

Tipmoto Scraper

TipMoto.com motorcycle scraper with power (kW) and STK validity filtering. Extracts complete listing data: price, specs, photos, descriptions, seller contact. Region-specific search. Built for dealers, researchers, and market intelligence platforms.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

gearshift-data

gearshift-data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

11 days ago

Last modified

Share

TipMoto.com Scraper

Extract structured motorcycle listing data from TipMoto.com — the largest Czech and Slovak motorcycle marketplace. Filter by brand, category, price, year, mileage, engine size, region, and more. Export to Excel, Google Sheets, JSON, or any other format.

No coding required — set your filters and run.


What does TipMoto.com Scraper do?

The actor crawls TipMoto.com search results and scrapes the detail page of every matching listing. For each motorcycle it returns a clean, structured record with price, technical specs, seller info, photos, and the full description.

Results are saved to an Apify dataset and can be downloaded as JSON, CSV, Excel, or XML — or accessed via the Apify API.


What is TipMoto.com?

TipMoto.com is the largest online marketplace for motorcycles, scooters, ATVs, and mopeds in the Czech Republic and Slovakia. It hosts tens of thousands of private and dealer listings, updated daily.


Features

  • Scrapes all listing types: motorcycles, scooters, ATVs, mopeds, veterans, and more
  • Full detail extraction: price, brand, year, mileage, engine size, power, condition, region, STK validity, origin, VAT status
  • Optional extras: full photo galleries, seller description, phone number, email address
  • 7 pre-built dataset views (Overview, Best Deals, Lowest Mileage, Newest First, Detailed, With Descriptions, With Images)
  • All TipMoto.com search filters supported — or paste any search URL directly
  • maxItems cap for quick samples and cost control

Use cases

  • Price research — compare market prices for a specific model or brand
  • Dealer intelligence — monitor competitor listings and inventory
  • Lead generation — find seller contacts for a targeted segment
  • Data aggregation — feed listing data into a price comparison or analytics tool
  • Personal buying — track new listings matching your criteria

Quick start

Run with no input to scrape the first 10 pages of all motorcycle listings from https://www.tipmoto.com/motorky/:

{}

Filter by brand and price in under a minute:

{
"kategorie": "Honda",
"maxPrice": 150000,
"minYear": 2015,
"sorting": "cenad"
}

Quick 5-result sample:

{
"maxItems": 5
}

Ingest mode — full vs incremental

The actor has two modes, set by the ingestMode input. Default is full.

full (default)

Scrape the search results and fetch detail pages for every listing. Use this when you need a one-off complete dataset — exports, brand analysis, market snapshots.

{ "ingestMode": "full", "kategorie": "Honda" }

incremental

Designed for repeated runs. The actor remembers which listing IDs it saw in previous runs (stored in its default key-value store as seen-ids) and uses that to:

  1. Push a summary record for every listing found in the search results — title, year, price, url. Lets you detect price changes across runs without refetching the detail page.
  2. Fetch full detail pages only for listings it hasn't seen before. Known listings are skipped.
  3. Stop paginating when two consecutive search pages contain only known listings. Avoids re-crawling the entire archive on scheduled runs.
{ "ingestMode": "incremental", "maxPagesPerCrawl": 0 }

Do I need to run full first?

No. The first incremental run is its own bootstrap:

  • seen-ids is empty → every listing is "new" → detail page is fetched for every listing, exactly like full mode.
  • At the end, the actor saves all IDs it processed as seen-ids.
  • The next incremental run only fetches details for listings that appeared since.

So: pick a mode and stick with it. Don't mix. If you run full once then incremental, the incremental bootstrap won't know about anything full scraped (different code path, doesn't write seen-ids). Just run incremental from day one.

Dataset records in incremental mode

Every record carries a scrapeStage field:

  • summary — lightweight record from the search-listing row (title, brand, year, price, url, id). Detail-only fields (description, photos, contacts, specs) are null. Emitted for every listing on the search pages.
  • detail — full record with every field populated. Emitted only for listings not in seen-ids.

Consumers should treat null on summary records as "not available this run, don't overwrite". Price, title, year are present on both.

Running incremental on a schedule

Set up an Apify Schedule targeting this actor with:

{ "ingestMode": "incremental", "maxPagesPerCrawl": 0, "maxItems": 0 }

Day-one run is the heaviest (full bootstrap). Subsequent runs scan the top few pages, detail-fetch ~2-5% of listings, and stop once they hit known territory.


Input

Search URL (optional)

SettingDescription
customUrlLeave empty to use the filter fields below (recommended for most searches). Or paste a full URL copied from tipmoto.com — useful for model-level filters not exposed in the UI (e.g. a specific Honda CB500F). Overrides all filters.

Tip: For the most specific searches (exact model, sub-type), go to tipmoto.com, apply your filters in the search form, then copy the URL from your browser and paste it as customUrl.

Filters

All filters are optional. Leave out anything you don't need.

SettingDescriptionExample
keywordsKeyword search in listing titles"honda cbr"
vyrobceBrand (as it appears in the tipmoto.com URL)"honda", "yamaha", "ktm"
zarazeniMotorcycle type/category"enduro", "nakedbike", "chopper"
stavCondition"ojetá" (used), "nová" (new)
krajCzech/Slovak region"Praha", "Jihomoravský"
minYear / maxYearYear of manufacture range2018 / 2023
minPrice / maxPricePrice range in CZK50000 / 200000
minMileage / maxMileageMileage range in km0 / 30000
minEngineCcm / maxEngineCcmEngine displacement in cc600 / 1200
minPowerKw / maxPowerKwEngine power in kW30 / 100
dphOnly listings with VAT deductibletrue
sortingSort order"cenaa" (cheapest first), "cenad" (most expensive), "datud" (newest)
listingsPerPageResults per page (10–100). Higher = fewer requests. Maps to the strankovani URL parameter.50

Optional extras

Turned off by default to keep runs fast. Enable what you need:

SettingDefaultDescription
scrapePhotostrueCollect all full-size photo URLs
scrapeDescriptiontrueCollect the full listing description
scrapePhonefalseCollect the seller's phone number
scrapeEmailfalseCollect the seller's email address

Limits

SettingDefaultDescription
maxPagesPerCrawl10Stop after this many search result pages. Set to 0 for unlimited.
maxItems0Stop after this many total scraped listings. Set to 0 for unlimited.

Advanced

SettingDefaultDescription
datasetName(auto)Save results to a named dataset (useful for scheduled runs)
maxConcurrency10How many detail pages to fetch in parallel
timeoutSecs120Per-page timeout in seconds
maxRequestRetries3How many times to retry a failed page
proxyConfiguration(none)Proxy settings (use if you encounter blocking)
debugLogfalseEnable verbose debug logging

Output

Each result is one motorcycle listing with up to 25 fields:

FieldDescription
sourceAlways "tipmoto"
scrapeStage"summary" (search-listing data only) or "detail" (full record)
dateWhen this record was produced (ISO timestamp)
idListing ID on TipMoto.com
urlLink to the listing
sourceUrlSearch results page the listing came from
titleListing title
brandBrand name (from URL path)
pricePrice as displayed (e.g. "85 000 Kč")
priceNumericPrice as a plain number (85000)
vatDeductibleWhether VAT can be deducted (true/false)
yearYear of manufacture
mileageMileage as displayed (e.g. "15 000 km")
mileageNumericMileage as a plain number (15000)
engineCcmEngine displacement in cc
powerKwEngine power in kW
conditionCondition (e.g. "Ojetá", "Nová")
categoryMotorcycle type (e.g. "Enduro", "Nakedbike")
modelModel name from category tree
regionCzech/Slovak region (kraj)
cityCity
stkValidityTechnical inspection (STK) validity
originCountry of origin
sellerSeller's name
sellerUrlLink to seller's profile
thumbnailURL of the first photo
photosAll full-size photo URLs (when scrapePhotos: true)
photoCountNumber of photos
descriptionFull listing description (when scrapeDescription: true)
phoneSeller's phone number (when scrapePhone: true)
emailSeller's email address (when scrapeEmail: true)

The dataset includes 7 pre-built views in Apify Console: Overview, Best Deals, Lowest Mileage, Newest First, Detailed, With Descriptions, and With Images.


Examples

All listings (default)

No input needed. Scrapes all motorcycles from https://www.tipmoto.com/motorky/, 10 pages, sorted cheapest first:

{}

Filter by brand and price

Use kategorie for the brand name exactly as it appears on tipmoto.com (e.g. "Honda", "BMW", "KTM", "Yamaha", "Aprilia"):

{
"kategorie": "Honda",
"maxPrice": 150000,
"minYear": 2015,
"sorting": "cenad",
"maxPagesPerCrawl": 5
}

Filter by type and region

{
"zarazeni": "nakedbike",
"kraj": "Praha",
"stav": "ojetá",
"maxMileage": 30000
}

Search by keyword

{
"keywords": "Africa Twin",
"keywordsloc": "nazev",
"minYear": 2018,
"maxPrice": 300000
}

Scrape a specific model using a tipmoto.com URL

The filter fields cover brand, type, price, year, mileage, and region. For model-level filtering (e.g. Honda CB500F specifically), go to tipmoto.com, set your filters, copy the URL from your browser, and paste it as customUrl:

{
"customUrl": "https://www.tipmoto.com/hledat.php?keywords=&keywordsloc=nazev&kategorie=Aprilia&model=0&zarazeni=&objemod=&objemdo=&rvod=&rvdo=&vykonod=&vykondo=&cenaod=&cenado=&najetood=&najetodo=&stav=&stk=&tp=&dovoz=&dph=&leasing=&kraj=&vlozeno=&razeni=cenaa",
"maxPagesPerCrawl": 3
}

Get seller contacts for a segment

{
"kategorie": "BMW",
"zarazeni": "silniční cestovní",
"scrapePhone": true,
"scrapeEmail": true,
"maxItems": 100
}

Sample output

{
"source": "tipmoto",
"scrapeStage": "detail",
"date": "2026-03-16T10:15:00.000Z",
"id": "123456",
"url": "https://www.tipmoto.com/motorky/honda/123456-honda-cbr-600rr.html",
"sourceUrl": "https://www.tipmoto.com/hledat.php?...",
"title": "Honda CBR 600RR",
"brand": "honda",
"price": "89 900 Kč",
"priceNumeric": 89900,
"vatDeductible": false,
"year": 2019,
"mileage": "18 000 km",
"mileageNumeric": 18000,
"engineCcm": 599,
"powerKw": 87,
"condition": "Ojetá",
"category": "Sportovní",
"model": "CBR 600RR",
"region": "Jihomoravský",
"city": "Brno",
"stkValidity": "12/2026",
"origin": "Japonsko",
"seller": "Jan Novák",
"sellerUrl": "https://www.tipmoto.com/prodejce/12345-jan-novak.html",
"thumbnail": "https://www.tipmoto.com/foto/123456-honda-cbr-600rr-1.jpg",
"photos": [
"https://www.tipmoto.com/foto/123456-honda-cbr-600rr-1.jpg",
"https://www.tipmoto.com/foto/123456-honda-cbr-600rr-2.jpg"
],
"photoCount": 2,
"description": "Motocykl v perfektním stavu, pravidelný servis, nové pneumatiky...",
"phone": null,
"email": null
}

💰 Pricing

This actor uses Apify's Pay-Per-Result model:

  • $5 per 1,000 results scraped
  • First 500 results free to try each month
  • No charge if the actor fails or finds no results
  • Cancel anytime — no long-term contracts

This pricing reflects the cost to run the actor on Apify's cloud platform. The more results you scrape, the more you pay — but there are no hidden fees or setup costs.