# wger Exercise Database Scraper (`parseforge/wger-exercise-database-scraper`) Actor

Export 845+ exercises from the wger open-source fitness database. Pull names, descriptions, target muscles, secondary muscles, equipment, categories, and reference images. Filter by language, category (Abs, Arms, Back, etc), or equipment type.

- **URL**: https://apify.com/parseforge/wger-exercise-database-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Education, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 💪 wger Exercise Database Scraper

> 🚀 **Export the open-source fitness exercise catalog in seconds.** Pull **845+ exercises** with primary and secondary muscle targets, equipment, multilingual descriptions, images, and videos. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-22 · **📊 19 fields** per record · **💪 845+ exercises** · **🌍 30 languages** · **🎯 16 muscle groups** · **🏋️ 12 equipment types**

The **wger Exercise Database Scraper** exports the community-maintained wger.de fitness catalog and returns **19 fields per record**, including exercise name, body category, equipment, primary and secondary muscles, full description, license attribution, image gallery, and video links. The underlying dataset is one of the most widely cited open fitness references and has been maintained by a global network of personal trainers, athletes, and fitness app developers for over a decade.

The catalog covers **9 body categories, 12 equipment types, 16 named muscle groups, and 30 translation languages**, from major compound lifts down to mobility and rehab movements. This Actor makes that data downloadable as CSV, Excel, JSON, or XML in under five minutes. All filters run on the server, so you skip the parser engineering entirely.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Fitness app builders, personal trainers, gym software, sports scientists, rehab clinicians, content creators, e-learning platforms | Workout-builder catalogs, exercise libraries, muscle-group autocomplete, multi-language fitness apps, AI workout planners, gym CMS sync |

---

### 📋 What the wger Exercise Database Scraper does

Four filtering workflows in a single run:

- 🌍 **Full catalog export.** Every translated exercise in the wger database.
- 🗣️ **Language filter.** Pick one of 30 translation languages including English, German, Spanish, French, Portuguese, Russian, Chinese, Korean, and Arabic.
- 🏷️ **Category filter.** Restrict to one of 9 body regions: Abs, Arms, Back, Calves, Cardio, Chest, Legs, Shoulders.
- 🏋️ **Equipment filter.** Filter by 12 equipment types: Barbell, Dumbbell, Kettlebell, Resistance band, Pull-up bar, Bench, Gym mat, Swiss Ball, Bodyweight, and more.
- 💪 **Muscle filter.** Filter by 16 named anatomical muscle groups (Pectoralis major, Latissimus dorsi, Quadriceps femoris, etc.).

Each record includes identifiers (exerciseId, uuid), naming and aliases, anatomical targets (primaryMuscles and secondaryMuscles), equipment list, full HTML description, CC-BY-SA 4.0 license attribution, image gallery, video links, and source URLs.

> 💡 **Why it matters:** clean, structured exercise data is the backbone of every workout app, gym CMS, personal-training platform, and AI coach. Building your own pipeline means writing HTML parsers, normalizing muscle taxonomies, and chasing translations. This Actor skips all of that and keeps your library fresh on every run.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded fitness catalog._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td><code>language</code></td><td>string</td><td><code>"en"</code></td><td>One of 30 supported languages. ISO 639-1 codes.</td></tr>
<tr><td><code>category</code></td><td>string</td><td><code>""</code></td><td>One of 9 body categories. Empty = all categories.</td></tr>
<tr><td><code>equipment</code></td><td>string</td><td><code>""</code></td><td>One of 12 equipment types. Empty = all equipment.</td></tr>
<tr><td><code>muscle</code></td><td>string</td><td><code>""</code></td><td>One of 16 primary muscles. Empty = all muscles.</td></tr>
</tbody>
</table>

**Example: 25 chest exercises that use a barbell, in English.**

