<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bloody Valentine</title>
    <description>The latest articles on DEV Community by Bloody Valentine (@bloody_valentine_51e5dacd).</description>
    <link>https://dev.to/bloody_valentine_51e5dacd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4101398%2F042985ff-40c9-4fa6-afac-0a4858af6d4e.png</url>
      <title>DEV Community: Bloody Valentine</title>
      <link>https://dev.to/bloody_valentine_51e5dacd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bloody_valentine_51e5dacd"/>
    <language>en</language>
    <item>
      <title>How I Turned My Own Project Into an Apify Actor</title>
      <dc:creator>Bloody Valentine</dc:creator>
      <pubDate>Sun, 30 Aug 2026 12:49:07 +0000</pubDate>
      <link>https://dev.to/bloody_valentine_51e5dacd/how-i-turned-my-own-project-into-an-apify-actor-328m</link>
      <guid>https://dev.to/bloody_valentine_51e5dacd/how-i-turned-my-own-project-into-an-apify-actor-328m</guid>
      <description>&lt;p&gt;&lt;strong&gt;I started building &lt;a href="https://instadl.ink" rel="noopener noreferrer"&gt;https://instadl.ink&lt;/a&gt; — a fast, no-storage media extractor for Instagram &amp;amp; TikTok. Paste a public URL → get direct CDN links. No permanent video storage, just JSON. When I wanted to monetize the API on Apify, every All-in-One downloader there was a yt-dlp wrapper. So I expanded instadl.ink into an 8-platform Enriched Extractor: direct CDN + views/likes for YouTube, TikTok, Instagram, X, Facebook, Reddit, Pinterest, Vimeo — batch 100, 512 MB, $3/1K. No yt-dlp. No ffmpeg. No 4GB RAM.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;qbitlabs&lt;/code&gt; charges &lt;code&gt;$0.05&lt;/code&gt; per &lt;code&gt;HD&lt;/code&gt; video (&lt;code&gt;$50/1K&lt;/code&gt;) for &lt;code&gt;1000+&lt;/code&gt; sites. &lt;code&gt;easyapi&lt;/code&gt; does &lt;code&gt;1 URL/run&lt;/code&gt; at &lt;code&gt;$2.99/1K&lt;/code&gt; + usage. &lt;code&gt;rover&lt;/code&gt; bundles &lt;code&gt;Cobalt&lt;/code&gt; + &lt;code&gt;ffmpeg&lt;/code&gt; for &lt;code&gt;21&lt;/code&gt; platforms but needs &lt;code&gt;4GB&lt;/code&gt; and &lt;code&gt;50&lt;/code&gt; concurrent. We needed the opposite: &lt;strong&gt;one run, 100 URLs, enriched stats, no bytes stored.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live on Apify:&lt;/strong&gt; &lt;code&gt;lexiie/all-in-one-media-extractor&lt;/code&gt; (expanded from &lt;strong&gt;instadl.ink&lt;/strong&gt;) — &lt;code&gt;Build 0.0.11&lt;/code&gt; &lt;code&gt;PPE+Usage $3.00/1,000&lt;/code&gt; &lt;code&gt;failed = free&lt;/code&gt; — &lt;code&gt;YT dQw4w9WgXcQ&lt;/code&gt; &lt;code&gt;view 1.8B&lt;/code&gt; in &lt;code&gt;366ms&lt;/code&gt;, &lt;code&gt;IG reel Dcm8usVMMcG&lt;/code&gt; &lt;code&gt;like 0 comment 397&lt;/code&gt; without proxy.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bill that pushed us off yt-dlp
&lt;/h2&gt;

