Youtube Monetization Checker avatar
Youtube Monetization Checker

Pricing

$30.00/month + usage

Go to Apify Store
Youtube Monetization Checker

Youtube Monetization Checker

Check if YouTube videos or channel are monetized. This actor returns monetization status plus all the key information about the video/channel.

Pricing

$30.00/month + usage

Rating

0.0

(0)

Developer

AI Tools Max

AI Tools Max

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Find out if Monetization is On or Off for any YouTube channel, video, or Short — from URLs.

No user-provided API key required — this Actor works out of the box.

Quickstart (30 seconds)

  1. Paste YouTube URLs into the urls input.
  2. Run the Actor.
  3. Open the Dataset output and filter by monetizationLevel (or error.code).

Minimal input:

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/@MrBeast"
]
}

What you get per URL:

  • monetizationLevel: FULL | PARTIAL | NONE | UNKNOWN
  • isMonetized: true | false | null
  • data: detailed metrics for the video or channel (rich nested object)
  • metadata: response metadata (timestamps/version/requestId when present)
  • error: per-item error object when a URL can't be processed

Use Cases

  • Marketers: Analyze competitor monetization strategies
  • Content creators: Verify your content's monetization status
  • Researchers: Study YouTube monetization patterns at scale
  • Developers: Integrate monetization data into your workflows

Examples (Output)

Video example

{
"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"type": "VIDEO",
"id": "dQw4w9WgXcQ",
"isMonetized": true,
"monetizationLevel": "FULL",
"monetizationStatus": "ENABLED",
"data": {
"details": { "title": "...", "channelId": "UC...", "publishedAt": "..." },
"monetization": { "status": "ENABLED", "isMonetized": true, "isPartiallyMonetized": false },
"ads": { "adMetrics": { "totalAds": 12, "midRollCount": 11 } },
"revenue": { "revenue": { "estimated": 12345.67, "range": { "min": 10000, "max": 16000 } } }
},
"metadata": { "timestamp": "2026-01-06T12:00:00Z", "version": "1.0", "requestId": "req-..." }
}

Channel example (handle resolved to channel ID)

{
"inputUrl": "https://www.youtube.com/@MrBeast",
"type": "CHANNEL",
"id": "@MrBeast",
"resolvedChannelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"isMonetized": true,
"monetizationLevel": "FULL",
"monetizationStatus": "ENABLED",
"data": {
"details": { "channelId": "UC...", "channelTitle": "...", "country": "..." },
"subscriberCount": 350000000,
"videoCount": 850,
"revenue": { "revenue": { "estimated": 123456.78, "range": { "min": 100000, "max": 180000 } } }
},
"metadata": { "timestamp": "2026-01-06T12:00:00Z", "version": "1.0", "requestId": "req-..." }
}

Error example (invalid/unsupported URL)

{
"inputUrl": "https://www.youtube.com/playlist?list=...",
"type": null,
"id": null,
"isMonetized": null,
"monetizationLevel": "UNKNOWN",
"data": null,
"metadata": null,
"error": { "code": "INVALID_INPUT", "message": "..." }
}

Common workflows

  • Bulk audit: paste 100–1,000 competitor video/channel URLs and export results.
  • Watchlist: re-run daily/weekly and diff the dataset over time.
  • Lead qualification: check if a channel is monetized before outreach.
  • Automation: trigger runs via Apify API, then consume dataset items in your pipeline.

Features

  • Checks monetization status for YouTube videos, Shorts, and channels
  • Processes up to 10,000 URLs per run
  • Parallel processing (maxConcurrency 1–10) with a global 10 req/sec limiter
  • Detailed run summary in key-value store record OUTPUT
  • Per-URL error reporting (does not fail the whole run on bad inputs)

Input

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw",
"https://www.youtube.com/channel/UC-lHJZR3Gqxm24_Vd_AJ5Yw",
"https://www.youtube.com/@MrBeast"
],
"mode": null,
"maxConcurrency": 5,
"maxItems": 0
}

Input Fields

FieldRequiredDefaultDescription
urlsYes-YouTube URLs to check (max 10,000 URLs, each max 2,048 characters)
modeNonullRestrict to "video" or "channel" only. Leave empty for mixed URLs.
maxConcurrencyNo5Parallel processing (1-10). Higher = faster but more memory.
maxItemsNo0Limit URLs to process. 0 = unlimited.

Supported URL Formats

Videos:

  • youtube.com/watch?v=VIDEO_ID
  • youtu.be/VIDEO_ID
  • youtube.com/shorts/VIDEO_ID

Channels:

  • youtube.com/channel/UCXXXXXX (direct channel ID)
  • youtube.com/@handle (handle - resolved to channel ID)
  • youtube.com/c/customname (custom URL - resolved to channel ID)
  • youtube.com/user/username (legacy username - resolved to channel ID)

Unsupported URL Formats

  • youtube.com/channelname (direct path without prefix)
  • YouTube home page, playlists, search results

These return INVALID_INPUT error per item.

Output

Each input URL produces one dataset item:

