Free Chrome Extension

Take Behind The Ad
Everywhere You Browse

Install our free Chrome extension and right-click any ad, email, or post to expose it instantly — without leaving the page.

No account required to install · Works on all websites

🖱️

Right-Click Any Ad

Works on Facebook, Instagram, Google, YouTube, webinars, seminars — everywhere.

📸

Quick Analyze Button

Click the extension icon and hit 'Quick Analyze' to capture & analyze the whole page instantly.

🔒

100% Private

We never track your browsing history. The extension only runs when you ask it to.

instagram.com

"I made $47K last month with this one system"

Sponsored

Open image in new tab
Save image as...
🔍 Analyze This Ad

How to Install

Takes 60 seconds. No coding needed.

1

Click "Add to Chrome — It's Free" above to download the extension files

2

Put all files in a new folder on your computer (e.g. "BehindTheAd")

3

Open Chrome → go to chrome://extensions → enable "Developer mode" (top-right toggle)

4

Click "Load unpacked" → select your BehindTheAd folder

5

Done! Right-click any ad or text anywhere on the web.

Downloads: manifest.json · background.js · content.js · popup.html · README.txt

Frequently Asked Questions

Extension Source Files

manifest.json
{
  "manifest_version": 3,
  "name": "Behind The Ad",
  "version": "1.1.0",
  "description": "Right-click any ad, text, or image to instantly expose what's really going on. Capture full-page screenshots for analysis.",
  "permissions": [
    "contextMenus",
    "activeTab",
    "storage",
    "scripting",
    "tabs"
  ],
  "host_permissions": [
    "https://ad-xray-insights.base44.app/*",
    "<all_urls>"
  ],
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "js": [
        "content.js"
      ]
    }
  ],
  "action": {
    "default_title": "Behind The Ad",
    "default_popup": "popup.html"
  },
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
  }
}
background.js
const APP_URL = "https://ad-xray-insights.base44.app";

chrome.runtime.onInstalled.addListener(() => {
  chrome.contextMenus.create({ id: "analyze-image", title: "🔍 Analyze This Ad", contexts: ["image"] });
  chrome.contextMenus.create({ id: "analyze-text", title: "🔍 Analyze This Text", contexts: ["selection"] });
  chrome.contextMenus.create({ id: "analyze-screenshot", title: "📸 Capture & Analyze This Page", contexts: ["page"] });
});

chrome.contextMenus.onClicked.addListener(async (info, tab) => {
  if (info.menuItemId === "analyze-image") {
    await chrome.storage.local.set({ pendingAnalysis: { type: "image", imageUrl: info.srcUrl, src: tab.url } });
    chrome.tabs.create({ url: APP_URL + "/analyze?from_extension=1&type=image&image_url=" + encodeURIComponent(info.srcUrl) + "&src=" + encodeURIComponent(tab.url) });
    chrome.tabs.sendMessage(tab.id, { type: "SHOW_TOAST", msg: "Analyzing ad..." });
  } else if (info.menuItemId === "analyze-text") {
    await chrome.storage.local.set({ pendingAnalysis: { type: "text", content: info.selectionText, src: tab.url } });
    chrome.tabs.create({ url: APP_URL + "/analyze?from_extension=1&type=text&text=" + encodeURIComponent(info.selectionText) + "&src=" + encodeURIComponent(tab.url) });
    chrome.tabs.sendMessage(tab.id, { type: "SHOW_TOAST", msg: "Analyzing text..." });
  } else if (info.menuItemId === "analyze-screenshot") {
    captureAndAnalyze(tab);
  }
});

// Called from popup.js via message
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.type === "QUICK_ANALYZE") {
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      if (tabs[0]) captureAndAnalyze(tabs[0]);
    });
    sendResponse({ ok: true });
  }
  return true;
});

async function captureAndAnalyze(tab) {
  try {
    // Show toast on the page
    chrome.tabs.sendMessage(tab.id, { type: "SHOW_TOAST", msg: "Capturing screenshot..." });

    // Capture the visible area as a data URL
    const dataUrl = await chrome.tabs.captureVisibleTab(tab.windowId, { format: "jpeg", quality: 85 });

    // Store the screenshot dataUrl so the app page can retrieve it
    await chrome.storage.local.set({
      screenshotCapture: { dataUrl, srcUrl: tab.url, timestamp: Date.now() }
    });

    // Open the app with screenshot flag
    chrome.tabs.create({
      url: APP_URL + "/analyze?from_extension=1&type=screenshot&src=" + encodeURIComponent(tab.url)
    });
  } catch (err) {
    console.error("Behind The Ad screenshot error:", err);
    // Fallback: open with page URL
    chrome.tabs.create({
      url: APP_URL + "/analyze?from_extension=1&type=page&page_url=" + encodeURIComponent(tab.url)
    });
  }
}
content.js
// Behind The Ad content script
chrome.runtime.onMessage.addListener((message) => {
  if (message.type === "SHOW_TOAST") {
    showToast(message.msg || "Analyzing...");
  }
});

