Pornhub Scraper - Video Metadata, Tags & Views
Pricing
from $6.15 / 1,000 results
Pornhub Scraper - Video Metadata, Tags & Views
Scrape public Pornhub video metadata with no API key: title, exact views, likes, rating, duration, upload date, uploader, pornstars, categories and tags. Search by keyword, category, tag, pornstar, model or channel. Export JSON, CSV, Excel.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
1
Bookmarked
6
Total users
0
Monthly active users
15 hours ago
Last modified
Categories
Share
Pornhub Scraper - Video Metadata, Tags, Views & Categories
The most complete Pornhub scraper for public video metadata on Apify, with no API key and no login. Extract titles, exact view counts, ratings, duration, upload date, uploader, pornstars, categories and tags at scale, then export to JSON, CSV or Excel for content trend and metadata analytics. Search by keyword or tag, browse a category, or pull every video from a pornstar, model or channel.
Here is one real result, with every field the actor returns (long description, categories and tags trimmed for readability; the actor returns the full values):
{"title": "Step Sister Caught Step Brother Jerking Off and Helps Cum Quick","url": "https://www.pornhub.com/view_video.php?viewkey=6a631a3a91d2f","viewkey": "6a631a3a91d2f","videoId": 488461945,"segment": "straight","durationSeconds": 630,"views": 2187216,"likes": 3342,"votesUp": 3342,"isHD": true,"isVR": false,"isPremium": false,"uploader": "Kitty","uploaderUrl": "https://www.pornhub.com/model/kitty","uploaderType": "model","uploadedAt": "2026-07-24T07:57:00+00:00","addedAgo": "56 years ago","thumbnail": "https://pix-cdn77.phncdn.com/c6371/videos/202607/24/56566265/original_56566265.mp4/...","previewVideoUrl": "https://kw.phncdn.com/c6251/videos/202607/24/56566265/180P_225K_56566265.webm?...","description": "Watch Step Sister Caught Step Brother Jerking Off and Helps Cum Quick [trimmed]","pornstars": null,"categories": ["18-25","Amateur","Babe","Big Ass","Big Dick","Cumshot","HD Porn","POV","Rough Sex","Step Fantasy","Verified Amateurs"],"tags": ["step sis","stepsister","familly therapy","prone bone","prone bone creampie","prone bone pov"],"observedAt": "2026-09-04T10:05:12.350Z","error": null}
This actor returns every field a public video listing and detail page expose, including exact view and like counts, rating percentage and vote totals, comment counts, duration, uploader, upload date, description, pornstars, categories and tags, plus HD, VR and premium flags. Scrape by search keyword, category, tag, pornstar, model or channel.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Use cases
- Why this Pornhub scraper
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor collects public Pornhub video metadata from one source at a time (a search keyword, a category, a pornstar page, a model page or a channel), paginates the listing, optionally opens each video page for the exact counts and full detail, and writes one normalized record per video to the run's dataset. Each record includes the title, URL and viewkey, duration in seconds, view and like counts, uploader and uploader type, upload date, description, and the pornstars, categories and tags. Missing source values are returned as null, never invented. Only public listing and video-page metadata is read; no media is downloaded.
Pick one source by priority: searchQuery, then category, then pornstar, then model, then channel. The tags input is folded into the search query. Order the listing with sort and narrow with period.
Use cases
- Content trend analytics. Track which titles, tags and categories gain views over time by re-running a search or category on a schedule.
- Metadata datasets for research. Build a structured corpus of adult-video metadata (views, ratings, duration, tags, upload dates) without downloading any media.
- Creator and channel monitoring. Pull a pornstar, model or channel back-catalog with per-video view and like counts, upload dates, categories and tags.
- Tag and category intelligence. Aggregate the tags and categories attached to top-ranked videos for a keyword to understand how content is labelled.
- Ranking and SEO research. Compare
mostViewed,topRatedandmostRecentorderings to see what surfaces for a term.
Why this Pornhub scraper
A strict superset of the common Apify Pornhub scrapers: it accepts every input they do and returns every field they do, plus exact detail-page counts and extra quality and engagement signals.
| Capability | This actor | Typical Pornhub search scraper |
|---|---|---|
| Search by keyword | Yes | Yes |
| Browse by category | Yes | Yes |
| Tag-based search | Yes (tags) | Sometimes |
| Pornstar / model / channel source | Yes (all three) | Rarely |
| Sort (recent, viewed, rated, longest) | Yes | Partial |
| Time window filter | Yes | Sometimes |
Numeric videoId + alphanumeric viewkey | Both | video_id only |
Straight / gay / trans segment | Yes | Sometimes |
| Exact views and likes (detail page) | Yes | Listing approximations |
| Up votes, plus rating % and down votes when exposed | Yes | Rating only |
| Comment count when exposed | Yes | No |
| Categories and tags per video | Yes | Yes |
| Pornstars credited per video | Yes | Sometimes |
| HD / VR / premium flags | Yes | No |
| Upload date (ISO 8601) | Yes | Partial |
| Thumbnail + preview clip URL | Both | Thumbnail only |
| No API key, JSON / CSV / Excel export | Yes | Yes |
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 videos matching the search cars, each enriched with full detail.
{"maxVideos": 10,"withDetails": true,"searchQuery": "cars","sort": "relevance","proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Leave searchQuery empty and set a category, pornstar, model or channel instead. Turn withDetails off for a faster run that returns only the listing-level fields.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxVideos | integer | no | 10 | Maximum number of videos to collect. |
withDetails | boolean | no | true | Open each video page to add exact views, likes, upload date, description, categories and tags. Turn off for a faster listing-only run. |
searchQuery | string | no | cars | Keyword to search public videos for, for example yoga, gaming. Highest-priority source. |
category | enum | no | (any) | Browse a public category instead of searching (for example Amateur, MILF, Gaming, Podcast). Ignored when a search query is set. |
pornstar | string | no | (empty) | Public pornstar page slug, for example riley-reid from pornhub.com/pornstar/riley-reid. |
model | string | no | (empty) | Public model or verified amateur page slug, for example betty-cockup. |
channel | string | no | (empty) | Public channel page slug, for example brazzers from pornhub.com/channels/brazzers. |
tags | string[] | no | (none) | One or more tags, for example ["amateur", "pov"]. Added to your search query, or used on their own as the search terms. Ignored when a category, pornstar, model or channel source is set. |
sort | enum | no | relevance | Order of the listing: relevance, mostRecent, mostViewed, topRated, longest. |
period | enum | no | (all time) | Restrict to a recent time window (search and category sources): today, week, month, year. |
startPage | integer | no | 1 | Listing page number to start from. Useful for resuming or skipping ahead. |
proxy | object | no | Apify RESIDENTIAL, US | Proxy configuration. Pornhub geo-restricts and rate-limits datacenter IPs, so a residential proxy is required. |
When more than one source is filled, the first non-empty in the order above is used.
Output reference
One dataset item per video. Types: string, integer, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
title | string | Video title. |
url | string | Video page URL. |
viewkey | string | Pornhub viewkey (unique alphanumeric key per video). |
videoId | integer | Numeric internal video id, or null. |
segment | string | Site segment: straight, gay or trans, or null. |
durationSeconds | integer | Video duration in seconds. |
views | integer | View count. Exact when withDetails is on, approximate from the listing otherwise. |
likes | integer | Like count. Present when withDetails is on. |
votesUp | integer | Up votes. Present when withDetails is on. |
votesDown | integer | Down votes, when the page exposes them (may be null). |
ratingPercent | integer | Thumbs-up rating percentage (0 to 100), when the page exposes it (may be null). |
ratingsCount | integer | Total votes (up plus down), when both are exposed (may be null). |
commentsCount | integer | Number of comments, when the page exposes it (may be null). |
isHD | boolean | Whether the video is HD. Resolved from categories when withDetails is on; null if unknown at listing level. |
isVR | boolean | Whether the video is virtual reality. Resolved when withDetails is on; null if unknown at listing level. |
isPremium | boolean | Whether the video is a premium listing. |
uploader | string | Uploader display name. |
uploaderUrl | string | Uploader page URL. |
uploaderType | string | Uploader type, for example model, pornstar, channel. |
uploadedAt | string | Upload date (ISO 8601). Present when withDetails is on. |
addedAgo | string | Relative upload label as shown on the page. |
thumbnail | string | Thumbnail image URL. |
previewVideoUrl | string | Short preview clip URL, or null. |
description | string | Full video description. Present when withDetails is on. |
pornstars | string[] | Pornstars credited on the video, or null. |
categories | string[] | Categories the video is listed under. Present when withDetails is on. |
tags | string[] | Tags on the video. Present when withDetails is on. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, an item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQuery": "cars", "sort": "mostViewed", "withDetails": true, "maxVideos": 6}):
{"title": "When She Can't Stop Shaking - Orgasm Compilation","url": "https://www.pornhub.com/view_video.php?viewkey=68986ff31c005","viewkey": "68986ff31c005","videoId": 472981815,"segment": "straight","durationSeconds": 689,"views": 18171553,"likes": 29478,"votesUp": 29478,"isHD": true,"isVR": false,"isPremium": false,"uploader": "BootyFrutti Juicy Bits","uploaderType": "model","uploadedAt": "2025-08-10T10:19:37+00:00","pornstars": ["BootyFrutti"],"categories": ["Amateur","Big Ass","Compilation","Female Orgasm","HD Porn","Verified Amateurs"],"tags": ["amateur", "homemade", "orgasm", "female orgasm", "big ass"],"observedAt": "2026-09-04T10:04:50.000Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~pornhub-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"cars","sort":"mostViewed","maxVideos":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~pornhub-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"channel":"brazzers","sort":"topRated","maxVideos":100}'
Apify CLI:
apify call scrapers_lat/pornhub-scraper \--input '{"category":"131","sort":"mostRecent"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per video returned (
resultevent). See the pricing tab for the current per-result price. - Optional detail add-on. When
withDetailsis on, each video that is successfully enriched from its detail page also charges a smalldetailsadd-on on top of the result. TurnwithDetailsoff to pay the listing price only. - No charge on failure. If a run errors, the actor writes an item with a populated
errorfield and does not charge for it. A video whose detail page cannot be fetched is returned at listing level and is not charged the detail add-on. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 videos per run. Upgrade for higher
maxVideos. - Residential proxy required. Pornhub geo-restricts and rate-limits datacenter IPs. Keep the default Apify residential proxy configuration.
FAQ and troubleshooting
A run returned 0 records. Why?
The keyword or slug matched nothing, or the proxy could not reach the site. Try a broader searchQuery, confirm the pornstar, model or channel slug, and keep the residential proxy on. Zero-result runs are not charged.
Which source is used when I fill more than one?
The first non-empty in this order: searchQuery, category, pornstar, model, channel. The rest are ignored.
Why is addedAgo sometimes an odd value like "56 years ago"?
That relative label is taken directly from the page and can be inaccurate at the source. Use uploadedAt (present when withDetails is on) for the exact upload date.
How do I get exact view and like counts?
Keep withDetails on. The listing shows approximate values; the detail page provides exact views, likes, uploadedAt, categories and tags.
Why is pornstars null?
No pornstar was credited on that video. Missing source values are returned as null, never invented.
Can I filter by tags?
Yes. Set tags to one or more tags, for example ["amateur", "pov"]. They are added to your searchQuery, or used on their own as the search terms when no other source is set.
What do isHD, isVR, isPremium and segment mean?
isHD, isVR and isPremium are booleans flagging high-definition, virtual-reality and premium listings. segment is the site section the video belongs to (straight, gay or trans).
Do you need an API key? No. The actor needs no Pornhub account, API key or login. Only your Apify token to start a run.
Is this an official Pornhub tool? No. This actor is independent and has no affiliation with Pornhub or Aylo. It reads only public metadata and does not download any media.
Related scrapers
- Chaturbate Scraper: live cam room metadata.
- CamSoda Scraper: live cam model metadata.
- Cam4 Scraper: live broadcaster metadata.
- Clips4Sale Scraper: clip listings and studios.
- Fansly Profile Scraper: creator profile metadata.
- BongaCams Scraper: live cam model metadata.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Pornhub or Aylo. Accesses only publicly available metadata and downloads no media.
