YouTube Video Scraper by Hashtag (Creator Discovery) avatar

YouTube Video Scraper by Hashtag (Creator Discovery)

Pricing

from $5.99 / 1,000 results

Go to Apify Store
YouTube Video Scraper by Hashtag (Creator Discovery)

YouTube Video Scraper by Hashtag (Creator Discovery)

Discover YouTube content by hashtags with the YouTube Video Scraper by Hashtag. Extract video URLs, titles, descriptions, views, likes, and upload dates. Perfect for trend tracking, content research, and hashtag analysis. Fast, accurate, and scalable for bulk scraping.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

2

Monthly active users

13 days ago

Last modified

Share

YouTube Hashtag Scraper — Videos, Channels and Creator Rankings

Search YouTube by hashtag, keyword, or @handle and get back more than a video list: every result is resolved to the channel that published it, then rolled up into a ranked creator shortlist for that run. Each result includes the video object (title, view count, thumbnail, description snippet), the creator's channel identity (name, handle, channel URL, avatar, verified badge), and per-creator rollups (rank, videos found, total views, top video) — all as structured JSON, ready to load into a spreadsheet, a CRM, or an LLM's context window. Point it at a campaign hashtag or a niche keyword and get the same data a manual "who's posting about this" search would take hours to compile.

What is YouTube Video Scraper by Hashtag (Creator Discovery)?

YouTube Video Scraper by Hashtag (Creator Discovery) queries YouTube's public search results for a hashtag (#tag), a plain keyword, or an @handle, and returns every matching video together with the channel behind it. No YouTube account, Google Cloud project, or API key is required — it reads the same public search pages a signed-out visitor sees.

What sets it apart from a plain hashtag/video list is the creator layer: every video row already carries channelId, channelName, channelHandle, channelUrl and isVerifiedChannel with zero extra requests, and the whole run is aggregated into a ranked creator shortlist (creatorRank, creatorVideosInRun, creatorTotalViewsInRun) — so a hashtag search becomes a list of the accounts actually driving that hashtag, not just their clips.

Key capabilities:

  • 🔎 Accepts #hashtag, plain keyword, or @handle search terms, honored exactly as typed
  • 🎬 Returns YouTube's regular video results, plus YouTube Shorts (including the current shortsLockupViewModel shelf layout)
  • 👤 Resolves every video to its channel — identity fields, no second lookup
  • 📊 Aggregates a per-creator rollup (rank, videos in run, total/average/max views, top video) across every search term in the run
  • 🧹 Optional filters to shrink a raw result set into a shortlist: one video per creator, verified channels only, a hard cap on distinct creators
  • 🌐 Optional Apify Proxy, with an automatic one-time escalation to a residential proxy if a run cannot fetch a single page at all

What data can you get with YouTube Video Scraper by Hashtag (Creator Discovery)?

Every run returns three layers of data on the same dataset row, plus one separate uncharged dataset — a video's own fields, the channel that published it, and that channel's rollup across the whole run:

Result typeExtracted fieldsPrimary use case
Videoid, title, url, type, thumbnailUrl, viewCount, viewCountText, viewCountIsExact, description, sourceRenderer, searchTerm, searchQuery, searchTermKindBuild the raw result set for a hashtag, keyword, or handle search
Creator identity (attached to each video)channelId, channelName, channelHandle, channelUrl, channelHandleUrl, channelAvatarUrl, isVerifiedChannel, channelBadgesKnow who posted each result without a second API call
Creator rollup (attached to each video)creatorRank, creatorVideosInRun, creatorTotalViewsInRun, creatorAvgViewsInRun, creatorMaxViewsInRun, creatorTopVideoId, creatorTopVideoUrl, creatorTermsMatched, creatorTermMatchCountRank and shortlist creators for outreach or influencer discovery
Hashtag category totalshashtagCategoryData.categoryInfoText, hashtagVideoCount, hashtagChannelCountSee how big a hashtag is on YouTube's own count, without a separate lookup

Creator identity and rollups

This is the field group a plain hashtag/video scraper does not carry. Every video row already contains the resolved channel object, and the same row also carries that channel's standing across the whole run — computed from every term you searched, not just the one that matched this video:

{
"id": "dQw4w9WgXcQ",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelName": "Rick Astley",
"channelHandle": "RickAstleyYT",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"isVerifiedChannel": true,
"creatorRank": 1,
"creatorVideosInRun": 4,
"creatorTotalViewsInRun": 18234221,
"creatorAvgViewsInRun": 4558555,
"creatorMaxViewsInRun": 15200000,
"creatorTopVideoId": "dQw4w9WgXcQ",
"creatorTermsMatched": ["#nevergonnagiveyouup", "rick astley"],
"creatorTermMatchCount": 2
}