```json
{
    "maxItems": 25,
    "language": "en",
    "category": "11",
    "equipment": "1"
}
````

**Example: every bodyweight back exercise in Spanish.**

```json
{
    "maxItems": 50,
    "language": "es",
    "category": "12",
    "equipment": "7"
}
```

> ⚠️ **Good to Know:** wger relies on community translations. English coverage is the most complete; other languages may fall back to English when a translation is missing. Image and video assets are also community-contributed and not every exercise has visuals.

***

### 📊 Output

Each exercise record contains **19 fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ `imageUrl` | string | null | `"https://wger.de/media/exercise-images/91/Bench-press-1.png"` |
| 🏷️ `name` | string | `"Bench Press"` |
| 🆔 `exerciseId` | number | `192` |
| 🔖 `uuid` | string | `"5891d0aa-e30c-4f10-a8d6-fa1da77b71e6"` |
| 📂 `category` | string | `"Chest"` |
| 🏋️ `equipment` | array | `["Barbell", "Bench"]` |
| 💪 `primaryMuscles` | array | `["Pectoralis major"]` |
| 🤸 `secondaryMuscles` | array | `["Anterior deltoid", "Triceps brachii"]` |
| 📝 `description` | string | `"Lie flat on a bench, grip the bar..."` |
| 🌐 `language` | string | `"en"` |
| 🪪 `aliases` | array | `["Barbell Bench Press"]` |
| ⚖️ `license` | string | `"CC-BY-SA 4.0"` |
| 👤 `licenseAuthor` | string | null | `"wger.de contributors"` |
| 🖼️ `images` | array | `["https://wger.de/media/exercise-images/..."]` |
| 🎥 `videos` | array | `[]` |
| 📅 `createdAt` | ISO 8601 | `"2014-09-01T13:46:33Z"` |
| 🔄 `updatedAt` | ISO 8601 | `"2023-08-14T18:32:11Z"` |
| 🔗 `detailUrl` | string | `"https://wger.de/en/exercise/192/bench-press"` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-05-22T00:00:00.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>💪 Compound lift: Bench Press</strong></summary>

```json
{
    "imageUrl": "https://wger.de/media/exercise-images/91/Bench-press-1.png",
    "name": "Bench Press",
    "exerciseId": 192,
    "uuid": "5891d0aa-e30c-4f10-a8d6-fa1da77b71e6",
    "category": "Chest",
    "equipment": ["Barbell", "Bench"],
    "primaryMuscles": ["Pectoralis major"],
    "secondaryMuscles": ["Anterior deltoid", "Triceps brachii"],
    "description": "Lie flat on a bench with a barbell racked above. Grip slightly wider than shoulder width, lower the bar to the chest, then press up.",
    "language": "en",
    "aliases": ["Barbell Bench Press"],
    "license": "CC-BY-SA 4.0",
    "licenseAuthor": "wger.de contributors",
    "images": ["https://wger.de/media/exercise-images/91/Bench-press-1.png"],
    "videos": [],
    "createdAt": "2014-09-01T13:46:33Z",
    "updatedAt": "2023-08-14T18:32:11Z",
    "detailUrl": "https://wger.de/en/exercise/192/bench-press",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🤸 Bodyweight: Pull-Up</strong></summary>

```json
{
    "imageUrl": "https://wger.de/media/exercise-images/82/Pull-ups-1.png",
    "name": "Pull-Up",
    "exerciseId": 161,
    "uuid": "f1b7f5e2-...",
    "category": "Back",
    "equipment": ["Pull-up bar"],
    "primaryMuscles": ["Latissimus dorsi"],
    "secondaryMuscles": ["Biceps brachii", "Trapezius"],
    "description": "Grip a pull-up bar with palms facing away. Pull yourself up until your chin clears the bar, then lower under control.",
    "language": "en",
    "aliases": [],
    "license": "CC-BY-SA 4.0",
    "licenseAuthor": "wger.de contributors",
    "images": ["https://wger.de/media/exercise-images/82/Pull-ups-1.png"],
    "videos": [],
    "createdAt": "2014-08-15T10:22:00Z",
    "updatedAt": "2024-01-02T09:11:44Z",
    "detailUrl": "https://wger.de/en/exercise/161/pull-up",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🧘 Mobility: Cat-Cow Stretch (es)</strong></summary>

```json
{
    "imageUrl": null,
    "name": "Postura Gato-Vaca",
    "exerciseId": 845,
    "uuid": "c39ab0d2-...",
    "category": "Espalda",
    "equipment": ["Esterilla"],
    "primaryMuscles": ["Erector spinae"],
    "secondaryMuscles": ["Rectus abdominis"],
    "description": "Comienza en posición de cuatro patas. Alterna entre arquear y redondear la columna...",
    "language": "es",
    "aliases": [],
    "license": "CC-BY-SA 4.0",
    "licenseAuthor": "wger.de contributors",
    "images": [],
    "videos": [],
    "createdAt": "2022-03-10T14:00:00Z",
    "updatedAt": "2024-05-22T11:33:00Z",
    "detailUrl": "https://wger.de/es/exercise/845/postura-gato-vaca",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 💪 | **Comprehensive catalog.** 845+ exercises across 9 body regions and 16 muscle groups. |
| 🌍 | **30 languages.** From English and Spanish to Arabic, Chinese, Korean, and Esperanto. |
| 🎯 | **Multi-dimensional filters.** Category, equipment, muscle, and language stack freely in a single run. |
| 🖼️ | **Visual assets.** Image galleries and video URLs included when available. |
| ⚡ | **Fast.** 10 exercises in under 5 seconds, the entire catalog in under a minute. |
| ⚖️ | **Open license.** CC-BY-SA 4.0 attribution included on every record. |
| 🚫 | **No authentication.** Works with public fitness data. No login or sign-up needed. |

> 📊 Accurate exercise reference data is the foundation of every workout-builder, AI coach, and personal-training platform on the market.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ wger Exercise Database Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **845+** exercises | **Live per run** | category, equipment, muscle, language | ⚡ 2 min |
| Commercial fitness data feeds | $200+/month | Varies, often opaque | Vendor-controlled | Limited | 🐢 Days |
| Scraping a closed gym app | Free | Single source, fragile | Manual | None | 🕒 Hours of engineering |
| Hand-curating your own library | Free | Whatever you write | Manual | None | 🐌 Weeks |

Pick this Actor when you want a broad multilingual catalog, server-side filtering, and no parser maintenance.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the wger Exercise Database Scraper page on the Apify Store.
3. 🎯 **Set input.** Pick a language, category, equipment, or muscle (or leave blank for all), and set `maxItems`.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 🏋️ Fitness Apps & Workout Builders

- Pre-populated exercise library on app launch
- Muscle-group autocomplete and search
- Localized exercise names in 30 languages
- Image and video galleries for movement demos

</td>
<td width="50%" valign="top">

#### 👨‍🏫 Personal Trainers & Coaches

- Programmable workout templates
- Client-facing PDF handouts with images
- Multilingual programs for international clients
- Substitution lookups by equipment availability

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🏥 Rehab & Sports Medicine

- Targeted protocols by muscle group
- Equipment-free home programs for patients
- Multilingual instructions for clinics
- Structured data for outcome research

</td>
<td width="50%" valign="top">

#### 🤖 AI Coaches & LLM Pipelines

- Grounded retrieval source for AI workout planners
- Training corpora for fitness-domain models
- Embedding catalogs for semantic search
- Validated exercise vocabulary for generated plans

</td>
</tr>
</table>

***

### 🔌 Automating wger Exercise Database Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify API documentation](https://docs.apify.com/api/v2) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Hourly, daily, or weekly refreshes keep downstream databases in sync automatically.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Sports-science papers needing standardized exercise vocabulary
- Kinesiology and physiotherapy coursework
- Reproducible studies with cited dataset pulls
- Comparative meta-analyses on training protocols

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side-project gym apps and tracker tools
- Personal workout journals with images
- Fitness-themed blogs and YouTube content
- Hobby projects for self-coached athletes

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Community gym kiosks and recreation centers
- Refugee health programs needing multilingual content
- Open educational resources for schools and PE classes
- Inclusive accessibility-focused exercise libraries

</td>
<td width="50%">

#### 🧪 Experimentation

- Train fitness-classification or recommender models
- Prototype LLM agents that build custom workouts
- Test embedding strategies on movement taxonomies
- Validate workout-app concepts with real data

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20wger%20Exercise%20Database%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20wger%20Exercise%20Database%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20wger%20Exercise%20Database%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20wger%20Exercise%20Database%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

Pick a language, category, equipment, or muscle filter in the input form, click Start, and the Actor applies the filters server-side and emits a clean structured record per exercise. No browser automation, no captchas, no setup.

#### 📏 How complete is the data?

The English catalog is the most complete with 845+ exercises and full descriptions. Other languages cover the high-frequency exercises first and fall back gracefully when a translation is unavailable.

#### 🔁 How often is the dataset refreshed?

wger is community-edited and updated continuously. Every run of this Actor fetches the latest data, so your dataset reflects current records as of run time.

#### 🖼️ Do all exercises have images and videos?

No. Visual assets are contributor-driven. Major lifts and popular exercises usually have at least one image; obscure or recently added movements may have none. The `images` and `videos` fields are arrays that can be empty.

#### 🌐 Which languages are supported?

30 languages: English, German, Spanish, French, Italian, Portuguese, Dutch, Russian, Polish, Czech, Swedish, Norwegian, Turkish, Greek, Bulgarian, Ukrainian, Serbian, Hebrew, Arabic, Persian, Tamil, Thai, Chinese, Korean, Azerbaijani, Indonesian, Esperanto, Croatian, Slovenian, Slovak.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to run this Actor on any cron interval (hourly, daily, weekly) and keep a downstream database in sync.

#### ⚖️ Is this data legal to use?

The wger catalog is published under CC-BY-SA 4.0. You can use it commercially as long as you provide attribution and share derivative datasets under the same license. Each record includes `license` and `licenseAuthor` for easy compliance.

#### 💼 Can I use this data commercially?

Yes, with attribution under CC-BY-SA 4.0. Most major fitness apps that license open exercise data follow this pattern.

#### 💳 Do I need a paid Apify plan to use this Actor?

No. The free Apify plan is enough for testing and small runs (10 records per run). A paid plan lifts the limit and gives you access to scheduling, higher concurrency, and larger datasets.

#### 🔁 What happens if a run fails or gets interrupted?

Apify automatically retries transient errors. If a run still fails, you can inspect the log in the Runs tab, fix the input, and re-run. Partial datasets from failed runs are preserved so you never lose progress.

#### 🆘 What if I need help?

Our support team is here to help. Contact us through the Apify platform or use the Tally form linked below.

***

### 🔌 Integrate with any app

wger Exercise Database Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe exercise data into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh exercise data into your fitness backend, or alert your team in Slack.

***

### 🔗 Recommended Actors

- [**🥗 USDA FoodData Central Scraper**](https://apify.com/parseforge/usda-fooddata-central-scraper) - Nutrition data for foods and ingredients
- [**📚 Open Library Scraper**](https://apify.com/parseforge/open-library-scraper) - Book metadata and author records
- [**🎓 OpenStax Textbook Scraper**](https://apify.com/parseforge/openstax-scraper) - Open-license academic content
- [**🏥 ClinicalTrials.gov Scraper**](https://apify.com/parseforge/clinicaltrials-gov-scraper) - Medical trial registry data
- [**🌐 Wikipedia Article Scraper**](https://apify.com/parseforge/wikipedia-article-scraper) - Structured encyclopedia content

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by wger.de or its contributors. All trademarks mentioned are the property of their respective owners. Only publicly available open fitness data is collected, with attribution to the CC-BY-SA 4.0 license preserved on every record.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Translation language for exercise names and descriptions.

## `category` (type: `string`):

Body region / movement category. Leave blank for all categories.

## `equipment` (type: `string`):

Required equipment. Leave blank for all.

## `muscle` (type: `string`):

Primary muscle worked. Leave blank for all.

## Actor input object example

```json
{
  "maxItems": 10,
  "language": "en"
}
```

# Actor output Schema

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

No description

# 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,
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/wger-exercise-database-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,
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/wger-exercise-database-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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,
  "language": "en"
}' |
apify call parseforge/wger-exercise-database-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/wger-exercise-database-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "wger Exercise Database Scraper",
        "description": "Export 845+ exercises from the wger open-source fitness database. Pull names, descriptions, target muscles, secondary muscles, equipment, categories, and reference images. Filter by language, category (Abs, Arms, Back, etc), or equipment type.",
        "version": "1.0",
        "x-build-id": "5ZH12g87AnrxxEbiE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~wger-exercise-database-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-wger-exercise-database-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~wger-exercise-database-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-wger-exercise-database-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~wger-exercise-database-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-wger-exercise-database-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "de",
                            "es",
                            "fr",
                            "it",
                            "pt",
                            "nl",
                            "ru",
                            "pl",
                            "cs",
                            "sv",
                            "no",
                            "tr",
                            "el",
                            "bg",
                            "uk",
                            "sr",
                            "he",
                            "ar",
                            "fa",
                            "ta",
                            "th",
                            "zh",
                            "ko",
                            "az",
                            "id",
                            "eo",
                            "hr",
                            "sl",
                            "sk"
                        ],
                        "type": "string",
                        "description": "Translation language for exercise names and descriptions."
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "",
                            "10",
                            "8",
                            "12",
                            "14",
                            "15",
                            "11",
                            "9",
                            "13"
                        ],
                        "type": "string",
                        "description": "Body region / movement category. Leave blank for all categories."
                    },
                    "equipment": {
                        "title": "Equipment",
                        "enum": [
                            "",
                            "1",
                            "8",
                            "3",
                            "4",
                            "9",
                            "10",
                            "6",
                            "11",
                            "2",
                            "5",
                            "7"
                        ],
                        "type": "string",
                        "description": "Required equipment. Leave blank for all."
                    },
                    "muscle": {
                        "title": "Primary Muscle",
                        "enum": [
                            "",
                            "2",
                            "1",
                            "11",
                            "13",
                            "7",
                            "8",
                            "12",
                            "14",
                            "4",
                            "10",
                            "6",
                            "3",
                            "15",
                            "9",
                            "5"
                        ],
                        "type": "string",
                        "description": "Primary muscle worked. Leave blank for all."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
