xHamster Scraper avatar

xHamster Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
xHamster Scraper

xHamster Scraper

[๐Ÿ’ฐ $2 / 1K] Extract public xHamster video metadata โ€” title, tags, categories, duration, views, likes, rating, upload date, channel, thumbnail. Scrape by keyword search or paste video, search, category, tag, channel, and pornstar URLs. One flat row per video. No media/download links.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Pull public xHamster video metadata at scale โ€” 23 structured fields per video, seven input surfaces, canonical category and tag names, and one flat row per result. This is a catalog-metadata tool, not a downloader: no video files, download links, streaming manifests, embed codes, or animated previews are ever returned. Built for trend analysts, taxonomy and catalog researchers, SEO teams, and content-moderation researchers who need a clean, structured picture of what a platform publishes without ever touching the media itself.

Why This Scraper?

  • Metadata only, by design โ€” the output carries titles, counts, dates, and taxonomy labels. No video files, no download links, no streaming manifests, no embed codes, no animated previews, no comment text. That boundary is enforced in the output itself, which makes the dataset safe to hand to legal, compliance, and research teams.
  • 7 input surface types in one run โ€” keyword search plus pasted links to video, search, category, tag, channel, and performer pages. User pages are auto-normalized to their video listing, so a bare profile link still returns that account's uploads.
  • 23 metadata fields per video โ€” video id, title, description, duration in seconds and as mm:ss, views, likes, dislikes, rating percent, comment count, upload date, categories, tags, performer labels, channel name and URL, uploader name and URL, and a still poster image.
  • Canonical, non-localized category and tag names โ€” taxonomy labels come back in their canonical form rather than the page's display language, so tag frequency counts stay directly comparable across runs, regions, and languages.
  • 5 sort orders that genuinely change the result set โ€” Most Relevant, Newest First, Most Viewed, Top Rated, and Longest. Verified independently: the top result differs under every one of the five.
  • Terminus-aware pagination โ€” a source is walked to its true last page rather than stopping at the page window the site displays. A single tag was walked across all 19 of its pages in one run for 833 videos, with zero duplicate video ids.
  • Two independent result caps โ€” a global ceiling for the whole run and a per-link ceiling for each individual search or listing page, so one channel holding thousands of videos can never dominate a multi-source run.
  • Optional detail enrichment, on a switch โ€” off for fast catalog sweeps (title, link, duration, views, upload date, thumbnail, uploader); on to add description, tags, categories, performers, likes, dislikes, rating percent, and comment count to every row.
  • 833 videos from one tag in 33 seconds โ€” that is a measured catalog sweep across all 19 pages of a tag with detail enrichment off. Switch enrichment on and the same tag returns 808 fully enriched rows instead, so you can pick breadth or depth per run.

Use Cases

Content Trend & Market Analysis

  • Track which categories and tags dominate Most Viewed and Top Rated listings over time
  • Measure view, like, and rating distributions across a topic to gauge audience demand
  • Re-run a saved search on a schedule to build view-count and engagement time series
  • Compare upload volume by month using normalized upload dates

Catalog & Taxonomy Research

  • Snapshot a channel's or performer's full back catalog into a single sheet
  • Map how categories and tags co-occur to build or audit a taxonomy
  • Measure tag cardinality and label reuse across thousands of videos
  • Build a reference index of public listings for internal cataloging systems

SEO & Keyword Research

  • Compare which keyword searches surface high-view versus low-view catalogs
  • Extract title and description text at volume for term-frequency analysis
  • Identify long-tail tags with meaningful view counts but thin competition
  • Benchmark title length, phrasing, and tag density against top-performing results

Content Moderation & Compliance Research

  • Compile public metadata sets for content-policy and platform-governance studies
  • Track category and tag prevalence over time for safety and risk research
  • Assemble reproducible reference sets of public listings for academic or legal review
  • Audit how a platform labels and classifies its own catalog

Competitive Catalog Benchmarking

  • Compare upload cadence, catalog size, and engagement across channels
  • Contrast tagging strategies between studios and independent uploaders
  • Rank channels by median views, rating percent, or comment volume
  • Feed structured rows into BI dashboards for ongoing category monitoring

Getting Started

One keyword, defaults for everything else โ€” 100 videos with full detail:

{
"searchQueries": ["yoga"]
}

Fast Catalog Sweep

