Use YouTube Shorts Scraper with YouTube Shorts Scraper via the Muapi REST API. Pay per generation — no subscription needed.
POST https://api.muapi.ai/api/v1/youtube-fetch-shortsSubmit a job with your MuApi API key in the x-api-key header, then poll https://api.muapi.ai/api/v1/predictions/{request_id}/result until status is completed.
| Name | Type | Required | Description |
|---|---|---|---|
| channel_id | text | No | YouTube channel ID (e.g. UCxxxxxxxxx). |
| count | int | No | Number of Shorts to fetch (1 to 30).Default: 10 |
| query | text | No | YouTube search keywords.Default: null |
| next | text | No | Pagination cursor token to fetch the next page of results.Default: null |
| hl | string | No | Search language.Options: English, Spanish, French, German, Japanese, Chinese, Hindi, Portuguese, Russian, ItalianDefault: "English" |
| gl | text | No | Search location country code (e.g. US).Default: "US" |
| upload_date | string | No | Filter by upload date.Options: Last Hour, Today, This Week, This Month, This YearDefault: null |
| type | string | No | Type of resource to search.Options: Video, Channel, PlaylistDefault: "Video" |
| duration | string | No | Filter videos by duration.Options: Short (< 4 minutes), Long (> 20 minutes)Default: "Short (< 4 minutes)" |
| features | text | No | Video features separated by ';' (e.g. hd;subtitles).Default: null |
| sort | string | No | Sorting criteria.Options: Relevance, Rating, Upload Date, View CountDefault: "View Count" |
| min_likes | string | No | Filter: Minimum number of likes.Options: Any, 100+, 1k+, 5k+, 10k+, 50k+, 100k+, 500k+, 1M+, 5M+, 10M+Default: "Any" |
| min_views | string | No | Filter: Minimum number of views/plays.Options: Any, 100+, 1k+, 5k+, 10k+, 50k+, 100k+, 500k+, 1M+, 5M+, 10M+Default: "Any" |
| min_shares | string | No | Filter: Minimum number of shares.Options: Any, 100+, 1k+, 5k+, 10k+, 50k+, 100k+, 500k+, 1M+, 5M+, 10M+Default: "Any" |
| min_comments | string | No | Filter: Minimum number of comments.Options: Any, 100+, 1k+, 5k+, 10k+, 50k+, 100k+, 500k+, 1M+, 5M+, 10M+Default: "Any" |
| min_duration | string | No | Filter: Minimum video duration.Options: Any, 15s, 30s, 45s, 1m, 2m, 3m, 5m, 10mDefault: "Any" |
| max_duration | string | No | Filter: Maximum video duration.Options: Any, 15s, 30s, 45s, 1m, 2m, 3m, 5m, 10mDefault: "Any" |
| hashtags | text | No | Filter: Comma-separated hashtags (e.g. startup,tech).Default: null |
| published_after | text | No | Filter: Fetch posts published after this date/time (ISO 8601).Default: null |
| published_before | text | No | Filter: Fetch posts published before this date/time (ISO 8601).Default: null |
REQUEST_ID=$(curl -s -X POST https://api.muapi.ai/api/v1/youtube-fetch-shorts \
-H "x-api-key: $MUAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel_id":"<channel_id>","count":10,"query":null,"next":null,"hl":"English","gl":"US","upload_date":null,"type":"Video","duration":"Short (< 4 minutes)","features":null,"sort":"View Count","min_likes":"Any","min_views":"Any","min_shares":"Any","min_comments":"Any","min_duration":"Any","max_duration":"Any","hashtags":null,"published_after":null,"published_before":null}' | jq -r .request_id)
curl -s https://api.muapi.ai/api/v1/predictions/$REQUEST_ID/result -H "x-api-key: $MUAPI_API_KEY"import os, time, requests
API = "https://api.muapi.ai/api/v1"
headers = {"x-api-key": os.environ["MUAPI_API_KEY"]}
r = requests.post(f"{API}/youtube-fetch-shorts", headers=headers, json={"channel_id":"<channel_id>","count":10,"query":null,"next":null,"hl":"English","gl":"US","upload_date":null,"type":"Video","duration":"Short (< 4 minutes)","features":null,"sort":"View Count","min_likes":"Any","min_views":"Any","min_shares":"Any","min_comments":"Any","min_duration":"Any","max_duration":"Any","hashtags":null,"published_after":null,"published_before":null})
request_id = r.json()["request_id"]
while True:
res = requests.get(f"{API}/predictions/{request_id}/result", headers=headers).json()
if res["status"] == "completed":
print(res["outputs"]); break
if res["status"] == "failed":
raise RuntimeError(res.get("error"))
time.sleep(3)Full docs and agent/MCP integration: llms.txt. Get an API key at muapi.ai/access-keys.