creatorRank orders creators by how many videos they placed in the run, then by total views — so rank 1 is the account that showed up most for your search terms, not just the single most-viewed clip.

Hashtag category totals

Each search term also carries YouTube's own aggregate count for that term — the "X videos • Y channels" line shown at the top of a hashtag search page — parsed into hashtagVideoCount and hashtagChannelCount. It is null whenever YouTube does not render that line for the term (plain keyword and handle searches usually do not carry it), never a fabricated zero.

How does YouTube Video Scraper by Hashtag (Creator Discovery) differ from the official YouTube Data API?

YouTube's own search.list endpoint (YouTube Data API v3) returns basic video snippets for a query string but does not resolve, rank, or aggregate the channels behind those results — and it runs on a small daily quota. This Actor returns the same kind of video results plus the resolved channel and a run-level creator ranking, on Apify's infrastructure instead of a Google Cloud project's quota.

FeatureYouTube Data API v3This Actor
SetupGoogle Cloud project + API keyApify Console account only
Daily allowance10,000 quota units/day by default; each search.list call costs 100 units — about 100 searches/day per project (Google Developers documentation, checked 2026-08-04)No Google quota; capped per run by maxResults (up to 500 videos per term)
Hashtag searchNo dedicated hashtag endpoint — a #tag is passed as a generic q query string#tag, plain keyword, and @handle are each classified and searched as YouTube itself would search them
Channel resolved per resultOnly channelId/channelTitle; full channel detail needs a separate channels.list callChannel identity resolved in the same row, no extra request
Creator ranking across resultsNot provided — must be computed client-side from raw snippetsBuilt into every run (creatorRank, per-creator view totals, top video)
OutputJSON via REST, one page (up to 50 items) per call plus pagination tokensJSON dataset, exportable as CSV, Excel, XML or RSS from the Apify Console

Use the official API when you already have Google Cloud infrastructure and 100 searches a day is enough for your use case. Use this Actor when you need a creator shortlist rather than a raw snippet list, or when the daily search.list quota is the bottleneck.

What is the difference between a YouTube hashtag scraper and a creator discovery tool?

A hashtag scraper returns the videos that match a tag; a creator discovery tool tells you who is behind those videos and how they stack up against each other. The distinction matters because a raw video list from a plain hashtag search still leaves the actual work undone — someone has to open each video, find the channel, and manually tally who posted the most or got the most views for that tag.

YouTube Video Scraper by Hashtag (Creator Discovery) returns both in the same run: the video object described above, and the creator object attached to it (channelName, channelHandle, creatorRank, creatorTotalViewsInRun). Turn on oneVideoPerChannel and the video list itself collapses into a one-row-per-creator shortlist, ranked by how much of the hashtag's activity each channel accounts for.

How to scrape YouTube with YouTube Video Scraper by Hashtag (Creator Discovery)?

  1. Open the Actor's page on the Apify Store and click Try for free (or Start, if you already use it).
  2. Fill creatorSearchTerms with one or more terms — #chatgpt, chatgpt, or @mkbhd all work, mixed in the same list.
  3. Set the query controls that matter for your case: maxResults (videos scanned per term), scrapeShortsOnly, oneVideoPerChannel, verifiedChannelsOnly, maxCreators, and proxyConfiguration.
  4. Click Start and let the run finish.
  5. Open the Dataset tab and export the results as JSON, CSV, Excel, XML or RSS — or pull them programmatically with the Apify API / apify-client.

How to run multiple queries in one job

creatorSearchTerms accepts an array, so a single run can cover many hashtags, keywords, or handles at once — every matching video is aggregated into one shared creator ranking across all of them, not scored per term. Terms are processed one after another within a run (each continuation page for a term waits briefly before the next request), so a longer term list simply extends how long the run takes rather than running the terms in parallel. There is no separate concurrency setting in this Actor's input.

⬇️ Input

All fields are optional except that at least one search term must end up in creatorSearchTerms or the legacy hashtags field, or the run exits with no terms to search.

