Pornhub Video Metadata & Search Scraper
Pricing
from $6.15 / 1,000 results
Pornhub Video Metadata & Search Scraper
Scrape public Pornhub video listings from search, category, pornstar, model and channel pages: title, views, duration, likes, tags, categories and uploader.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
0
Monthly active users
21 hours ago
Last modified
Categories
Share
Pornhub Video Metadata & Search Scraper
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": "Mi madrastra me pide ayuda con sus redes sociales y me aprovecho para hacerle sentir mi enorme polla.","url": "https://www.pornhub.com/view_video.php?viewkey=6a565cffa7e67","viewkey": "6a565cffa7e67","durationSeconds": 902,"views": 603760,"likes": 1552,"votesUp": 1552,"uploader": "Kenay Timmy","uploaderUrl": "https://www.pornhub.com/model/kenay-timmy","uploaderType": "model","uploadedAt": "2026-07-14T18:28:03+00:00","addedAgo": "56 years ago","thumbnail": "https://pix-cdn77.phncdn.com/c6371/videos/202607/14/55505675/original_55505675.mp4/plain/ex:1:no/bg:0:0:0/rs:fit:320:180/vts:868?hash=Ln-s2IASSeNmSjMXKqQvH9qEenk=&validto=1786457292","previewVideoUrl": "https://ew.phncdn.com/c6251/videos/202607/14/55505675/180P_225K_55505675.webm?validfrom=1786367292&validto=1786374492&rate=113k&burst=260k&ipa=1&hash=jROIkg%2FhiT5qNXivQGSKlo8QR44%3D","description": "Watch Mi madrastra me pide ayuda con sus redes sociales... in Spanish on Pornhub.com [trimmed]","pornstars": ["Kathy Jay"],"categories": ["18-25","Amateur","Anal","Big Ass","Big Tits","Cumshot","HD Porn","Latina"],"tags": ["amateur teenagers","18 year old latina","real couple homemade","amateur anal","homemade","squirting"],"observedAt": "2026-08-10T14:16:48.583Z","error": null}
The most complete Pornhub metadata scraper available. It returns every field a public video listing and detail page expose, including exact view and like counts, duration, uploader, upload date, description, pornstars, categories and tags, and lets you scrape by search keyword, category, pornstar, model or channel.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- 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. Order the listing with sort and narrow with period.
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. |
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 per video). |
durationSeconds | integer | Video duration in seconds. |
views | integer | Exact view count. Exact when withDetails is on. |
likes | integer | Like count. Present when withDetails is on. |
votesUp | integer | Up votes. Present when withDetails is on. |
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", "withDetails": true, "maxVideos": 10}):
{"title": "Hot german girl needs it so bad she fucks her cars gearstick & creampies all over it🔥","url": "https://www.pornhub.com/view_video.php?viewkey=67c487031bfdc","viewkey": "67c487031bfdc","durationSeconds": 702,"views": 2476668,"likes": 10554,"votesUp": 10554,"uploader": "EvieEvans1","uploaderUrl": "https://www.pornhub.com/model/evieevans1","uploaderType": "model","uploadedAt": "2025-03-02T16:39:51+00:00","addedAgo": "1 year ago","pornstars": null,"categories": ["60FPS","Amateur","Female Orgasm","German","HD Porn"],"observedAt": "2026-08-10T14:16:50.698Z","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. - No charge on failure. If a run errors, the actor writes an item with a populated
errorfield and does not charge for it. 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.
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.