&lt;p&gt;We started like everyone else: wrapping &lt;code&gt;instadl&lt;/code&gt; (IG + TikTok) with &lt;code&gt;yt-dlp&lt;/code&gt; for YouTube. Local test was fine. On Apify it wasn’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Build &lt;code&gt;616MB&lt;/code&gt; vs &lt;code&gt;83MB&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;yt-dlp&lt;/code&gt; + &lt;code&gt;ffmpeg&lt;/code&gt; base is &lt;code&gt;83MB&lt;/code&gt;, but &lt;code&gt;4K&lt;/code&gt; merge needs &lt;code&gt;ffmpeg&lt;/code&gt; + &lt;code&gt;4GB RAM&lt;/code&gt; for &lt;code&gt;60s&lt;/code&gt; video. Our &lt;code&gt;Node&lt;/code&gt; + &lt;code&gt;undici&lt;/code&gt; &lt;code&gt;Build 0.0.11&lt;/code&gt; is &lt;code&gt;616MB&lt;/code&gt; &lt;em&gt;including&lt;/em&gt; &lt;code&gt;sharp&lt;/code&gt; for logo — &lt;code&gt;yt-dlp&lt;/code&gt; version was &lt;code&gt;~900MB&lt;/code&gt; before we stripped it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The math that kills &lt;code&gt;PPE Only $3&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;1K&lt;/code&gt; videos × &lt;code&gt;50MB&lt;/code&gt; avg = &lt;code&gt;50GB&lt;/code&gt; &lt;code&gt;external transfer $0.2/GB = $10&lt;/code&gt; + &lt;code&gt;KVS&lt;/code&gt; &lt;code&gt;50GB&lt;/code&gt; store &lt;code&gt;$0.05/1K writes&lt;/code&gt; + &lt;code&gt;20 CU&lt;/code&gt; &lt;code&gt;ffmpeg&lt;/code&gt; &lt;code&gt;$4&lt;/code&gt; → &lt;code&gt;cost $14&lt;/code&gt; → &lt;code&gt;profit = 0.8×$3 - $14 = -$12&lt;/code&gt;. That’s why &lt;code&gt;qbitlabs&lt;/code&gt; &lt;em&gt;must&lt;/em&gt; charge &lt;code&gt;+$0.03/GB&lt;/code&gt; after &lt;code&gt;1GB&lt;/code&gt; and &lt;code&gt;khadinakbar&lt;/code&gt; caps at &lt;code&gt;250MB&lt;/code&gt;. We didn’t want to charge for bytes we don’t need.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The workaround:&lt;/strong&gt; Don’t download. Return &lt;strong&gt;temporary CDN&lt;/strong&gt; (&lt;code&gt;googlevideo expire ~4h&lt;/code&gt;, &lt;code&gt;scontent 86.400s&lt;/code&gt;, &lt;code&gt;fbcdn&lt;/code&gt;, &lt;code&gt;tiktokcdn&lt;/code&gt;) and let &lt;code&gt;browser → CDN&lt;/code&gt; or &lt;code&gt;agent → CDN&lt;/code&gt; fetch when needed. For &lt;code&gt;RAG&lt;/code&gt;/&lt;code&gt;UGC&lt;/code&gt; you need the &lt;code&gt;url&lt;/code&gt; + &lt;code&gt;stats&lt;/code&gt;, not the &lt;code&gt;mp4&lt;/code&gt; in &lt;code&gt;KVS&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That decision forced us HTTP-only. No &lt;code&gt;yt-dlp&lt;/code&gt; binary, no &lt;code&gt;Cobalt&lt;/code&gt; server, no &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What “enriched extractor” actually means (vs URL-only)
&lt;/h2&gt;

&lt;p&gt;URL-only (&lt;code&gt;burbn&lt;/code&gt;/&lt;code&gt;easyapi&lt;/code&gt;) gives you &lt;code&gt;https://...mp4&lt;/code&gt; and stops. For &lt;code&gt;RAG&lt;/code&gt; you then need 3 more scrapers for &lt;code&gt;views&lt;/code&gt;/&lt;code&gt;likes&lt;/code&gt; to rank, and for &lt;code&gt;UGC&lt;/code&gt; you need &lt;code&gt;follower&lt;/code&gt; counts to filter influencers.&lt;/p&gt;

