YouTube Search Scraper: Country & Language Targeting avatar

YouTube Search Scraper: Country & Language Targeting

Pricing

from $3.99 / 1,000 results

Go to Apify Store
YouTube Search Scraper: Country & Language Targeting

YouTube Search Scraper: Country & Language Targeting

YouTube Search Scraper: Country & Language Targeting extracts YouTube search results by country and language, including titles, channels, URLs, views, likes, publish dates, thumbnails, and metadata. Ideal for localized SEO, content research, and competitor analysis.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

a day ago

Last modified

Share

YouTube Search Scraper — Videos, Channels and Playlists by Country

Run one YouTube search from inside several countries at once, and see the ranked results each market actually gets. YouTube Search Scraper: Country & Language Targeting sends every query out through a residential exit IP in the country you pick, with a matching interface language, and returns typed JSON rows — no HTML parsing required. Each row carries the country, language and rank a video was seen at, plus which other countries surfaced the same video and where. This guide covers every input and output field, how the country/language targeting was verified to actually change results, and how teams run it for keyword research, rank tracking and dataset building.


What Does This YouTube Search Scraper Do?

It runs a list of search terms against YouTube's search results page once per requested country, using a real residential exit IP located in that country and (by default) YouTube's matching interface language. No YouTube account, login, cookie or API key is required — every request hits the public search page or a public channel's About page. It returns videos, channels, playlists or movies (selectable per run), with an optional cross-country rollup that shows which markets ranked the same video, at what position, and which countries missed it entirely.

  • Issues each search term separately in every country listed in targetCountries
  • Routes each country's search through a residential proxy exit physically located there
  • Matches YouTube's interface language to the country by default, or lets you force one
  • Encodes sort order, upload window, video length and result type into YouTube's real sp= search parameter
  • Adds countriesFound, rankByCountry, bestRank and related columns so you can compare markets in the same dataset
  • Can merge per-country rows into one row per video, or keep the per-market breakdown
  • Also accepts direct video and channel URLs for one-off lookups outside the search flow

Features & Capabilities

The Actor's feature set splits into search execution, cross-market comparison, and cost control.

Core features

  • Country-targeted search via residential exit IP. targetCountries accepts ISO 3166 two-letter codes; the Actor's own measurement found that &gl=/&hl= URL parameters are inert (Brazil returned an identical 8-of-8 result set to the US), so it targets countries through the proxy exit instead — verified overlap with the US result set: DE 2/8, BR 2/8, JP 3/8.
  • Independent language targeting. interfaceLanguage: "auto" maps each country to its default YouTube interface language (DE→de, BR→pt, JP→ja) as a second lever on the result set — measured overlap with an English search: ja 5/8, pt 5/8, de 6/8.
  • Verified search filters. sortBy, uploadDate, duration and type are encoded into YouTube's real sp= protobuf parameter, not simulated client-side. The short duration filter was verified live to return videos of 13–144 seconds where the unfiltered search returned 7,341–43,200 seconds.
  • Cross-country rollup columns: countriesFound, countriesFoundCount, rankByCountry, missingFromCountries, bestRank, bestRankCountry, isCountryExclusive, countriesSearchedCount.
  • Two metadata tiers. flat (default) reads the search page only (~2 KB/row): rank, title, channel, views, length, verified badge and search snippet. full additionally opens every unique video (~587 KB/video, roughly 280× the traffic) for likes, comment count, subscriber count, exact publish timestamp, tags and the untruncated description.
  • Direct URL lookups. A video URL is fully extracted; a channel URL is read from its public About page, returning description, country, joined, subscribers, channelId and the channel's external links.

How this Actor compares to other YouTube scrapers

FeatureThis Actorapi-ninja/youtube-search-scrapergrow_media/youtube-search-api
Output formatTyped JSONTyped JSON, plus a nested raw payload objectTyped JSON
Simultaneous multi-country search in one run✅ — one run fans out over every listed country❌ not documented — single geo value per run❌ not documented — single regionCode value per run
Cross-country rank comparison (bestRank, rankByCountry, etc.)✅ built in❌ not documented❌ not documented
Entity coveragevideo, channel, playlist, movievideo, channel, playlist, movie, shortsvideo only (per their listed Limitations)
Pricing model (observed 2026-07-26)Pay per eventPay per eventPay per event

