Skip to content
Docs

Channel Analysis API

REST API reference for deep-dive YouTube channel analysis using a job-based async API — channel performance metrics, content strategy insights, audience demographics, and revenue data.

Deep-dive YouTube channel analysis via a job-based async API — performance metrics, content strategy insights, audience demographics, and revenue data.

Base URL: https://prod.dashboard.nexlev.io — see Authentication.

How It Works

The Channel Analysis API uses a two-step workflow:

  1. Create Analysis Job - Submit a channel ID to start the analysis process
  2. Get Analysis Result - Retrieve the completed analysis using the job ID

This asynchronous approach allows for complex data processing without timeout issues.

  1. Create Channel Analysis Job

    GET /api/external/channels/analysis/job/create

    Description: Create a new channel analysis job. The analysis will be processed asynchronously and you can retrieve the results using the returned job_id.

    Query Parameters: channel_id (required) - The YouTube channel ID to analyze

    cURL Example:

    curl "https://prod.dashboard.nexlev.io/api/external/channels/analysis/job/create?channel_id=UCBJycsmduvYEL83R_U4JriQ" \
      -H "Authorization: Bearer YOUR_API_KEY"

    Status Code: 200 OK

    Response Body:

    [
      {
        "job_id": "5558e178-4210-40c6-a776-d4b45f546dd4",
        "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
        "cached": false,
        "message": "Job created successfully"
      }
    ]

    Response Fields:

    • job_id - Unique identifier for the analysis job
    • channel_id - The channel ID that was submitted for analysis
    • cached - Whether the result was found in cache (if true, instant)
    • message - Status message about the job creation
  2. Get Channel Analysis Result

    GET /api/external/channels/analysis/job/status

    Description: Retrieve the status and results of a channel analysis job. Returns the complete analysis when the job is finished processing.

    Query Parameters: job_id (required) - The job ID returned from the Create Job request

    cURL Example:

    curl "https://prod.dashboard.nexlev.io/api/external/channels/analysis/job/status?job_id=5558e178-4210-40c6-a776-d4b45f546dd4" \
      -H "Authorization: Bearer YOUR_API_KEY"

    Status Code: 200 OK

    Response Body:

    The response contains comprehensive channel analysis data organized into multiple strategic sections:

    {
      "job_id": "5558e178-4210-40c6-a776-d4b45f546dd4",
      "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
      "status": "completed",
      "progress": 100,
      "cached": true,
      "result": {
        "job_id": "5558e178-4210-40c6-a776-d4b45f546dd4",
        "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
        "project": "extension_channel_analysis",
        "completed_at": "2025-12-01T13:53:04.584446",
        "channel_data": {
          "channel_info": {
            "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
            "title": "Marques Brownlee",
            "avatar_url": "https://yt3.googleusercontent.com/...",
            "subscriberCount": 20600000,
            "videosCount": 1783,
            "country": "United States",
            "channel_type": "mixed",
            "viewCount": 5127779625
          },
          "metrics": {
            "average_video_length": 99.34,
            "average_monthly_views": 4189904.55,
            "average_monthly_uploads": 88.39,
            "average_views_per_video": 47399.8,
            "last_upload_date": "2009-12-04T00:00:00Z",
            "first_upload_date": "2008-03-29T01:03:44Z"
          }
        },
        "strategic_insights": {
          "channel_overview": {
            "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
            "channel_name": "Marques Brownlee",
            "subscriber_count": 20600000,
            "analysis_timestamp": 1764597169.7445457
          },
          "content_strategy": {
            "content_buckets": [
              {
                "bucket_name": "Smartphone Reviews & Impressions",
                "bucket_description": "Reviews, impressions, and discussions about smartphones",
                "confidence_score": 0.95,
                "video_count": 40,
                "videos": [...],
                "median_views": 4264080,
                "total_views": 171452808
              }
            ],
            "total_buckets": 6
          },
          "title_format_strategy": {
            "format_groups": [
              {
                "format_name": "iPhone [VERSION] [TYPE] Impressions: [CLAIM]",
                "format_description": "Titles featuring iPhone model followed by commentary",
                "video_count": 10,
                "videos": [...],
                "median_views": 4381283.5,
                "total_views": 60130063
              }
            ],
            "top_performing_format": "iPhone [VERSION] [TYPE] Impressions: [CLAIM]"
          },
          "audience_insights": {
            "viewer_feedback": {
              "what_viewers_liked": [
                {
                  "point_id": 1,
                  "feedback_category": "Entertainment",
                  "feedback_point": "Humor and Personality",
                  "description": "Viewers appreciated the humorous and engaging personality",
                  "confidence_score": 0.9,
                  "supporting_comments_count": 5
                }
              ],
              "what_viewers_disliked": [...]
            },
            "sentiment_summary": {
              "total_comments_analyzed": 100,
              "total_videos_covered": 20,
              "overall_sentiment": "positive",
              "engagement_level": "high"
            }
          },
          "performance_analysis": {
            "metrics": {
              "average_video_length_minutes": 13.19,
              "average_title_length_characters": 37.9
            },
            "top_performing_videos": {
              "average_length_minutes": 11.2,
              "average_title_characters": 33.6,
              "most_common_hook_type": "Controversial Statement",
              "most_common_narrative_arc": "Setup–Conflict–Resolution",
              "video_count": 5
            },
            "comparison_insights": {...}
          },
          "script_blueprint": {
            "based_on": "Top performing videos analysis",
            "recommended_stages": [
              {
                "stage": "Hook",
                "purpose": "To grab the audience's attention and spark curiosity",
                "recommended_length_seconds": 30,
                "winning_formula": "Beginning with [SHOCKING_CLAIM] about [CONTROVERSIAL_TOPIC]",
                "successful_examples": [...]
              }
            ]
          },
          "ai_strategic_analysis": {
            "strategic_recommendations": {
              "performance_patterns": "Detailed analysis of performance patterns...",
              "content_formula_discovery": "Winning content templates...",
              "audience_behavior_insights": "Sentiment analysis insights...",
              "strategic_opportunities": "Actionable recommendations..."
            }
          },
          "suggested_topics": {
            "topics": [
              {
                "title": "The Smart Glasses Dilemma",
                "description": "Exploring challenges and market viability of smart glasses"
              }
            ],
            "total_topics": 10
          },
          "niche_analysis": {
            "future_competition_score": 99,
            "niche_score": null
          }
        }
      }
    }

    Top-Level Response Fields:

    • job_id - Unique identifier for the analysis job (same value you passed as job_id)
    • channel_id - The channel ID that was analyzed
    • status - Job processing status (e.g. "completed", "processing")
    • progress - Completion percentage (0-100)
    • cached - Whether this result was served from cache
    • result.project - Internal analysis pipeline identifier
    • result.completed_at - ISO 8601 timestamp of when the analysis finished
    • result.channel_data / result.strategic_insights - The full analysis payload — see the breakdown below

    Response Structure Explained

    The Channel Analysis response is organized into several key sections:

    SectionDescriptionUse Case
    channel_dataBasic channel information and performance metricsUnderstanding channel size and output
    strategic_insights.content_strategyContent categorization with 6+ content bucketsIdentify successful content themes
    strategic_insights.title_format_strategyAnalysis of winning title patternsOptimize your video titles
    strategic_insights.audience_insightsViewer sentiment from 100+ commentsUnderstand what resonates with audiences
    strategic_insights.performance_analysisTop vs bottom video comparisonsLearn what makes videos succeed
    strategic_insights.script_blueprint5-stage video structure recommendationsCreate better-structured content
    strategic_insights.ai_strategic_analysisAI-powered growth recommendationsIdentify strategic opportunities
    strategic_insights.suggested_topics10 AI-generated video topic ideasNever run out of content ideas
    strategic_insights.niche_analysisCompetition scoring (0-100)Assess niche viability

    Key Metrics Explained

    • Content Buckets: Videos grouped by theme with confidence scores (0-1)
    • Format Groups: Title patterns with performance data and match scores
    • Viewer Feedback: Categorized likes/dislikes with confidence scores
    • Script Blueprint: Stage-by-stage content structure with timing recommendations
    • Competition Score: 0-100 score indicating future competition level (higher = more competitive)

Error Responses

Status Code: 400 Bad Request

Description: The request was invalid or malformed.

{
  "error": {
    "code": 400,
    "message": "Invalid channel ID format",
    "details": "Channel ID must be a valid YouTube channel identifier"
  }
}

Rate Limits

  • Create Job: 100 requests per hour per API key
  • Get Result: 500 requests per hour per API key
  • Cached Results: Do not count against rate limits

Last updated