Skip to main content
Glama

HirePulse: Jobs, Ads, SEO, YouTube & AliExpress Data Tools

hirepulse/youtube-transcript-scraper

hirepulse--youtube-transcript-scraper
Destructive

This tool calls the Actor "hirepulse/youtube-transcript-scraper" and retrieves its output results. Actor description: Extract YouTube transcripts in bulk from videos, Shorts and live replays with accessible captions. Export clean text, caption language and optional timestamps for RAG, summaries and content research. No YouTube API key; works with n8n, Make and Apify MCP.

Input Schema

NameRequiredDescriptionDefault
videosYes**REQUIRED** Required. YouTube video URLs or 11-character video IDs, one per item, up to 1,000 per run. Regular links, youtu.be links, Shorts, embeds and live links all work. Example: ["https://youtu.be/jNQXAC9IVRw"]. Each delivered transcript is one charged result; videos without captions are not charged. Example values: ["https://youtu.be/jNQXAC9IVRw"]
languageNoPreferred caption language as a two-letter code. Example: "es". If the video has captions in it they are used; otherwise the main captions are returned and the language field says which. Leave empty for the main captions.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
use_paid_upstreamNoOff by default. Supported paid sources also require the owner-controlled HIREPULSE_ALLOW_PAID_UPSTREAM=1 environment setting. Keep false for all quality and smoke checks.
include_timestampsNoAdd a segments array with the start time, duration and text of every caption line. Default: false, which keeps the output small.

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "channel": {
      +      "type": "string"
      +    },
      +    "duration_seconds": {
      +      "type": "number"
      +    },
      +    "is_auto_generated": {
      +      "type": "boolean"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "null"
      +    },
      +    "segments": {
      +      "items": {
      +        "properties": {
      +          "duration": {
      +            "type": "number"
      +          },
      +          "start": {
      +            "type": "number"
      +          },
      +          "text": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "transcript": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "video_id": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / description
      Previous value: -"Give a list of YouTube videos and get the transcript of each one as clean text, with optional timestamps."New value: +"Turn YouTube videos into text for RAG, research and content workflows. Submit video URLs or IDs and retrieve available captions with optional timestamps. The Actor retrieves accessible captions; it does not transcribe audio or guarantee captions for every video. Unavailable, blocked, deleted or captionless videos return explained outcomes. Language availability depends on YouTube."
    • changedInput schema / title
      Previous value: -"YouTube Transcript Scraper input"New value: +"YouTube Transcript Scraper: Bulk Videos, Shorts & Timestamps input"
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "channel": {
      -      "type": "string"
      -    },
      -    "duration_seconds": {
      -      "type": "number"
      -    },
      -    "is_auto_generated": {
      -      "type": "boolean"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "null"
      -    },
      -    "segments": {
      -      "items": {
      -        "properties": {
      -          "duration": {
      -            "type": "number"
      -          },
      -          "start": {
      -            "type": "number"
      -          },
      -          "text": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "transcript": {
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "video_id": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  3. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "channel": {
      +      "type": "string"
      +    },
      +    "duration_seconds": {
      +      "type": "number"
      +    },
      +    "is_auto_generated": {
      +      "type": "boolean"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "null"
      +    },
      +    "segments": {
      +      "items": {
      +        "properties": {
      +          "duration": {
      +            "type": "number"
      +          },
      +          "start": {
      +            "type": "number"
      +          },
      +          "text": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "transcript": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "video_id": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed5 schema fields changed
    • addedInput schema / properties / use_paid_upstream
      Added value: +{
      +  "default": false,
      +  "description": "Off by default. Supported paid sources also require the owner-controlled HIREPULSE_ALLOW_PAID_UPSTREAM=1 environment setting. Keep false for all quality and smoke checks.",
      +  "prefill": false,
      +  "title": "Allow external paid upstream (owner opt-in)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / videos / description
      Previous value: -"**REQUIRED** Required. YouTube video URLs or 11-character video IDs, one per item, up to 1,000 per run. Regular links, youtu.be links, Shorts, embeds and live links all work. Example: [\"https://youtu.be/jNQXAC9IVRw\"]. Each delivered transcript is one charged result; videos without captions are not charged.\nExample values: [\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\"https://youtu.be/jNQXAC9IVRw\"]"New value: +"**REQUIRED** Required. YouTube video URLs or 11-character video IDs, one per item, up to 1,000 per run. Regular links, youtu.be links, Shorts, embeds and live links all work. Example: [\"https://youtu.be/jNQXAC9IVRw\"]. Each delivered transcript is one charged result; videos without captions are not charged.\nExample values: [\"https://youtu.be/jNQXAC9IVRw\"]"
    • changedInput schema / properties / videos / examples
      Previous value: -[
      -  "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
      -  "https://youtu.be/jNQXAC9IVRw"
      -]New value: +[
      +  "https://youtu.be/jNQXAC9IVRw"
      +]
    • changedInput schema / properties / videos / prefill
      Previous value: -[
      -  "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
      -  "https://youtu.be/jNQXAC9IVRw"
      -]New value: +[
      +  "https://youtu.be/jNQXAC9IVRw"
      +]
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "channel": {
      -      "type": "string"
      -    },
      -    "duration_seconds": {
      -      "type": "number"
      -    },
      -    "is_auto_generated": {
      -      "type": "boolean"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "null"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "transcript": {
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "video_id": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  5. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "channel": {
      +      "type": "string"
      +    },
      +    "duration_seconds": {
      +      "type": "number"
      +    },
      +    "is_auto_generated": {
      +      "type": "boolean"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "null"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "transcript": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "video_id": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "channel": {
      -      "type": "string"
      -    },
      -    "duration_seconds": {
      -      "type": "number"
      -    },
      -    "is_auto_generated": {
      -      "type": "boolean"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "null"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "transcript": {
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "video_id": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  7. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "channel": {
      +      "type": "string"
      +    },
      +    "duration_seconds": {
      +      "type": "number"
      +    },
      +    "is_auto_generated": {
      +      "type": "boolean"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "null"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "transcript": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "video_id": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "channel": {
      -      "type": "string"
      -    },
      -    "duration_seconds": {
      -      "type": "number"
      -    },
      -    "is_auto_generated": {
      -      "type": "boolean"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "null"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "transcript": {
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "video_id": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  9. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "channel": {
      +      "type": "string"
      +    },
      +    "duration_seconds": {
      +      "type": "number"
      +    },
      +    "is_auto_generated": {
      +      "type": "boolean"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "null"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "transcript": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "video_id": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  10. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "channel": {
      -      "type": "null"
      -    },
      -    "duration_seconds": {
      -      "type": "null"
      -    },
      -    "is_auto_generated": {
      -      "type": "null"
      -    },
      -    "language": {
      -      "type": "null"
      -    },
      -    "note": {
      -      "type": "string"
      -    },
      -    "status": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "null"
      -    },
      -    "transcript": {
      -      "type": "null"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "video_id": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  11. Changed7 schema fields changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel / type
      Previous value: -"string"New value: +"null"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / duration_seconds / type
      Previous value: -"number"New value: +"null"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / is_auto_generated / type
      Previous value: -"boolean"New value: +"null"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / language / type
      Previous value: -"string"New value: +"null"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / note / type
      Previous value: -"null"New value: +"string"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
      Previous value: -"string"New value: +"null"
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / transcript / type
      Previous value: -"string"New value: +"null"
  12. First observed

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, destructive=true, openWorld=true, but the description adds context annotations cannot: no YouTube API key required, it does not transcribe audio, captions are not guaranteed, and unavailable/blocked/captionless videos return explained outcomes. That sets accurate expectations for output failures. It does not address the surprising destructiveHint=true or the fact that a run is started, which leaves a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence is pure boilerplate about invoking an Actor, and the tail includes marketing filler ('No YouTube API key; works with n8n, Make and Apify MCP'). The useful content — bulk extraction scope and the no-transcription caveat — is buried mid-text rather than front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full input schema, an output schema, and annotations already supplied, the description only needs to frame purpose and limits — which it does, including the caption-availability caveat and error outcomes. Only the run-lifecycle/polling implication is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the `videos` array, `language`, `waitSecs`, `use_paid_upstream` and `include_timestamps` all documented in detail including examples and charging semantics. The description adds nothing parameter-specific beyond 'optional timestamps,' so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The second sentence gives a specific verb and resource: 'Extract YouTube transcripts in bulk from videos, Shorts and live replays.' That is enough for an agent to distinguish it from siblings like google-jobs-scraper or ats-job-pulse. The first sentence is boilerplate ('calls the Actor ... and retrieves its output results') and does no differentiating work, but the net purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names target scenarios ('for RAG, summaries and content research') and mentions integration contexts (n8n, Make, Apify MCP), which implies when to reach for it. However, there is no explicit when-not guidance and no routing between this tool and siblings such as get-dataset-items or get-actor-run, which a caller may also need for long runs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.