Technical Reference · 2026 Edition

bimi-checker-validation-guide

Last updated August 1, 2026 6 min read
yaml
---

title: "How to Check if Your BIMI Record is Valid" description: "A guide to validating your BIMI implementation. Learn how to check your SVG file, DMARC policy, and DNS record for compliance." date: "2026-07-01"


How to Check if Your BIMI Record is Valid

Brand Indicators for Message Identification (BIMI) lets your logo appear next to emails in supported clients. Getting it working requires three components to align precisely: a valid DMARC policy, a compliant SVG file, and a correctly formatted DNS record. Any one of these failing silently will prevent your logo from rendering. This guide walks through each layer so you can diagnose and fix problems methodically.


What a BIMI Checker Actually Tests

A BIMI checker queries your DNS, retrieves the referenced SVG file, and validates both against the current BIMI specification. A thorough check covers:

  • DNS TXT record syntax and location
  • DMARC policy level (must be quarantine or reject)
  • SVG file format compliance (BIMI SVG Tiny PS profile)
  • VMC certificate validity and chain of trust (for Gmail)
  • HTTPS delivery of the SVG asset

Running these checks manually is possible but tedious. Using a dedicated tool surfaces all failures in one pass.


Step 1: Validate Your DMARC Policy

BIMI requires a DMARC record at p=quarantine or p=reject. A policy of p=none will not satisfy any supporting mail client.

Check your DMARC record with:

text
dig TXT _dmarc.yourdomain.com

A valid record looks like:

text
v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; adkim=s; aspf=s;

Key requirements:

  • p=reject is preferred. p=quarantine is accepted but some clients weight it lower.
  • pct=100 is implied by default. Explicit partial policies (pct=50) may disqualify you on strict implementations.
  • The record must be at the organizational domain, not a subdomain, unless you are publishing BIMI for that subdomain specifically.

If your DMARC record is missing or malformed, BIMI will not render regardless of how correct your other records are.


Step 2: Check Your BIMI DNS Record

BIMI records are published as TXT records at default._bimi.yourdomain.com.

A minimal record with only an SVG:

text
v=BIMI1; l=https://cdn.yourdomain.com/logo.svg;

A full record with a VMC certificate:

text
v=BIMI1; l=https://cdn.yourdomain.com/logo.svg; a=https://cdn.yourdomain.com/logo.pem;

Query it directly:

text
dig TXT default._bimi.yourdomain.com

Common errors to look for:

  • Missing v=BIMI1 tag — the record will be ignored
  • Malformed URL in the l= tag — must be HTTPS, not HTTP
  • Trailing semicolon omitted after the final value
  • Record published at the wrong subdomain label (e.g., _bimi.yourdomain.com without the default. prefix)

The l= tag is technically optional when a VMC is present via the a= tag, but most implementations expect it populated.


Step 3: Validate the SVG File

The SVG file is where most BIMI implementations fail. The BIMI working group requires SVG Tiny Portable/Secure (SVG Tiny PS), a restricted profile that eliminates animations, scripts, and external references.

