Category: Marketing

Practical guides for performance marketers, PPC leads, and data teams.

  • Vimeo Thumbnail Downloader: Get Every Size [2026]

    Vimeo Thumbnail Downloader: Get Every Size [2026]

    TL;DR: Vimeo generates several thumbnail sizes for every public video — typically 100×75, 200×150, 295×166, 640×360, 1280×720, and 1920×1080. Unlike YouTube, Vimeo’s URLs aren’t predictable — you have to query Vimeo’s oEmbed API to get the actual filename for a given video. Our free Vimeo thumbnail downloader hits the oEmbed endpoint, lists every available resolution, and lets you download any size with one click. Browser-only — paste a Vimeo URL, get the thumbnails.

    Vimeo creators upload custom thumbnails (or auto-generate them from a video frame). Once published, those thumbnails are accessible via Vimeo’s CDN at predictable filenames per video — but the filename pattern depends on a unique image ID Vimeo assigns at upload, not the video ID. So the path i.vimeocdn.com/video/12345_640.jpg only works if you know the image ID, which you don’t get from the video URL.

    The official path: query the oEmbed endpoint at https://vimeo.com/api/oembed.json?url=. The response includes thumbnail_url (the default size) and other metadata. From the URL you can extract the image ID, then construct URLs for all the standard resolutions. Our Vimeo thumbnail downloader automates this — paste a video URL, get a list of all available sizes with download buttons.

    Standard Vimeo thumbnail sizes

    Size suffix Dimensions Best for
    _100 100×75 Tiny inline previews, RSS feeds
    _200 200×150 Sidebar widgets, list views
    _295 295×166 Vimeo’s default embed grid size
    _640 640×360 Standard preview tile (16:9 SD)
    _1280 1280×720 HD preview, blog hero image
    _1920 1920×1080 Full-HD preview, retina hero

    Not every video has every size. Older uploads (pre-2017) sometimes max out at 1280×720; very old uploads at 640×360. The largest available size is whatever the original upload supports — Vimeo doesn’t upscale.

    How to download a Vimeo thumbnail

    1. Open the Vimeo thumbnail grabber
    2. Paste any Vimeo URL — works with public videos, channels, showcases, on-demand pages
    3. The tool calls Vimeo’s oEmbed endpoint and lists every available resolution
    4. Click any thumbnail to download as JPG
    5. Or right-click → “Copy image address” to grab the direct CDN URL for embedding

    Vimeo’s oEmbed response — what’s actually available

    The oEmbed JSON response includes more than just thumbnails:

    {
      "title": "Video Title",
      "author_name": "Creator",
      "thumbnail_url": "https://i.vimeocdn.com/video/12345_295x166.jpg",
      "thumbnail_url_with_play_button": "https://i.vimeocdn.com/filter/overlay?...",
      "duration": 256,
      "video_id": 1234567,
      "uri": "/videos/1234567"
    }

    The thumbnail_url always points to one specific size (typically 295×166). To get the larger sizes, swap the suffix in the URL — _640.jpg, _1280.jpg, _1920.jpg. Our tool does this automatically and verifies each size returns a 200 response before listing it.

    YouTube vs Vimeo thumbnail patterns

    YouTube thumbnails follow a predictable URL pattern: https://img.youtube.com/vi/<video_id>/maxresdefault.jpg. Construct it from the video ID, no API call needed. Vimeo doesn’t work this way — you must query the oEmbed API to get the image ID before you can construct the thumbnail URL.

    For YouTube, see our YouTube Thumbnail Grabber; for Vimeo, this tool is the right pick.

    Common gotchas

    • Private videos return errors. oEmbed only works for public videos. Private videos (Vimeo Plus / Pro privacy settings: only me / password / domain-restricted) return a 403. There’s no public way to grab a private video’s thumbnail without an authenticated API call.
    • Showcase URLs need careful handling. A URL like vimeo.com/channels/staffpicks/1234567 requires extracting just the video ID. Our tool detects every URL format Vimeo uses.
    • Custom thumbnails take a moment to update. If a creator just uploaded a new custom thumbnail, the CDN may serve the cached old version for up to an hour. Try again later if you see a stale image.
    • Animated thumbnails aren’t available. Vimeo offers a “play button overlay” version (thumbnail_url_with_play_button) but no animated GIF thumbnail like YouTube’s hover preview. The static image is the largest you’ll get.
    • Aspect ratio is fixed at 16:9. All standard sizes are 16:9 — even if the source video is 4:3 or vertical, Vimeo letterboxes to 16:9 for thumbnail purposes. The full-resolution image always has the original aspect ratio though.
    • Rate-limit considerations. Vimeo’s oEmbed endpoint has rate limits (typically 60 requests per minute per IP). Our tool calls it on demand only — so a single user fetching one video at a time never hits the limit.

    When NOT to use this tool

    If you only need thumbnails for one video and you control the page, use Vimeo’s official embed code — the embed includes thumbnail rendering before the player loads, so no separate download is needed. For batch automation across hundreds of videos, use Vimeo’s API directly with an OAuth token (more powerful, no rate-limit concerns). For private videos, this tool can’t help — request access from the creator. For thumbnails of platforms other than Vimeo, see the YouTube Thumbnail Grabber or social media tools category.

    Frequently asked questions

    Does this work for private Vimeo videos?

    No. Vimeo’s oEmbed API only returns data for public videos. Private (Plus/Pro privacy settings) videos return a 403 error. The privacy is intentional — there’s no workaround that doesn’t involve an authenticated API call with the creator’s permission.

    Why doesn’t my Vimeo URL work?

    Three usual causes: (1) the video is private; (2) the URL is from a deleted video; (3) the URL is malformed. Try the canonical share URL from Vimeo’s “Share” button (looks like vimeo.com/1234567). If it still fails, the video is likely private.

    What’s the highest resolution available?

    Up to 1920×1080 for HD-uploaded videos. Older uploads (pre-2017) cap at 1280×720 or 640×360. Vimeo doesn’t upscale, so the highest size matches the original upload’s resolution — you can tell the original quality by what’s available.

    Can I use these thumbnails commercially?

    Thumbnails are part of the original upload, owned by the creator. Using them commercially (in your product, in advertising, in derivative works) requires the creator’s permission. For embedding the video itself with its thumbnail (as Vimeo’s embed code does), Vimeo’s terms allow this for any public video.

    Is my URL uploaded to your servers?

    Yes — to fetch the thumbnail URL we have to call Vimeo’s oEmbed API with the URL you paste. The URL goes from your browser directly to Vimeo (we use a CORS proxy or direct fetch). The thumbnails themselves are downloaded directly from Vimeo’s CDN to your browser.

    Why is Vimeo harder to grab than YouTube?

    YouTube uses predictable URL patterns based on video ID. Vimeo uses image IDs assigned at upload, separate from video IDs — so you must call the oEmbed API to map between the two. The result is the same kind of tool but with one extra API hop.

    Related tools and guides

     

  • Twitter / X Ad Revenue Generator: Meme Mockup [2026]

    Twitter / X Ad Revenue Generator: Meme Mockup [2026]

    TL;DR: A Twitter / X ad revenue generator builds a mock screenshot of the X creator-payout dashboard — the dark-themed card showing your last revenue payment in dollars. The output is for memes, jokes, comedic posts, course content, or social commentary about the creator-monetisation economy. Our free X ad revenue mockup tool renders the dashboard chrome accurately with custom amounts and impressions counts. Browser-only and clearly intended for humorous use, not fraud.

    X’s creator-monetisation programme (launched July 2023, formerly “Ad Revenue Sharing”) pays verified accounts a share of ad revenue from impressions on their replies. Payout screenshots became a popular meme genre on the platform itself — creators humble-bragging modest amounts, satirists posting absurd figures, marketers using mock dashboards in tutorials about creator economy. The actual dashboard UI is dark-mode by default, with a large dollar figure as the hero stat.

    Our X ad revenue generator recreates the dashboard’s visual layout — large amount, “Last payout” label, impressions count below — at the actual X-platform screen resolution. Customise the dollar amount, time period, impressions count, and verification status. Browser-only — your inputs never leave your device. This guide explains the legitimate uses, the legal lines, and why the tool exists at all (memes, mostly).

    Legitimate uses

    Use case OK? Notes
    Comedic meme post Yes Clearly humour, no deception
    Course / tutorial about creator economy Yes Educational, mockup labelled
    Slide presentation about social monetisation Yes Mock data in business context
    Social commentary / satire Yes Protected speech in most jurisdictions
    “Look how much I made!” deception No Misleading; can be fraud in commerce contexts
    “Course you can earn $50K/month” sales tactic No FTC deceptive-marketing violation
    Tax / income verification No Document fraud — illegal everywhere

    Rule: humour, education, and clearly-labeled mockups are fine. Anything that misleads someone about real income — especially in commerce, finance, or legal contexts — is fraud regardless of the tool used.

    Why this tool exists

    The “X ad revenue meme” became a recognisable format in late 2023 as creators started posting their first payouts. The genre includes:

    • Humble-brag screenshots (“not retiring on this”)
    • Satirical “$0.00” posts mocking the program
    • Ridiculous fake figures ($1,000,000) for comedic exaggeration
    • Comparison posts (“creator-payout from each platform” infographics)
    • “Ad revenue from a single tweet” comedic posts

    Mockup tools fit naturally — making the meme without screenshotting your actual dashboard avoids exposing real account details, real payout amounts, or other personal financial information. For comedy and education the mockup is cleaner than a real screenshot.

    How to generate a mock revenue screenshot

    1. Open the X ad revenue generator
    2. Set the dollar amount (any value — funny large, funny small, realistic)
    3. Pick the time period label (“Last 28 days”, “Yesterday’s payout”, custom)
    4. Set the impressions count, monthly views, or engagement metric
    5. Toggle dark / light mode to match X’s current default
    6. Click Export for PNG ready to repost

    The dashboard chrome we mimic

    X’s creator dashboard uses a small set of consistent design elements:

    • Background: #0F1419 (dark mode default) or #FFFFFF (light)
    • Card border: #2F3336 (dark) or #EFF3F4 (light)
    • Hero amount: 44px+ bold weight, white in dark mode
    • Label: 13px #71767B (dark) or #536471 (light), all-caps font weight 700
    • Positive change indicator: #00BA7C green with up arrow
    • Sub-stats card: #16181C background, #71767B labels, white values

    Our generator outputs all this faithfully so the mockup reads as “real X dashboard” at a glance.

    Common gotchas

    • X’s dashboard UI changes. Meta updates the design every few months — colours shift, spacing adjusts, new metrics appear. Our generator captures the late-2024 / 2025 design; older mockups look outdated.
    • Don’t include real handles. If you compose a mockup with someone else’s @username and a fake revenue number, that’s defamation territory. Use generic placeholder handles or your own.
    • Watermark for clarity. For high-visibility memes, consider adding a small “MOCKUP” or “FAKE” watermark in a corner. It doesn’t hurt the joke and makes intent crystal-clear if the image escapes its original context.
    • Currency formatting matters. X displays USD in most regions; non-US users sometimes see local currencies. Pick the format that matches your audience for authenticity.
    • Don’t use real payment dates / months. If you generate a mockup that says “October 2025 payout” with a specific real-account amount, you’re claiming a real payout occurred — bigger legal risk than abstract numbers.
    • Trademark caution. X’s logo and dashboard layout are Meta-owned trademarks. Using them in marketing materials (commercial advertising, paid promotions) without licensing is infringement. Comedy, satire, and editorial use generally fall under fair use; commercial use does not.

    When NOT to use this tool

    For real creator-payout reporting (tax forms, grant applications, sponsorship pitches with verified income), use real screenshots from your actual dashboard — never a mockup. For platform-criticism content, screenshots of real numbers (with personal info redacted) are more credible than fakes. For client deliverables claiming “this is what your account will earn”, any mock revenue figure is misleading marketing — show real estimates from your campaign data instead. The tool exists for humour and education; using it commercially in revenue-claim contexts crosses the line.

    Frequently asked questions

    Is this for real?

    No — entirely fake. The output is a mock screenshot for memes, comedy, education, and design mockups. Don’t pass it off as a real payout; that’s misleading and can be illegal in commerce contexts.

    Will the mockup look exactly like X’s dashboard?

    Visually similar but not pixel-exact. We match colours, fonts, and layout to within a few percent of the real UI. X updates the design periodically; older mockups can look slightly off compared to the current dashboard.

    Can I use this commercially?

    For editorial use (blog posts about the creator economy, slides, comedy content): yes. For paid advertising or commercial work: trademark issues — X’s UI is Meta-owned. Get licensing or stick to clearly-labeled satire / commentary.

    Why include impressions and other stats?

    Real payout screenshots include impression counts, engagement rates, etc. Including them in the mockup makes the joke (or educational example) more recognisable.

    Is my data uploaded?

    No. The generator runs in your browser. Your inputs and the exported PNG stay on your device.

    Can I add a watermark to make it clearly fake?

    Yes — toggle “Add MOCKUP watermark” in the settings. Useful for memes shared in contexts where the audience might miss the joke and assume it’s real.

    Related tools and guides

     

  • YouTube Thumbnail Grabber Tool: Download HD Thumbnails [2026]

    YouTube Thumbnail Grabber Tool: Download HD Thumbnails [2026]

    TL;DR: A YouTube thumbnail grabber tool extracts every available image variant from a public video — five quality sizes (1280×720 down to 120×90) plus four frame previews. Our browser-based grabber works on any URL format (regular, Shorts, embed, youtu.be) with no API key. Use it for competitor research, A/B test reference, archives, and design mockups — paste the URL, click download.

    Every YouTube video has nine publicly accessible thumbnail images sitting on Google’s CDN — five quality variants generated from the creator’s chosen still, plus four auto-extracted frame previews YouTube uses for hover-scrub previews. A YouTube thumbnail grabber is the fastest way to pull all nine without poking at the YouTube Data API, hunting for a developer key, or relying on a Chrome extension that demands tab-history permission.

    Our free YouTube thumbnail grabber accepts any URL format (regular watch URL, Shorts, embed iframe, youtu.be short links, or just an 11-character video ID) and returns every variant the CDN holds. This guide explains what each variant is for, when one is missing, and how to use them legally for competitive research, mockups, and content archives.

    Which thumbnail sizes does YouTube actually publish?

    YouTube generates a fixed set of thumbnail variants for every uploaded video, hosted on the i.ytimg.com and img.youtube.com CDNs. The variants are predictable URL slugs — once you know the 11-character video ID, you can construct any thumbnail URL directly without an API call.

    Variant slug Resolution Aspect Availability
    maxresdefault.jpg 1280 × 720 16:9 ~90% of videos (modern uploads only)
    sddefault.jpg 640 × 480 4:3 (cropped + padded) Always available
    hqdefault.jpg 480 × 360 4:3 with black bars Always available
    mqdefault.jpg 320 × 180 16:9 Always available
    default.jpg 120 × 90 16:9 Always available

    Why maxresdefault sometimes returns a 404: YouTube only generates the 1280×720 variant when the source upload is at least HD (720p+). Older videos uploaded before 2010, low-quality phone uploads from 2008–2012, and a small number of edge cases never get the maxres variant. Our tool tests for it on load and falls back to sddefault when missing — you’ll always get the largest available size without manually checking each URL.

    The four hidden frame previews: beyond the five named variants, YouTube also publishes 0.jpg, 1.jpg, 2.jpg, and 3.jpg — the same image at multiple sizes that YouTube uses for the hover-to-scrub feature on video listings. These are the auto-extracted start, middle, and end frames of the video, useful when the creator’s chosen thumbnail doesn’t show the moment you actually want to reference. Most thumbnail-grabber tools skip these. Ours surfaces all four.

    How to extract a video ID from any YouTube URL

    YouTube serves the same video through five different URL formats. A working thumbnail grabber has to recognise all of them. Here’s what the tool needs to handle.

    • Standard watch URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ — extract the v= query parameter.
    • Short link: https://youtu.be/dQw4w9WgXcQ — extract the path segment after the slash.
    • Shorts: https://www.youtube.com/shorts/dQw4w9WgXcQ — same parsing as the path-based forms.
    • Embed iframe URL: https://www.youtube.com/embed/dQw4w9WgXcQ — common when copying from a website’s embed code.
    • Raw 11-character ID: dQw4w9WgXcQ — already the ID, no parsing needed.

    The 11-character ID format is consistent: alphanumeric plus underscore and dash. Once extracted, you build any thumbnail URL by templating: https://i.ytimg.com/vi/{ID}/maxresdefault.jpg. You can swap maxresdefault for any other variant slug, and you can swap /vi/ for /vi_webp/ to get a WebP-encoded version that’s roughly 30% smaller for web embedding.

    How to use the YouTube thumbnail grabber

    1. Open the YouTube thumbnail grabber
    2. Paste any YouTube URL (or just the 11-character ID) into the input field
    3. The tool detects the ID instantly and renders all 9 thumbnail variants below — 5 quality sizes plus 4 frame previews
    4. Click Download on any variant to save the JPG locally, or Copy URL to grab the direct CDN link for embedding
    5. If maxresdefault is missing for older videos, the next-largest available size renders automatically

    Everything happens in your browser — no server, no API key, no rate limit. The tool fetches each thumbnail directly from Google’s CDN and saves it locally. We never see what you grabbed or which video you researched.

    What people actually use a thumbnail grabber for

    The keyword “youtube thumbnail grabber tool” attracts a few distinct audiences with very different needs. Here are the legitimate use cases that drive most search traffic.

    • Competitive research for content creators. Pulling thumbnails from the top 10 videos in your niche gives a side-by-side view of what’s working — colour palette, face placement, text size. Designers building thumbnail templates start here.
    • A/B test reference for your own channel. If you replaced a thumbnail mid-flight, the grabber is the only way to retrieve the older versions. YouTube doesn’t expose thumbnail history in Studio.
    • Backup before deleting or unlisting a video. Once a video is removed, the thumbnails are no longer publicly accessible. Grab them while they’re live if you might need the asset later.
    • Mockups + slide decks. Designing a marketing presentation that references real videos, building YouTube-style mockups for tutorials, embedding video preview cards in PDFs.
    • Press kits and link previews. Some platforms don’t auto-render YouTube embeds and need a fallback image. The 1280×720 variant is the right size for most OpenGraph slots.
    • Frame-accurate references. When you need the moment six seconds into the video for a thumbnail, the auto-extracted frame previews give a closer match than the creator’s chosen still.

    Are YouTube thumbnails free to use?

    The honest answer: no, not in the unlimited-reuse sense. YouTube thumbnails are creative works owned by the channel that uploaded them. Downloading a public thumbnail is fine — Google’s CDN serves them publicly without authentication. Republishing one as your own work, using it in a paid product, or building a competing video around someone else’s thumbnail can violate copyright and YouTube’s Terms of Service.

    Three uses that are widely considered acceptable:

    • Editorial commentary or review. Including a thumbnail in a blog post that reviews or critiques the video falls under fair-use doctrine in most jurisdictions.
    • Internal research and presentations. Showing thumbnails in a private deck, marketing brief, or design moodboard is generally fine — no public republication.
    • Linking back with the thumbnail as a preview. Including a thumbnail next to an outbound link to the original video, the way social platforms auto-render embeds, is the standard convention.

    Avoid using a downloaded thumbnail as a stock image, on a t-shirt, in advertising you sell, or as the thumbnail of your own video. When in doubt, contact the creator — most channels are happy to grant permission for legitimate uses if you ask.

    How to download YouTube thumbnails in code

    For batch operations — say, archiving thumbnails for every video in a channel, or building a content-research database — a script is faster than clicking. The URL templates are predictable, so you only need the video ID list.

    Bash (curl):

    # Single video, max resolution
    curl -o thumb.jpg "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
    
    # Batch from a file of video IDs (one per line)
    while read -r id; do
      curl -sf "https://i.ytimg.com/vi/$id/maxresdefault.jpg" -o "thumbs/$id.jpg" \
        || curl -s "https://i.ytimg.com/vi/$id/sddefault.jpg" -o "thumbs/$id.jpg"
    done < video-ids.txt

    Python:

    import requests
    from pathlib import Path
    
    VARIANTS = ["maxresdefault", "sddefault", "hqdefault"]
    
    def fetch_best_thumbnail(video_id: str, out_dir: Path) -> Path:
        out_dir.mkdir(parents=True, exist_ok=True)
        for variant in VARIANTS:
            url = f"https://i.ytimg.com/vi/{video_id}/{variant}.jpg"
            r = requests.get(url, timeout=10)
            if r.ok and len(r.content) > 1024:  # skip "no thumbnail" placeholders
                out = out_dir / f"{video_id}-{variant}.jpg"
                out.write_bytes(r.content)
                return out
        raise RuntimeError(f"No thumbnail found for {video_id}")

    JavaScript (Node):

    import { writeFile } from "node:fs/promises";
    
    async function fetchThumb(videoId, variant = "maxresdefault") {
      const url = `https://i.ytimg.com/vi/${videoId}/${variant}.jpg`;
      const res = await fetch(url);
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      await writeFile(`${videoId}-${variant}.jpg`,
        Buffer.from(await res.arrayBuffer()));
    }
    
    await fetchThumb("dQw4w9WgXcQ");

    For all three approaches, swap i.ytimg.com/vi/ for i.ytimg.com/vi_webp/ if you want WebP output. WebP is roughly 30% smaller than JPEG at equivalent visual quality and is supported by every modern browser.

    Common gotchas (and how to avoid them)

    • Private videos: thumbnails for unlisted or private videos are not publicly accessible. Even with a valid video ID, the CDN returns a 404 or the default “no thumbnail” placeholder. There’s no workaround for private content.
    • Age-restricted videos: the thumbnail is usually still public even when the video itself requires sign-in. Try the URL — if it loads, the asset is available.
    • Music videos with stricter copyright: some major labels block third-party access to their thumbnails through their YouTube partner agreements. Behaviour varies; if a thumbnail returns a small placeholder image (under 1 KB), that’s usually the signal.
    • The “no thumbnail” placeholder: when YouTube doesn’t have a real thumbnail, it returns a generic gray-tile image about 940 bytes. Our tool detects these by file size and shows the next-best variant instead.
    • Downloads blocked by browser settings: if your browser blocks cross-origin downloads, the tool falls back to opening the image in a new tab — right-click and Save Image As to download.

    Frequently asked questions

    What’s the highest resolution YouTube thumbnail I can download?

    1280×720 (the maxresdefault variant), available for ~90% of modern videos. YouTube does not publish 4K thumbnails — the source upload’s resolution doesn’t change the thumbnail size YouTube generates. If a tool claims to provide “4K thumbnails” it’s either upscaling the maxres image or returning the original creator-uploaded version which is also capped at 1280×720 by YouTube’s processing pipeline.

    Why is the maxresdefault thumbnail missing for some videos?

    YouTube only generates the 1280×720 variant when the source video was uploaded at 720p or higher resolution. Older videos (especially pre-2010 uploads) and low-resolution phone uploads never get a maxres variant. The sddefault (640×480) and hqdefault (480×360) variants are guaranteed for every video including the oldest archives.

    Does the YouTube thumbnail grabber work on YouTube Shorts?

    Yes. Shorts URLs use the same 11-character video ID and serve the same standard thumbnail variants. The tool parses Shorts URLs (youtube.com/shorts/{id}) automatically. Note that Shorts thumbnails are still 16:9 by default — YouTube doesn’t generate native 9:16 vertical thumbnails for Shorts via the standard URLs.

    Is downloading YouTube thumbnails legal?

    Downloading a publicly accessible thumbnail is legal. Republishing it as your own creative work, using it in advertising, or putting it on merchandise is not — thumbnails are copyrighted by the channel that uploaded the video. Editorial commentary, research moodboards, and link previews are generally accepted uses. When in doubt, ask the creator’s permission.

    Do I need a YouTube API key to use a thumbnail grabber?

    No. Thumbnail URLs follow a fixed predictable pattern (https://i.ytimg.com/vi/{ID}/{variant}.jpg) and are publicly accessible without authentication. You only need the YouTube Data API for things like fetching video metadata (title, description, view count) — for thumbnails specifically, no API key is required.

    Can I get thumbnails for unlisted or private videos?

    No. Thumbnails for private videos are restricted to logged-in users with access. Unlisted videos are technically still served on the public CDN if you have the URL, but you need the original creator to share that URL with you. Neither our tool nor any third-party tool can bypass these restrictions.

    Related tools and guides

     

  • Convert Emails to Hashed MD5 With MD5 Hash Generator: A 2026 Marketer’s Guide

    Convert Emails to Hashed MD5 With MD5 Hash Generator: A 2026 Marketer’s Guide

    TL;DR: To convert emails to hashed MD5: lowercase and trim each address, then compute MD5 per line. In 2026, Meta still accepts MD5 for Custom Audiences; Google Ads, TikTok, and LinkedIn require SHA-256. Our free browser-based MD5 generator handles per-line hashing with normalization built in — no uploads.

    Hashing email addresses to MD5 takes each address — [email protected] — and runs it through a one-way mathematical function that produces a fixed 32-character hexadecimal string like c160f8cc69a4f0bf2ea0b4b3c66f6db1. Ad platforms require hashing so they can match your customer list against their users without either side exposing raw emails in plaintext. You upload hashes, the platform hashes its own user list the same way, and the two sets are compared.

    Three rules decide whether your match rate is 72% or 4%: lowercase and trim every address before hashing, hash each line separately (not the whole file as one blob), and pick MD5 or SHA-256 based on which platform you’re feeding. Most match-rate disasters trace back to one of those three. This guide covers each in practical detail and hands you a private browser tool that does the work.

    Which ad platforms accept MD5 in 2026, and which demand SHA-256?

    Here is the current platform-by-platform truth table, verified against each vendor’s 2026 customer-matching documentation. Use this to decide which algorithm to hash with before you write a single line of code.

    Platform Accepted hash Notes
    Meta (Facebook, Instagram) Custom Audiences MD5, SHA-1, or SHA-256 All three accepted; SHA-256 strongly preferred
    Google Ads Customer Match SHA-256 only MD5 uploads rejected since the 2020 API migration
    TikTok Ads Matched Audience SHA-256 only Lowercase hex required
    LinkedIn Matched Audiences SHA-256 only Accepts hex; base64 rejected
    The Trade Desk SHA-256 (preferred), MD5 (legacy) MD5 still accepted for legacy seat pipelines
    X (Twitter) Tailored Audiences MD5 or SHA-256 Either works
    LiveIntent, Pinterest MD5, SHA-1, or SHA-256 SHA-256 recommended for new work
    Yahoo / Verizon Media SHA-256 only Since 2023 DSP migration

    The takeaway: if you’re hashing for exactly one platform, use what that platform asks for. If you’re building one file that might be uploaded to multiple platforms over its life, hash with SHA-256 — it’s accepted everywhere that accepts MD5, plus the four platforms that reject MD5 outright. MD5 survives mostly as a legacy format for Meta and a handful of DSPs with older pipelines.

    What hashing actually does to an email

    MD5 is a one-way function. Given the same input it produces the same 128-bit output every time, and it is computationally impractical to reverse. If you hash [email protected] on your laptop and Meta hashes the same address on theirs, both computers produce the identical 32-character string — that string becomes the common key for matching without either side ever seeing the other’s raw email list.

    One-way does not mean private. An MD5 hash of a known email is trivially lookup-able — rainbow tables for every major email provider exist — so hashing protects a list against casual eyeballing, not against a motivated attacker with a dictionary of emails. That’s why ad platforms treat hashed uploads as a regulatory-compliance layer, not as an anonymization guarantee. They still hold your raw customer list during match; they just discard the unmatched hashes afterward. The hashing step is primarily about keeping personally identifiable data off of HTTP request logs and cookie stores, not about cryptographically hiding it from the platform itself.

    How to normalize an email before hashing

    Normalization is the part that causes 80% of match-rate problems. An email address that looks identical to you and me may be stored in slightly different forms across your CRM, your email platform, and the ad network — any inconsistency produces a different hash and a miss.

    The required normalization steps, confirmed by every major ad platform’s docs, are exactly two:

    1. Trim all leading and trailing whitespace. A stray space in a CSV export is the single most common reason hashes don’t match.
    2. Lowercase the entire address. [email protected] and [email protected] refer to the same inbox, but their MD5 hashes differ completely.

    There are two optional steps that only apply if every system involved uses the same rule:

    • Gmail dot rule: Gmail treats [email protected] and [email protected] as the same inbox. If your customer list was captured with dots and the ad platform also dedupes by dots, stripping them raises match rate. If either side does not dedupe, do nothing — you will lower the match rate.
    • Plus addressing: [email protected] routes to [email protected] for most providers. Same rule as the Gmail dot: only strip if both sides of the match strip.

    Our rule of thumb: do only the mandatory trim-and-lowercase unless you have explicit documentation that the platform applies a specific canonicalization. Meta’s 2026 documentation, for example, performs the trim-and-lowercase itself on inbound hashes — don’t guess at additional normalization.

    The quickest way: hash a list in your browser

    The fastest path — and the only one that keeps your list off a third-party server — is our browser-based MD5 hash generator. Open the page, tick the “Hash each line separately” checkbox, paste your emails one per line, and copy the result. Normalization (lowercase + trim) is on by default because ad platforms require it. The entire operation runs in JavaScript inside your browser tab; no file leaves your device, and we never see the list.

    For SHA-256 uploads to Google Ads, TikTok, or LinkedIn, the workflow is identical — use our SHA-256 generator instead and check the same per-line box. Output pastes straight into a customer-match CSV.

    How to hash emails in Python, JavaScript, and SQL

    For anything larger than a few thousand rows, or for a repeatable pipeline, you want a script. Here’s the minimal correct implementation in each common language. Every example performs the mandatory lowercase-and-trim first.

    Python:

    import hashlib
    
    def hash_email_md5(email: str) -> str:
        normalized = email.strip().lower()
        return hashlib.md5(normalized.encode("utf-8")).hexdigest()
    
    with open("emails.csv") as f, open("hashed.csv", "w") as out:
        for line in f:
            email = line.strip()
            if email:
                out.write(hash_email_md5(email) + "\n")

    JavaScript (Node):

    import crypto from "node:crypto";
    import { readFileSync, writeFileSync } from "node:fs";
    
    const hashEmailMd5 = (email) =>
      crypto.createHash("md5").update(email.trim().toLowerCase()).digest("hex");
    
    const lines = readFileSync("emails.csv", "utf8").split(/\r?\n/).filter(Boolean);
    writeFileSync("hashed.csv", lines.map(hashEmailMd5).join("\n"));

    SQL (PostgreSQL with pgcrypto / BigQuery):

    -- PostgreSQL
    SELECT encode(digest(LOWER(TRIM(email)), 'md5'), 'hex') AS email_md5
    FROM customers
    WHERE email IS NOT NULL;
    
    -- BigQuery
    SELECT TO_HEX(MD5(LOWER(TRIM(email)))) AS email_md5
    FROM `project.dataset.customers`
    WHERE email IS NOT NULL;

    All three approaches produce byte-identical output. Running [email protected] through any of them yields c160f8cc69a4f0bf2ea0b4b3c66f6db1. If your pipeline produces a different hash for the same input, the most likely cause is missed normalization or a trailing newline character sneaking into the input.

    The three mistakes that tank match rates

    We’ve audited about 40 customer-match uploads across client engagements. The failure modes cluster tightly — if your match rate is under 40% on a list you’d expect to match well, one of these is almost certainly the reason.

    • Hashing the whole file instead of each line. CSV exported with a trailing newline, treated as one big string, MD5’d once — produces a single hash for the entire file. Match rate: 0%. Every line must be hashed independently.
    • Forgetting to lowercase. Many CRMs preserve user-entered casing. A list exported with [email protected]-style rows will produce hashes that don’t match anything on the platform side, which normalizes to lowercase internally. This typically drops a match rate from ~70% to ~8%.
    • BOM or encoding bytes in the input. Windows-generated CSVs often start with a UTF-8 BOM (EF BB BF). If your first row includes those bytes in the input to MD5, the first hash is useless. Strip with file.read().lstrip("\ufeff") in Python or equivalent.

    Validate your pipeline with a known input. [email protected] (lowercase, trimmed) hashes to c160f8cc69a4f0bf2ea0b4b3c66f6db1 — check one row’s output against this before uploading 100,000 rows blindly. Our MD5 tool produces the same reference output if you want a second check outside your codebase.

    When MD5 is the wrong choice

    Honest section: MD5 has been cryptographically broken since 2008, and though that doesn’t matter for ad-platform matching (where the goal is consistent deterministic output, not cryptographic secrecy), it does matter for a handful of adjacent use cases people sometimes reach for this tool to solve.

    • Never use MD5 to store user passwords. Collision attacks and precomputed rainbow tables make it trivial to reverse. Use bcrypt or argon2.
    • Never use MD5 as a security token. Session IDs, API keys, and CSRF tokens need a cryptographically secure random generator, not a hash of predictable input.
    • Don’t use MD5 for fresh ad-platform integrations. Unless you specifically need legacy Meta parity, start with SHA-256. You avoid the inevitable future migration and sidestep a handful of platforms that rejected MD5 years ago.
    • Don’t use MD5 if your list is tiny. Under 1,000 rows, your match is going to be noisy anyway — skip the hashing workflow and use whichever onboarding path your platform offers (most accept raw lists over HTTPS and hash server-side).

    Frequently asked questions

    Does Facebook still accept MD5 hashes for Custom Audiences?

    Yes, as of 2026 Meta accepts MD5, SHA-1, and SHA-256 for Custom Audience uploads. Their documentation strongly prefers SHA-256, and for any new pipeline SHA-256 is the right choice. MD5 remains supported for existing integrations that haven’t migrated.

    Can someone reverse-engineer my email address from its MD5 hash?

    Practically, yes — for any email they already guessed. Rainbow tables of common email addresses exist, and an attacker with a hashed list can check their dictionary against yours in seconds. MD5 hashing protects against casual inspection and keeps raw emails off of request logs; it does not protect against a determined adversary with a target email list.

    Do I need to lowercase emails before hashing for Google Ads?

    Yes, absolutely. Google Ads customer match documentation explicitly requires all inputs to be lowercased and trimmed before SHA-256 hashing. Uploads that skip this step match at single-digit percentages because Google’s internal list is already normalized.

    Is MD5 the same as encryption?

    No. MD5 is a one-way hash function, not encryption. Encryption is reversible with the right key; hashing is one-way by design — there is no “un-hash” operation. Two different inputs always produce hashes that differ in roughly half their bits, which is what makes hashing useful for matching without revealing the source.

    What’s the difference between MD5 and SHA-256 for emails?

    Both are deterministic one-way hash functions. MD5 produces a 32-character hex string (128 bits); SHA-256 produces a 64-character hex string (256 bits). SHA-256 is cryptographically secure against collision attacks; MD5 is not. For ad-platform matching, both work equally well — the choice comes down to which algorithm each platform accepts.

    Can I hash a list of emails without uploading them anywhere?

    Yes. Our MD5 generator and SHA-256 generator both run entirely in your browser using the Web Crypto API. Your email list never leaves your device, is never logged, and is never cached on our servers. This matters for GDPR compliance and for teams whose data-protection policies forbid third-party processing of customer PII.

    Related tools and guides