function showToast(msg) {
  const existing = document.getElementById("bta-toast");
  if (existing) existing.remove();

  const style = document.createElement("style");
  style.id = "bta-style";
  style.textContent = `
    @keyframes btaSlideIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
    @keyframes btaSlideOut { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(12px); } }
  `;
  if (!document.getElementById("bta-style")) document.head.appendChild(style);

  const toast = document.createElement("div");
  toast.id = "bta-toast";
  toast.innerHTML = "👁 Behind The Ad — " + msg;
  toast.style.cssText = `
    position: fixed; bottom: 24px; right: 24px; z-index: 2147483647;
    background: #0b0e13; color: #00e64d; border: 1px solid rgba(0,230,77,0.3);
    padding: 12px 18px; border-radius: 12px; font-family: -apple-system, sans-serif;
    font-size: 13px; font-weight: 600; box-shadow: 0 8px 32px rgba(0,0,0,0.4);
    animation: btaSlideIn 0.3s ease; pointer-events: none;
  `;
  document.body.appendChild(toast);

  setTimeout(() => {
    toast.style.animation = "btaSlideOut 0.3s ease forwards";
    setTimeout(() => toast.remove(), 300);
  }, 2500);
}
popup.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <style>
    * { box-sizing: border-box; margin: 0; padding: 0; }
    body { width: 320px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
           background: #0b0e13; color: #f2f2f2; padding: 18px; }
    .logo { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
    .logo-icon { width: 30px; height: 30px; background: rgba(0,230,77,0.1); border-radius: 9px;
                 display: flex; align-items: center; justify-content: center; font-size: 15px; border: 1px solid rgba(0,230,77,0.2); }
    .logo-text { font-weight: 700; font-size: 15px; }
    .quick-btn {
      display: flex; align-items: center; justify-content: center; gap: 8px;
      width: 100%; padding: 13px; background: #00e64d; color: #0b0e13;
      border: none; border-radius: 11px; font-weight: 800; font-size: 14px;
      cursor: pointer; margin-bottom: 8px; transition: background 0.15s;
    }
    .quick-btn:hover { background: #00cc44; }
    .quick-btn:active { transform: scale(0.98); }
    .quick-btn.loading { background: rgba(0,230,77,0.3); color: #00e64d; cursor: default; }
    .quick-btn .icon { font-size: 16px; }
    .status { font-size: 11px; color: #00e64d; text-align: center; min-height: 16px; margin-bottom: 14px; }
    .divider { height: 1px; background: rgba(255,255,255,0.06); margin: 14px 0; }
    .label { font-size: 10px; font-weight: 700; color: #555b6a; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 10px; }
    .step { display: flex; align-items: flex-start; gap: 9px; margin-bottom: 9px; }
    .step-num { width: 20px; height: 20px; background: rgba(0,230,77,0.1); border-radius: 50%;
                display: flex; align-items: center; justify-content: center; font-size: 10px;
                font-weight: 700; color: #00e64d; flex-shrink: 0; margin-top: 1px; }
    .step-text { font-size: 11px; color: #9aa0b0; line-height: 1.5; }
    .step-text strong { color: #d0d5e0; }
    .open-link { display: block; text-align: center; margin-top: 14px; font-size: 11px;
                 color: #555b6a; text-decoration: none; }
    .open-link:hover { color: #00e64d; }
  </style>
</head>
<body>
  <div class="logo">
    <div class="logo-icon">👁</div>
    <div class="logo-text">Behind The Ad</div>
  </div>

  <button class="quick-btn" id="quickBtn" onclick="quickAnalyze()">
    <span class="icon">📸</span> Quick Analyze This Page
  </button>
  <div class="status" id="status"></div>

  <div class="divider"></div>
  <div class="label">Or right-click anywhere</div>

  <div class="step">
    <div class="step-num">1</div>
    <div class="step-text"><strong>Ad image:</strong> Right-click → "🔍 Analyze This Ad"</div>
  </div>
  <div class="step">
    <div class="step-num">2</div>
    <div class="step-text"><strong>Suspicious text:</strong> Highlight → right-click → "🔍 Analyze This Text"</div>
  </div>
  <div class="step">
    <div class="step-num">3</div>
    <div class="step-text"><strong>Full page:</strong> Right-click → "📸 Capture &amp; Analyze This Page"</div>
  </div>

  <a class="open-link" href="https://ad-xray-insights.base44.app" target="_blank">Open Behind The Ad →</a>

  <script>
    function quickAnalyze() {
      const btn = document.getElementById("quickBtn");
      const status = document.getElementById("status");
      btn.classList.add("loading");
      btn.textContent = "Capturing screenshot...";
      status.textContent = "Opening analysis in a new tab...";
      chrome.runtime.sendMessage({ type: "QUICK_ANALYZE" }, () => {
        setTimeout(() => window.close(), 800);
      });
    }
  </script>
</body>
</html>