# Google Search Videos Scraper (`web.harvester/google-videos-scraper`) Actor

This Google Search Videos Scraper enables you to scrape Google Search Engine Results Pages (SERPs) for videos result. Select a country or language, extract custom attributes, and download your data; no coding is needed.

- **URL**: https://apify.com/web.harvester/google-videos-scraper.md
- **Developed by:** [Web Harvester](https://apify.com/web.harvester) (community)
- **Categories:** AI, SEO tools
- **Stats:** 169 total users, 2 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: 2.00 out of 5 stars

## Pricing

$4.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What is a Google Videos Search scraper?

Our free SERP scraper crawls Google Videos Search Video Results Pages (SERPs) and extracts data from those web pages in structured formats such as JSON, XML, CSV, or Excel. With this SERP Scraper API.

### Why do you need a Google Videos Search API to scrape Google?

Since 2011, **Google Videos Search does not provide a functional official SERP API** able to show how you or your competitors rank on Google. So the only way to efficiently monitor search results and ranking is to use web scraping tools.

Our Google API gives you your own, customizable SERP scraper, a RESTful SERP API that provides real-time results optimized for structured output that you can download. Once you extract and download Google data, you can easily plug it into your data projects or integrate it with other apps such as Zapier or Airbyte.

### How many results can you scrape with Google Videos Search Scraper?

Google Videos Search scraper can return up to 300 results for one keyword. This is due to the limitations of Google itself. Although it shows it has several millions of results for a given search query it will always display a maximum of three pages (with 100 results per page - or an equivalent number for other values).

If your use case doesn't require otherwise we strongly recommend you to keep the setting or  **`Results per Google page`** to 100, so that you get 100 results per 1 page instead of crawling 10 pages, each with 10 results (That is also possible but as you pay for request, it will be ten times more pricey).

While we regularly run Actor tests to keep the benchmarks in check, the results may also fluctuate without our knowing. The best way to know for sure for your particular use case is to do a test run yourself.

### How much will scraping Google Videos Search cost you?

When it comes to scraping, it can be challenging to estimate the resources needed to extract data as use cases may vary significantly. That's why the best course of action is to run a test scrape with a small sample of input data and limited output. You’ll get your price per scrape, which you’ll then multiply by the number of scrapes you intend to do.

### Google Videos Search data input

The scraper gives you really good control over what kind of Google Videos Search results you'll get. You can specify the following settings:

- Query phrases or raw Google Videos Search URLs 🔍
- Country/search domain 🗺
- Language of search 🇬🇧
- Exact geolocation 📍
- Number of results per page 🔟
- Mobile or desktop version results 📱

For a complete description of all settings, see the [Input tab](https://apify.com/hamza.alwan/google-videos-scraper/input-schema).

### How to scrape Google Videos Search results by URL or keyword

There are two ways you can scrape Google Videos Search pages: either by URL or by search term.

1. Scraping **by URL** will get you data from Google Videos Search results page. You'll get Google data from a copy-pasted Google URL with any Google country domain (e.g. `google.co.uk`). You can add as many URLs as you want.
2. Scraping **by search term** will also get you data from Google Videos Search results page. You can also add as many search terms as you want.

#### Example input for scraping Google Videos Search search term

It is also easy to get Google Videos Search data by search term. Just enter the search term and a number of Google pages to scrape. With this option, you also can:

- scrape by multiple keywords in parallel by adding more search terms and separating them by a new line
- indicate how many results you want to see per each Google page (10-100)
- indicate the country of search (domain), language, and UULE location parameter

<img width="75%" src="https://i.imgur.com/GxzMR9K.png" />

<img width="75%" src="https://i.imgur.com/3v1oE4B.png" />

<br><br>

Here's its equivalent in JSON:

```json
{
    "csvFriendlyOutput": false,
    "includeUnfilteredResults": false,
    "maxPagesPerQuery": 1,
    "mobileResults": true,
    "queries": "Python",
    "resultsPerPage": 100,
    "saveHtml": false,
    "saveHtmlToKeyValueStore": false
}
```

#### Scrape Google Videos Search results by URL

To input URLs instead, simply replace `queries` with full URLs:

```json
"queries": "https://www.google.com/search?q=Python&tbm=vid \n https://www.google.com/search?q=Cats&tbm=vid",
```

### Google Videos Search data output

The scraper stores its result in the default [dataset](https://apify.com/docs/storage#dataset) associated with the scraper run, from which you can export it to various formats, such as JSON, XML, CSV, or Excel.

You can **download the results directly from the platform with a button** or from the [Get dataset items](https://www.apify.com/docs/api/v2#/reference/datasets/item-collection/get-items) API endpoint:

```
<https://api.apify.com/v2/datasets/[DATASET_ID]/items?format=[FORMAT]>

```

where `[DATASET_ID]` is the ID of the dataset and `[FORMAT]`can be `csv`, `html`, `xlsx`, `xml`, `rss` or `json`.

#### Output example (by search term)

For each Google Videos Search results page, the dataset will contain a single record, which in JSON format looks as follows. Bear in mind that some fields have example values.

```json
{
    "searchQuery": {
      "term": "Python",
      "url": "http://www.google.com/search?hl=en&num=100&q=Python&tbm=vid",
      "device": "DESKTOP",
      "page": 1,
      "type": "SEARCH",
      "domain": "google.com",
      "countryCode": "US",
      "languageCode": "en",
      "locationUule": null,
      "resultsPerPage": "100"
    },
    "url": "http://www.google.com/search?hl=en&num=100&q=Python&tbm=vid",
    "hasNextPage": true,
    "serpProviderCode": "N",
    "resultsTotal": 57700000,
    "organicResults": [
      {
        "title": "Python Tutorial - Python Full Course for Beginners - YouTube",
        "url": "https://www.youtube.com/watch?v=_uQrJ0TkZlc",
        "displayedUrl": "www.youtube.com › watch",
        "description": "Python tutorial - Python full course for beginners - Go from Zero to Hero with Python (includes machine learning & web development projects) ...",
        "videoWebsiteName": "YouTube",
        "videoWebsiteTitle": "Programming with Mosh",
        "date": "2019-02-18T00:00:00+00:00",
        "type": "organic",
        "position": 1
      }
    ]
}
```

#### How to get one search result per row

Simply choose the Export view for `Organic results`, it automatically spreads each result into a separate row. For API access, you can add `&view=organic_results` to the URL and with the API client, you can do the same using the `view` field.

An organic result is represented using the following format:

```json
{
    "searchQuery": {
      "term": "Python",
      "url": "http://www.google.com/search?hl=en&num=100&q=Python&tbm=vid",
      "device": "DESKTOP",
      "page": 1,
      "type": "SEARCH",
      "domain": "google.com",
      "countryCode": "US",
      "languageCode": "en",
      "locationUule": null,
      "resultsPerPage": "100"
    },
    "type": "organic",
    "position": 1,
    "title": "Python Tutorial - Python Full Course for Beginners - YouTube",
    "url": "https://www.youtube.com/watch?v=_uQrJ0TkZlc",
    "displayedUrl": "www.youtube.com › watch",
    "description": "Python tutorial - Python full course for beginners - Go from Zero to Hero with Python (includes machine learning & web development projects) ...",
    "videoWebsiteName": "YouTube",
    "videoWebsiteTitle": "Programming with Mosh",
    "emphasizedKeywords": "",
    "date": "2019-02-18T00:00:00+00:00"
  },
```

When using a tabular format such as `csv` or `xls`, you'll get a table where each row contains just one organic result. For more details about exporting and formatting the dataset records, please see the documentation for the [Get dataset items](https://apify.com/docs/api/v2#/reference/datasets/item-collection/get-items) API endpoint.

### Tips and tricks

- If you are not sure that the results are complete and of good quality, each run stores the full HTML page to the default Key-Value Store. You can view it by clicking on it and comparing the results. Our team is constantly monitoring the quality but we are happy for any reports.

#### How do I scrape millions of results from Google?

Please note that, although Google always shows that it has found millions of results, **Google will never display more than a few hundred results for a single search query** 🤥 If your goal is to get as many results as possible, try creating many similar queries and combine different parameters and locations.

#### Is it legal to scrape Google Videos Search results?

Web scraping is legal if you are extracting publicly available data, but you should respect boundaries such as personal data and intellectual property regulations.
Rule of thumb is: you should only scrape personal data if you have a legitimate reason to do so, factoring in Google's [Terms of Use](https://policies.google.com/terms?hl=en) as well. If you're unsure whether your reason is legitimate, consult your lawyers. We also recommend that you read our blog post on the subject: [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Can I integrate Google Scraper with other apps?

Last but not least, Google Videos Search Results Scraper can be connected with almost any cloud service or web app thanks to  <a href="https://apify.com/integrations"  target="_blank"> integrations on the Apify platform</a>. You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, <a href="https://docs.apify.com/integrations" target="_blank"> and more</a>. Or you can use <a href="https://docs.apify.com/integrations/webhooks" target="_blank"> webhooks</a> to carry out an action whenever an event occurs, e.g. get a notification whenever Google Videos Search Scraper successfully finishes a run.

### Can I use Google Scraper with the API?

The Apify API gives you programmatic access to the Apify platform. The API is organized around RESTful HTTP endpoints that enable you to manage, schedule, and run Apify Actors. The API also lets you access any datasets, monitor actor performance, fetch results, create and update versions, and more.

To access the API using Node.js, use the `apify-client` NPM package. To access the API using Python, use the `apify-client` PyPi package.

Check out the <a href="https://docs.apify.com/api/v2"  target="_blank"> Apify API reference</a> docs for full details or click on the <a href="https://apify.com/hamza.alwan/google-videos-scraper/api"  target="_blank"> API tab</a> for code examples.

### Your feedback

We’re always working on improving the performance of our Actors. So if you’ve got any technical feedback for xxx or simply found a bug, please create an issue on the Actor’s Issues tab in Apify Console.

# Actor input Schema

## `queries` (type: `string`):

Google Search terms (e.g. <code>Cars</code>) and/or full URLs (e.g. <code>https://www.google.com/search?hl=en\&num=100\&q=Cars\&tbm=vid</code>).<br><br> Please enter one item per line.

## `maxPagesPerQuery` (type: `integer`):

Maximum number of Google Search result pages crawled for each search term or URL. Please note that Google limits the number of search results pages it shows you to between 300 and 400.

## `resultsPerPage` (type: `integer`):

Number of search results for each Google result page. By default, Google Search returns 10 results per page. The allowed values are: <code>10</code>, <code>20</code>, <code>30</code>, <code>40</code>, <code>50</code> and <code>100</code>. <br> Since our Free plan contains 100 free SERP proxies, and every request consumes 1 proxy, you will get exactly 100 free requests, no matter the amount of results you will get per each. <br> <br> This is why to get maximum value from this scraper, we recommend setting up this parameter to its maximum, <code>100</code>.

## `mobileResults` (type: `boolean`):

If checked, the scraper will return results for the mobile version of the Google search. By default, desktop results are returned.

## `csvFriendlyOutput` (type: `boolean`):

This option allows to arrange the results in a structure suitable for CSV format.  If checked, Related queries with respective URLs, People Also Ask, reviews and prices will not be included. Only organic and paid results will be included. <br><br> Note: please take into account that displayed paid results are still heavily dependent on your location and browsing history.

## `countryCode` (type: `string`):

Country determines the IP address of the proxy used for the search and the Google Search domain (e.g. <code>google.es</code> for Spain). By default, the actor uses United States (<code>google.com</code>).

## `languageCode` (type: `string`):

Language for the search results, which is passed to Google Search as the <code>hl</code> URL query parameter. Only set this if you want to use a non-default language for the selected country.

## `locationUule` (type: `string`):

The code for the exact location for the Google search. It's passed to Google Search as the <code>uule</code> URL query parameter. You can use the <a href='https://padavvan.github.io/' target='_blank'>UULE code generator</a>. Learn more about <a href='https://moz.com/ugc/geolocation-the-ultimate-tip-to-emulate-local-search' target='_blank'>emulating local search</a>.

## `maxConcurrency` (type: `integer`):

Maximum number of search results pages the scraper will load in parallel. A higher number means you will get your results faster, but it will also burn through your available proxies quicker.

## `saveHtml` (type: `boolean`):

If checked, the HTML of the Google Search results pages will be stored to the default dataset, under the <code>html</code> property. This is useful if you need to process the HTML, but it makes the dataset large and reduces performance.

## `saveHtmlToKeyValueStore` (type: `boolean`):

If checked, the HTML of the Google Search results pages will be stored to the default key-value store and links to the files stored to the dataset under the <code>htmlSnapshotUrl</code> property. This is useful for debugging, since you can easily view the pages in the browser. However, the use of this feature may present some performance penalty.

## `includeUnfilteredResults` (type: `boolean`):

If checked, the lower quality results that Google normally filters out will be included. This usually consists of a few hundred extra results.

## Actor input object example

```json
{
  "queries": "Cars",
  "maxPagesPerQuery": 1,
  "resultsPerPage": 100,
  "mobileResults": false,
  "csvFriendlyOutput": false,
  "countryCode": "us",
  "languageCode": "en",
  "maxConcurrency": 10,
  "saveHtml": false,
  "saveHtmlToKeyValueStore": false,
  "includeUnfilteredResults": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": "Cars",
    "maxPagesPerQuery": 1,
    "resultsPerPage": 100,
    "countryCode": "us",
    "languageCode": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("web.harvester/google-videos-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": "Cars",
    "maxPagesPerQuery": 1,
    "resultsPerPage": 100,
    "countryCode": "us",
    "languageCode": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("web.harvester/google-videos-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": "Cars",
  "maxPagesPerQuery": 1,
  "resultsPerPage": 100,
  "countryCode": "us",
  "languageCode": "en"
}' |
apify call web.harvester/google-videos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=web.harvester/google-videos-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/flxjhbX3vH5DH98Am/builds/H43ussYQyvv99ZSDk/openapi.json