ParameterRequiredTypeDescriptionExample value
creatorSearchTermsNoarrayOne or more search terms — #chatgpt, chatgpt, @mkbhd. Every returned video is resolved back to the channel that published it.["#chatgpt"]
hashtagsNoarrayLegacy compatibility field for the original hashtag scraper. When filled, it takes priority over creatorSearchTerms. Leave empty otherwise.[]
maxResultsNointegerHow many videos to pull per search term before creator filtering. Minimum 1, maximum 500, default 10.50
scrapeShortsOnlyNobooleanRestrict the search to YouTube Shorts. Default false.false
oneVideoPerChannelNobooleanKeep only the highest-viewed video of each channel, deduplicated across every search term in the run. Default false.true
verifiedChannelsOnlyNobooleanKeep only videos whose channel carries YouTube's verified badge. Default false.false
maxCreatorsNointegerOptional cap on distinct channels returned. Minimum 1, no default (unlimited when left empty).20
proxyConfigurationNoobjectApify Proxy configuration. When enabled, the proxy is attached to every YouTube request the run makes.{"useApifyProxy": true}

Example input:

{
"creatorSearchTerms": ["#chatgpt", "ai tools", "@mkbhd"],
"maxResults": 50,
"scrapeShortsOnly": false,
"oneVideoPerChannel": true,
"verifiedChannelsOnly": false,
"maxCreators": 20,
"proxyConfiguration": { "useApifyProxy": true }
}

⚠️ Common pitfall: verifiedChannelsOnly and scrapeShortsOnly together return zero rows. YouTube Shorts renderers (shortsLockupViewModel) carry no channel owner at all, so isVerifiedChannel is never true on a Shorts row — it is null, and the verified filter drops every one of them.

⬆️ Output

Results are pushed to the default dataset as typed, normalized JSON, one object per video, with a consistent schema across runs. Export as JSON, CSV, Excel, XML or RSS from the Apify Console, or read it with the Apify API. A run also opens a second, separate dataset named creators-<runId> holding one row per creator — see below.

Scraped results

[
{
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"id": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"viewCount": 1620000000,
"type": "video",
"viewCountText": "1.6B views",
"viewCountIsExact": false,
"description": "The official video for Never Gonna Give You Up...",
"sourceRenderer": "videoRenderer",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelHandle": "RickAstleyYT",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"channelHandleUrl": "https://www.youtube.com/@RickAstleyYT",
"channelAvatarUrl": "https://yt3.ggpht.com/abc123=s176-c-k-c0x00ffffff-no-rj",
"isVerifiedChannel": true,
"channelBadges": ["Verified"],
"hashtagCategoryData.categoryInfoText": "2.6M videos • 822K channels",
"hashtagVideoCount": 2600000,
"hashtagChannelCount": 822000,
"searchTerm": "#nevergonnagiveyouup",
"searchQuery": "#nevergonnagiveyouup",
"searchTermKind": "hashtag",
"creatorRank": 1,
"creatorVideosInRun": 3,
"creatorTotalViewsInRun": 1804000000,
"creatorAvgViewsInRun": 601333333,
"creatorMaxViewsInRun": 1620000000,
"creatorTopVideoId": "dQw4w9WgXcQ",
"creatorTopVideoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"creatorTermsMatched": ["#nevergonnagiveyouup"],
"creatorTermMatchCount": 1,
"rowType": "video"
},
{
"thumbnailUrl": "https://i.ytimg.com/vi/aBc123ShortId/hqdefault.jpg",
"title": "80s dance move that never gets old",
"id": "aBc123ShortId",
"url": "https://www.youtube.com/shorts/aBc123ShortId",
"viewCount": 452000,
"type": "shorts",
"viewCountText": "452K views",
"viewCountIsExact": false,
"description": null,
"sourceRenderer": "shortsLockupViewModel",
"channelName": null,
"channelId": null,
"channelHandle": null,
"channelUrl": null,
"channelHandleUrl": null,
"channelAvatarUrl": null,
"isVerifiedChannel": null,
"channelBadges": [],
"hashtagCategoryData.categoryInfoText": "2.6M videos • 822K channels",
"hashtagVideoCount": 2600000,
"hashtagChannelCount": 822000,
"searchTerm": "#nevergonnagiveyouup",
"searchQuery": "#nevergonnagiveyouup",
"searchTermKind": "hashtag",
"creatorRank": null,
"creatorVideosInRun": null,
"creatorTotalViewsInRun": null,
"creatorAvgViewsInRun": null,
"creatorMaxViewsInRun": null,
"creatorTopVideoId": null,
"creatorTopVideoUrl": null,
"creatorTermsMatched": [],
"creatorTermMatchCount": null,
"rowType": "video"
},
{
"thumbnailUrl": "https://i.ytimg.com/vi/xyz789keyword/hqdefault.jpg",
"title": "Best AI tools for 2026 - full breakdown",
"id": "xyz789keyword",
"url": "https://www.youtube.com/watch?v=xyz789keyword",
"viewCount": 84200,
"type": "video",
"viewCountText": "84,200 views",
"viewCountIsExact": true,
"description": "A hands-on look at the AI tools worth using this year...",
"sourceRenderer": "videoRenderer",
"channelName": "Tech With Dana",
"channelId": "UCexampleChannelId",
"channelHandle": "techwithdana",
"channelUrl": "https://www.youtube.com/channel/UCexampleChannelId",
"channelHandleUrl": "https://www.youtube.com/@techwithdana",
"channelAvatarUrl": "https://yt3.ggpht.com/def456=s176-c-k-c0x00ffffff-no-rj",
"isVerifiedChannel": false,
"channelBadges": [],
"hashtagCategoryData.categoryInfoText": null,
"hashtagVideoCount": null,
"hashtagChannelCount": null,
"searchTerm": "ai tools",
"searchQuery": "ai tools",
"searchTermKind": "keyword",
"creatorRank": 4,
"creatorVideosInRun": 1,
"creatorTotalViewsInRun": 84200,
"creatorAvgViewsInRun": 84200,
"creatorMaxViewsInRun": 84200,
"creatorTopVideoId": "xyz789keyword",
"creatorTopVideoUrl": "https://www.youtube.com/watch?v=xyz789keyword",
"creatorTermsMatched": ["ai tools"],
"creatorTermMatchCount": 1,
"rowType": "video"
}
]

