YouTube Search
Learn how to get YouTube search data for videos, channels, and playlists using the Web Scraper API. Find out more about its parameters and see an example request.
You can search YouTube for videos, channels, playlists or movies by providing a search query to the youtube_search or youtube_search_max source.
This source can also be combined with youtube_autocomplete source to include suggestions and target relevant keywords and search terms.
The following examples demonstrate how to utilize youtube_search source to retrieve YouTube videos based on a search query.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "youtube_search",
"query": "how to make a website"
}'import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'youtube_search',
'query': 'how to make a website'
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('user', 'pass1'),
json=payload,
)
# Print the JSON response with the result.
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "youtube_search",
query: "how to make a website"
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();https://realtime.oxylabs.io/v1/queries?source=youtube_search&query=how to make a website&access_token=12345abcde<?php
$params = array(
'source' => 'youtube_search',
'query' => 'how to make a website'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
// Define the payload with the new youtube_metadata query.
payload := map[string]interface{}{
"source": "youtube_search",
"query": "how to make a website
}
jsonValue, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshalling JSON:", err)
return
}
client := &http.Client{}
request, err := http.NewRequest("POST", "https://realtime.oxylabs.io/v1/queries", bytes.NewBuffer(jsonValue))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer response.Body.Close()
responseText, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(responseText))
}using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new
{
source = "youtube_search",
query = "how to make a website",
context = new[]
{
new { key = "language_code", value = "en" },
new { key = "transcript_origin", value = "uploader_provided" }
}
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
try
{
var response = await client.SendAsync(requestMessage);
response.EnsureSuccessStatusCode();
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
catch (HttpRequestException e)
{
Console.WriteLine($"Request error: {e.Message}");
}
}
}
}package org.example;
import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
// Construct JSON payload for youtube_metadata request
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "youtube_search");
jsonObject.put("query", "how to make a website");
JSONArray contextArray = new JSONArray();
contextArray.put(new JSONObject().put("key", "language_code").put("value", "en"));
contextArray.put(new JSONObject().put("key", "transcript_origin").put("value", "uploader_provided"));
jsonObject.put("context", contextArray);
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "youtube_search",
"query": "how to make a website"
}We use the synchronous Realtime integration method in our examples. If you would like to use the Push-Pull integration, refer to the Integration Methods section.
Query parameters
source
Sets the scraper.
youtube_search or youtube_search_max
String
query
Search term.
-
String
- required parameter
Filters
You can customize your search by using all the filters available via YouTube GUI.

Filters query parameters
upload_date
Filters videos by when they were uploaded. Available values are: today, last_hour, this_week, this_month, this_year.
-
String
type
Returns results by content type. Available values are: video, channel, playlist, movie.
-
String
duration
Content duration in minutes. Available values are: <4, 4-20, >20.
-
String
sort_by
Determines how search results are ordered. Available values are rating, relevance, view_count,upload_date.
relevance
String
360
Returns 360-degree videos in search results.
-
Boolean
3d
Returns 3D videos in search results.
-
Boolean
4k
Returns 4K resolution videos in search results.
-
Boolean
creative_commons
Returns only videos with Creative Commons licenses.
-
Boolean
hd
Returns high-definition videos in search results.
-
Boolean
hdr
Returns HDR (High Dynamic Range) videos in search results.
-
Boolean
live
Returns live streams in search results.
-
Boolean
location
Returns videos with location information.
-
Boolean
purchased
Returns purchased content in search results.
-
Boolean
subtitles
Returns videos with subtitles or closed captions.
-
Boolean
vr180
Returns VR180 format videos in search results.
-
Boolean
Last updated
Was this helpful?