A compliant SVG file must:

  • Declare baseProfile="tiny-ps" in the root element
  • Include version="2.0"
  • Contain a </code> element as a direct child of <code class="md-inline-code"><svg></code></li> <li class="md-li">Use a square <code class="md-inline-code">viewBox</code> (e.g., <code class="md-inline-code">viewBox="0 0 100 100"</code>)</li> <li class="md-li">Not reference external fonts, images, or resources</li> <li class="md-li">Not contain JavaScript or CSS animations</li> <li class="md-li">Be served over HTTPS with a valid TLS certificate</li> <li class="md-li">Have a <code class="md-inline-code">Content-Type</code> of <code class="md-inline-code">image/svg+xml</code></li> </ul> <p class="md-p"> A correct SVG opening element looks like: </p> <div class="md-code-block"><div class="md-code-lang">xml</div><pre><code class="lang-xml"><svg xmlns="http:<span <span class="hl-kw">class</span>="hl-cmt">//www.w3.org/2000/svg"</span> <p class="md-p"> xmlns:xlink="http:<span <span class="hl-kw">class</span>="hl-cmt">//www.w3.org/1999/xlink"</span> version="2.0" baseProfile="tiny-ps" viewBox="0 0 100 100"> <title>Company Logo</title> ... </svg> </p> </code></pre></div> <p class="md-p"> Standard SVG files exported from Illustrator, Figma, or Sketch will not pass this validation without conversion. <a href="https://makebimi.com" class="md-link" target="_blank" rel="noopener">makeBIMI.com</a> converts any standard SVG into a compliant BIMI SVG Tiny PS file at no cost. Upload your existing logo file and download the corrected version ready for deployment. </p> <hr class="md-hr" /> <h2 id="step-4-understand-per-client-requirements" class="md-h2">Step 4: Understand Per-Client Requirements</h2> <p class="md-p"> Different mail clients enforce BIMI differently. Knowing which checks each client performs prevents time spent debugging the wrong layer. </p> <h3 id="gmail" class="md-h3">Gmail</h3> <p class="md-p"> Gmail requires a Verified Mark Certificate (VMC). Without a VMC in the <code class="md-inline-code">a=</code> tag, Gmail will not display the logo regardless of DMARC or SVG validity. The VMC must be issued by an approved Certificate Authority and tied to a trademark registration. <a href="https://veribimi.com" class="md-link" target="_blank" rel="noopener">veriBIMI.com</a> handles VMC procurement and manages the certificate chain for sending domains. </p> <h3 id="apple-mail" class="md-h3">Apple Mail</h3> <p class="md-p"> Apple Mail (iOS 16+ and macOS Ventura+) displays BIMI logos without a VMC. It requires: </p> <ul class="md-ul"> <li class="md-li">DMARC at <code class="md-inline-code">p=quarantine</code> or <code class="md-inline-code">p=reject</code></li> <li class="md-li">A valid BIMI DNS record</li> <li class="md-li">An SVG Tiny PS compliant file</li> </ul> <p class="md-p"> Apple performs its own DNS and SVG validation server-side. SVG files that pass basic syntax checks but fail the Tiny PS profile will be silently rejected. </p> <h3 id="yahoo-mail" class="md-h3">Yahoo Mail</h3> <p class="md-p"> Yahoo was an early BIMI adopter. It supports logo display without a VMC for most senders, though VMC-verified logos receive a blue checkmark indicator. Yahoo checks: </p> <ul class="md-ul"> <li class="md-li">DMARC policy level</li> <li class="md-li">BIMI DNS record presence</li> <li class="md-li">SVG accessibility over HTTPS</li> </ul> <p class="md-p"> Yahoo's validation is less strict on SVG profiling than Apple, but correct SVG Tiny PS compliance is still the safest baseline. </p> <hr class="md-hr" /> <h2 id="step-5-run-a-full-bimi-check" class="md-h2">Step 5: Run a Full BIMI Check</h2> <p class="md-p"> Manual DNS queries and SVG inspection cover individual layers. A BIMI checker consolidates all of this into a single report. When running a check, the tool should confirm: </p> <ol class="md-ol"> <li class="md-li">DMARC record exists and meets policy threshold</li> <li class="md-li">BIMI TXT record is syntactically valid</li> <li class="md-li">SVG URL is reachable over HTTPS</li> <li class="md-li">SVG file passes Tiny PS profile validation</li> <li class="md-li">VMC certificate is present (if Gmail support is required) and the chain is valid</li> <li class="md-li">No conflicting records exist at the BIMI subdomain</li> </ol> <p class="md-p"> If any layer fails, the checker should identify the specific tag, element, or policy value causing the issue. </p> <hr class="md-hr" /> <h2 id="common-issues-and-fixes" class="md-h2">Common Issues and Fixes</h2> <p class="md-p"> | Problem | Cause | Fix | |---|---|---| | Logo not showing in Gmail | VMC absent or expired | Obtain a VMC via veriBIMI.com | | Logo not showing in Apple Mail | SVG not Tiny PS compliant | Convert SVG using makeBIMI.com | | DNS record not found | Wrong subdomain label | Publish at <code class="md-inline-code">default._bimi.yourdomain.com</code> | | DMARC policy rejected | <code class="md-inline-code">p=none</code> policy active | Escalate to <code class="md-inline-code">quarantine</code> or <code class="md-inline-code">reject</code> | | SVG not loading | HTTP instead of HTTPS | Move asset to HTTPS hosting | | SVG loads but fails validation | External references in SVG | Strip all external resources from file | </p> <hr class="md-hr" /> <h2 id="keeping-your-bimi-record-valid-over-time" class="md-h2">Keeping Your BIMI Record Valid Over Time</h2> <p class="md-p"> BIMI validation is not a one-time task. VMC certificates expire, SVG hosting can break, and DMARC policies sometimes revert during infrastructure changes. Schedule periodic checks — monthly at minimum — to catch regressions before they affect logo display in production. </p> <p class="md-p"> Monitor your DMARC aggregate reports alongside BIMI status. A spike in authentication failures may indicate SPF or DKIM misalignment that will eventually pull your DMARC policy into non-compliance, cascading into BIMI failure. </p> <p class="md-p"> A valid BIMI implementation is a maintenance commitment, not a deployment milestone. </p> </div> <div class="doc-footer"> <a href="/" class="btn btn-primary">Convert Your Logo →</a> <a href="/check" class="btn btn-secondary">Audit Your Domain</a> </div> </main> </div> <footer> <div class="container footer-inner"> <div class="footer-left"> <span class="footer-copyright">© 2026 makeBIMI™</span> </div> <div class="footer-links"> <a href="/global" class="footer-link">Global</a> <a href="/knowledge">Learn</a> <a href="/certificates">VMC</a> <a href="https://veribimi.com" class="seo-link" rel="noopener">veriBIMI<sup style="font-size:0.45em; font-weight:400; color:rgba(247,248,248,0.28); position:relative; top:-0.5em; margin-left:1px; vertical-align:baseline;">℠</sup></a> <a href="https://veribimi.com/founder" rel="noopener">Founder</a> <a href="https://veribimi.com/privacy" rel="noopener">Privacy</a> </div> </div> </footer> <div class="cmd-overlay" id="cmd-overlay" role="dialog" aria-modal="true" aria-label="Command palette"> <div class="cmd-modal"> <div class="cmd-search-row"> <svg class="cmd-search-icon" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg> <input type="text" class="cmd-input" id="cmd-input" placeholder="Search documentation, navigate pages…" autocomplete="off" /> <span class="cmd-esc">ESC</span> </div> <div class="cmd-results" id="cmd-results"></div> <div class="cmd-footer"> <span><kbd>↑↓</kbd> Navigate</span> <span><kbd>↵</kbd> Select</span> <span><kbd>ESC</kbd> Close</span> </div> </div> </div> <div class="toast-container" id="toast-container"></div> <!-- Inject sections data for Cmd+K --> <script> window.DOC_SECTIONS = [{"id":"how-to-check-if-your-bimi-record-is-valid","level":1,"text":"How to Check if Your BIMI Record is Valid","anchor":"how-to-check-if-your-bimi-record-is-valid","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"what-a-bimi-checker-actually-tests","level":2,"text":"What a BIMI Checker Actually Tests","anchor":"what-a-bimi-checker-actually-tests","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"step-1-validate-your-dmarc-policy","level":2,"text":"Step 1: Validate Your DMARC Policy","anchor":"step-1-validate-your-dmarc-policy","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"step-2-check-your-bimi-dns-record","level":2,"text":"Step 2: Check Your BIMI DNS Record","anchor":"step-2-check-your-bimi-dns-record","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"step-3-validate-the-svg-file","level":2,"text":"Step 3: Validate the SVG File","anchor":"step-3-validate-the-svg-file","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"step-4-understand-per-client-requirements","level":2,"text":"Step 4: Understand Per-Client Requirements","anchor":"step-4-understand-per-client-requirements","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"gmail","level":3,"text":"Gmail","anchor":"gmail","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"apple-mail","level":3,"text":"Apple Mail","anchor":"apple-mail","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"yahoo-mail","level":3,"text":"Yahoo Mail","anchor":"yahoo-mail","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"step-5-run-a-full-bimi-check","level":2,"text":"Step 5: Run a Full BIMI Check","anchor":"step-5-run-a-full-bimi-check","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"common-issues-and-fixes","level":2,"text":"Common Issues and Fixes","anchor":"common-issues-and-fixes","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"},{"id":"keeping-your-bimi-record-valid-over-time","level":2,"text":"Keeping Your BIMI Record Valid Over Time","anchor":"keeping-your-bimi-record-valid-over-time","slug":"bimi-checker-validation-guide","docTitle":"bimi-checker-validation-guide"}]; </script> <script src="/public/js/app.js?v4"></script> <script src="/public/js/toc.js?v4"></script> <script src="/public/js/interactions.js?v4"></script> <!-- ── COOKIE CONSENT BANNER (EU/EEA only, based on CF-IPCountry) ── --> <div id="cookie-consent-banner" style="display:none;" role="dialog" aria-label="Cookie consent"> <div class="cookie-consent-inner"> <p class="cookie-consent-text"> We use Google Analytics to understand how visitors use this tool. No advertising cookies are set. <a href="https://veribimi.com/privacy" rel="noopener" class="cookie-consent-link">Privacy Policy</a> </p> <div class="cookie-consent-actions"> <button class="cookie-consent-btn cookie-consent-accept" onclick="acceptCookies()">Accept</button> <button class="cookie-consent-btn cookie-consent-decline" onclick="declineCookies()">Decline</button> </div> </div> </div> <script> (function() { // Only show for EU/EEA countries (Cloudflare sets CF-IPCountry via meta tag injected server-side) var country = document.documentElement.getAttribute('data-country') || ''; var EU_COUNTRIES = ['AT','BE','BG','CY','CZ','DE','DK','EE','ES','FI','FR','GR','HR', 'HU','IE','IT','LT','LU','LV','MT','NL','PL','PT','RO','SE','SI','SK', 'IS','LI','NO','GB','CH']; // EEA + UK + Switzerland (nFADP) var consent = localStorage.getItem('makebimi_cookie_consent'); if (!consent && EU_COUNTRIES.indexOf(country) !== -1) { document.getElementById('cookie-consent-banner').style.display = 'block'; } if (consent === 'declined') { // Remove GA4 script if previously declined var scripts = document.querySelectorAll('script[src*="googletagmanager"]'); scripts.forEach(function(s) { s.parentNode && s.parentNode.removeChild(s); }); } })(); function acceptCookies() { localStorage.setItem('makebimi_cookie_consent', 'accepted'); document.getElementById('cookie-consent-banner').style.display = 'none'; } function declineCookies() { localStorage.setItem('makebimi_cookie_consent', 'declined'); document.getElementById('cookie-consent-banner').style.display = 'none'; // Disable GA4 for this session window['ga-disable-G-S1HG2ZB83B'] = true; } </script> </body> </html>