Universal Media Extractor icon

Universal Media Extractor

Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok, Twitter/X, Instagram, Vimeo, Facebook, Twitch, and many more. Stream…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Universal Media Extractor at a glance

Universal Media Extractor is a ready-to-run Apify actor from abotapi for collecting social media data. Its documented output includes title, video id, duration (s), uploader and views, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $10 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Social Media, Developer Tools, Videos
Pricing
$10 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
23 options

Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok, Twitter/X, Instagram, Vimeo, Facebook, Twitch, and many more. Stream directly to your cloud storage or get direct download URLs for your pipelines.

What Universal Media Extractor can do

  • One input field, 1000+ sites. Paste almost any video or audio page link, no separate setup for each platform.
  • Three modes for three jobs. Pull metadata and direct URLs only, save the file to Apify storage, or send it straight to your own S3 or Google Cloud Storage bucket.
  • Format control. Pick the best available quality, audio only, or a resolution cap, with a plain format string.
  • Playlist and channel aware for listings. Flatten a playlist or channel link into its video URLs in one call, without opening every video.
  • Metadata before you commit to storage. Extract mode returns titles, descriptions, view counts and direct format URLs without downloading the file, so you can decide what is worth saving.
  • Built for automation. Call it from your own code, a schedule, or a no-code tool through the Apify API.

Choose what to collect

These inputs let you configure Universal Media Extractor. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
urlsarraySeveral video, short, embed, playlist or channel links, processed one after another, one result row each. Merged with Video URL. Leave both empty to get one example of every supported link shape.
urlstringURL of the video, playlist or channel to process
modestringProcessing mode: extract (metadata only), download (to storage), stream (direct to cloud)

Choices: extract, download, stream

formatstringVideo/audio format selection. Examples: best, bestaudio, bestvideo+bestaudio, best[height<=720]
preferredQualitystringMaximum video height for download. Ignored when Format is set to something other than best.

Choices: 144p, 240p, 360p, 480p, 720p, 1080p, 1440p, 2160p

preferredFormatstringContainer for the saved video (mp4, mkv, webm ...) or an audio format (mp3, m4a, wav ...) converted from the best audio. Download and stream modes.

Choices: avi, flv, mkv, mov, mp4, webm, aac, aiff, alac, flac, m4a, mka, mp3, ogg, opus, vorbis, wav

filenameTemplatePartsarrayParts joined with a dash to name saved files, in order. Leave empty to name files by video ID.
Show 16 more inputs
More input fields
InputWhat it controls
ignore_errorsbooleanContinue on download errors (useful for playlists)
storage_typestringWhere to store downloaded files (for download/stream modes)

Choices: apify, s3, gcs

write_subtitlesbooleanDownload mode (and stream mode, which then downloads): save the subtitle files next to the video and list them in the row under subtitleFiles. Extract mode returns the subtitle tracks the site offers inside the row, but saves no files.
subtitle_langsarrayList of subtitle languages to download (e.g., en, es)
playlist_itemsstringSpecific playlist items to process (e.g., '1,3,5-7')
extract_flatbooleanFor playlists, only extract video URLs without downloading individual video info
max_items_per_urlintegerPlaylist and channel links produce one row per video, up to this many (after Playlist Items is applied). The list stops at this cap and the run log and the OUTPUT record say so; raising it bills one result row per extra video.
usernamestringAccount username for authenticated content
geo_bypassbooleanAttempt to bypass geo-restrictions
resumeFromRunIdstringOptional. ID of an earlier run of this actor (or of a dataset). Links and playlist or channel videos already delivered in that dataset are skipped, so this run returns and bills only the rest. Use it to continue one interrupted run. For recurring runs of the same links use Incremental mode below.
incrementalModestringnone (default): every run returns every video, nothing is remembered. new-only: the first run returns every video, later runs return only videos not seen before. changed-only: later runs return new videos plus videos whose details changed (title, description, tags, duration, availability and similar); view_count and like_count never count as changes, and signed stream links, thumbnails, subtitle lists and storage links are never compared. Videos that are not returned are not billed and, in download or stream mode, not downloaded again. Unchanged and removed videos are never returned. State is kept per set of links, or per State key.

