MultiSport Map Scraper avatar

MultiSport Map Scraper

Pricing

Pay per usage

Go to Apify Store
MultiSport Map Scraper

MultiSport Map Scraper

Scrapes the MultiSport map for venues that accept the MultiSport card. It walks the activity categories, collects every venue ID, and then scrapes each venue's detail page.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Jan Buchar

Jan Buchar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Share

An Apify Actor that scrapes the MultiSport map for venues that accept the MultiSport card.

It walks the activity categories, collects every venue ID, and then scrapes each venue's detail page into a structured record.

Output

Each dataset item is a venue:

{
"url": "https://mapa.multisport.cz/cs/193",
"id": 193,
"title": "Legion Gym",
"description": "Fitness a Skupinové lekce ( TRX, Funkční trénink, Strečink)",
"categories": ["Posilovny a silové tréninky", "Skupinové a taneční lekce"],
"activities": ["Funkční trénink", "Posilovna", "Stretching", "..."],
"street": "Husova 100",
"city": "Jaroměř",
"phone": "+420 606 182 647",
"email": "info@legiongym.cz",
"website": "http://legiongym.cz/",
"facebook": "https://www.facebook.com/legiongymjaromer"
}

Fields that a venue does not provide (e.g. facebook, website) are null. categories lists every activity category the venue was found under (a venue can appear in more than one), and is always non-empty.

Input

FieldTypeDefaultDescription
categoriesarray of string[] (all)Activity categories to scrape. Leave empty to scrape every category.

The available category slugs are:

SlugCategory
bazeny-a-vodni-sporty-1Bazény a vodní sporty
rodice-s-detmi-2Rodiče s dětmi
joga-a-zdravotni-cviceni-3Jóga a zdravotní cvičení
lezecke-steny-4Lezecké stěny
posilovny-a-silove-treninky-5Posilovny a silové tréninky
pro-tehotne-6Pro těhotné
raketove-a-micove-sporty-7Raketové a míčové sporty
sezonni-a-ostatni-aktivity-8Sezónní a ostatní aktivity
skupinove-a-tanecni-lekce-9Skupinové a taneční lekce
wellness-a-relax-10Wellness a relax

Example input (scrape only climbing walls and pools):

{
"categories": ["lezecke-steny-4", "bazeny-a-vodni-sporty-1"]
}

Tech stack

  • Node.js 24 with native TypeScript execution (no build step)
  • Crawlee's AdaptivePlaywrightCrawler — uses plain HTTP where possible and falls back to a real browser only when needed
  • Apify SDK for input, proxy, and dataset
  • zod for input validation, oxlint/oxfmt for linting/formatting, vitest for tests

The crawler uses Apify Proxy by default when run on the platform.

Development

npm install
npm start # run locally against the live site
npm test # run unit tests
npm run lint # lint
npm run fmt # format
npm run typecheck # type check

Without an Apify token, Actor.createProxyConfiguration() returns no proxy, so local runs hit the site directly — no extra configuration needed.