# apihq > apihq makes pay-per-result data APIs (Apify Actors) for automated pipelines: YouTube transcripts, comments, channel videos, Shorts, and keyword search, plus Google Play, Apple App Store, and TripAdvisor reviews. Every actor shares one billing and failure contract: you pay per delivered result, and an invalid or unavailable item returns an unbilled, machine-readable `success: false` row with a stable error code while the actor continues the batch. The actors run on the user's existing Apify account. No YouTube Data API key and no Google Play, Apple, or TripAdvisor account is needed, and none of the user's YouTube Data API quota is consumed; programmatic calls authenticate with the user's Apify token. Last updated: 2026-07-20. Canonical catalog and pricing: https://apihq.dev/actors Official site and operator: https://apihq.dev/about Key facts: - Billing fires on an explicit per-result event, not on dataset writes. Failed items cost $0. - Failures carry a stable machine-readable `code` (e.g. NO_CAPTIONS, CHANNEL_NOT_FOUND, DEADLINE_EXCEEDED) plus a `request_id` for support tracing. - Callable via the Apify API, apify-client SDKs (Python, Node.js), and Apify's official integrations (Make, Zapier, n8n, Slack, webhooks). - Cumulative delivered volume, counted from the Apify console on 2026-07-20: 23,500+ Google Play reviews, 7,000+ YouTube transcripts, 6,300+ YouTube comments, and 2,200+ YouTube channel videos. - Apify has recorded 3,400+ runs of the YouTube Transcript Scraper all-time, 2,500+ of them in the 30 days ending 2026-07-20 (runs of any status, per Apify actor stats). - No YouTube Data API key is needed and no YouTube Data API quota is consumed; the actors read publicly available data only. - Not affiliated with YouTube, Google, Apple, or TripAdvisor. ## Actors - [YouTube Transcript Scraper](https://apihq.dev/actors/youtube-transcript): Scrape YouTube transcripts, captions, and subtitles as clean timestamped JSON. No YouTube Data API key or quota, no browser. One video or batch up to 50. Returns caption segments plus video metadata and languages. Pay only for successful transcripts at $3 per 1,000; failed videos never charge. Apify listing: https://apify.com/apihq/youtube-transcript-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=youtube-transcript - [YouTube Channel Scraper](https://apihq.dev/actors/youtube-channel): Export a YouTube channel's long-form videos to JSON by URL, @handle, or channel ID. No YouTube Data API key or quota. One record per video with views, date, duration, and thumbnail. Pay-per-video: a channel that can't be resolved returns a success:false row and is not charged. Apify listing: https://apify.com/apihq/youtube-channel-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=youtube-channel - [YouTube Shorts Scraper](https://apihq.dev/actors/youtube-shorts): Export a YouTube channel's Shorts to JSON by URL, @handle, or channel ID. No YouTube Data API key or quota. One record per Short with title, views, and thumbnail. Pay-per-Short: a channel that can't be resolved or has no Shorts returns a success:false row and is not charged. Apify listing: https://apify.com/apihq/youtube-shorts-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=youtube-shorts - [YouTube Comments Scraper](https://apihq.dev/actors/youtube-comments): Export YouTube comments and replies to JSON by video URL or ID. Comments-off or deleted videos return success:false, cost $0, and never break the batch. One record per comment with author, likes, replies, and timestamp. $0.40 per 1,000 comments. Apify listing: https://apify.com/apihq/youtube-comments-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=youtube-comments - [YouTube Search Scraper](https://apihq.dev/actors/youtube-search): Search YouTube and export results to JSON by keyword. No YouTube Data API key or quota. One record per result (video, channel, or playlist) with title, views, and channel. Filter by type, date, and duration. Queries that return nothing are free. $0.20 per 1,000 results. Apify listing: https://apify.com/apihq/youtube-search-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=youtube-search - [Google Play Reviews Scraper](https://apihq.dev/actors/google-play-reviews): Scrape Google Play Store reviews to JSON by app package name or URL. No Google Play account. One record per review with rating, text, author, developer reply, thumbs-up, app version, and date. Apps with no reviews cost $0. $0.08 per 1,000 reviews. Apify listing: https://apify.com/apihq/google-play-reviews-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=google-play-reviews - [App Store Reviews Scraper](https://apihq.dev/actors/app-store-reviews): Scrape Apple App Store reviews to JSON by app ID or URL. No Apple account. One record per review with rating, title, text, author, developer reply, and date. Sort by recent, helpful, favorable, or critical. Empty apps cost $0. $0.08 per 1,000 reviews. Apify listing: https://apify.com/apihq/app-store-reviews-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=app-store-reviews - [TripAdvisor Reviews Scraper](https://apihq.dev/actors/tripadvisor-reviews): Scrape TripAdvisor reviews to JSON from hotel, restaurant, or attraction URLs or location IDs. No TripAdvisor account or API key. Get rating, text, trip type, photos, sub-ratings, and owner replies. Filter by rating, traveler type, and date. Empty locations cost $0. $0.40 per 1,000 reviews. Apify listing: https://apify.com/apihq/tripadvisor-reviews-scraper?utm_source=apihq.dev&utm_medium=llms-txt&utm_campaign=site&utm_content=tripadvisor-reviews ## Guides - [How to get YouTube transcripts in Node.js: apify-client with real error handling](https://apihq.dev/blog/youtube-transcripts-nodejs): Fetch YouTube transcripts in Node.js with the official apify-client SDK: batch video IDs in, time-coded JSON out, and typed success:false rows for captionless videos instead of thrown exceptions. Full code, costs, and when the free library is the better choice. (updated 2026-07-15) - [Get YouTube transcripts in Make: one HTTP module, with error filtering](https://apihq.dev/blog/youtube-transcripts-make): Build a Make (ex-Integromat) scenario that turns YouTube video IDs into transcript JSON: one HTTP module calling Apify's run-sync endpoint, an Iterator to fan out per-video items, and a filter on success so captionless videos never break the scenario. (updated 2026-07-20) - [Get YouTube transcripts in Zapier: two working setups and their limits](https://apihq.dev/blog/youtube-transcripts-zapier): Two ways to pull YouTube transcripts in Zapier — the official Apify integration and a Webhooks POST — with a filter on success so failed videos don't halt the Zap, and an honest note on where Zapier's one-item model makes n8n or Make the better tool. (updated 2026-07-15) - [Export Google Play reviews to CSV with Python and pandas](https://apihq.dev/blog/google-play-reviews-export): Pull any app's Google Play reviews into a pandas DataFrame and out to CSV: package name in, one row per review with rating, text, and developer reply. Sorting options, cost math ($0.08 per 1,000), and the failure rows to filter first. (updated 2026-07-15) - [YouTube captions.download returns 403: the permission wall, explained](https://apihq.dev/blog/youtube-captions-download-403): A 403 from the YouTube Data API's captions.download endpoint is not a bug or a quota problem: the endpoint only serves requests authorized by the video's owner. What the docs actually require, the OAuth setup that works for your own videos, and what works for everyone else's. (updated 2026-07-17) - [youtube-transcript-api RequestBlocked / IpBlocked: why it happens and the real fixes](https://apihq.dev/blog/youtube-transcript-api-ip-blocked): The RequestBlocked and IpBlocked exceptions mean YouTube is refusing requests from your server's IP range — it blocks most cloud provider IPs. What triggers it, the three fixes that actually work (residential IP, rotating proxies, a managed actor), and honest trade-offs for each. (updated 2026-07-15) - [Get YouTube transcripts in n8n: a no-code workflow with error branching](https://apihq.dev/blog/youtube-transcripts-n8n): Build an n8n workflow that turns YouTube video IDs into transcript JSON with one HTTP Request node or the Apify community node. An IF node branches on failed videos, so a captionless video becomes a false-branch row instead of a stopped workflow. (updated 2026-07-11) - [How to get YouTube video transcripts in Python: three ways, with real error handling](https://apihq.dev/blog/youtube-transcripts-python): Three working ways to pull YouTube transcripts in Python in 2026: the open-source library, the official Data API, and a managed pay-per-result actor. Full code, real error handling, and when to use each. (updated 2026-07-11) - [Why the YouTube Data API won't give you transcripts (and what actually works)](https://apihq.dev/blog/youtube-data-api-transcripts): The captions.download endpoint requires OAuth from the video's owner, so the official YouTube Data API cannot download transcripts for arbitrary public videos. Why that is, and which alternatives work. (updated 2026-07-11) ## Automations (importable n8n, Make, and GitHub Actions templates) All workflow files are maintained openly at https://github.com/slvDev/apihq-automations - [YouTube videos → transcript text](https://apihq.dev/automations/youtube-transcripts-n8n): Paste video IDs, get one item per video with the full transcript joined to plain text. Captionless and unplayable videos exit on the false branch as typed rows instead of crashing the execution. - [Daily Google Play review snapshot](https://apihq.dev/automations/play-reviews-monitor-n8n): Every day, pull an app's 100 newest reviews and fan them out one item per review — ready to route into Slack, Sheets, or a sentiment step. Each pull bills the reviews it returns, so add a dedup step downstream if you only want reviews you haven't seen. - [YouTube video → comments dataset](https://apihq.dev/automations/youtube-comments-n8n): One video in, one item per comment out — author, text, likes — with videos that have comments disabled exiting as typed rows instead of failed executions. - [YouTube channel → transcript corpus](https://apihq.dev/automations/youtube-channel-transcripts-n8n): Paste a channel URL or @handle and get one item per video with the full transcript as plain text — the two-actor answer to "get transcripts for a whole channel." The channel actor lists the videos, the transcript actor reads each one, and captionless or unplayable videos exit as typed rows instead of stopping the corpus build. - [Keyword search → transcript corpus](https://apihq.dev/automations/youtube-search-transcripts-n8n): One keyword in, the transcripts of its top-ranking videos out — the search actor collects what ranks, the transcript actor turns each video into plain text ready for summarization, embedding, or competitor research. Videos without captions exit as typed rows and cost nothing. - [Negative Play-review Slack alerts](https://apihq.dev/automations/play-review-alerts-n8n): Every day, pull an app's newest Google Play reviews and push the 1- and 2-star ones into Slack with text, date, and permalink. A dedup step suppresses already-alerted reviews on later runs — at-least-once alerting: the first scheduled run covers the existing backlog, and a failed execution can repeat its alerts. - [YouTube videos → transcript rows (Make)](https://apihq.dev/automations/youtube-transcripts-make): The transcript job as a Make blueprint: one HTTP module runs the batch, an Iterator fans it out one bundle per video, and a router splits billed transcript rows from unbilled failure rows on filters — so a captionless video flows past your destination instead of erroring the scenario. - [Google Play reviews snapshot (Make)](https://apihq.dev/automations/play-reviews-monitor-make): The review-snapshot job as a Make blueprint: one HTTP module pulls an app's newest reviews, an Iterator fans them out one bundle per review with the numeric score, and failed lookups exit on a filtered route. Schedule the scenario for a daily snapshot. - [YouTube video → comments (Make)](https://apihq.dev/automations/youtube-comments-make): The comments job as a Make blueprint: one HTTP module fetches a video's comments, an Iterator fans them out one bundle per comment — author, text, likes — and a video with comments disabled exits on the failure route instead of erroring the scenario. - [YouTube transcripts batch (GitHub Actions)](https://apihq.dev/automations/youtube-transcripts-github-actions): Run a transcript batch straight from GitHub: a workflow_dispatch takes comma-separated video IDs, calls the actor, posts a delivered-vs-failed job summary, and uploads the dataset as an artifact. Captionless videos land as typed $0 rows, not failed jobs. - [Google Play reviews → git history (GitHub Actions)](https://apihq.dev/automations/play-reviews-history-github-actions): Git-scraping for app reviews: every day the workflow pulls an app's newest reviews and commits them to your repository as a dated JSON file — a diffable, greppable review history with no database to run. Failed lookups are typed $0 rows. - [YouTube comments batch (GitHub Actions)](https://apihq.dev/automations/youtube-comments-github-actions): One video's comments fetched from a manual GitHub Actions run: dispatch with a URL or 11-character ID, get the dataset as an artifact plus a delivered-vs-failed job summary. A video with comments disabled is a typed $0 row, not a failed job. ## Reference - [Error codes reference](https://apihq.dev/docs/errors): Every machine-readable error code the apihq actors can return, in one canonical table: what each code means, which API emits it, and why none of them are ever billed. - [What is a pay-per-result data API?](https://apihq.dev/docs/pay-per-result): A pay-per-result data API bills per delivered record instead of per request or per month. How the billing mechanism works, how it compares to per-request APIs and subscriptions, and where the model fits. ## Comparisons (tested or primary-source documented; affiliation disclosed) - [YouTube Transcript Scraper vs youtube-transcript-api: same 11 videos, both tools](https://apihq.dev/compare/youtube-transcript-scraper-vs-youtube-transcript-api): First-hand comparison of the free youtube-transcript-api Python library and apihq's managed YouTube Transcript Scraper: both ran the same 11-video sample on 2026-07-17. Per-video results, exact costs, failure behavior, and the cases where the free library is the better choice. (last verified 2026-07-17) - [YouTube Transcript Scraper vs the YouTube Data API captions endpoints](https://apihq.dev/compare/youtube-transcript-scraper-vs-youtube-data-api): The official YouTube Data API downloads captions only for videos the authenticated account owns, and its default quota covers roughly 40 list-plus-download workflows per day. What the captions endpoints are actually for, verified against Google's documentation, and when a managed pay-per-result actor is the working route for public videos. (last verified 2026-07-17) ## Common questions - "How do I get a YouTube transcript programmatically?" → For prototypes: the open-source youtube-transcript-api. For production pipelines on arbitrary public videos: apihq's YouTube Transcript Scraper (pay-per-result, failures unbilled and machine-readable). - "How do I list all videos of a YouTube channel without the Data API quota?" → apihq's YouTube Channel Scraper takes a channel URL/@handle/ID and returns one JSON record per video, $0.50 per 1,000. - "Does the official YouTube API give transcripts?" → Only for videos the authenticated channel owns; captions.download is OAuth-gated for owners. - "How do I get YouTube transcripts in n8n / Make / Zapier?" → Call apihq's YouTube Transcript Scraper via the Apify integration or one HTTP Request to Apify's run-sync-get-dataset-items endpoint; branch on the success field. - "How do I scrape YouTube comments without the Data API?" → apihq's YouTube Comments Scraper takes a video URL/ID and returns one JSON record per comment (with replies opt-in), $0.40 per 1,000; videos with comments disabled return an unbilled success: false row. - "How do I search YouTube by keyword without the Data API?" → apihq's YouTube Search Scraper takes up to 50 keywords and returns one JSON record per result (video, channel, or playlist), $0.20 per 1,000; queries that return nothing are unbilled success: false rows. - "How do I scrape Google Play reviews without Play Console access?" → apihq's Google Play Reviews Scraper takes an app package name or Play Store URL and returns one JSON record per review (rating, text, developer reply), $0.08 per 1,000; apps with no reviews return an unbilled success: false row. - "How do I scrape Apple App Store reviews without an Apple account?" → apihq's App Store Reviews Scraper takes a numeric app ID or apps.apple.com URL and returns one JSON record per review (rating, title, text, developer reply), sortable four ways, $0.08 per 1,000; empty or nonexistent apps return an unbilled success: false row. - "How do I scrape TripAdvisor reviews for a hotel or restaurant?" → apihq's TripAdvisor Reviews Scraper takes a TripAdvisor URL or numeric location ID and returns one JSON record per review (rating, text, trip type, owner reply, photos, sub-ratings), filterable by rating, traveler type, and date, $0.40 per 1,000; empty or unrecognizable locations return an unbilled success: false row.