Choices: none, new-only, changed-only

stateKeystringOptional. Name this monitoring campaign to keep its remembered videos stable, or to share them across runs with different links. Leave empty to derive the key from the set of links.
ignoreFieldsForChangesarrayField names that should NOT make a video count as changed. view_count and like_count are always ignored (live counters); add others here, for example description or tags. Use a dotted path (for example chapters.title) for a field inside a nested object or list. Ignored fields are still returned in the output.
mcpConnectorsarrayOptionally send the scraped result rows into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify > Settings > API & Integrations, then select it here. Notion gets a page-per-result row export; other connectors receive a best-effort write or digest. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which result row pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on how many result rows are written to each selected connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

titleTitle (text)
idVideo ID (text)
durationDuration (s) (number)
uploaderUploader (text)
view_countViews (number)
storage_urlDownload URL (link)
thumbnailThumbnail (image)
descriptionDescription (text)
like_countLike Count (number)
upload_dateUpload Date (text)
channelChannel (text)
webpage_urlOriginal URL (link)
Show 7 more fields
storage_typeStorage Type (text)
filenameFilename (text)
inputSource URL (text)
downloadedFileUrlDownloaded file (link)
fileKeyFile key (text)
audioOnlyUrlAudio-only stream (link)
videoOnlyUrlVideo-only stream (link)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "sample123abc",
  "title": "Sample Video Title",
  "description": "A short sample description of the video.",
  "duration": 212,
  "view_count": 1500000,
  "like_count": 42000,
  "upload_date": "20240115",
  "uploader": "Sample Channel",
  "channel": "Sample Channel",
  "thumbnail": "https://example.com/thumbnail.jpg",
  "thumbnails": [
    {
      "url": "https://example.com/thumbnail_small.jpg",
      "width": 120,
      "height": 90
    }
  ],
  "webpage_url": "https://www.youtube.com/watch?v=sample123abc",
  "ext": "mp4",
  "extractor": "youtube",
  "tags": [
    "music",
    "sample"
  ],
  "is_live": false,
  "formats": [
    {
      "format_id": "22",
      "ext": "mp4",
      "resolution": "1280x720",
      "url": "https://example.com/stream/720p.mp4"
    }
  ]
}

Ways to use this data

  • Content archiving: save a copy of a video or audio file to your own S3 or Google Cloud Storage bucket for backup or compliance records.
  • Media processing pipelines: get direct format URLs and metadata to feed into transcription, captioning or machine learning workflows without storing the file yourself.
  • Catalog and research: collect titles, descriptions, view counts and other metadata across many links for analysis or reporting, without downloading anything.
  • App and bot integrations: pull thumbnails, durations and direct URLs to reference media inside your own product.
  • Playlist triage: flatten a playlist or channel link into its video URLs first, then process only the ones you need.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Universal Media Extractor return?

The documented output for Universal Media Extractor includes title, video id, duration (s), uploader, views, download url, thumbnail and description. Availability of each field depends on the source page and the selected mode.

How much does Universal Media Extractor cost?

It costs $10 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I schedule this to catch new uploads automatically?

Yes. Schedule the actor from the Schedules tab and set incrementalMode to new-only (only videos not seen before) or changed-only (new videos plus videos whose details changed) on a playlist or channel link. The default, none, tracks nothing and returns every video every run. See the incremental section above; resumeFromRunId continues one interrupted run.

Why did my download run return a link instead of a file I can open directly?

Download and stream mode save the file to storage and give you a link (storage_url) plus metadata, not the raw file bytes inside the dataset record. Open the link to get the actual video or audio file. Also, stream mode only sends data straight to S3 or GCS; with storage_type set to apify, a stream mode run automatically uses download mode instead, since direct streaming isn't offered for that storage. A format that combines separate video and audio streams, such as bestvideo+bestaudio, also makes a stream run use download mode.

Can I use this with AI agents or MCP?

Yes. Call it like any other Apify actor from an AI agent, an MCP client that exposes Apify actors as tools, or your own automation, through the Apify API. This actor does not push results into a third-party app on its own; the dataset records and the direct URLs they contain are what you feed into your agent or workflow.

Ready to collect with Universal Media Extractor?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.