---
title: "Channel Analysis API"
description: "Deep-dive YouTube channel analysis via a job-based async API — performance metrics, content strategy insights, audience demographics, and revenue data."
source: "https://dashboard.nexlev.io/docs/api/channel-analysis"
---

# Channel Analysis API

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](/docs/api/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.

## Create Channel Analysis Job

```http
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**:

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

> **Warning**
>
> 🥞 **Quota Cost: 20 quota per request** — see [Rate Limits &
> Quota](/docs/api/rate-limits).

**Status Code**: `200 OK`

**Response Body**:

```json
[
  {
    "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

## Get Channel Analysis Result

```http
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**:

```bash
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"
```

> **Warning**
>
> 🥞 **Quota Cost: 1 quota per request** — see [Rate Limits &
> Quota](/docs/api/rate-limits).

**Status Code**: `200 OK`

**Response Body**:

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

```json
{
  "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:

| Section                                    | Description                                       | Use Case                                 |
| ------------------------------------------ | ------------------------------------------------- | ---------------------------------------- |
| `channel_data`                             | Basic channel information and performance metrics | Understanding channel size and output    |
| `strategic_insights.content_strategy`      | Content categorization with 6+ content buckets    | Identify successful content themes       |
| `strategic_insights.title_format_strategy` | Analysis of winning title patterns                | Optimize your video titles               |
| `strategic_insights.audience_insights`     | Viewer sentiment from 100+ comments               | Understand what resonates with audiences |
| `strategic_insights.performance_analysis`  | Top vs bottom video comparisons                   | Learn what makes videos succeed          |
| `strategic_insights.script_blueprint`      | 5-stage video structure recommendations           | Create better-structured content         |
| `strategic_insights.ai_strategic_analysis` | AI-powered growth recommendations                 | Identify strategic opportunities         |
| `strategic_insights.suggested_topics`      | 10 AI-generated video topic ideas                 | Never run out of content ideas           |
| `strategic_insights.niche_analysis`        | Competition 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

### Bad Request

**Status Code**: `400 Bad Request`

**Description**: The request was invalid or malformed.

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

### Unauthorized

**Status Code**: `401 Unauthorized`

**Description**: Authentication credentials are missing or invalid.

```json
{
  "error": {
    "code": 401,
    "message": "Unauthorized",
    "details": "Invalid API key or credentials not provided"
  }
}
```

### Not Found

**Status Code**: `404 Not Found`

**Description**: The job ID was not found or the analysis is still processing.

```json
{
  "error": {
    "code": 404,
    "message": "Job not found or still processing",
    "details": "Please wait a moment and try again. Analysis jobs typically complete within 30-120 seconds."
  }
}
```

### Rate Limit

**Status Code**: `429 Too Many Requests`

**Description**: You have exceeded your API rate limit.

```json
{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded",
    "details": "You have exceeded your API quota. Please try again later.",
    "retryAfter": 3600
  }
}
```

## 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