If a search term returns nothing parseable, an uncharged accounting row is pushed to the same dataset instead of a video: {"rowType": "term_no_results", "searchTerm": "<term>", "note": "YouTube returned no parseable rows for this search term.", ...all base video fields as null}. Filter these out of billing/analysis with rowType === "video".

The creators-<runId> dataset holds one row per creator that survived your filters, already sorted by rank:

{
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelName": "Rick Astley",
"channelHandle": "RickAstleyYT",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"isVerifiedChannel": true,
"videosInRun": 3,
"totalViewsInRun": 1804000000,
"avgViewsInRun": 601333333,
"maxViewsInRun": 1620000000,
"topVideoId": "dQw4w9WgXcQ",
"topVideoTitle": "Rick Astley - Never Gonna Give You Up (Official Video)",
"topVideoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"termsMatched": ["#nevergonnagiveyouup"],
"videoIds": ["dQw4w9WgXcQ"],
"creatorRank": 1,
"termMatchCount": 1
}

How can I use the data extracted with YouTube Video Scraper by Hashtag (Creator Discovery)?

  • 🎯 Influencer and creator-partnership teams: run a campaign hashtag through creatorSearchTerms with oneVideoPerChannel on, sort by creatorRank and creatorTotalViewsInRun, and open channelUrl to build an outreach shortlist without watching a single video.
  • 🤖 AI engineers and LLM developers: wire the Actor behind a retrieval step — an agent issues a hashtag or keyword query, gets back structured JSON with resolved channel identity, and passes it to the model as grounded context for drafting outreach or summarizing "who is posting about X".
  • 📊 Market and trend researchers: use hashtagVideoCount / hashtagChannelCount alongside per-creator view totals to gauge how concentrated a hashtag's activity is — a handful of dominant creators versus a broad long tail.
  • 📈 Social and growth teams: track your own brand or product hashtag, restrict to verifiedChannelsOnly to focus on notable accounts, and watch which channels are driving the conversation this week.

How do you monitor creator rankings over time?

Creator rankings are a run-level snapshot — rerun the same search terms later and compare the two snapshots to see who is gaining ground on a hashtag or keyword. The specific fields to diff between runs are creatorRank (did this channel move up or down), creatorVideosInRun and creatorTotalViewsInRun (is their output or their reach growing), and creatorTopVideoId/creatorTopVideoUrl (did a new video become their best performer). A channel that appears in this run's creators-<runId> dataset but not in last week's is a new entrant to the hashtag; one that drops out lost all its visible activity for that term.

A practical loop: schedule a recurring run over your tracked hashtags and keywords, keep each run's creators-<runId> dataset (or export it), and alert when a channel's creatorRank crosses into your top N, or when creatorTotalViewsInRun jumps well beyond its previous value. This Actor does not run its own scheduler — set up the recurring run with an Apify schedule in the Apify Console, and diff the exported datasets externally.

