Skip to content
    ↑↓ to choose · Enter to open

    · 12 min read

    Wger Exercise & Workout Scraper: 22 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each exercise record carries 22 output fields, including exerciseId, primaryMuscles, equipment, description, and public imageUrls hosted on wger.de. Extract over 800 open-source exercise entries categorized by muscle group, body category, or required equipment without authenticating. Results cost $5.00 per 1,000 results on Apify's free plan, which includes $5.00 of monthly usage. This Actor is for developers and content creators who need structured fitness taxonomies and instructional descriptions; it is not for teams looking for live commercial gym equipment prices or e-commerce inventory, which Wger does not track.

    Try it: open Wger Exercise & Workout Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Wger Exercise & Workout Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Wger Exercise & Workout Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 20, so a first run returns at most 20 results and costs at most $0.10 in result charges. That is enough to see the real shape of the data before deciding anything.

    Wger Exercise & Workout Scraper was last updated on 2026-07-04. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 692,561 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Wger Exercise & Workout Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The maxItems parameter directly controls your dataset size and overall result charges. Setting maxItems higher increases the total results written, which dictates your billable items. To test your query or filter configurations safely, run the Actor with maxItems set to a low value like 5 before executing full-database extractions.

    How do you run Wger Exercise & Workout Scraper from the API?

    The schema marks 1 of its 9 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~wger-exercise-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","maxItems":20}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "maxItems": 20
    }
    
    run = client.actor("crawlerbros~wger-exercise-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "maxItems": 20
    }
    
    const run = await client.actor('crawlerbros~wger-exercise-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.

    Which Wger Exercise & Workout Scraper inputs matter, and which can you skip?

    The mode parameter is required and determines how the Actor queries the database. Setting mode to search requires a searchQuery, while filter modes like byCategory, byMuscle, or byEquipment rely on their respective selection controls. Leave exerciseIds empty unless you are requesting specific known IDs.

    • mode (string): What to fetch from the Wger fitness database. Default: "search".
    • searchQuery (string): Keyword to search exercise names and descriptions. Default: "squat".
    • category (string): Filter by body category. Default: "Chest".
    • muscle (string): Filter by primary muscle group targeted. Default: "Biceps brachii".
    • equipment (string): Filter by required equipment. Default: "Dumbbell".
    • exerciseIds (array): List of Wger exercise IDs to fetch. Default: [].
    • language (string): Exercise translation language. Default: "English".
    • includeImages (boolean): Include exercise demonstration images (from Wger media server). Default: true.
    • maxItems (integer): Maximum number of exercise records to return. Default: 50.

    Fixed-choice controls: mode accepts search (Search exercises by keyword), byCategory (Browse exercises by body category), byMuscle (Browse exercises by muscle group), byEquipment (Browse exercises by equipment), byIds (Fetch exercises by ID); category accepts Abs (core), Arms (biceps, triceps), Back (lats, traps, lower back), Calves, Cardio, Chest (pecs), Legs (quads, hamstrings, glutes), Shoulders (deltoids); muscle accepts 15 values (default Biceps brachii), including Biceps brachii (Biceps), Anterior deltoid (front shoulders), Serratus anterior, Pectoralis major (chest); equipment accepts 11 values (default Dumbbell), including Dumbbell, Barbell, Bench, Gym mat; language accepts 10 values (default English), including English, German (Deutsch), Spanish (Español), French (Français).

    What does Wger Exercise & Workout Scraper return?

    Returned records are ideal for seeding fitness applications, building exercise search indexes, or organizing physical therapy movement catalogs. They contain raw movement descriptions, category tags, and image URLs, but conspicuously do not contain workout tracking history, user profile data, or live commercial retail pricing.

    • exerciseId: Wger exercise ID
    • uuid: Stable exercise UUID (cross-instance identifier)
    • variationGroup: UUID grouping exercises that are variations of one another (when applicable)
    • name: Exercise name (in selected language)
    • description: Full exercise description
    • category: Body category (Abs, Arms, Back, Chest, Legs, Shoulders, Cardio, Calves)
    • primaryMuscles: Array of primary muscles targeted
    • secondaryMuscles: Array of secondary/stabilizer muscles
    • equipment: Equipment required (e.g., Barbell, Dumbbell, Body weight)
    • imageUrls: Array of exercise demonstration image URLs
    • videoUrls: Array of exercise demonstration video URLs (when available)
    • aliases: Alternate names for the exercise (when curated)
    • notes: Coaching tips/notes attached to the exercise (when curated)
    • licenseName: Creative Commons license short name for the exercise content
    • licenseUrl: URL to the full license text
    • licenseAuthor: Attributed author of the exercise content
    • contributors: Full list of authors who have edited the exercise over time
    • createdAt: Date exercise was added to database
    • lastUpdated: Date of last update
    • sourceUrl: Direct link to exercise on wger.de
    • recordType: Always "exercise"
    • scrapedAt: ISO timestamp of scrape

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Wger Exercise & Workout Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select your target mode in the mode schema field, choosing search, byCategory, byMuscle, byEquipment, or byIds.
    2. Set searchQuery to squat or your target term if using search mode, or populate category, muscle, or equipment if using filter modes.
    3. Configure language to English or one of the 9 supported alternative language options to match your target locale.
    4. Toggle includeImages to true or false depending on whether you require wger.de demonstration image URLs in your output dataset.
    5. Set maxItems to a small value such as 5 for your initial run to evaluate the structure without consuming unnecessary result credits.
    6. Run the Actor and open the default dataset to inspect the returned output fields.
    7. Check that name, primaryMuscles, and description fields are present and properly populated in the JSON output.
    8. Expand maxItems up to your desired extraction batch size once you have confirmed the returned structure matches your schema expectations.

    How do you apply it? Three worked playbooks

    These are Wger Exercise & Workout Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Build workout apps

    Outcome: Build workout apps with structured exercise data

    Configure: Set mode to byCategory, category to Chest, language to English, includeImages to true, and maxItems to 50.

    Working method: Execute an initial run for one category to review output structure. Validate that exerciseId, primaryMuscles, and imageUrls contain usable data for UI rendering. Once verified, iterate across all eight supported category values.

    Deliverable: A structured JSON dataset containing 50 exercise records with complete descriptions, targeted muscle arrays, and demonstration image URLs.

    Stop condition: Stop if imageUrls returns empty arrays across more than 20% of the returned records when includeImages is enabled.

    Use case 2: Physical therapy research

    Outcome: Research exercise libraries for physical therapy

    Configure: Set mode to byMuscle, muscle to Biceps brachii, language to English, includeImages to true, and maxItems to 30.

    Working method: Run the Actor for specific target muscle groups involved in therapy programs. Compare primaryMuscles and secondaryMuscles fields to build precise movement classifications. Group the results by equipment requirements.

    Deliverable: A filtered exercise repository mapping target muscles to specific equipment options and instructional descriptions.

    Stop condition: Stop if primaryMuscles or secondaryMuscles fields return null or unparsed data formats.

    Use case 3: Fitness content creation

    Outcome: Create fitness content for blogs or apps

    Configure: Set mode to search, searchQuery to squat, language to English, includeImages to true, and maxItems to 20.

    Working method: Execute keyword-based runs for popular exercise terms. Check that description, notes, and aliases provide sufficient detail for content creation. Export the dataset to JSON or CSV for editorial workflows.

    Deliverable: A CSV file or JSON feed containing exercise guides, alternative exercise names, and instructional media links.

    Stop condition: Stop if search results return zero records for standard exercise queries.

    What breaks, and how do you design around it?

    When querying specific IDs using byIds mode, retired or renumbered exercise IDs may fail to resolve over time. Design around this by using search, byCategory, or byMuscle modes to discover current active IDs dynamically. If a regional translation is missing, expect the API output to fall back automatically to English text.

    When should you not use Wger Exercise & Workout Scraper?

    Do not use this Actor if you require curated interactive coding tracks or technical education curricula; use Exercism Scraper instead. Do not use it if you need nutrition facts, ingredient lists, or product barcodes, which are served by Open Food Facts Scraper. If your project requires non-fitness data sources like software workflow templates, camera hardware specs, or municipal permit logs, this database will not contain that information. Avoid using this Actor if you require commercial exercise machinery pricing or retail availability, as Wger is an open-source movement reference rather than an e-commerce catalog.

    What should you check before trusting the output?

    • Verify that the exerciseId field returns an integer for every item to prevent breaks in downstream relational database joins.
    • Check that description contains a non-empty string; if empty, verify whether the requested language has a translation fallback.
    • Validate that imageUrls returns a populated array when includeImages is set to true.
    • Confirm that primaryMuscles contains expected muscle values and has not fallen back to anatomical Latin terms unexpectedly.
    • Stop scheduled runs if the percentage of items missing sourceUrl exceeds your internal tolerance threshold.

    None of this proves a record is correct. It gives a scheduled Wger Exercise & Workout Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    How much does it cost to scrape the Wger exercise database?

    It costs $0.005 per result written to your dataset, which equals $5.00 per 1,000 results on the free plan. Run-start charges of $0.005 per GB of Actor memory apply to every run that starts, along with standard Apify platform usage fees.

    Do I need an API key or account on Wger to run this?

    No API key or authentication is required. The Actor queries Wger's open database directly without needing personal account credentials or proprietary access tokens.

    What languages are available for exercise descriptions?

    The Actor supports English, German, Spanish, French, Portuguese, Russian, Dutch, Swedish, Norwegian, and Polish. If a specific exercise lacks a translation in your chosen language, it falls back to English.

    What happens if a specific exercise ID no longer exists?

    Wger occasionally renumbers or retires exercise IDs. If an ID stops returning data in byIds mode, switch to search, byCategory, or byMuscle mode to find the updated exerciseId.

    Can I extract exercise demonstration images with this Actor?

    Yes. When includeImages is set to true, the output dataset includes direct public image URLs hosted on wger.de under the imageUrls field.

    Where to go next

    When you are ready to run it, open Wger Exercise & Workout Scraper on Apify; the free plan covers up to 1,000 results a month.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-28.

    • Actor last updated by its maintainers on 2026-07-04.

    • Run outcome figures cover the 30 day public window ending 2026-09-28.

    • Wger Exercise & Workout Scraper on Apify

    Featured actors

    Wger Exercise & Workout Scraper

    Scrape the Wger open fitness database - 800+ exercises with muscles, equipment, categories, images, and descriptions. Search by muscle group, equipment type, or body category. Completely free, no auth required.

    Run on Apify ↗