YouTube Embed Checker
Introduction
The Toollect YouTube Embed Checker answers a question that comes up every time someone adds video to a website: will this video actually play here, on my page? Paste a link and the tool checks the video against two public, keyless YouTube surfaces — the oEmbed endpoint and the embedded player — then tells you whether the video is embeddable, playable, missing, or restricted. No account, no API key, and no upload.
The trap it removes is the familiar one. You copy an embed code, drop it into your page, and later discover the video shows a grey player, a "Video unavailable" placeholder, or a "Watch on YouTube" prompt because the owner disabled embedding. By the time the embed is live, that is a support question. Checking first turns the same task into a two-second step.
The check runs entirely in your browser. The URL is parsed locally, the embed status is read from YouTube's public oEmbed endpoint, and a live embed loads on the page, paused on its first frame — never auto-played, never muted for you. Nothing is uploaded, stored, or tracked. The verdict appears alongside the video's title, channel, and duration, which the embed itself returns — no separate page, no scraper, no third-party service.
How It Works
The tool splits the question "can this be embedded and played" into three independent checks. Each one uses a public, keyless surface of YouTube, and all three run locally in your browser.
- Video ID extraction — the URL is parsed with the same pattern YouTube itself uses, recognizing watch links, youtu.be, Shorts, embed, and live URLs, plus a bare 11-character ID.
- Embed probe — the tool requests YouTube's oEmbed endpoint for the video. An embeddable video returns a small JSON object; a video whose owner forbids embedding returns an error. This is the same endpoint services use to auto-generate cards.
- Player check — the tool loads the embed player, paused on the first frame, and listens for its status. If the video is removed or restricted, the player fires an error code; if it loads cleanly, the title, channel, and duration come back from the player itself, and pressing play confirms playback live in the same frame.
None of this requires the official YouTube Data API. The player JavaScript loads on demand, needs no quota, and runs entirely in your browser — your pasted link never reaches a server controlled by this site.
A look at the two public surfaces
The oEmbed endpoint is a public, keyless API of YouTube. A single request like https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&format=json gives you the video's title, the channel name, and the thumbnail URL — or a clear refusal if the video cannot be embedded. Because it is a lightweight status probe, it answers in a single round-trip.
The player surface is the same one you use when you paste an iframe: YouTube loads a small IFrame Player on the page, and the player's status codes tell the rest of the story. A player that reaches its first frame without an error code is the evidence that the embed accepted the video, while a player that fires an error names the reason — not found, removed, or embedding-restricted. The preview stays paused on that first frame, exactly like a normal embed: nothing auto-plays, and the volume is whatever you set it to.
Use Cases
Beyond the obvious "is this link safe to paste," the tool fits into real workflows.
Web and app development
Developers embedding YouTube video in dashboards, landing pages, or apps often face broken embeds a day after launch. Adding a pre-flight check during content import — sitemap generation, CMS import, or a video recommendation — catches non-embeddable and removed videos before they reach users. The same oEmbed probe is easy to reuse as a one-liner in a build script.
Content rendering and marketing
Editors assembling promotional pages, newsletters, or knowledge-base articles want to link many videos without babysitting each embed. A quick batch of the tool, one URL at a time, flags the videos that will render as broken placeholders, so the list is shipped clean.
Research and archival triage
Journalists, archivists, and researchers tracking a video's availability across time can re-run the check and archive the result. The pattern "was embeddable, now error 100" is an early warning that the video was deleted — a useful fact in itself.
Verdicts & Error Codes
Every verdict the tool shows is the player's own answer, translated. The verdict you read and the error code underneath come from the same source, so the two layers never disagree.
The verdicts:
| Verdict | What it means | Typical cause |
|---|---|---|
| Playable | The embed was accepted and reached its first frame | A healthy, embeddable upload |
| Not embeddable | The owner forbids embedding | Error 101 or 150 from the player |
| Video not found | The player cannot join the video | Removed or made private, error 100 |
| Video unavailable | The player refused the request | A stale or wrong link, or a generic player failure |
| Timed out | No player response within the grace window | A blocked script or network issue |
The error codes:
| Code | Meaning | What it tells you |
|---|---|---|
| 100 | Video not found | The video was removed or made private, or the ID is valid but the player cannot join it |
| 101 | Embedding not allowed | The owner has disabled embedding for this video |
| 150 | Embedding not allowed | The same restriction, reported on some surfaces as 150 |
| 2 | Invalid request | The video is unavailable to the player, commonly a stale or wrong video link |
| 5 | Player creation failed | A generic HTML5 player failure, which is sometimes a sign of a playback error outside the embed |
Codes 101 and 150 map to the same verdict, Not embeddable — "the owner does not allow embedding". A 100 means the video is no longer publicly available and yields Video not found. Codes 2 and 5 both map to Video unavailable. And a player that stays silent past the grace window yields Timed out — the verdict you meet when a script or network rule blocks the player itself. These are the answers you will meet most often while auditing an embed gallery.
What It Can & Cannot Detect
Honesty about the limits is part of what makes this tool useful. The table shows what the embed pipeline reveals, and what it stays silent about.
| Question | Can this tool detect it? |
|---|---|
| Embeddable (owner allowed embedding) | Yes, via the oEmbed probe |
| Actually plays once embedded | Yes, press play on the preview and the tool confirms playback |
| Video removed or made private | Yes, error 100 |
| Age-gated videos | Usually, the player retries with a consent step in some regions |
| Region (country) restrictions | Only the region you are on, and for the player API surface |
| Countries the video is available in | No |
| View count, likes, comments | No |
| Tags, license, upload date | No |
| Caption availability | No |
| Default audio / video language | No |
Every question that decides the core outcome — the embed check, the playback proof, the removed-or-private signal — is fully answered without a key. The enrichment layer — view counts, region lists, tags, captions, upload dates — is a separate story, covered in Against the Official API below.
Usage
The workflow is a two-field interactive:
- Paste a YouTube link — from the address bar, the Share menu, or the video's embed sheet.
- Press Enter or click the Check button.
- Read the verdict — a badge describes the outcome as Playable, Not embeddable, Video not found, Video unavailable, or Timed out.
- Read the details — the player panel lists the video's title, channel, duration, and ID under the badge; the three probe rows below explain how each check came out.
Pasting does not trigger the check on its own; the check runs when you press Check or Enter. This keeps the tool predictable — editing the field never suddenly discards a result you are looking at. If the input is not a valid YouTube URL, an error appears and the field clears.
Supported link formats
The input accepts the same formats YouTube itself uses — paste any of these:
| Format | Example |
|---|---|
| Standard watch | youtube.com/watch?v=VIDEO_ID |
| Short link | youtu.be/VIDEO_ID |
| Shorts | youtube.com/shorts/VIDEO_ID |
| Embedded | youtube.com/embed/VIDEO_ID |
| Live | youtube.com/live/VIDEO_ID |
| Legacy video path | youtube.com/v/VIDEO_ID |
| Bare ID | VIDEO_ID (11 characters) |
Extra parameters such as playlists and timecodes are ignored automatically.
Tutorial
Walk one video through from link to verdict.
Step 1 — Get a link. Open any YouTube video and copy its URL, for example https://www.youtube.com/watch?v=dQw4w9WgXcQ.
Step 2 — Paste and check. Click the input, paste (Ctrl+V or Cmd+V), and press Enter. The badge switches to Checking….
Step 3 — Read the badge. Within about two seconds a verdict appears. On an ordinary embeddable upload it reads Playable, backed by the probe rows.
Step 4 — Compare with a restricted video. Now paste a link to a music video that the label withholds from embedding — most major-label music clips are blocked. The verdict reads Not embeddable and the error row shows 101. This is the exact failure that reproduces as a blank grey box when you paste the embed code manually.
Step 5 — Examine the evidence. The probe rows match the badge: the embed row shows Blocked, and the playback row shows no confirmation because the player failed before you could press play. That combination — embed refused, no playback — is exactly the "no embed panel" signal you would see on YouTube's own page for such a video.
That is the full loop: paste, check, read the badge, and if the verdict disagrees with a real embed, use the probe rows to understand why.
Pro Tips
- Paste a bare video ID. The input accepts an 11-character ID on its own, no URL needed — useful when you are working from an API response, a database export, or a shortened link that only reveals the ID.
- Re-run with Enter. Editing the link in the field never clears the current result; press Enter when you have the URL you actually want.
- Automate the embed gate. If you generate pages from feeds, you can curl the same oEmbed probe the tool uses (
https://www.youtube.com/oembed?url=…&format=json) and treat a non-200 as "reject this video" in your pipeline. - Test region-sensitive content from the target region. If your audience is in a specific country, run the check while connected to that network; the player reflects the region it is served to.
- Treat
Error 100as a change signal. A video that checked out fine and suddenly reports 100 has most likely been removed or made private. If you keep a registry of embedded videos, re-check them on a schedule — the status flip is worth knowing about before a visitor hits the grey player.
Embed the video yourself
A Playable verdict is the green light to use the same embed the tool checked:
<div style="aspect-ratio: 16 / 9;">
<iframe
src="https://www.youtube-nocookie.com/embed/VIDEO_ID"
width="100%"
height="100%"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
loading="lazy"
></iframe>
</div>
- Prefer the
nocookiedomain.youtube-nocookie.comserves the same player without YouTube's non-essential cookies — the privacy-friendly default for most sites. loading="lazy"is already in the snippet. It defers the embed until the video scrolls into view; remove it for an above-the-fold hero whose load matters.- Mind your Content-Security-Policy. If your site ships a CSP, add
frame-src https://www.youtube-nocookie.com(orhttps://www.youtube.comif you keep the regular domain), or the embed will be blocked before it loads.
Alternatives
How do developers normally find out an embed is broken? The table fills out the options.
| Method | What it tells you | Key needed | Playback proof |
|---|---|---|---|
| Paste embed, refresh the page | The broken placeholder, after the fact | No | Indirectly once the page runs |
| oEmbed one-liner | Embed status only, no error code | No | No |
| Official Data API | Everything, with a quota-based cost and server key | Yes | No |
| This tool | Verdict + error code + live embed you can play | None | Yes, press play on the preview |
The official Data API is the most complete, but it requires a key, runs server-side to avoid exposure, and costs quota per request. Simple embed probing with a code-only approach does not hand you the player messages or the playback proof. A raw iframe paste only tells you after deployment what this tool shows instantly before you ship.
Against the Official API
The table below compares the two honest paths for the same question: the official YouTube Data API (a server, a key, a quota) versus this tool (only the browser, no key, no server). The comparison is why "no key" is a feature and not a limitation — the trade-off is on the columns that matter for embeds.
| Capability | Official Data API | This tool |
|---|---|---|
| Embeddable status | via status.embeddable |
oEmbed + player code |
| Playback proof | Indirect (metadata only) | Direct, via press play on the preview |
| Error code meaning | Raw code, no explanation | Translated into a verdict |
| Region/Countries list | contentDetails.regionRestriction |
Only the region you are on |
| View counts, likes, comments | statistics |
Not available |
| Tags | snippet.tags |
Not available |
| License | status.license |
Not available |
| Age restriction | contentDetails.contentRating |
Implied by player, not exact |
| Upload date | snippet.publishedAt |
Not available |
| Data needed | API key + server proxy | None — 100% browser |
The two surfaces overlap exactly on the metric that decides an embed: will it play in a page. The official API wins on everything that counts for analysis — metadata, statistics, region lists. The tool wins on the final answer: a live embed that loads in the browser, paused on the first frame, where you can press play and watch it yourself.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| Answer stays at "Checking…" | The player or oEmbed call was blocked (ad blocker, local network) | Allow the player script for youtube.com, or retry the check |
| Embed sits on the first frame | That is by design — the preview never auto-plays or preloads the stream | Press play; a paused embed with the sound icon available is a healthy embed |
| Verdict says "Not embeddable" but the video page plays fine | The owner disallowed embeds; playing on the site differs from embedding | Confirm it: open the video page's Share ▸ Embed sheet — the refusal appears there too |
| Verdict says "Video not found" | Video removed, privately listed, or region-whitelisted | Verify the video plays in your own browser first |
| Input not accepted | The URL is not a YouTube format at all | Use a link from the watch page or Share menu |
Privacy & Data Handling
The tool follows the same privacy model as the other Toollect tools: everything runs locally.
- Nothing is uploaded. The URL is parsed in your browser. No request containing it is ever sent to a server you do not control.
- No account, no tracking. There is no login, no analytics, and no history of the videos you check.
- Only player traffic. The only network requests are the player's own — the same requests any website makes when it embeds a video. Nothing is saved, screenshotted, or stored.
- No video is downloaded ahead of time. The preview pauses on the first frame with a normal play button; the stream only starts loading when you press play, just like any embed, and nothing is saved.
If you are privacy-conscious about which videos you inspect, this page behaves exactly like viewing a normal video page in your browser — your link goes nowhere but your own player.
Technical Specs
Details:
- Embed probe:
https://www.youtube.com/oembed?url={watch_url}&format=json— HTTP 200 = embeddable, non-200 = restricted - Player: YouTube IFrame Player API, loaded on demand as a
playsinlineembed paused on the first frame (no forced autoplay, no forced mute) - Verdict sources: oEmbed status, player error codes (2, 5, 100, 101, 150), and live playback events when you press play
- Metadata: title, channel, duration, and video ID returned by the player itself
- Processing: 100% client-side JavaScript with no API key, no uploads, no server
- Browser support: all modern browsers with Promise and ES5-level support (Chrome, Edge, Firefox, Safari)
Features
- Instant embeddability check for any YouTube link you paste
- Live embed preview paused on the first frame, with playback confirmed the moment you press play
- Verdicts from YouTube's own player error codes, with human explanations
- Title, channel, and duration shown without opening a separate page
- 100% client-side processing with zero data upload, no API key required
- Accepts watch, Shorts, embed, live, and youtu.be links plus bare video IDs