Detail enrichment off for a wide, quick listing pass ordered by newest uploads:

{
"searchQueries": ["yoga", "fitness"],
"maxResults": 500,
"maxResultsPerSource": 250,
"sortBy": "newest",
"includeDetails": false
}

Combine several page types with a keyword search in one run:

{
"startUrls": [
"https://xhamster.com/categories/massage",
"https://xhamster.com/tags/yoga",
"https://xhamster.com/videos/xhsaQFO"
],
"searchQueries": ["fitness"],
"maxResults": 400,
"maxResultsPerSource": 100,
"sortBy": "best",
"includeDetails": true
}

Full Catalog Pull

Every video a single channel has published, with no ceiling other than the safety limit:

{
"startUrls": ["https://xhamster.com/channels/example-studio"],
"maxResults": 0,
"maxResultsPerSource": 0,
"sortBy": "newest",
"includeDetails": true
}

Input Reference

What to Scrape

ParameterTypeDefaultDescription
startUrlsarray[]Paste one or more xHamster links. A single video link resolves to one result. A search, category, tag, channel, pornstar, or user page collects every video listed on it, page by page. You can mix different link types, and you can add keywords below as well.
searchQueriesarray[]Keywords to search for, such as a topic, a studio, or a performer name. Each keyword runs its own search and the matching videos are collected. Use this on its own or alongside the links above.

Leave both empty and the run finishes immediately without collecting anything.

Limits

ParameterTypeDefaultDescription
maxResultsinteger100The most videos to collect in total, across every link and keyword search. Each video is one result. Set to 0 for no limit โ€” runs then stop at a safety ceiling of 100,000 videos.
maxResultsPerSourceinteger50The most videos to take from any single search, category, tag, channel, pornstar, or user page. Some channels hold many thousands of videos, so this keeps each one in check. This is ignored for links that point at a single video. Set to 0 to remove this cap entirely โ€” the overall maximum above still applies.

Options

ParameterTypeDefaultDescription
sortBystring"relevance"How to order the videos collected from searches and listing pages. Options: relevance (Most Relevant), newest (Newest First), views (Most Viewed), best (Top Rated), longest (Longest). Does not apply to links pointing at a single video.
includeDetailsbooleantrueWhen on, each video's own page is opened to collect its tags, categories, performers, rating, comment count, and description. When off, the run is much faster and cheaper but each result carries only the title, link, duration, views, upload date, thumbnail, and uploader.

Output

Every result is one flat row. Arrays hold plain label strings โ€” no nested objects to unpack.

{
"recordType": "video",
"videoId": "29147704",
"url": "https://xhamster.com/videos/example-title-29147704",
"title": "Full Body Stretch Routine",
"description": "A guided routine recorded in a single take.",
"duration": 1462,
"durationFormatted": "24:22",
"views": 184920,
"likes": 1843,
"dislikes": 122,
"ratingPercent": 94,
"commentCount": 37,
"uploadDate": "2024-11-08T14:22:41+00:00",
"categories": ["Massage"],
"tags": ["yoga", "stretching", "fitness"],
"pornstars": ["Performer Name"],
"channelName": "Example Studio",
"channelUrl": "https://xhamster.com/channels/example-studio",
"uploaderName": "example-account",
"uploaderUrl": "https://xhamster.com/users/example-account",
"thumbnailUrl": "https://thumb-v1.xhcdn.com/a/example/1280x720.jpg",
"sourceUrl": "https://xhamster.com/search/yoga",
"scrapedAt": "2026-07-24T09:14:02.881204+00:00"
}

Core Fields

FieldTypeDescription
recordTypestringAlways "video" โ€” one record type, so every row shares the same shape
videoIdstringThe platform's canonical numeric video id; stable across runs and used for deduplication
urlstringPublic page URL for the video
titlestringVideo title as published
descriptionstringDescription text from the video page (detail enrichment only)
durationintegerRuntime in seconds
durationFormattedstringSame runtime as mm:ss, or h:mm:ss past an hour
uploadDatestringPublication date and time in ISO 8601
thumbnailUrlstringStill poster image (JPG or WebP), largest available size

Engagement Metrics

FieldTypeDescription
viewsintegerTotal view count at the moment of collection
likesintegerPositive votes (detail enrichment only)
dislikesintegerNegative votes (detail enrichment only)
ratingPercentintegerApproval rating from 0 to 100, as the platform reports it (detail enrichment only)
commentCountintegerNumber of comments on the video โ€” a count only, no comment text (detail enrichment only)

