← Back to dashboard

SocialScopeIQ Bookmarklet

Drag the link below to your browser's bookmarks bar. When you spot a real lead on Facebook, NextDoor, Quora, LinkedIn, or anywhere else, click the bookmark to capture it.

+ Capture to SocialScopeIQ

(Drag this button to your bookmarks bar. Clicking here in the page won't do anything — it's a bookmarklet, not a link.)

How to use

  1. Drag the button above onto your browser's bookmarks bar.
  2. Browse Facebook groups, NextDoor, Quora, LinkedIn — any site where you spot a real mortgage question.
  3. Click the bookmark. A small dialog will pop up to confirm capture details.
  4. Submit. The lead lands in your dashboard with an AI-drafted response ready to review.

Manual capture

If the bookmarklet doesn't pull clean text from a site, you can also POST directly to /api/bookmarklet with JSON { community, source, post_title, post_url, author, body }.

Source (for the curious)

// SocialScopeIQ bookmarklet
// Runs when the user clicks the bookmark on a third-party page (Facebook, NextDoor, Quora, LinkedIn, etc.).
// Tries to detect the post automatically. If detection fails, prompts the user.
(function () {
  var API = "https://socialscopeiq.com/api/bookmarklet";

  // Best-effort detection. Each site has different DOM. We fall back to selection / prompt.
  function detectCommunity() {
    var h = location.hostname.toLowerCase();
    if (h.indexOf("facebook.com") !== -1) return "Facebook";
    if (h.indexOf("nextdoor.com") !== -1) return "NextDoor";
    if (h.indexOf("quora.com") !== -1) return "Quora";
    if (h.indexOf("linkedin.com") !== -1) return "LinkedIn";
    if (h.indexOf("reddit.com") !== -1) return "Reddit";
    if (h.indexOf("biggerpockets.com") !== -1) return "BiggerPockets";
    return "Manual";
  }

  function getSelectedOr(selectors) {
    var sel = (window.getSelection() || "").toString().trim();
    if (sel) return sel;
    for (var i = 0; i < selectors.length; i++) {
      var el = document.querySelector(selectors[i]);
      if (el && el.textContent && el.textContent.trim()) {
        return el.textContent.trim();
      }
    }
    return "";
  }

  var community = detectCommunity();
  var url = location.href;

  // Try to pull a sensible title and body from common patterns.
  var detectedTitle =
    document.querySelector("meta[property='og:title']")?.getAttribute("content") ||
    document.title ||
    "";
  var detectedBody = getSelectedOr([
    "[role='article']",
    "main article",
    "article",
    "[data-testid='post_message']",
    ".feed-shared-update-v2__description",
    ".question-text"
  ]).slice(0, 4000);

  // Show a small confirm dialog so the user can clean it up before POST.
  var title = prompt("Post title (edit if needed):", detectedTitle.slice(0, 240)) || "";
  if (!title) return;

  var author = prompt("Author (or 'Unknown'):", "") || "Unknown";

  var body = prompt(
    "Post body (a sentence or two is fine — used for tier classification + drafting):",
    detectedBody.slice(0, 800)
  ) || "";

  var sourceGuess =
    community === "Facebook" ? (document.title || "Facebook group") :
    community === "NextDoor" ? "NextDoor" :
    community === "Quora" ? "Quora question" :
    community === "LinkedIn" ? "LinkedIn post" :
    community;

  var source = prompt("Source (group name / topic):", sourceGuess) || sourceGuess;

  var payload = {
    community: community,
    source: source,
    post_title: title,
    post_url: url,
    author: author,
    body: body
  };

  fetch(API, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload)
  })
    .then(function (r) { return r.json(); })
    .then(function (j) {
      if (j.status === "inserted") {
        alert("Captured to SocialScopeIQ (tier " + j.tier + "). Open the dashboard to review.");
      } else if (j.status === "exists") {
        alert("Already captured — see the dashboard.");
      } else {
        alert("Error: " + (j.error || "unknown"));
      }
    })
    .catch(function (e) { alert("Network error: " + e.message); });
})();