&lt;p&gt;We return &lt;strong&gt;one item with 3 blocks&lt;/strong&gt; — &lt;code&gt;metadata&lt;/code&gt; / &lt;code&gt;stats&lt;/code&gt; / &lt;code&gt;media&lt;/code&gt; (nested, pruned if &lt;code&gt;undefined&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tiktok"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Calm dog..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"uploader"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kings.deals"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"thumbnail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"viewCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;860465&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"likeCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5047&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"commentCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"shareCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"followers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"media"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://v16m.tiktokcdn-us.com/..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"quality"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mimeType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video/mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same shape for all 8:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;YouTube&lt;/strong&gt; &lt;code&gt;dQw4w9WgXcQ&lt;/code&gt; → &lt;code&gt;8&lt;/code&gt; qualities &lt;code&gt;2160p-720p&lt;/code&gt; &lt;code&gt;366ms&lt;/code&gt; → &lt;code&gt;view 1.8B&lt;/code&gt; &lt;code&gt;like 16M&lt;/code&gt; &lt;code&gt;tags&lt;/code&gt; &lt;code&gt;channelId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;TikTok&lt;/strong&gt; &lt;code&gt;@moh.shofwan 7645528079783267605&lt;/code&gt; → &lt;code&gt;view 860K like 5K comment 23 share 167 followers 0&lt;/code&gt; + &lt;code&gt;mp4 HD/SD&lt;/code&gt; + &lt;code&gt;mp3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Instagram&lt;/strong&gt; &lt;code&gt;Dcm8usVMMcG&lt;/code&gt; → &lt;code&gt;like 0 comment 397 view 4&lt;/code&gt; + &lt;code&gt;caption&lt;/code&gt; &lt;code&gt;payal_rajput_tv...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;X&lt;/strong&gt; &lt;code&gt;SpaceX/status/184...&lt;/code&gt; → &lt;code&gt;view/like/retweet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Facebook&lt;/strong&gt; &lt;code&gt;watch?v=101532...&lt;/code&gt; → &lt;code&gt;HD/SD mp4&lt;/code&gt; &lt;code&gt;How to share...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Vimeo&lt;/strong&gt; &lt;code&gt;22439234&lt;/code&gt; &lt;code&gt;The Mountain&lt;/code&gt; → &lt;code&gt;progressive mp4&lt;/code&gt; or &lt;code&gt;dash&lt;/code&gt; + &lt;code&gt;plays/likes&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Reddit&lt;/strong&gt; &lt;code&gt;r/pics&lt;/code&gt; → &lt;code&gt;fallback_url&lt;/code&gt; + &lt;code&gt;ups 450&lt;/code&gt; &lt;code&gt;num_comments 23&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pinterest&lt;/strong&gt; &lt;code&gt;pin/112426...&lt;/code&gt; → &lt;code&gt;orig&lt;/code&gt; image + &lt;code&gt;repin&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No second call. &lt;code&gt;Dataset&lt;/code&gt; &lt;code&gt;views/overview&lt;/code&gt; shows &lt;code&gt;inputUrl, platform, type, webpageUrl&lt;/code&gt; — &lt;code&gt;fields&lt;/code&gt; &lt;code&gt;metadata&lt;/code&gt;/&lt;code&gt;stats&lt;/code&gt;/&lt;code&gt;media&lt;/code&gt; nested.&lt;/p&gt;

&lt;h2&gt;
  
  
  From instadl.ink to 8 platforms — what broke
&lt;/h2&gt;

&lt;p&gt;I started with &lt;strong&gt;instadl.ink&lt;/strong&gt; — my own fast, no-storage extractor for Instagram &amp;amp; TikTok. To make it monetizable on Apify, I expanded it to 8 platforms. Each new one broke at least once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;YouTube&lt;/strong&gt; — lightweight &lt;code&gt;innertube&lt;/code&gt; &lt;code&gt;POST /youtubei/v1/player&lt;/code&gt; returns &lt;code&gt;streamingData&lt;/code&gt; &lt;strong&gt;without&lt;/strong&gt; &lt;code&gt;signatureCipher&lt;/code&gt; (no decipher). &lt;code&gt;WEB&lt;/code&gt; would need &lt;code&gt;poToken&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;TikTok&lt;/strong&gt; — returns &lt;code&gt;gzip&lt;/code&gt; &lt;strong&gt;without&lt;/strong&gt; &lt;code&gt;content-encoding&lt;/code&gt; header, so manual decompression + retry with new device.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Instagram&lt;/strong&gt; — &lt;code&gt;embed&lt;/code&gt; &lt;code&gt;likeCount&lt;/code&gt; regex failed because HTML escaped → fix to permissive &lt;code&gt;edge_liked_by&lt;/code&gt; pattern. &lt;code&gt;view 4&lt;/code&gt; is real from embed (&lt;code&gt;null&lt;/code&gt; for many reels is normal).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;X&lt;/strong&gt; — &lt;code&gt;syndication&lt;/code&gt; token. &lt;code&gt;404&lt;/code&gt; for &lt;code&gt;Nasa 174...&lt;/code&gt; because ID doesn’t exist, not code.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Facebook&lt;/strong&gt; — &lt;code&gt;login&lt;/code&gt; wall &lt;code&gt;not logged in&lt;/code&gt; → &lt;code&gt;PRIVATE_CONTENT&lt;/code&gt; free.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Vimeo&lt;/strong&gt; — &lt;code&gt;player.vimeo.com&lt;/code&gt; cert hijack in local ISP → &lt;code&gt;ProxyAgent&lt;/code&gt; → &lt;code&gt;origin&lt;/code&gt; ✅, but &lt;code&gt;progressive&lt;/code&gt; empty for some (dash only) → fallback &lt;code&gt;oembed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Batch&lt;/strong&gt; — &lt;code&gt;100&lt;/code&gt; vs &lt;code&gt;1&lt;/code&gt; (&lt;code&gt;easyapi&lt;/code&gt;/&lt;code&gt;qbitlabs&lt;/code&gt; &lt;code&gt;1 URL/run&lt;/code&gt;) — &lt;code&gt;5 concurrent&lt;/code&gt; &lt;code&gt;300ms&lt;/code&gt; cache &lt;code&gt;5m&lt;/code&gt; → &lt;code&gt;100 URLs ≈ 30s&lt;/code&gt; vs &lt;code&gt;100 runs&lt;/code&gt; &lt;code&gt;100×&lt;/code&gt; overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing that doesn’t punish batch
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;PPE+Usage ON&lt;/code&gt; → &lt;code&gt;video-extracted $0.003&lt;/code&gt; (&lt;code&gt;$3/1K&lt;/code&gt;) event covers &lt;code&gt;extractor&lt;/code&gt;, &lt;code&gt;CU&lt;/code&gt;/&lt;code&gt;proxy&lt;/code&gt;/&lt;code&gt;transfer&lt;/code&gt; billed separate to user. &lt;code&gt;failed/private = free&lt;/code&gt; (so &lt;code&gt;IG&lt;/code&gt; &lt;code&gt;PRIVATE_CONTENT&lt;/code&gt; doesn’t cost). &lt;code&gt;PPE Only&lt;/code&gt; would be &lt;code&gt;0.8*3 - costs&lt;/code&gt; and we’d be &lt;code&gt;-$12&lt;/code&gt; for &lt;code&gt;bytes&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;10 URLs&lt;/code&gt; → &lt;code&gt;Max $0.03&lt;/code&gt; (set &lt;code&gt;Minimum $0.01&lt;/code&gt; in Store &lt;code&gt;Monetization → Additional options&lt;/code&gt; so user can’t &lt;code&gt;Max $0.001&lt;/code&gt; free ride)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;100 URLs&lt;/code&gt; &lt;code&gt;720p&lt;/code&gt; &lt;code&gt;best&lt;/code&gt; → &lt;code&gt;Max $0.30&lt;/code&gt; + &lt;code&gt;~$1&lt;/code&gt; compute (&lt;code&gt;5 CU&lt;/code&gt;) + &lt;code&gt;0.1GB&lt;/code&gt; &lt;code&gt;proxy $0.80&lt;/code&gt; (only if &lt;code&gt;RESIDENTIAL&lt;/code&gt;) → &lt;code&gt;$1.30&lt;/code&gt; vs &lt;code&gt;qbitlabs $5&lt;/code&gt; for &lt;code&gt;HD&lt;/code&gt; (&lt;code&gt;$0.05&lt;/code&gt; per &lt;code&gt;HD&lt;/code&gt; = &lt;code&gt;$50/1K&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Discounts: BRONZE $0.003 → SILVER $0.0025 → GOLD $0.0015&lt;/code&gt; — same &lt;code&gt;easyapi&lt;/code&gt; tier, but we &lt;code&gt;batch 100&lt;/code&gt; so &lt;code&gt;GOLD&lt;/code&gt; &lt;code&gt;100 URLs&lt;/code&gt; &lt;code&gt;$0.15&lt;/code&gt; cheaper.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Store&lt;/code&gt; now single event &lt;code&gt;video-extracted&lt;/code&gt; &lt;code&gt;PPE+Usage&lt;/code&gt; &lt;code&gt;$3/1K&lt;/code&gt;. If you want &lt;code&gt;2 events&lt;/code&gt; &lt;code&gt;basic $1.50&lt;/code&gt; / &lt;code&gt;enriched $3&lt;/code&gt; later, just add &lt;code&gt;enriched&lt;/code&gt; flag back.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we intentionally don’t do (and why that’s a feature)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;No private bypass&lt;/strong&gt; — &lt;code&gt;PRIVATE_CONTENT&lt;/code&gt; &lt;code&gt;free&lt;/code&gt;, pass &lt;code&gt;cookies&lt;/code&gt; only if &lt;strong&gt;you own&lt;/strong&gt; the content. &lt;code&gt;InstagramPrivSniffer&lt;/code&gt; (collab intended) and &lt;code&gt;jatin-dot-py&lt;/code&gt; (&lt;code&gt;polaris_timeline_connection&lt;/code&gt; &lt;code&gt;28%&lt;/code&gt; bypass, patched &lt;code&gt;16 Oct 2025&lt;/code&gt;) are &lt;code&gt;ToS&lt;/code&gt; violations on &lt;code&gt;Apify&lt;/code&gt; — Store would &lt;code&gt;takedown&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No bytes&lt;/strong&gt; — &lt;code&gt;maxFileSizeMB&lt;/code&gt; just skips &lt;code&gt;&amp;gt;250MB&lt;/code&gt; for agents; we don’t merge &lt;code&gt;HLS&lt;/code&gt;. If you need &lt;code&gt;bytes&lt;/code&gt;, use downloader with &lt;code&gt;R2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No 1000+ sites&lt;/strong&gt; — &lt;code&gt;qbitlabs&lt;/code&gt; &lt;code&gt;1000+&lt;/code&gt; is &lt;code&gt;yt-dlp&lt;/code&gt; list, we do &lt;code&gt;8&lt;/code&gt; core social + &lt;code&gt;enriched&lt;/code&gt; &lt;code&gt;batch 100&lt;/code&gt; without &lt;code&gt;yt-dlp&lt;/code&gt;. For &lt;code&gt;SoundCloud&lt;/code&gt;/&lt;code&gt;Twitch&lt;/code&gt; we’ll add HTTP-only next, not &lt;code&gt;yt-dlp&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try the exact URLs we tested (no proxy needed for 3)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/lexiie~all-in-one-media-extractor/runs?token=TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"urls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.tiktok.com/@moh.shofwan/video/7645528079783267605","https://www.instagram.com/reel/Dcm8usVMMcG/"],"quality":"720p","audioOnly":false}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Dataset&lt;/code&gt; &lt;code&gt;0.0.11&lt;/code&gt; &lt;code&gt;0R4ECgZIOkkdbjVUb&lt;/code&gt; &lt;code&gt;SUCCEEDED&lt;/code&gt; &lt;code&gt;512 MB&lt;/code&gt; &lt;code&gt;apify/actor-node:20&lt;/code&gt; returns &lt;code&gt;metadata&lt;/code&gt;/&lt;code&gt;stats&lt;/code&gt;/&lt;code&gt;media&lt;/code&gt; nested — &lt;code&gt;overview&lt;/code&gt; view shows &lt;code&gt;inputUrl, platform, type, webpageUrl&lt;/code&gt; — &lt;code&gt;latencyMs&lt;/code&gt; &lt;code&gt;366ms&lt;/code&gt; &lt;code&gt;YT&lt;/code&gt;, &lt;code&gt;852ms&lt;/code&gt; &lt;code&gt;IG&lt;/code&gt;, &lt;code&gt;2838ms&lt;/code&gt; &lt;code&gt;TT&lt;/code&gt; (&lt;code&gt;3 retries&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Storage&lt;/code&gt; &lt;code&gt;inputUrl&lt;/code&gt; &lt;code&gt;success&lt;/code&gt; &lt;code&gt;platform&lt;/code&gt; &lt;code&gt;webpageUrl&lt;/code&gt; &lt;code&gt;metadata.title&lt;/code&gt; &lt;code&gt;stats.viewCount&lt;/code&gt; &lt;code&gt;media[0].url&lt;/code&gt; &lt;code&gt;latencyMs&lt;/code&gt; — &lt;code&gt;flat&lt;/code&gt; for &lt;code&gt;dataset&lt;/code&gt; but clean for &lt;code&gt;LLM&lt;/code&gt; &lt;code&gt;RAG&lt;/code&gt; (no &lt;code&gt;KVS&lt;/code&gt; file to fetch).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you need &lt;code&gt;1000+&lt;/code&gt; sites, use &lt;code&gt;qbitlabs&lt;/code&gt; (&lt;code&gt;$0.05 HD&lt;/code&gt; = &lt;code&gt;$50/1K&lt;/code&gt;). If you need &lt;code&gt;8&lt;/code&gt; core social + &lt;code&gt;enriched&lt;/code&gt; + &lt;code&gt;batch 100&lt;/code&gt; + &lt;code&gt;direct CDN&lt;/code&gt; without &lt;code&gt;yt-dlp&lt;/code&gt;/&lt;code&gt;ffmpeg&lt;/code&gt;/&lt;code&gt;4GB&lt;/code&gt;, use this. &lt;code&gt;Build 0.0.11&lt;/code&gt; live at &lt;code&gt;https://console.apify.com/actors/GdXcUau5zytXfvdvS&lt;/code&gt; — star it and request &lt;code&gt;SoundCloud&lt;/code&gt;/&lt;code&gt;Twitch&lt;/code&gt; next — we’ll add without &lt;code&gt;yt-dlp&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>saas</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