Taxonomy

FieldTypeDescription
categoriesstring[]Canonical, non-localized category labels (detail enrichment only)
tagsstring[]Canonical, non-localized tag labels (detail enrichment only)
pornstarsstring[]Performer names credited on the video page (detail enrichment only)

Channel & Uploader

FieldTypeDescription
channelNamestringPublishing channel or studio name, when the video belongs to one
channelUrlstringPublic URL of that channel
uploaderNamestringAccount that uploaded the video, for user-submitted uploads
uploaderUrlstringPublic URL of that account

Run Context

FieldTypeDescription
sourceUrlstringThe page this row came from, always as a URL โ€” keyword searches report their own search URL, so every row groups cleanly by source after export
scrapedAtstringCollection timestamp in ISO 8601

Tips for Best Results

  • Start with 10โ€“20 results. Run one keyword at a small cap first to confirm the fields match your analysis, then scale up. Note that collection always finishes the page it is on, so a cap of 10 typically returns the full 46-video page rather than exactly 10.
  • Turn includeDetails off for breadth, on for depth. A listing-only sweep is dramatically faster โ€” the same 830-video tag takes about half a minute with enrichment off and roughly 17 minutes with it on, because every video's own page has to be opened. Leave it off for title, duration, view and upload-date analysis; switch it on only when you need tags, categories, performers, rating, or comment counts.
  • Match the sort to the question. Most Viewed and Top Rated for demand and quality analysis, Newest First for monitoring fresh uploads, Longest to isolate full-length content, Most Relevant for the broadest keyword coverage.
  • Power-user tip: Most Relevant reaches far deeper than the other sorts. For keyword searches the platform serves roughly twice as many pages under Most Relevant as under any other order. For an exhaustive keyword sweep run Most Relevant first, then re-run the same keyword under Newest First to pick up recent uploads that ranked too low to appear.
  • Listing pages support a narrower sort vocabulary than search. Category, tag, channel, and performer pages honour Most Relevant, Newest First, and Top Rated; Most Viewed and Longest fall back to the page's own default order, and the run log tells you when that happens.
  • Use maxResultsPerSource to keep multi-source runs balanced. With ten links and a global cap of 1,000, a per-source cap of 100 guarantees an even sample instead of one large channel consuming the entire budget.
  • Pivot on categories and tags directly. Because those labels are canonical rather than translated, you can concatenate datasets collected days or regions apart and the frequency counts still line up.
  • Set both caps to 0 for a complete catalog. That collects everything a channel, tag, or category holds, bounded only by the 100,000-video safety ceiling. For very large catalogs, split the work across several runs or raise the run's time limit in the run options.

Pricing

From $2.00 per 1,000 results โ€” a flat per-result rate for structured catalog metadata, with no charge for the pages walked to find it. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

ResultsNo discountBronzeSilverGold
100$0.24$0.23$0.22$0.20
1,000$2.40$2.25$2.15$2.00
10,000$24.00$22.50$21.50$20.00
100,000$240.00$225.00$215.00$200.00

A "result" is one video row in the output dataset. No compute or time-based charges โ€” you pay per result, plus a small fixed per-run start fee.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n โ€” Workflow automation
  • Google Sheets โ€” Direct spreadsheet export
  • Slack / Email โ€” Notifications on new results
  • Webhooks โ€” Trigger custom APIs on run completion
  • Apify API โ€” Full programmatic access

This actor collects only publicly available video metadata โ€” titles, counts, dates, taxonomy labels, and a still poster image. It does not collect, produce, or distribute media files, download links, streaming manifests, or embed codes, and it is not a download tool.

It is intended for legitimate research, analytics, cataloging, and compliance work. xHamster is an adult platform, so this actor and its output are for adults aged 18 or older, and you are responsible for complying with the age-verification and access rules that apply in your jurisdiction โ€” several countries and US states restrict access to adult platforms.

Use the collected data only for your own lawful, compliant purposes, and respect xHamster's Terms of Service. Performer and uploader names may constitute personal data under GDPR and similar regimes; if you store or process them, ensure you have a valid lawful basis and honour any deletion or objection requests. Do not use extracted data for spam, harassment, profiling of individuals, or any illegal purpose, and do not redistribute platform media in any form.