(Competitor rows reflect each Actor's own README on the Apify Store as of 2026-07-26; they are not independently verified beyond what those listings state.)

If your use case is feeding structured data to an LLM or a pipeline, the output-format row is the one that matters — parsing raw HTML inside an agent loop is a reliability failure mode, not a feature.

When another tool might suit you better

If you need YouTube's official channel-statistics fields — channelViewCount, channelVideoCount, channelCreatedAt, hiddenSubscriberCount — grow_media/youtube-search-api draws on the YouTube Data API and returns those directly; this Actor does not, since it reads the public search and About pages rather than the API. If fine-grained YouTube feature filters (HD, subtitles/CC, Creative Commons, 3D, Live, 4K, 360, HDR, VR180) matter more to your workflow than comparing a query across countries, api-ninja/youtube-search-scraper documents a features object for exactly that; this Actor has no equivalent.

This Actor within the Scrapio YouTube toolset

This Actor covers YouTube search results — videos, channels, playlists and movies, compared across countries and languages. For a channel's public contact details, use YouTube Channel Contact Extractor. For playlist contents with transcripts, use YouTube Playlist Scraper (Transcripts & Subtitles). For a single video's full metadata and subtitle translations, use YouTube Video Details Scraper (Subtitles & Translations). For Shorts specifically, use YouTube Shorts Scraper (Transcripts & Captions).


Why do developers and data teams scrape YouTube search results?

🏢 SEO, ASO and international marketing teams

A marketing team enters its brand or product keywords into queries and its launch markets into targetCountries, runs on sortBy: relevance with crossCountryRollup on, and reads bestRank, bestRankCountry and missingFromCountries straight from the dataset. That answers, per keyword, which market the brand ranks best in, which markets it does not appear in at all, and whether a competitor's video occupies the top slot in one country but not another — all without manually repeating the same search from behind five different VPN exits.

📊 AI training data and RAG indexing

The title, text (description or search snippet) and keywords (tags, full tier only) fields are the highest-information text fields per row — they carry the actual subject matter, unlike numeric fields such as viewCount or duration. For RAG enrichment, indexing title and text alongside searchCountry and searchRank lets a retrieval system answer "what ranks for X in market Y" directly from the dataset. For training data, the numeric fields (viewCount, likes, commentsCount, numberOfSubscribers) return as typed integers with no string cleanup required across every row.

📱 Competitive and market intelligence

Track a competitor's channel by re-running the same queries on a schedule and watching bestRank and countriesFound move over time — a channel that drops out of countriesFound for a market it previously held signals a real ranking or availability change, not a data artifact.

🔬 Research and academic use

Cross-cultural and platform-ranking researchers can compare how the same search term surfaces different content by country and language without needing YouTube API quota or a research partnership. Only publicly returned search data is collected — no account interaction, no private engagement metrics.

🎥 Product and SaaS development

Rank-tracking dashboards, keyword-research tools and localization-planning products can build directly on rankByCountry and bestRank instead of re-implementing country-aware search themselves.


⬇️ Input Parameters

All parameters are optional — required in the schema is empty. Read directly from .actor/actor.json.

ParameterTypeDefaultDescription
queriesarray of strings["coffee recipe"]One search term per line. Each term is searched separately in every listed country.
targetCountriesarray of strings["US"]ISO 3166 two-letter country codes, one per line (e.g. US, GB, DE, BR, JP, IN, MX). Each is a separate residential exit IP.
interfaceLanguagestring"auto"auto matches each country's interface language; a code like es forces one language for every country; off always searches in English.
resultsPerCountryinteger (min 1, max 2000)10Results per search term per country. A run costs roughly this number × queries × targetCountries rows.
crossCountryRollupbooleantrueAdds countriesFound, rankByCountry, missingFromCountries, bestRank, bestRankCountry and isCountryExclusive to every row.
mergeCountryRowsbooleanfalseOff: one row per video per country. On: one row per video at its best rank, with per-country positions kept in rankByCountry.
sortByselect — relevance, date, viewCount, rating"relevance"Encoded into YouTube's real sp= parameter; applied identically in every country.
uploadDateselect — "", lastHour, today, thisWeek, thisMonth, thisYear"" (any time)Restricts every country's search to videos published in this window.
durationselect — "", short, medium, long"" (any length)Short = under 4 min, medium = 4–20 min, long = over 20 min.
typeselect — video, channel, playlist, movie"video"Channel and playlist searches return channel/playlist rows (UC… / PL… ids); video-only columns are empty for them.
metadataDepthselect — flat, full"flat"flat = search page only (~2 KB/row). full = also opens every unique video (~587 KB/video, ~280× the traffic). Fields exclusive to full are left empty, never zero-filled, on flat.
proxyConfigurationobject (proxy editor){"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Country targeting requires residential exits, so the Actor overrides this for the search requests themselves (logged at the start of every run) and keeps your setting only as a fallback.
debugbooleanfalseLogs each country's search attempts, the generated sp= parameter, and any yt-dlp error text.

⚠️ Read before your first run. queries ships with a real schema default of ["coffee recipe"], not just a prefill — starting the Actor from an empty {} input does not fail or no-op. It runs a genuine search for "coffee recipe" from the US and charges a row_result event for every row returned. Set queries explicitly if that default term is not what you intend to run.

Example input

{
"queries": ["coffee recipe"],
"targetCountries": ["US", "DE", "JP"],
"interfaceLanguage": "auto",
"resultsPerCountry": 10,
"crossCountryRollup": true,
"mergeCountryRows": false,
"sortBy": "relevance",
"metadataDepth": "flat"
}

Supported URL types and input formats

Beyond the schema's search fields, the source code also accepts direct video and channel URLs (kept for compatibility with an earlier input shape; pass them as raw JSON under urls when you need single-item lookups rather than a search):

  • A video URL (https://www.youtube.com/watch?v=…, https://youtu.be/…, or a /shorts/… URL) — fully extracted at full depth regardless of the metadataDepth setting.
  • A channel URL (https://www.youtube.com/@handle or /channel/UC…) — its public About page is read for description, country, join date, subscriber text and external links.
  • A plain search query in queries, one per line, run against every country in targetCountries — e.g. "coffee recipe" searched across US, BR and JP produces three separate ranked result sets.

Countries recognized by targetCountries and their default interface language

normalise_country() accepts any casing or hyphenated form (de, DE, de-DE all resolve to DE) and any two-letter code is passed through to the proxy layer, but only the codes below are known to country_name() and default_language() — outside this table, searchCountryName is left empty and, under interfaceLanguage: "auto", no language override is sent. This is the complete table read from src/geo.py:

CodeCountryDefault languageCodeCountryDefault language
USUnited StatesenRURussiaru
GBUnited KingdomenUAUkraineuk
CACanadaenTRTurkeytr
AUAustraliaenSESwedensv
NZNew ZealandenNONorwayno
IEIrelandenDKDenmarkda
INIndiaenFIFinlandfi
PHPhilippinesenCZCzechiacs
SGSingaporeenGRGreeceel
ZASouth AfricaenHUHungaryhu
NGNigeriaenRORomaniaro
KEKenyaenJPJapanja
DEGermanydeKRSouth Koreako
ATAustriadeTWTaiwanzh-Hant
CHSwitzerlanddeHKHong Kongzh-Hant
FRFrancefrTHThailandth
BEBelgiumfrVNVietnamvi
ESSpainesIDIndonesiaid
MXMexicoesMYMalaysiams
ARArgentinaesPKPakistanur
COColombiaesBDBangladeshbn
CLChileesSASaudi Arabiaar
PEPeruesAEUnited Arab Emiratesar
ITItalyitEGEgyptar
PTPortugalptILIsraeliw
BRBrazilpt
NLNetherlandsnl
PLPolandpl

A country code you list that isn't in this table is still sent to the residential proxy layer as a country filter — it just won't get an automatic language mapping or a display name in searchCountryName.


⬆️ Output Format

Every result is a typed JSON row pushed to the default dataset; the flat and merged modes differ only in row count, not in shape. Row-building logic lives in build_row() in src/main.py.

Output for a search result (video, channel, playlist or movie)

{
"title": "How I make coffee at home",
"type": "video",
"channelName": "Daily Brew",
"date": "2025-11-02T14:00:00Z",
"text": "Full description or search-page snippet",
"thumbnailUrl": "https://i.ytimg.com/vi/…/hqdefault.jpg",
"order": 4,
"input": "coffee recipe",
"hashtags": ["#coffee", "#recipe"],
"channelId": "UCxxxxxxxxxxxxxxxxxxxxxx",
"channelUrl": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx",
"channelUsername": "@dailybrew",
"numberOfSubscribers": 128000,
"id": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"viewCount": 1043221,
"likes": 21500,
"commentsCount": 340,
"commentsTurnedOff": false,
"duration": "6:19",
"durationSeconds": 379,
"keywords": ["coffee", "recipe", "brewing"],
"isMembersOnly": false,
"searchCountry": "DE",
"searchCountryName": "Germany",
"searchLanguage": "de",
"searchRank": 4,
"searchUrl": "https://www.youtube.com/results?search_query=coffee+recipe&sp=…",
"isVerifiedChannel": true,
"availability": "public",
"liveStatus": "not_live",
"metadataDepth": "flat",
"scrapedAt": "2026-07-26T00:00:00Z",
"rankByCountry": { "US": 7, "DE": 4 },
"countriesFound": ["US", "DE"],
"countriesFoundCount": 2,
"countriesSearchedCount": 3,
"missingFromCountries": ["JP"],
"bestRank": 4,
"bestRankCountry": "DE",
"isCountryExclusive": false
}

The last eight fields (rankByCountry through isCountryExclusive) are added only when crossCountryRollup or mergeCountryRows is on (the rollup is on by default). The Apify Console's default dataset view surfaces 27 of these columns as a table; the remaining fields — id, text, durationSeconds, channelId, channelUsername, thumbnailUrl, hashtags, keywords, isMembersOnly, availability, liveStatus, searchUrl, order, countriesSearchedCount — are present on every row but not shown in that default view. Open Export on the dataset to reach all of them.

Field coverage by metadataDepth

Fieldflat (default)full
searchRank, order, title, id, url, viewCount, duration, durationSeconds, channelName, channelId, channelUrl, channelUsername, thumbnailUrl, isVerifiedChannel, liveStatus, all searchCountry*/rollup columns✅ present✅ present
text (description)search-page snippet onlyfull untruncated description
date (exact publish timestamp)❌ empty✅ present
likes, commentsCount, numberOfSubscribers, keywords (tags)❌ empty✅ present
commentsTurnedOffalways null — not knowable from the search pagetrue/false, inferred from whether comment_count came back
isMembersOnly, availabilitypopulated only when the search page happens to expose thempopulated from the full video extraction

Fields with no value at a given depth are left as null, never filled with 0 or an empty string — an empty likes column means "not collected at this depth," not "zero likes."

Output for a direct channel URL lookup

Passing a channel URL through the raw urls input produces a structurally different row, read from the channel's public About page instead of a search result:

{
"type": "channel",
"id": "UCxxxxxxxxxxxxxxxxxxxxxx",
"url": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx",
"title": null,
"input": "https://www.youtube.com/@dailybrew",
"text": "Channel description text",
"channelId": "UCxxxxxxxxxxxxxxxxxxxxxx",
"channelUrl": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx",
"channelUsername": "@dailybrew",
"country": "Germany",
"joined": "Jan 12, 2015",
"subscribers": "128K subscribers",
"links": [{ "title": "Website", "url": "https://example.com", "displayText": "example.com" }],
"aboutUrl": "https://www.youtube.com/@dailybrew/about",
"searchCountry": "US",
"scrapedAt": "2026-07-26T00:00:00Z"
}

A run with no usable query or URL, a country/query pair with zero results, or a failed direct-URL lookup instead pushes a type: "error" or type: "info" row (with message/detail/error text) — these accounting rows are pushed without a charged_event_name, so they are never billed. Every billed row carries charged_event_name: "row_result"; to isolate billed rows in an export, filter out items where type is "error" or "info".

Schema stability and export options

Field names are additive and kept stable across runs of this Actor version — a YouTube front-end change affects what yt-dlp can extract, not the field names this Actor writes. Fields that a given tier or path cannot populate are left empty (null), never zero-filled or guessed. Results are stored in the standard Apify dataset and can be exported from the Console or the API as JSON, CSV, Excel, XML, HTML or RSS — the same export formats every Apify dataset supports.


💡 YouTube Search Scraper: Country & Language Targeting Strategy Guide

🎯 Strategy 1: Real-time keyword-rank check

Trigger a run on demand with queries set to your target keyword and targetCountries set to your launch markets, resultsPerCountry: 20, crossCountryRollup: true. Read bestRank, bestRankCountry and missingFromCountries off the finished dataset and write them into a spreadsheet or CRM record keyed by input (the query) and channelId. Useful right after publishing a new video, to see which market picked it up first.

🎯 Strategy 2: Scheduled rank monitoring

Set up an Apify Schedule to run the same queries/targetCountries pair daily or weekly. After each run, diff the new dataset against the previous one on bestRank and countriesFound for the same channelId; alert when bestRank worsens or a country disappears from countriesFound. The Actor itself runs once per schedule trigger — the diff logic lives outside it, in whatever pulls the dataset via the Apify API.

🎯 Strategy 3: Bulk multi-market dataset build

Load a long queries list (brand terms, competitor names, category keywords) against every market you operate in, in a single run, with mergeCountryRows: false so each country's ranking is preserved as its own row. resultsPerCountry is capped at 2000 by the schema, though YouTube's own search pages thin out well before that — the schema places no documented limit on how many queries or targetCountries a single run can list. Export the finished dataset to CSV for a research or business-intelligence pipeline.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time rank checkOne-off launch or campaign checkManual, on demandJSON, read directly from the Console
Scheduled rank monitoringOngoing brand or competitor trackingApify Schedule, recurringJSON, diffed run-over-run externally
Bulk multi-market dataset buildResearch or BI datasets across many keywords/marketsSingle large runCSV/Excel export

ScraperWhat it extracts
YouTube Channel Contact ExtractorPublic contact details from a channel's page
YouTube Playlist Scraper (Transcripts & Subtitles)Playlist contents with video transcripts
YouTube Video Details Scraper (Subtitles & Translations)Full single-video metadata and subtitle translations
YouTube Shorts Scraper (Transcripts & Captions)Shorts-specific video and caption data
YouTube Community Posts Scraper (Engagement Analytics)Channel community-tab posts and engagement
Google Search Autocomplete ScraperAutocomplete keyword suggestions to feed into queries

How to integrate this Actor with your stack

This Actor works with any language or tool that can call the Apify API — there is no separate authentication scheme beyond your Apify account token.

Python

from apify_client import ApifyClient
import csv
client = ApifyClient("<APIFY_TOKEN>")
run_input = {
"queries": ["coffee recipe"],
"targetCountries": ["US", "DE", "JP"],
"resultsPerCountry": 10,
"crossCountryRollup": True,
}
run = client.actor("<YOUR_USERNAME>/youtube-search-scraper-country-language-targeting").call(run_input=run_input)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
billed_rows = [r for r in rows if r.get("type") not in ("error", "info")]
with open("youtube_ranks.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["searchCountry", "input", "searchRank", "title", "bestRank", "bestRankCountry"])
writer.writeheader()
for row in billed_rows:
writer.writerow({k: row.get(k) for k in writer.fieldnames})
print(f"Wrote {len(billed_rows)} rows.")

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/youtube-search-scraper-country-language-targeting').call({
queries: ['coffee recipe'],
targetCountries: ['US', 'DE', 'JP'],
resultsPerCountry: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const billed = items.filter((r) => r.type !== 'error' && r.type !== 'info');
console.log(`${billed.length} billed rows`, billed.slice(0, 3));

Async and scheduled pipelines

For large queries/targetCountries combinations, start the run with client.actor(...).start(run_input=...) instead of .call(...) and poll client.run(run_id).get() until status is SUCCEEDED, or use an Apify Schedule for recurring runs rather than holding a connection open. Dataset items can also be pulled incrementally through the API while a long run is still in progress.


Who Needs This YouTube Search Scraper? (Use Cases & Industries)

SEO, ASO and international marketing teams

A team launching a product video in five countries runs one search per market and reads bestRankCountry and missingFromCountries to see exactly where the video is not surfacing at all, rather than guessing from a single home-market search.

AI and RAG engineering teams

Indexing title, text and keywords per searchCountry builds a retrieval corpus that already carries market context, so a RAG system can answer country-specific "what's ranking for X" questions without a second enrichment pass.

Competitive intelligence teams

Tracking a rival's channel across the same keyword set on a recurring schedule surfaces bestRank movement and countriesFound changes as an early signal of a ranking or content-strategy shift.

Researchers

Cross-cultural media and platform-ranking researchers get a reproducible, publicly sourced dataset of search rankings by country and language without API quota constraints — public search data only, no account interaction involved.

Growth and localization product teams

Products that plan market entry or content localization can pull rankByCountry directly instead of building country-aware YouTube search themselves.


Yes — collecting data that is publicly visible without logging in is generally lawful in the United States; in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping publicly accessible web data does not violate the Computer Fraud and Abuse Act. That case concerned public profile pages, not YouTube specifically, but the underlying principle — that public data is not "unauthorized access" — is the same one that applies here.

Separately, YouTube's Terms of Service generally restrict automated data collection from the platform. Violating a platform's Terms of Service is a potential contractual or civil matter between the user and the platform, not a criminal one, and is a different question from the legality of scraping public data itself.

This Actor does not collect private account data, emails, phone numbers or anything requiring a login — only channel names, subscriber counts, view counts and other information YouTube displays publicly on its search and channel pages. If a channel identifies a private individual, some data-protection regimes may still treat that channel's public details as personal data; deciding the lawful basis for storing and reusing it is the user's responsibility.

YouTube Search Scraper: Country & Language Targeting returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.


❓ Frequently asked questions

Does this Actor work without a YouTube account?

Yes. No YouTube login, cookie or API key is used anywhere in the source — search requests hit the public search results page and, for direct channel lookups, the public About page.

How does this Actor handle YouTube's anti-scraping measures?

It routes every search through Apify Residential proxies with a country-specific exit IP, retries a search up to three times if it returns zero rows, limits concurrent extractions to four at a time (asyncio.Semaphore(4)), and deliberately does not use --geo-bypass header spoofing, since faking an X-Forwarded-For header would contradict the country the exit IP is actually in.

Can I run this Actor at scale without getting blocked?

The Actor caps concurrent yt-dlp calls at four and retries empty results up to three times per country/query pair; there is no documented uptime or success-rate guarantee beyond that behavior. resultsPerCountry is capped at 2000 by the schema, though YouTube's search pages return fewer than that in practice.

How fresh is the data this Actor returns?

Every run performs a live search at run time — nothing is cached or reused between runs. scrapedAt on each row is the real timestamp of that specific request.

Which fields work best for AI training and RAG indexing?

For RAG, title and text (the description or search snippet) carry the actual subject matter and are the fields worth embedding. For training data, viewCount, likes, commentsCount, numberOfSubscribers and durationSeconds are typed integers with a consistent structure across every row and need no string parsing.

Does scraping YouTube collect personal data I need to handle carefully?

Only public channel and video metadata is returned — no email addresses, phone numbers or private account fields. If a channel belongs to an identifiable private individual, its public details may still count as personal data under some regimes; the lawful basis for storing or reusing that data sits with the user, not the Actor.

Does this Actor work with Claude, ChatGPT and other AI agent tools?

There is no MCP server for this Actor. It is callable as a standard Apify Actor run through the apify-client SDK (Python or JavaScript) from any agent framework or script that can make an HTTP request; every response is typed JSON that needs no parsing before it enters an LLM's context window.

How does this Actor compare to other YouTube search scrapers?

As observed on their Apify Store listings on 2026-07-26: api-ninja/youtube-search-scraper offers a features filter object (HD, subtitles, Creative Commons, 3D, Live, 4K, 360, HDR, VR180) this Actor does not have, and returns a nested raw payload alongside the typed fields. grow_media/youtube-search-api draws on the official YouTube Data API and returns official channel-statistics fields (channelViewCount, channelVideoCount, channelCreatedAt) this Actor does not populate, but documents video-only coverage. Neither competitor's listing documents running one query from multiple country exit IPs in a single run or a cross-country rank rollup — that comparison is this Actor's core focus.


Disclaimer

YouTube Search Scraper: Country & Language Targeting extracts only publicly available data from YouTube. This tool is intended for lawful use cases only. Users are responsible for complying with YouTube's Terms of Service and applicable data protection laws in their jurisdiction.