Integrate YouTube Video Scraper by Hashtag (Creator Discovery) and automate your workflow

YouTube Video Scraper by Hashtag (Creator Discovery) works with any language or tool that can call the Apify API — there is no separate signup or credential beyond your Apify account token.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("<store-username>/youtube-video-scraper-by-hashtag-creator-discovery").call(
run_input={
"creatorSearchTerms": ["#chatgpt"],
"maxResults": 50,
"oneVideoPerChannel": True,
"maxCreators": 20,
}
)
for video in client.dataset(run["defaultDatasetId"]).iterate_items():
print(video["channelName"], video["creatorRank"], video["title"])

Scheduled monitoring and delivery

The Actor has no built-in webhook or notification logic of its own. Use the Apify platform's own schedules to rerun a search on a recurring basis, and its webhooks to fire on run completion — for example, to notify a pipeline that a fresh creators-<runId> dataset is ready to diff against the previous one.

Yes — scraping publicly accessible YouTube search results is generally legal; this Actor returns only what any signed-out visitor sees on youtube.com, nothing behind a login. In hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping data a website makes publicly available does not, by itself, violate the U.S. Computer Fraud and Abuse Act.

Because the output includes channel names, handles and avatars that can identify the individual behind a channel, personal-data rules — GDPR in the EU/UK and the CCPA in California — can apply to how you store and process it, separate from whether the initial collection was lawful. Scraping for one-off operational monitoring (checking who is posting about a hashtag this week) carries a different risk profile than scraping at scale to train a model or build a permanent database of creators. Consult your legal team for commercial use cases involving bulk data storage.

❓ Frequently asked questions

What's the difference between creatorSearchTerms and the legacy hashtags field?

They do the same job, but hashtags wins when it is filled: it exists only so runs built for the original hashtag scraper keep working unchanged. If you are starting fresh, use creatorSearchTerms and leave hashtags empty.

Can I restrict a run to YouTube Shorts, or to one video per creator?

Yes. scrapeShortsOnly restricts the search to Shorts results; oneVideoPerChannel collapses the whole run down to each channel's single highest-viewed video, deduplicated across every search term. They can be combined with verifiedChannelsOnly, but see the pitfall note in the Input section — Shorts never carry a verified channel, so combining scrapeShortsOnly with verifiedChannelsOnly returns nothing.

How does YouTube Video Scraper by Hashtag (Creator Discovery) handle YouTube's anti-bot measures?

Requests retry up to three times with a growing backoff on transport errors. If a run cannot fetch a single page at all under a direct connection or the selected Apify proxy, it escalates once to a residential Apify proxy and retries the whole search — it does not escalate just because a search legitimately returned no results.

Does it extract creator/channel data for every video?

For every regular video result, yes — channelName, channelId, channelHandle, channelUrl and isVerifiedChannel are resolved from the same search response, no extra request. The exception is YouTube Shorts: Shorts lockups are served by YouTube without an owner attached, so all channel fields on a Shorts row are null, not guessed.

How many results does YouTube Video Scraper by Hashtag (Creator Discovery) return per search term?

Up to maxResults per term (minimum 1, maximum 500, default 10), clamped to that range regardless of what you enter. ⚠️ YouTube itself stops serving new results for a single term at roughly 300 videos (measured 301 rows on #chatgpt) — set maxResults above that and the run simply returns everything YouTube has and stops, rather than an error.

How do I monitor a hashtag's top creators over time?

Schedule a recurring run over the same search terms with an Apify schedule, keep each run's creators-<runId> dataset, and diff creatorRank, creatorVideosInRun and creatorTotalViewsInRun against the previous run to see who moved up, who is new, and whose reach grew.

Does YouTube Video Scraper by Hashtag (Creator Discovery) work with Claude, ChatGPT, and AI agent frameworks?

It is callable as a standard HTTP/Apify API call from any agent framework that can invoke a tool — there is no dedicated MCP server for this Actor. An agent can trigger a run, poll or await the dataset, and use the resolved creator data as grounded context before answering.

Can I use this Actor without managing proxies or YouTube credentials?

Yes. No YouTube login, cookies, or API key are needed. Apify Proxy is optional and off by default; when a direct connection cannot fetch a single page, the run automatically escalates once to a residential proxy on your behalf.

💬 Your feedback

Found a bug, a field that came back empty when it shouldn't have, or a search term YouTube's own site handles differently? Let Scrapier know through the Actor's Issues tab on its Apify Store listing — that's the fastest way to get a fix into the next build.