# Wistia Video Downloader (`truefetch/wistia-video-downloader`) Actor

Process one publicly accessible Wistia media page or iframe for structured metadata and an optional stored video file. Choose metadata-only mode or a download quality preference.

- **URL**: https://apify.com/truefetch/wistia-video-downloader.md
- **Developed by:** [TrueFetch](https://apify.com/truefetch) (community)
- **Categories:** Videos, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Wistia Video Downloader turns one accessible Wistia media page or iframe into a structured Dataset record and can optionally store its video file in Apify.

- The public input contract has two fields and requires one Wistia media URL.
- Four quality values separate a metadata check from three video-download preferences.
- The output schema defines 39 fields for media identity, ownership, technical properties, processing, and delivery.
- Viewer comments are not a public feature; the reserved `comments` list is normally empty.

**[Run a one-result test](https://apify.com/truefetch/wistia-video-downloader)**

**[View API](https://apify.com/truefetch/wistia-video-downloader/api)**

Publish the Actor, then validate one permitted public iframe with metadata mode before asking it to store media.

### What does Wistia Video Downloader do?

Wistia Video Downloader processes one Wistia media reference at a time. The reference can be a directly accessible media page or an iframe URL that identifies one video. The Actor normalizes extractor output into an Apify Dataset item instead of exposing host-specific response shapes.

Possible fields include the hashed media ID, title, description, thumbnail, duration, publication time, uploader information, available counters, dimensions, frame rate, and audio labels. Availability varies because Wistia publishers control privacy, embedding, domains, passwords, and the media renditions associated with each asset.

Metadata mode avoids file transfer. A low, medium, or high selection asks for an available rendition and can place the result in run storage. The setting does not manufacture a resolution or override publisher access. This Actor does not crawl projects, channels, galleries, account libraries, analytics, lead forms, or comments.

### How do I run Wistia Video Downloader?

Open the local Actor draft in Apify Console and verify its Wistia identity. Obtain a URL that resolves to one media asset. The iframe form is usually less ambiguous than a marketing page containing several embeds because it carries the media identifier directly.

The examples below all use this one-media scenario:

```json
{
  "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix",
  "video_quality": "metadata"
}
```

The media owner can change availability, so confirm that the sample is still accessible or replace it with an asset you are authorized to test. Run metadata first and compare ID, title, thumbnail, and duration with the intended embed. Only request a file after the metadata identity is correct.

Do not add a Wistia account token, password, domain override, project ID, or comment limit. Those fields are not part of the schema and additional properties are rejected.

### What data does Wistia Video Downloader return?

The normalized item has 39 possible fields:

| Record area | Fields |
|---|---|
| Run context | `processor`, `processed_at` |
| Media identity | `id`, `thumbnail`, `platform`, `title`, `description`, `duration`, `published_at` |
| Publisher | `author`, `author_id`, `author_url` |
| Classification | `categories`, `tags` |
| Source counters | `view_count`, `like_count`, `shares_count`, `dislike_count`, `comment_count` |
| Rendition properties | `width`, `height`, `fps`, `audio_title`, `audio_artist` |
| Reserved and file | `comments`, `video` |

An abbreviated example tied to the same iframe is:

```json
{
  "id": "26sk4lmiix",
  "platform": "Wistia",
  "title": "Example Wistia media",
  "author": null,
  "thumbnail": "https://example.com/wistia-thumbnail.jpg",
  "duration": null,
  "comments": [],
  "video": ""
}
```

This is a contract illustration, not a captured response. A Wistia asset often has fewer social counters than a public social-video post, so nullable fields are expected. Never turn absent metrics into zero. Metadata mode intentionally returns no stored file, and the public input never requests viewer comments.

Source-dependent fields also present in every item:

| Field | Meaning |
|---|---|
| `source_url` | Canonical page URL of the item on its own platform |
| `media_type` | Kind of media the source reports, such as video or audio |
| `live_status` | Whether the item is a recording, currently live, or a finished stream |
| `availability` | Source visibility, such as public, unlisted, or needs\_auth |
| `age_limit` | Minimum viewer age the source enforces; zero means no restriction |
| `language` | Primary language of the item as reported by the source |
| `followers` | Follower or subscriber count of the author at processing time |
| `is_verified` | Whether the author's account carries a verified badge |
| `saves_count` | Times viewers saved the item, on sources that expose it |
| `file_ext` | Container extension of the selected media, such as mp4 or webm |
| `file_size` | Size of the selected media in bytes, exact or approximate |
| `subtitles` | Language codes of published subtitle tracks; auto-captions excluded |
| `chapters` | Chapter markers with title and start and end time in seconds |

### What inputs can I configure?

There are only two inputs:

| Input | Required | Behavior |
|---|---:|---|
| `video_url` | Yes | One accessible Wistia media page or iframe URL. |
| `video_quality` | No | `metadata`, `low`, `medium`, or `high`; metadata skips media storage. |

The URL field contains a Wistia iframe example. The quality selector is optional and has no prefill or example, allowing the submitted input to show whether the caller made an explicit choice. Omission falls back to metadata in the current runtime.

The Actor offers no project, account, folder, gallery, playlist, date, market, domain, password, batch, analytics, or comments control. Process multiple authorized media items through separate inputs.

### What platforms and markets does Wistia Video Downloader cover?

Coverage follows a Wistia media URL rather than a geographical market. The local yt-dlp installation includes Wistia extractors, including playlist-related support, but this public Actor intentionally documents only one media asset per run.

Wistia is frequently embedded on another organization’s website. A page opening in a browser does not automatically mean its video endpoint is unrestricted: a publisher can limit playback by domain, require a password, gate the page behind authentication, remove the asset, or change embedding settings. This Actor exposes none of the credentials or browser session required to cross those boundaries.

Before release, test a direct public iframe, a host page with one embed, a page with multiple embeds, a domain-restricted media item, and a removed identifier. Validate which ID was selected and whether metadata and file outcomes match the documented boundary. A run status alone is insufficient evidence.

For the multiple-embed case, compare the requested hashed ID with the returned `id` and thumbnail; do not accept the first playable asset merely because it is valid Wistia media. For the domain-restricted case, record the expected refusal without attempting to weaken the publisher’s controls. These assertions protect both data accuracy and the intended access boundary.

### Why use Wistia Video Downloader?

Wistia embeds are common in product demos, training pages, help centers, and marketing sites. A normalized record can let a team index an authorized media asset by ID, thumbnail, duration, and source page without maintaining a custom extraction response parser. An approved file can then enter a controlled archive, transcription job, review workflow, or content catalog.

Metadata-first operation makes identity and access errors visible before video transfer. Thumbnail-first Dataset display helps reviewers recognize the asset. The stable cross-video field names allow the same downstream table to accept Wistia and other supported video records while keeping missing properties explicit.

There is no verified Actor ID, public usage, rating, review, Issues history, or live production record, so the README makes no adoption or reliability claim.

### Who is Wistia Video Downloader for?

Developers can ingest one permitted Wistia embed into an application. Product education, support, marketing operations, and training teams can catalog media they control. Researchers can preserve metadata for public embeds in a documented sample. AI teams can pass an authorized stored video to a separate speech or visual analysis service.

Non-developers can use the Console for a one-item test.

It is not a Wistia account export, analytics client, project crawler, password bypass, lead collector, viewer tracker, or rights-management tool. The media owner’s access settings and the caller’s authorization remain decisive.

### How can I use Wistia Video Downloader through the API or MCP?

The intended Actor name is `truefetch/wistia-video-downloader`.submit the same iframe through the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/truefetch~wistia-video-downloader/runs?token=$APIFY_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{"video_url":"https://fast.wistia.net/embed/iframe/26sk4lmiix","video_quality":"metadata"}'
```

The corresponding hosted MCP configuration and tool arguments are:

```json
{
  "mcpServers": {
    "apify-wistia": {
      "url": "https://mcp.apify.com?tools=truefetch/wistia-video-downloader",
      "headers": {
        "Authorization": "Bearer <APIFY_TOKEN>"
      }
    }
  },
  "exampleToolArguments": {
    "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix",
    "video_quality": "metadata"
  }
}
```

The MCP tool appears only. Keep the token secret and use the [official Apify MCP instructions](https://docs.apify.com/integrations/mcp).

### How much does Wistia Video Downloader cost?

The local publishing metadata declares these events; they are not a verified live offer:

| Declared event | Unit | Local price |
|---|---|---:|
| `apify-actor-start` | Actor start | $0.01 |
| `actor_usage` | Metered usage event | $0.00001 |
| `metadata` | One media item processed without download | $0.11 |
| `download` | One media item processed with file storage | $0.26 |

The smallest metadata scenario declares $0.12 for start and result events before metered usage and platform costs. The fixed result event for a download is $0.26 instead of metadata.

### How does Wistia Video Downloader compare with alternatives?

| Route | Suitable use | Constraint |
|---|---|---|
| Wistia Video Downloader | One accessible Wistia asset needs normalized metadata or storage | Publishing identity and live restriction tests are pending. |
| Wistia owner controls | The account owner manages, exports, or analyzes their media | Requires account authorization and follows Wistia features. |
| Browser inspection | A person checks one embedded video manually | Not a repeatable Dataset or API integration. |
| Best Video Downloader | Inputs arrive from several supported hosts | Less focused on Wistia embedding and access boundaries. |

Account owners should prefer first-party controls for account-wide operations. This Actor fits a narrow, URL-driven processing step for accessible media.

### What are the limits and troubleshooting steps?

Only one URL is accepted. No account, password, domain override, project, playlist, batch, comments, or analytics input exists. The output is nullable and the requested quality is limited by available renditions.

For an empty result, open the iframe in a private window and confirm it displays the intended media without credentials. Check the hashed ID, try the direct iframe instead of a complex host page, and retry in metadata mode. If a host page contains multiple embeds, provide the intended iframe URL to remove ambiguity.

When download mode returns no file, inspect run logs and storage. Domain restrictions, deleted media, unavailable renditions, or platform delivery changes can break a previously valid reference. The public Issues surface is unavailable, so there is no verified incident history.

Scheduled runs repeat the same URL and do not discover project additions. Media owners may change privacy at any time; retention and downstream use require separate policy decisions.

### Frequently asked questions

#### Can it export an entire Wistia project?

No. The documented unit is one media URL.

#### Can it use a password or account login?

No password, token, or cookie field is exposed.

#### Are comments or viewer analytics returned?

No. Comments are not requested, and account analytics are outside the contract.

#### Should I provide the host page or iframe?

A direct iframe is the clearest one-media reference; public host pages may work when unambiguous.

#### Does high guarantee a resolution?

No. Wistia’s available renditions set the limit.

#### Why are social counters null?

Many Wistia assets do not expose those cross-platform fields publicly.

#### Can I schedule a media check?

Yes, but availability and privacy can change.

#### Why do domain restrictions break a previously working URL?

Wistia lets the media owner limit playback to named domains. When that setting is enabled the embed stops returning a manifest to any other origin, so a reference that worked yesterday can stop resolving. Confirm the iframe still plays in a private window before investigating the run.

#### Which identifier should I keep for deduplication?

Keep the hashed media ID returned in `id`. It stays stable across host pages and embed variants, whereas the page URL changes whenever the media is re-embedded on a different site.

#### How do I handle a host page that embeds several videos?

Submit the specific `fast.wistia.net/embed/iframe/<hash>` address for the media you want rather than the marketing page that contains it. A host page with several embeds gives the extractor no single target, and the run may resolve a different asset than you intended or end without a Dataset item. Read the hashed ID out of the page source or the embed code, keep it in your own catalogue, and build the iframe URL from that hash so the same asset is requested every time.

### Related TrueFetch Actors

- [Best Video Downloader](https://apify.com/truefetch/best-video-downloader) processes supported media URLs across multiple hosts.
- [Video To Text](https://apify.com/truefetch/video-to-text) transcribes speech from authorized media.
- [Video Subtitles Downloader](https://apify.com/truefetch/video-subtitles-downloader) retrieves caption tracks when available.

### Support

- [Apify Actor dashboard](https://apify.com/truefetch/wistia-video-downloader)
- [Apify Actor API reference](https://apify.com/truefetch/wistia-video-downloader/api)
- [Apify MCP documentation](https://docs.apify.com/integrations/mcp)
- [yt-dlp supported-sites reference](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)
- [TrueFetch community](https://t.me/TrueFetch)
- [Direct support](https://t.me/AiAgentApi)

Send the Actor link, stable ID, redacted media URL, access condition, and run ID with support requests.

**[Run a one-result test](https://apify.com/truefetch/wistia-video-downloader)**

**[View API](https://apify.com/truefetch/wistia-video-downloader/api)**

# Actor input Schema

## `video_url` (type: `string`):

Publicly accessible Wistia media page or iframe URL to process.

## `video_quality` (type: `string`):

Preferred download quality, or metadata-only mode without a video file.

## Actor input object example

```json
{
  "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix"
}
```

# Actor output Schema

## `results` (type: `string`):

All video details and optional download links with full engagement stats and comments

# 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 = {
    "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix"
};

// Run the Actor and wait for it to finish
const run = await client.actor("truefetch/wistia-video-downloader").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 = { "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix" }

# Run the Actor and wait for it to finish
run = client.actor("truefetch/wistia-video-downloader").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 '{
  "video_url": "https://fast.wistia.net/embed/iframe/26sk4lmiix"
}' |
apify call truefetch/wistia-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=truefetch/wistia-video-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/b4abVhXtaCOjn183P/builds/OoVb7VCOQJGdi5RdT/openapi.json
