Rutube Video Downloader
Pricing
from $0.0825 / metadata
Rutube Video Downloader
Process one publicly accessible Rutube video page for structured metadata and an optional stored video file. Choose metadata-only mode or a download quality preference.
Pricing
from $0.0825 / metadata
Rating
0.0
(0)
Developer
TrueFetch
Maintained by CommunityActor stats
1
Bookmarked
12
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
What does Rutube Video Downloader do?
Rutube Video Downloader turns one Rutube video link into a record you can export, compare and reuse. Read the title, creator, duration, available engagement and source URL without downloading a file, or request an MP4 for Rutube channel and topic research.
Keep channel attribution and source URLs beside videos selected for topic or editorial research. Metadata is the default; select a download quality only when the workflow needs the file.
How do I run Rutube Video Downloader?
- Open the Input tab and use the small example below.
- Click Start and wait for that run to finish.
- Open the default Dataset to inspect the row, then export JSON or CSV. For a download, open the row's
videolink to retrieve the MP4.
{"video_url": "https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/","video_quality": "metadata"}
Start with Metadata to inspect the record; change video_quality to low, medium or high when you need a saved file.
What data does Rutube Video Downloader return?
The Dataset has 43 top-level fields. Types below describe populated values; every field is nullable when unrequested or unavailable. Preserve genuine zero and false values. [] means an observed empty list.
| Field | JSON type | Meaning and unit |
|---|---|---|
id | string | Unique video identifier from the source platform |
source_url | string | Canonical source page returned for the individual video; for a definitive missing answer, the queried link. It is separate from the saved MP4 URL. |
thumbnail | string | Direct link to the source platform thumbnail image |
platform | string | Source platform name in lowercase. |
media_type | string | Kind of media the source reports, such as video or audio. |
live_status | string | Whether the item is a normal recording, currently live, or a finished live stream. |
availability | string | Source visibility of the item, such as public, unlisted, subscriber_only, or needs_auth. |
age_limit | number | Minimum viewer age the source enforces. Zero means no restriction. |
language | string | Primary language of the item as reported by the source. |
title | string | Video title |
description | string | Full video description or caption |
duration | number | Video length in seconds |
published_at | string | Source publication instant in UTC ISO 8601, retaining source precision. A date-only or separate creation time does not become an invented midnight timestamp. |
author | string | Source channel or uploader name. Source-specific attribution is retained when provided. |
author_id | string | Stable channel or uploader identifier on the source platform. |
author_url | string | Direct link to the creator's profile page |
followers | number | Follower or subscriber count of the author's channel at processing time. |
is_verified | boolean | Whether the author's channel carries a verified badge. |
categories | array | List of categories assigned to the video |
tags | array | Hashtags and keywords associated with the video |
view_count | number | Total number of video views |
like_count | number | Total number of likes or favorites |
shares_count | number | Number of times the video has been shared or reposted |
saves_count | number | Number of times viewers saved or bookmarked the item, on sources that expose it. |
dislike_count | number | Total number of dislikes (if available) |
comment_count | number | Total number of comments on the video |
width | number | Video resolution width in pixels |
height | number | Video resolution height in pixels |
fps | number | Video frame rate (frames per second) |
video_codec | string | Video format name reported for the video. |
audio_codec | string | Audio format name reported for the video. |
bitrate | number | Combined video and audio data rate, in kbit/s. |
dynamic_range | string | Colour range the source reports for the video, such as SDR or HDR10. |
file_ext | string | File extension, such as mp4 or webm. Saved downloads use mp4; a metadata lookup may leave this value empty. |
file_size | number | Exact bytes of the saved file in download mode; an exact source size in metadata mode. |
audio_title | string | Title of the audio track or background music |
audio_artist | string | Artist name of the audio track or background music |
subtitles | array | Array of published subtitle language codes. This field contains no caption text or file links; automatic captions are excluded. |
chapters | array | Chapter markers with title and start and end time in seconds, when the source defines them. |
comments | array | Returned comment text in source order, with replies where available. Treat this as a sample rather than a complete discussion. |
video | string | Saved MP4 URL after successful file delivery. Null in metadata mode. If a requested download cannot be retrieved or saved, no row is returned; the run status keeps the warning. |
processor | string | Canonical Store URL of this Actor. |
processed_at | string | Time this Actor prepared the public row, in UTC ISO 8601 with a Z suffix. This is the collection timestamp. |
Nested objects
| Path | Type | Meaning |
|---|---|---|
chapters[].title | string | Source chapter title. |
chapters[].start_time | number | Offset from the beginning, in seconds. |
chapters[].end_time | number | Chapter end offset, in seconds. |
comments[].author | string | Public source author name when supplied. |
comments[].text | string | Returned comment body, separate from the video description. |
comments[].like_count | number | Source comment likes. |
comments[].published_at | string | Source comment publication instant, UTC ISO 8601 when supplied. |
comment_count is a source total, not the length of comments. subtitles lists language codes and does not contain transcript text. processed_at is generated when the row is prepared and is not evidence of the video's age.
Complete specimen
Illustrative metadata record for the Quick Start link (abbreviated; the tables above list the complete contract):
{"id": "source-video-id","source_url": "https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/","platform": "youtube","title": "Illustrative video title","duration": 19,"video": null,"processor": "https://apify.com/truefetch/rutube-video-downloader","processed_at": "2026-11-06T22:00:00Z"}
Success, partial data, no result and unavailable
- Success: a video record is saved. In metadata mode,
video: nullis expected. In download mode, a non-nullvideoidentifies the stored MP4. - Partial requested data: a saved row can retain available video facts when optional requested comments are missing. A failed requested download returns no row and incurs neither a Metadata nor a Download fee; the run status keeps the warning.
- Definitive no video: when the source explicitly confirms an absent, deleted or supported private result, a sparse identity row can answer the supplied
source_url, with no video ID or business facts. That row has no Metadata or Download event. Startup and usage still apply. - Unavailable: a source refusal or unresolved retrieval failure can leave zero rows. Zero rows do not prove deletion or that the URL contains no video. The run status provides the supported explanation.
The public Dataset does not add a status field. Interpret the row together with the requested mode and final run status; do not treat an MP4 link as present because the platform run says SUCCEEDED. Do not manufacture a blank video in your application when the Dataset is empty.
Exports and file retrieval
JSON preserves the complete nested arrays and null values. CSV is useful for scalar fields, while arrays may require JSON parsing in your spreadsheet workflow. Downloaded media is stored in the run's Key-Value Store; source_url remains the original page. Read the video URL, verify the response and retain the bytes you need within your storage-retention policy. A source thumbnail is an external image URL and can expire independently of a saved MP4.
What inputs can I configure?
| Input | Type | Default / sample | Effect |
|---|---|---|---|
video_url | string | Required; sample "https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/" | Public Rutube video link to read. Supply one video page, not a profile, search or playlist. |
video_quality | string | Default "metadata"; sample "metadata" | Metadata reads the video information without a file. Low prefers a height up to 480 pixels, Medium up to 720, and High the highest available quality. If no version at or below the chosen height exists, the lowest available height is used. Saved downloads are MP4; output dimensions describe the actual file. |
What platforms and markets does Rutube Video Downloader cover?
Use an individual public Rutube video page. Private, login-only, restricted or removed media may be unavailable; this Actor does not bypass access controls. It does not search accounts, collect playlists or download every post from a profile.
Why use Rutube Video Downloader?
Keep channel attribution and source URLs beside videos selected for topic or editorial research.
- Start with metadata to review the record before requesting a file.
- Keep the original URL and creator beside the exported record for attribution.
- Read actual saved dimensions and file size when selecting media for editing.
Who is Rutube Video Downloader for?
- Rutube channel and topic research: use Metadata to build a shortlist with titles, creators and source links.
- Creative or editorial review: request Low, Medium or High when a saved MP4 is needed for a permitted workflow.
- Repeatable tracking: save the input as an Apify Task, add a Schedule and compare later exports using
source_urlandprocessed_at. Counters are snapshots, not complete analytics.
How can I use Rutube Video Downloader through the API or MCP?
The account-qualified Actor name is truefetch~rutube-video-downloader. Each example starts once, polls that run and retrieves every default-Dataset page. Set APIFY_TOKEN in your own environment; never put a token into a shared URL, committed file or public log. The examples use the same complete metadata input as Quick Start.
A client wait ending can leave the Actor running. Poll the existing run ID; starting again can create another run and another bill. If the initial start response is lost, check your run list before submitting again. A terminal FAILED, TIMED-OUT or ABORTED run can still have saved data, so the examples read its Dataset too.
cURL and jq
Requires cURL, jq and a POSIX shell. Save the run ID printed by the script. Requests use the Authorization header rather than a token query parameter.
set -eu: "${APIFY_TOKEN:?Set APIFY_TOKEN}"BASE=https://api.apify.com/v2INPUT='{"video_url":"https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/","video_quality":"metadata"}'RUN=$(curl --fail-with-body --silent --show-error -H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' --data "$INPUT" "$BASE/acts/truefetch~rutube-video-downloader/runs")RID=$(printf '%s' "$RUN" | jq -er '.data.id')printf 'Run ID: %s' "$RID" >&2while :; doRUN=$(curl --fail-with-body --silent --show-error -H "Authorization: Bearer $APIFY_TOKEN" "$BASE/actor-runs/$RID")STATUS=$(printf '%s' "$RUN" | jq -r '.data.status')case "$STATUS" in SUCCEEDED|FAILED|TIMED-OUT|ABORTED) break;; esacsleep 3doneDID=$(printf '%s' "$RUN" | jq -r '.data.defaultDatasetId // empty')printf 'Final status: %s' "$STATUS" >&2if [ -n "$DID" ]; thenOFFSET=0while :; doPAGE=$(curl --fail-with-body --silent --show-error -H "Authorization: Bearer $APIFY_TOKEN" "$BASE/datasets/$DID/items?format=json&clean=false&limit=1000&offset=$OFFSET")printf '%s' "$PAGE" | jq -c '.[]'COUNT=$(printf '%s' "$PAGE" | jq 'length')[ "$COUNT" -lt 1000 ] && breakOFFSET=$((OFFSET + COUNT))donefi
Python
Uses Python 3 and the requests package. The start request is not automatically repeated. A later client error does not cancel the Actor; retain the printed run ID and resume polling it.
import jsonimport osimport timeimport requestsBASE = "https://api.apify.com/v2"session = requests.Session()session.headers["Authorization"] = "Bearer " + os.environ["APIFY_TOKEN"]run_input = {'video_url': 'https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/', 'video_quality': 'metadata'}def get(path, **params):response = session.get(BASE + path, params=params, timeout=60)response.raise_for_status()return response.json()response = session.post(BASE + "/acts/truefetch~rutube-video-downloader/runs", json=run_input, timeout=60)response.raise_for_status()run = response.json()["data"]run_id = run["id"]print("Run ID:", run_id, flush=True)terminal = {"SUCCEEDED", "FAILED", "TIMED-OUT", "ABORTED"}while run["status"] not in terminal:time.sleep(3)run = get("/actor-runs/" + run_id)["data"]print("Final status:", run["status"])dataset_id = run.get("defaultDatasetId")if dataset_id:offset = 0while True:page = get("/datasets/" + dataset_id + "/items", format="json",clean="false", offset=offset, limit=1000)for item in page:print(json.dumps(item, ensure_ascii=False))if len(page) < 1000:breakoffset += len(page)
JavaScript
Uses Node.js 18 or later with built-in fetch. Save as an ES module (.mjs) and set APIFY_TOKEN. It does not need an additional SDK package. A failed HTTP request ends this client, not necessarily the remote run.
const base = 'https://api.apify.com/v2';const token = process.env.APIFY_TOKEN;if (!token) throw new Error('Set APIFY_TOKEN');const input = {"video_url": "https://rutube.ru/video/c58f502c7bb34a8fcdd976b221fca292/", "video_quality": "metadata"};async function api(path, options = {}) {const response = await fetch(base + path, {...options,headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },});if (!response.ok) throw new Error(`Apify HTTP ${response.status}`);return response.json();}let { data: run } = await api('/acts/truefetch~rutube-video-downloader/runs', {method: 'POST', body: JSON.stringify(input),});const runId = run.id;console.log('Run ID:', runId);const terminal = new Set(['SUCCEEDED', 'FAILED', 'TIMED-OUT', 'ABORTED']);while (!terminal.has(run.status)) {await new Promise(resolve => setTimeout(resolve, 3000));({ data: run } = await api(`/actor-runs/${runId}`));}console.log('Final status:', run.status);if (run.defaultDatasetId) {for (let offset = 0; ; ) {const page = await api(`/datasets/${run.defaultDatasetId}/items?format=json&clean=false&limit=1000&offset=${offset}`);for (const item of page) console.log(JSON.stringify(item));if (page.length < 1000) break;offset += page.length;}}
Make, n8n and downstream tools
In Make, select Apify's Run an Actor, use the Actor ID above, map the same JSON input and retain the returned run ID. Wait for that run to finish, then use Get Dataset Items with its defaultDatasetId; configure pagination rather than assuming the first page is the whole result. In n8n, use the Apify Actor action and pass the same input; retain the run and Dataset IDs between nodes. If the workflow stops waiting, resume polling the existing run.
For a media archive, fetch the saved video URL. For analytics, ingest Dataset JSON with its source links and collection timestamp. Caption text requires a separate transcript workflow.
For an MCP workflow, connect an Apify-supported MCP client and select this Actor with the same input keys. The API page provides the integration entry points. Keep the run ID so a client disconnect does not lead to a second run.
How much does Rutube Video Downloader cost?
Pay per event. FREE is an Apify plan name, not a zero-price promise. The Pricing tab shows the applicable plan.
| Event | When it applies | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|---|
Actor Usage (actor_usage) | Accrued usage units | $0.00001 | $0.00001 | $0.00001 | $0.00001 | $0.00001 | $0.00001 |
Actor Start (apify-actor-start) | Once per run | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 |
Metadata (metadata) | One saved metadata record | $0.11 | $0.099 | $0.088 | $0.0825 | $0.0825 | $0.0825 |
Download (download) | One saved downloaded-video record | $0.26 | $0.234 | $0.208 | $0.195 | $0.195 | $0.195 |
Whole-bill examples
Illustrative FREE-plan bills with exactly 100 Actor Usage units at $0.00001 per unit:
- One metadata result: $0.01 startup + $0.11 metadata + $0.00100 usage = $0.12100.
- One download result: $0.01 startup + $0.26 download + $0.00100 usage = $0.27100.
Metadata and Download are alternatives for the saved row. A requested download that cannot be retrieved or saved returns no row and incurs neither result fee; startup and accrued usage still apply. An explicit absent-video answer has no Metadata or Download fee. Usage varies, so the examples are not a fixed quote.
How does Rutube Video Downloader compare with alternatives?
Use the source platform directly for a single manual lookup or its permitted download option. Use its official developer tools when you need account-owned analytics or permissions beyond public video facts. This Actor is useful when the workflow needs an exportable video record or a permitted saved file from known links.
What are the limits and troubleshooting steps?
Use one individual public video page. On supported pages containing several videos, the Actor selects the first video.
- No rows: check the final run message and verify the individual link. Source access can prevent retrieval; zero rows alone do not mean the video was deleted.
- File request: read
videofor a saved MP4. If retrieval or saving fails, no row or Metadata/Download fee is produced; startup and accrued usage still apply. - Missing details: use the shared missing-value meanings in Output Data Schema. Source engagement totals and the returned comment sample describe different things.
- Interrupted client or pending billing: retain the run ID, inspect its Dataset and charged events, and contact support before starting a replacement.
- File retention: save the media you need before removing its run storage.
Use public content only, follow the source platform's terms and applicable law, and ensure you have permission to download, store or reuse media and personal data. This Actor does not grant reuse rights. Keep private inputs and credentials out of public support messages.
Frequently asked questions
Can I download a whole account or playlist?
No. Supply one public video link per run. This Actor does not discover every video from an account or playlist.
Does Metadata include a video file or transcript?
No. video is null in Metadata mode. subtitles lists published caption languages; it is not transcript text. Request a download quality for an MP4.
Will I always get every engagement field?
No. Sources expose different facts. Missing facts are null, and available zeros stay zero. Requested comments can be unavailable while the base record is saved.
Can I export and schedule the result?
Open the default Dataset and choose JSON, CSV or another supported export. Save the input as an Apify Task and add a Schedule to collect later snapshots.
What do I pay when a requested file fails?
Startup and accrued usage apply, but a failed download returns no row and has no Metadata or Download result fee. See the event table and complete examples above.
What if my client stops waiting?
Keep the run ID, poll that run and inspect its final message and Dataset. Starting a replacement can repeat work and charges. For help, send the run ID and a public link through Issues.
Related TrueFetch Actors
- Image Search Download API - Use a subject from the returned
titleordescriptionaskeywordto find related images. - Academic Search API - For educational or research videos, use a topic from
titleordescriptionaskeywordto find papers. - Job Search - For career or training videos, use a role, skill or company named in
titleordescriptionaskeyword; choose a country and result limit to search vacancies.
Support
Use the Issues page for reproducible problems and the TrueFetch community for usage questions. Include the run ID, a public input or safe equivalent, expected result and observed message. Keep credentials and private inputs out of public messages.
Start a small run | Open the API reference
Last Updated: November 8, 2026