{
"inputUrl": "https://www.youtube.com/@MrBeast",
"type": "CHANNEL",
"id": "@MrBeast",
"resolvedChannelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"isMonetized": true,
"monetizationLevel": "FULL",
"monetizationStatus": "ENABLED",
"data": { "subscriberCount": 350000000, "videoCount": 850 },
"metadata": { "fetchedAt": "2026-01-06T12:00:00Z" }
}

Output Fields

FieldDescription
inputUrlOriginal URL from input
typeVIDEO or CHANNEL
idVideo ID or channel identifier (handle/name/UC ID)
resolvedChannelIdResolved UC channel ID (only present for @handle, /c/, /user/ URLs)
isMonetizedtrue, false, or null
monetizationLevelFULL, PARTIAL, NONE, or UNKNOWN
monetizationStatusStatus string (e.g., ENABLED, LIMITED, PARTNER)
dataDetailed metrics for the video or channel (rich object or null)
metadataResponse metadata (timestamps/version/requestId when present) (object or null)
errorError object if failed, null if success

Monetization Levels

LevelMeaning
FULLFully monetized
PARTIALPartially monetized (video only)
NONENot monetized
UNKNOWNCannot determine (data missing or fetch failed)

Error Codes

CodeDescription
INVALID_INPUTURL malformed or not a YouTube URL
CHANNEL_ID_NOT_FOUNDHandle or channel name could not be resolved to a channel ID
MODE_MISMATCHURL type doesn't match mode field
BACKEND_AUTHAuthentication failed (401/403)
NOT_FOUNDContent not found (404)
RATE_LIMITEDToo many requests (429)
BACKEND_ERRORService error (5xx) or malformed response
NETWORK_ERRORConnection failure or timeout (30s)
PROCESSING_ERRORUnexpected internal processing error

Accuracy & revenue estimate disclaimer

  • Monetization status accuracy: In our internal benchmarking, the monetization status matched ground truth in ~99.6% of cases. Accuracy can vary by channel/video and may change over time as YouTube changes behavior and signals. If you need guaranteed results for a specific use case, validate with a small sample first.
  • Revenue estimation: If the returned payload includes any revenue-related fields, treat them as estimates only. Revenue depends on many factors (ad inventory, geography, language, category/CPM, niche, seasonality, viewer behavior, and more). Our algorithm estimates revenue by analyzing ad placement and contextual signals, but it can be inaccurate. Not financial advice.

FAQ

Why do channels sometimes take longer than videos? Channel checks can be heavier: the service may analyze recent videos and additional signals. Large channel lists will therefore take longer than the same number of video URLs.

What does UNKNOWN mean? The Actor couldn't determine monetization for that URL at this time (missing data, temporary service/network issues, or the content doesn't expose enough signals).

Will the run fail if some URLs are invalid? No. Invalid URLs produce a dataset item with error.code (e.g., INVALID_INPUT) and the run continues.

Run Summary (OUTPUT)

After each run, a summary is written to the key-value store as OUTPUT.

Location: Output tab in Apify Console, or https://api.apify.com/v2/key-value-stores/{storeId}/records/OUTPUT

{
"startedAt": "2026-01-04T10:00:00.000Z",
"finishedAt": "2026-01-04T10:00:05.000Z",
"durationMs": 5000,
"totalInput": 100,
"totalProcessed": 95,
"aborted": false,
"abortReason": null,
"byType": { "VIDEO": 80, "CHANNEL": 10, "null": 5 },
"byLevel": { "FULL": 60, "PARTIAL": 10, "NONE": 20, "UNKNOWN": 5 },
"byErrorCode": { "INVALID_INPUT": 3, "NOT_FOUND": 2 },
"config": { "mode": null, "maxItems": 0, "maxConcurrency": 5 }
}

Summary Fields

FieldDescription
totalInputURLs in input (before maxItems filter)
totalProcessedURLs actually processed
abortedWhether run was aborted early
abortReasonReason for abort (BACKEND_AUTH or PROCESSING_ERROR)
byTypeCount by URL type
byLevelCount by monetization level
byErrorCodeCount by error code

Limitations

  • Accuracy: Monetization status reflects data available at query time. Status can change.
  • Rate limit: 10 requests/second enforced. Large URL lists are processed accordingly.
  • Timeout: Requests timeout after 30 seconds (with automatic retry).
  • Handle resolution: Handles and custom names are resolved per-run. If a handle is renamed, cached results may be stale until next run.

Security & Privacy

  • No personal data stored: Only input URLs and returned public metrics are processed.
  • Public data only: Returns publicly available monetization information.
  • No tokens logged: Sensitive credentials are never written to logs or datasets.

Abort Behavior

The run may abort early in certain conditions:

BACKEND_AUTH: Authentication failure (401/403)

  • Stops scheduling new URLs
  • Completes in-flight requests
  • Writes OUTPUT summary
  • Fails the run

PROCESSING_ERROR: Unexpected exception

  • Writes OUTPUT summary
  • Rethrows error to fail the run

In both cases, OUTPUT is always written before failure, preserving statistics.