1import"../chunks/DsnmJJEf.js";import{o as Ya,a as Ja}from"../chunks/BlcaXu_Q.js";import{p as Xa,d as _,W as ue,ax as Za,g as a,a5 as et,s as t,e as c,h as n,t as F,a as s,b as at,f as X,k as tt,i as d,n as ne,$ as rt,r as l,u as Fe,j as ot,c as he,af as st,aG as lt}from"../chunks/BHsuc0-1.js";import{s as M}from"../chunks/Dga1o0pd.js";import{i as m}from"../chunks/BHCoVhZ5.js";import{e as Ie,i as ia}from"../chunks/BovoQ_dI.js";import{h as nt}from"../chunks/BMlE8NEi.js";import{h as it}from"../chunks/aM-R_-kQ.js";import{a as ge}from"../chunks/BstbdMds.js";import{r as ct,a as V,s as vt}from"../chunks/ONhhb1ny.js";import{d as dt,e as Te,r as ca}from"../chunks/CUIAGpw3.js";import{s as ye}from"../chunks/Cu1Ghc_I.js";import{b as ft}from"../chunks/B9Wo39Hx.js";import{b as va}from"../chunks/BrjhyJFx.js";import{p as da}from"../chunks/C_rIzjpa.js";import{g as pt}from"../chunks/BeBXvK8X.js";import{E as mt}from"../chunks/nz1Hd3YQ.js";import{S as ut}from"../chunks/CsG1VxRY.js";import{H as ht}from"../chunks/D6Y3nbGD.js";import{E as gt}from"../chunks/drpHBeZ_.js";import{C as yt}from"../chunks/CNBteTzH.js";import"../chunks/69_IOA4Y.js";import{a as Ne,r as fa,d as pa}from"../chunks/BrIXhd55.js";import{i as Z}from"../chunks/Dgic4XSJ.js";import{c as We,d as ma,e as $e,f as ua,g as bt}from"../chunks/C7L5Ic9L.js";import{m as _t}from"../chunks/BsBglKe9.js";import{P as xt}from"../chunks/beZsKSbY.js";import{F as wt}from"../chunks/CS6ILHrh.js";import{B as kt}from"../chunks/CA4VTmKT.js";import{s as ha}from"../chunks/C1UZEexi.js";import{p as ga}from"../chunks/JLxoxT9M.js";import{p as St}from"../chunks/CKdvR1YR.js";import{M as Lt}from"../chunks/wmRngo0C.js";var At=c(`<!> <meta name="description" content="Spy on competitor Facebook ads. Paste any Facebook Ad Library URL or Page ID and see every ad they're running, with creative, CTA, and landing page." class="svelte-ns09l2"/> <link rel="canonical" href="https://spreshapp.com/ad-spy" class="svelte-ns09l2"/>`,1),Pt=c('<span class="loading loading-sm loading-spinner svelte-ns09l2"></span>'),Et=c('<div class="flex items-center gap-2 p-4 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)"><span class="loading loading-xs loading-spinner svelte-ns09l2"></span> Searching brandsâ¦</div>'),Ct=c('<div class="p-4 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">No brands match. Try a different name.</div>'),Ft=c('<img class="h-9 w-9 shrink-0 rounded-full object-cover svelte-ns09l2" referrerpolicy="no-referrer"/>'),It=c('<div class="h-9 w-9 shrink-0 rounded-full svelte-ns09l2" style="background: var(--charcoal-06)"></div>'),Tt=st('<svg class="h-3.5 w-3.5 shrink-0 svelte-ns09l2" viewBox="0 0 24 24" fill="#1d9bf0" aria-label="Verified"><path d="M22.25 12c0-1.43-.88-2.67-2.19-3.34.46-1.39.2-2.9-.81-3.91s-2.52-1.27-3.91-.81c-.66-1.31-1.91-2.19-3.34-2.19s-2.67.88-3.33 2.19c-1.4-.46-2.91-.2-3.92.81s-1.26 2.52-.8 3.91c-1.31.67-2.2 1.91-2.2 3.34s.89 2.67 2.2 3.34c-.46 1.39-.21 2.9.8 3.91s2.52 1.26 3.91.81c.67 1.31 1.91 2.19 3.34 2.19s2.68-.88 3.34-2.19c1.39.45 2.9.2 3.91-.81s1.27-2.52.81-3.91c1.31-.67 2.19-1.91 2.19-3.34zm-11.71 4.2L6.8 12.46l1.41-1.42 2.26 2.26 4.8-5.23 1.47 1.36-6.2 6.77z" class="svelte-ns09l2"></path></svg>'),Ut=c('<button type="button" class="flex w-full items-center gap-3 px-3 py-2 text-left transition-colors svelte-ns09l2"><!> <div class="min-w-0 flex-1 svelte-ns09l2"><div class="flex items-center gap-1.5 truncate text-sm font-[family:var(--font-mono)] font-bold svelte-ns09l2" style="color: var(--charcoal)"> <!></div> <div class="truncate text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)"> <!></div></div></button>'),Bt=c('<div class="absolute top-full right-0 left-0 z-20 mt-2 max-h-96 overflow-y-auto rounded-xl border bg-white svelte-ns09l2" style="border-color: var(--charcoal-12); box-shadow: var(--shadow-lg);"><!></div>'),Rt=c('<div class="mb-6 rounded-lg border bg-red-50 p-4 font-[family:var(--font-mono)] svelte-ns09l2" style="border-color: var(--coral-tint)"><div class="flex items-center gap-2 svelte-ns09l2" style="color: #8A4A52"><!> <span class="svelte-ns09l2"> </span></div></div>'),Dt=c('<div class="rounded-xl border bg-white p-10 text-center svelte-ns09l2" style="border-color: var(--charcoal-08); box-shadow: var(--shadow-md);"><p class="eyebrow mb-3 svelte-ns09l2">Brand found</p> <h2 class="mb-2 text-2xl font-[family:var(--font-display)] font-bold svelte-ns09l2" style="color: var(--charcoal)">Login to view top ads</h2> <p class="mx-auto mb-6 max-w-sm text-sm font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-70)">Create a free account to view the ads, landing pages, and brand details.</p> <a class="inline-block rounded-xl px-8 py-3 text-sm font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 svelte-ns09l2" style="background: var(--charcoal); color: var(--cream);" data-login-cta="ad_spy_gate" data-login-label="Login to view more info">Login to view ads</a></div>'),Mt=c('<div class="mb-5 break-inside-avoid rounded-lg border bg-white svelte-ns09l2" style="border-color: var(--charcoal-08); box-shadow: var(--shadow-xs)"><div class="h-64 animate-pulse rounded-t-lg bg-gray-100 svelte-ns09l2"></div> <div class="space-y-2 p-4 svelte-ns09l2"><div class="h-3 w-2/3 animate-pulse rounded bg-gray-100 svelte-ns09l2"></div> <div class="h-3 w-full animate-pulse rounded bg-gray-100 svelte-ns09l2"></div> <div class="h-3 w-5/6 animate-pulse rounded bg-gray-100 svelte-ns09l2"></div></div></div>'),qt=c('<div class="columns-1 gap-5 sm:columns-2 lg:columns-4 svelte-ns09l2"></div>'),jt=c('<div class="rounded-lg border bg-white p-12 text-center svelte-ns09l2" style="border-color: var(--charcoal-08); box-shadow: var(--shadow-md)"><p class="font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">No active ads found for this brand right now.</p></div>'),Ot=c('<div class="flex items-center gap-2 border-b px-3 py-2 svelte-ns09l2" style="border-color: var(--charcoal-08)"><span class="truncate text-xs font-[family:var(--font-mono)] font-bold svelte-ns09l2" style="color: var(--charcoal)"> </span></div>'),zt=c('<div class="flex items-center gap-1.5 border-b px-3 py-1.5 svelte-ns09l2" style="border-color: var(--charcoal-08)"><span class="h-1.5 w-1.5 shrink-0 rounded-full bg-green-400 svelte-ns09l2"></span> <span class="text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)"> </span></div>'),Nt=c('<img alt="Video preview" class="w-full object-cover opacity-60 svelte-ns09l2"/>'),Wt=c('<div class="flex h-52 items-center justify-center svelte-ns09l2" style="background: var(--charcoal-06)"></div>'),$t=c('<div class="relative svelte-ns09l2"><!> <div class="absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/50 p-4 text-center svelte-ns09l2"><p class="text-sm font-[family:var(--font-mono)] font-bold text-white svelte-ns09l2">Login to watch more videos</p> <a href="/login" class="rounded-lg px-4 py-2 text-xs font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 svelte-ns09l2" style="background: white; color: var(--charcoal);">Sign in free</a></div></div>'),Ht=c('<video playsinline="" controls preload="metadata" class="w-full svelte-ns09l2"></video>',2),Kt=c('<div class="relative border-b bg-black svelte-ns09l2" style="border-color: var(--charcoal-08)"><!></div>'),Gt=c('<div class="border-b svelte-ns09l2" style="border-color: var(--charcoal-08)"><img class="w-full object-cover svelte-ns09l2" loading="lazy"/></div>'),Vt=c('<button class="mb-3 w-full text-left svelte-ns09l2"><p style="color: var(--charcoal-70)"> </p> <span class="mt-1 block text-[10px] font-[family:var(--font-mono)] font-bold uppercase svelte-ns09l2" style="color: var(--charcoal-55)"> </span></button>'),Qt=c('<a target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1.5 rounded border px-3 py-1.5 text-xs font-[family:var(--font-mono)] font-bold transition-all hover:opacity-80 svelte-ns09l2" style="border-color: var(--charcoal-12); color: var(--charcoal); background: white;"> <!></a>'),Yt=c('<a target="_blank" rel="noopener noreferrer" class="truncate text-xs font-[family:var(--font-mono)] underline underline-offset-2 hover:opacity-70 svelte-ns09l2" style="color: var(--charcoal-55)"> </a>'),Jt=c('<span class="svelte-ns09l2"></span>'),Xt=c(`<div class="pointer-events-none absolute right-0 bottom-full z-10 mb-2 w-52 rounded-lg border bg-white p-3 opacity-0 shadow-lg transition-opacity group-hover:pointer-events-auto group-hover:opacity-100 svelte-ns09l2" style="border-color: var(--charcoal-12); box-shadow: var(--shadow-lg);"><p class="mb-1.5 text-xs font-[family:var(--font-mono)] font-bold svelte-ns09l2" style="color: var(--charcoal)">Save ad to your swipe file</p> <p class="mb-2 text-[11px] font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">Login to save ads, build your swipe file, and transform your creative 2 workflow.</p> <a href="/login" class="block rounded px-3 py-1.5 text-center text-xs font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 svelte-ns09l2" style="background: var(--charcoal); color: var(--cream);">Sign in free</a></div>`),Zt=c('<p class="mt-1 text-[10px] font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)"> </p>'),er=c('<div class="rounded-lg border bg-white transition-all hover:-translate-y-0.5 svelte-ns09l2" style="border-color: var(--charcoal-08); box-shadow: var(--shadow-xs);"><!> <!> <!> <div class="p-3 svelte-ns09l2"><!> <div class="flex items-center justify-between gap-2 svelte-ns09l2"><!> <div class="group relative shrink-0 svelte-ns09l2"><a href="/login" title="Log in to save" class="flex h-8 w-8 items-center justify-center rounded border transition-all hover:border-[var(--coral)] svelte-ns09l2" style="background: white; border-color: var(--charcoal-12); color: var(--charcoal-55);"><!></a> <!></div></div> <!></div></div>'),ar=c('<span class="loading loading-sm loading-spinner svelte-ns09l2" style="color: var(--charcoal-55)"></span>'),tr=c('<a href="/login" class="rounded-xl px-6 py-3 text-sm font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 svelte-ns09l2" style="background: var(--charcoal); color: var(--cream);">Login to view more ads</a> <p class="text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">Free account unlocks unlimited brand searches</p>',1),rr=c('<button class="rounded-xl px-6 py-3 text-sm font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 svelte-ns09l2" style="background: var(--charcoal); color: var(--cream);">Load more ads</button>'),or=c('<div class="mt-4 flex flex-col items-center gap-3 pb-8 svelte-ns09l2"><!></div>'),sr=c('<!> <div class="h-4 svelte-ns09l2"></div> <!>',1),lr=c('<div class="flex items-start gap-3 rounded-lg bg-white p-4 svelte-ns09l2" style="box-shadow: var(--shadow-xs), inset 0 0 0 1px var(--charcoal-08);"><span class="mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full svelte-ns09l2" style="background: var(--moss); color: var(--charcoal);"><!></span> <div class="svelte-ns09l2"><div class="mb-1 text-sm font-[family:var(--font-display)] font-bold svelte-ns09l2" style="color: var(--charcoal)"> </div> <p class="text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-70)"> </p></div></div>'),nr=c('<section class="mt-12 grid grid-cols-1 gap-4 md:grid-cols-3 svelte-ns09l2"></section>'),ir=c('<span class="absolute inset-0 animate-ping rounded-full svelte-ns09l2" style="background: var(--coral); opacity: 0.4;"></span>'),cr=c('<div class="persona-dot relative aspect-square rounded-full svelte-ns09l2"><!></div>'),vr=c(`<section class="mt-16 svelte-ns09l2"><div class="mb-6 text-center svelte-ns09l2"><p class="eyebrow mb-2 svelte-ns09l2">WHAT YOU DECODE</p> <h2 class="text-[clamp(1.5rem,3vw,2.25rem)] leading-[1.15] font-[family:var(--font-display)] font-bold tracking-[-0.01em] svelte-ns09l2" style="color: var(--charcoal)">Three angles your competitors keep hidden.</h2></div> <div class="grid grid-cols-1 gap-5 md:grid-cols-3 svelte-ns09l2"><div class="spy-card relative overflow-hidden rounded-xl bg-white p-5 svelte-ns09l2" style="box-shadow: var(--shadow-sm), inset 0 0 0 1px var(--charcoal-08);"><p class="mb-3 text-[10px] font-[family:var(--font-mono)] font-bold tracking-wider up
2percase svelte-ns09l2" style="color: var(--charcoal-55)">01, Messaging</p> <h3 class="mb-2 text-base font-[family:var(--font-display)] font-bold svelte-ns09l2" style="color: var(--charcoal)">Pain â outcome framing</h3> <p class="mb-4 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-70)">See how brands turn a single pain point into half a dozen headline variations.</p> <div class="space-y-1.5 svelte-ns09l2"><div class="rounded border bg-[var(--bg-page)] px-2.5 py-1.5 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="border-color: var(--charcoal-08); color: var(--charcoal-70)"><span style="color: var(--coral)" class="svelte-ns09l2">Tired of</span> bloating after meals?</div> <div class="rounded border bg-[var(--bg-page)] px-2.5 py-1.5 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="border-color: var(--charcoal-08); color: var(--charcoal-70)"><span style="color: var(--moss-strong, var(--charcoal))" class="svelte-ns09l2">Flat stomach</span> in 14 days.</div> <div class="rounded border bg-[var(--bg-page)] px-2.5 py-1.5 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="border-color: var(--charcoal-08); color: var(--charcoal-70)">Doctors hate this one trick.</div></div></div> <div class="spy-card relative overflow-hidden rounded-xl bg-white p-5 svelte-ns09l2" style="box-shadow: var(--shadow-sm), inset 0 0 0 1px var(--charcoal-08);"><p class="mb-3 text-[10px] font-[family:var(--font-mono)] font-bold tracking-wider uppercase svelte-ns09l2" style="color: var(--charcoal-55)">02, Audience</p> <h3 class="mb-2 text-base font-[family:var(--font-display)] font-bold svelte-ns09l2" style="color: var(--charcoal)">Who they're targeting</h3> <p class="mb-4 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-70)">Persona signals are baked into every ad. Spot the niche they're attacking.</p> <div class="grid grid-cols-4 gap-1.5 svelte-ns09l2"></div> <p class="mt-3 text-[11px] font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">2 of 8 personas hit</p></div> <div class="spy-card relative overflow-hidden rounded-xl bg-white p-5 svelte-ns09l2" style="box-shadow: var(--shadow-sm), inset 0 0 0 1px var(--charcoal-08);"><p class="mb-3 text-[10px] font-[family:var(--font-mono)] font-bold tracking-wider uppercase svelte-ns09l2" style="color: var(--charcoal-55)">03, Funnel</p> <h3 class="mb-2 text-base font-[family:var(--font-display)] font-bold svelte-ns09l2" style="color: var(--charcoal)">Ad â landing page map</h3> <p class="mb-4 text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-70)">Every ad links somewhere. See if they send traffic to a PDP, quiz, or VSL.</p> <svg viewBox="0 0 220 100" class="w-full svelte-ns09l2" aria-hidden="true"><g font-family="var(--font-mono)" font-size="9" font-weight="700" fill="var(--charcoal)" class="svelte-ns09l2"><rect x="4" y="36" width="56" height="28" rx="4" fill="white" stroke="var(--charcoal-12)" class="svelte-ns09l2"></rect><text x="32" y="54" text-anchor="middle" class="svelte-ns09l2">Ad</text><rect x="84" y="6" width="60" height="22" rx="4" fill="white" stroke="var(--charcoal-12)" class="svelte-ns09l2"></rect><text x="114" y="21" text-anchor="middle" class="svelte-ns09l2">Quiz</text><rect x="84" y="40" width="60" height="22" rx="4" fill="var(--moss)" stroke="var(--charcoal-12)" class="svelte-ns09l2"></rect><text x="114" y="55" text-anchor="middle" class="svelte-ns09l2">Landing</text><rect x="84" y="74" width="60" height="22" rx="4" fill="white" stroke="var(--charcoal-12)" class="svelte-ns09l2"></rect><text x="114" y="89" text-anchor="middle" class="svelte-ns09l2">PDP</text><rect x="160" y="40" width="56" height="22" rx="4" fill="white" stroke="var(--charcoal-12)" class="svelte-ns09l2"></rect><text x="188" y="55" text-anchor="middle" class="svelte-ns09l2">Checkout</text></g><g stroke="var(--charcoal-18)" stroke-width="1.25" fill="none" stroke-dasharray="3 3" class="svelte-ns09l2"><path d="M60 50 C 72 50, 72 17, 84 17" class="spy-flow spy-flow-1 svelte-ns09l2"></path><path d="M60 50 L 84 51" class="spy-flow spy-flow-2 svelte-ns09l2"></path><path d="M60 50 C 72 50, 72 85, 84 85" class="spy-flow spy-flow-3 svelte-ns09l2"></path><path d="M144 51 L 160 51" class="spy-flow spy-flow-4 svelte-ns09l2"></path></g></svg></div></div></section> <!>`,1),dr=c(`<div class="mx-auto max-w-7xl svelte-ns09l2"><header class="text-center svelte-ns09l2"><div class="svelte-ns09l2"><h1 class="mb-3 text-3xl font-[family:var(--font-display)] font-extrabold tracking-tight md:text-5xl svelte-ns09l2" style="color: var(--charcoal)">Spy on competitor<br class="hidden md:block svelte-ns09l2"/> <span style="color: var(--coral)" class="svelte-ns09l2">Facebook ads</span></h1> <p class="mx-auto max-w-2xl text-sm font-[family:var(--font-mono)] md:text-base svelte-ns09l2" style="color: var(--charcoal-70)">Paste any Facebook Ad Library URL or type a brand name. See every ad they're running right 3 now, no signup required.</p></div></header> <form class="relative mx-auto mb-4 max-w-2xl svelte-ns09l2"><div class="flex items-center gap-2 rounded-2xl bg-white p-2 transition-shadow focus-within:shadow-[var(--shadow-lg)] svelte-ns09l2" style="box-shadow: var(--shadow-md), inset 0 0 0 1px var(--charcoal-12);"><input type="text" placeholder="Brand name (e.g. Nike) or Facebook Ad Library URL" autocomplete="off" class="min-w-0 flex-1 bg-transparent px-3 py-3 text-sm font-[family:var(--font-mono)] focus:outline-none md:text-base svelte-ns09l2" style="color: var(--charcoal);" required/> <button type="submit" class="flex shrink-0 items-center gap-2 rounded-xl px-5 py-3 text-sm font-[family:var(--font-mono)] font-bold transition-all hover:opacity-90 disabled:opacity-40 svelte-ns09l2" style="background: var(--charcoal); color: var(--fg-inverse);"><!> Fetch ads</button></div> <!></form> <div class="svelte-ns09l2"><p class="mb-12 text-center text-xs font-[family:var(--font-mono)] svelte-ns09l2" style="color: var(--charcoal-55)">Tip: type a brand name for suggestions, or paste a Facebook Ad Library URL.</p></div> <!> <!> <!> <!> <!> <!> <!> <section class="mt-16 mb-6 svelte-ns09l2"><!></section></div>`);function Kr(ya,ba){Xa(ba,!0);
3const be=_t("spresh_bs_cache",3);let T=_(""),H=_(!1),U=_(!1),g=_(ue([])),R=_(""),z=_(""),K=_(""),J=_(!1),_e=_(ue(new Set)),Ue=_(ue(new Set)),N=_(ue(new Set)),q=_(null),j=_(!1),ie=_(!1),xe=_(void 0),He=_(0);Za(()=>{if(!a(xe))return;const e=new IntersectionObserver(r=>{r[0]?.isIntersecting&&a(He)===0&&(et(He),e.disconnect(),Xe())},{rootMargin:"300px"});return e.observe(a(xe)),()=>e.disconnect()});let S=_(ue([])),G=_(!1),we=_(!1),ke,D=_(-1);const _a=1e3,xa=1800;let te=null;const wa=Fe(()=>{const e=new URL("/login","https://spreshapp.local"),r=new URL("/app/ad-search","https://spreshapp.local");return a(K)&&r.searchParams.set("page_id",a(K)),e.searchParams.set("redirectTo",r.pathname+r.search),e.pathname+e.search}),ka=`<script type="application/ld+json">${JSON.stringify({"@context":"https://schema.org","@type":"WebPage",name:"Facebook Ad Spy Tool | SpreshApp",description:"Spy on competitor Facebook ads. Paste any Facebook Ad Library URL or Page ID to see every active ad a brand is running.",url:"https://spreshapp.com/ad-spy"})}<\/script>`,Sa=[{question:"What does this Facebook ad spy tool do?",answer:"Paste any brand's Facebook Ad Library URL or Page ID and we'll surface every ad they're currently running. See the creative, headline, CTA, landing page, and how long each ad has been live."},{question:"Where do I find the Facebook Ad Library URL?",answer:"Go to facebook.com/ads/library, search for any brand, then copy the URL from your address bar. It will look like https://www.facebook.com/ads/library/?view_all_page_id=123456789. Paste that here."},{question:"How many brands can I check for free?",answer:"Logged-out visitors get 1 free brand fetch. After signing up, paid plans (Lite, Basic, Pro) let you follow multiple brands and get daily delta tracking."},{question:"Is this data live?",answer:"Yes. We pull directly from the Facebook Ad Library at request time, so you see the same ads Facebook is showing today."},{question:"What is the difference between this and Follow Brand?",answer:"This page is for one-off snapshots. The Follow Brand feature (paid plans) re-fetches every brand you follow on a schedule and tracks new ads, killed ads, and creative changes over time."}];function Ke(e){const r=e.trim();if(!r)return!1;if(/^\d+$/.test(r))return!0;try{return new URL(r),!0}catch{return!1}}function La(){if(t(D,-1),Ke(a(T))){t(S,[],!0),t(G,!1),clearTimeout(ke),te?.abort();return}const e=a(T).trim();if(clearTimeout(ke),te?.abort(),e.length<2){t(S,[],!0),t(G,!1),t(we,!1);return}t(we,!0),t(G,!0),ke=setTimeout(()=>{Ge(e)},_a)}async function Ge(e){const r=new AbortController;te=r;try{const o=await fetch(`${xt}/public/brand-search?q=${encodeURIComponent(e)}`,{signal:r.signal});if(!o.ok){t(S,[],!0);return}const i=await o.json();t(S,(i.pages??[]).slice(0,8),!0),t(G,a(S).length>0)}catch(o){o?.name!=="AbortError"&&t(S,[],!0)}finally{te===r&&(t(we,!1),te=null)}}function Se(e){if(t(T,e.name,!0),t(S,[],!0),t(G,!1),t(D,-1),t(K,e.page_id,!0),Z()){pt(`/app/ad-search?page_id=${encodeURIComponent(e.page_id)}`);return}Qe(e.page_id,e.name)}async function Ve(e,r){t(R,""),t(g,[],!0),t(q,null),t(j,!1),t(U,!0),t(H,!0),t(z,r,!0),t(K,e,!0),t(N,new Set,!0),t(J,!1),We(e,r,!1),$e(e,r),await new Promise(o=>setTimeout(o,xa)),t(H,!1),t(J,!0)}async function Qe(e,r){if(!Z()){await Ve(e,r);return}const o=be.get(e);if(o){t(R,""),t(g,o.ads,!0),t(q,o.next_cursor,!0),t(j,o.has_more,!0),t(z,o.pageName,!0),t(K,e,!0),t(U,!0),t(N,new Set,!0);return}t(R,""),t(g,[],!0),t(q,null),t(j,!1),t(U,!0),t(H,!0),t(z,r,!0),t(K,e,!0),t(N,new Set,!0),t(J,!1),We(e,r,Z());try{const i=await Ne(`/v1/brand/${encodeURIComponent(e)}?sort=longest_running`);if(i.status===402){ma(e,r),$e(e,r),await new Promise(h=>setTimeout(h,3e3)),t(J,!0);return}if(!i.ok){const h=await fa(i);t(R,pa(h),!0);return}const u=await i.json();t(g,u.ads??[],!0),t(q,u.next_cursor,!0),t(j,u.has_more,!0),a(g).length>0&&a(g)[0].page_name&&t(z,a(g)[0].page_name,!0),ua(e,a(z),a(g).length),be.set(e,{ads:a(g),next_cursor:a(q),has_more:a(j),pageName:a(z)})}catch(i){t(R,i instanceof Error?i.message:"Fetch failed",!0)}finally{t(H,!1)}}function Aa(e){const r=e.trim();try{const i=new URL(r).searchParams.get("view_all_page_id");if(i)return i}catch{}return/^\d+$/.test(r)?r:""}function Le(e){return e.ad_archive_id}function Pa(e){a(N).has(e)?a(N).delete(e):a(N).add(e),t(N,new Set(a(N)),!0)}function Ea(e){return Z()||a(_e).has(e)?!0:a(_e).size>=3?(t(Ue,new Set([...a(Ue),e]),!0),!1):(t(_e,new Set([...a(_e),e]),!0),!0)}function Ye(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return e}}function Ca(e){if(!e)return 0;const r=Math.floor(Date.now()/1e3);return Math.max(0,Math.floor((r-e)/86400))}async function Je(){const e=Aa(a(T));if(!e){t(R,"Paste a Facebook Ad Library URL or a numeric Page ID.");return}const r=a(T).trim();if(!Z()){await Ve(e,r);return}const o=be.get(e);if(o){t(R,""),t(g,o.ads,!0),t(q,o.next_cursor,!0),t(j,o.has_more,!0),t(z,o.pageName,!0),t(K,e,!0),t(U,!0),t(N,new Set,!0);return}t(R,""),t(g,[],!0),t(q,null),t(j,!1),t(U,!0),t(H,!0),t(z,""),t(K,e,!0),t(N,new Set,!0),t(J,!1),We(e,a(T).trim(),Z());try{const i=await Ne(`/v1/brand/${encodeURIComponent(e)}?sort=longest_running`);if(i.status===402){ma(e,a(T).trim()),$e(e,a(T).trim()),await new Promise(h=>setTimeout(h,3e3)),t(J,!0);return}if(!i.ok){const h=await fa(i);t(R,pa(h),!0);return}const u=await i.json();t(g,u.ads??[],!0),t(q,u.next_cursor,!0),t(j,u.has_more,!0),a(g).length>0&&a(g)[0].page_name&&t(z,a(g)[0].page_name,!0),ua(e,a(z)||a(T).trim(),a(g).length),be.set(e,{ads:a(g),next_cursor:a(q),has_more:a(j),pageName:a(z)})}catch(i){t(R,i instanceof Error?i.message:"Fetch failed",!0)}finally{t(H,!1)}}
3async function Xe(){if(!(!a(j)||a(ie)||!a(q)||!a(K))){t(ie,!0);try{const e=await Ne(`/v1/brand/${encodeURIComponent(a(K))}?sort=longest_running&cursor=${encodeURIComponent(a(q))}`);if(!e.ok)return;const r=await e.json(),o=new Set(a(g).map(Le)),i=(r.ads??[]).filter(u=>!o.has(Le(u)));t(g,[...a(g),...i],!0),t(q,r.next_cursor,!0),t(j,r.has_more,!0)}catch{}finally{t(ie,!1)}}}function Fa(e){e.preventDefault(),Je()}let Be=_(void 0);function Ia(e){if(!e.isComposing){if(a(G)&&a(S).length>0){if(e.key==="ArrowDown"){e.preventDefault(),t(D,(a(D)+1)%a(S).length);return}if(e.key==="ArrowUp"){e.preventDefault(),t(D,a(D)<=0?a(S).length-1:a(D)-1,!0);return}if(e.key==="Escape"){t(G,!1),t(D,-1);return}if(e.key==="Enter"&&a(D)>=0){e.preventDefault(),Se(a(S)[a(D)]);return}if(e.key==="Enter"&&a(D)<0){e.preventDefault(),Se(a(S)[0]);return}}e.key==="Enter"&&!e.shiftKey&&a(Be)?.requestSubmit()}}function Ta(){setTimeout(()=>{t(G,!1)},150)}Ya(()=>{const e=da.url.searchParams.get("q");if(!e)return;const r=da.url.searchParams.get("page_name");if(Ke(e)){t(T,r||e,!0),r?Qe(e,r):Je();return}t(T,e,!0),(async()=>(await Ge(e),a(S).length>0&&Se(a(S)[0])))()}),Ja(()=>{clearTimeout(ke),te?.abort()});var Ae=dr();it("ns09l2",e=>{var r=At(),o=X(r);nt(o,()=>ka),ne(4),tt(()=>{rt.title="Facebook Ad Spy Tool | SpreshApp"}),s(e,r)});var Re=n(Ae),Ua=n(Re);l(Re);var ce=d(Re,2),De=n(ce),ee=n(De);ct(ee),ee.__input=La,ee.__keydown=Ia;var Me=d(ee,2),Ba=n(Me);{var Ra=e=>{var r=Pt();s(e,r)},Da=e=>{ut(e,{class:"h-4 w-4"})};m(Ba,e=>{a(H)?e(Ra):e(Da,!1)})}ne(),l(Me),l(De);var Ma=d(De,2);{var qa=e=>{var r=Bt(),o=n(r);{var i=h=>{var I=Et();s(h,I)},u=h=>{var I=he(),B=X(I);{var v=w=>{var k=Ct();s(w,k)},P=w=>{var k=he(),W=X(k);Ie(W,19,()=>a(S),$=>$.page_id,($,E,re)=>{var C=Ut();C.__mousedown=L=>{L.preventDefault(),Se(a(E))};var Q=n(C);{var qe=L=>{var O=Ft();F(()=>{V(O,"src",a(E).image_uri),V(O,"alt",a(E).name)}),s(L,O)},Pe=L=>{var O=It();s(L,O)};m(Q,L=>{a(E).image_uri?L(qe):L(Pe,!1)})}var ve=d(Q,2),de=n(ve),oe=n(de),Ee=d(oe);{var je=L=>{var O=Tt();s(L,O)};m(Ee,L=>{a(E).verification==="BLUE_VERIFIED"&&L(je)})}l(de);var Ce=d(de,2),fe=n(Ce,!0),pe=d(fe);{var Oe=L=>{var O=lt();F(ze=>M(O,` · ${ze??""} likes`),[()=>Intl.NumberFormat("en",{notation:"compact"}).format(a(E).likes)]),s(L,O)};m(pe,L=>{a(E).likes>0&&L(Oe)})}l(Ce),l(ve),l(C),F(()=>{ye(C,`background: ${a(D)===a(re)?"var(--charcoal-06)":"transparent"};`),M(oe,`${a(E).name??""} `),M(fe,a(E).category)}),Te("mouseenter",C,()=>t(D,a(re),!0)),s($,C)}),s(w,k)};m(B,w=>{a(S).length===0?w(v):w(P,!1)},!0)}s(h,I)};m(o,h=>{a(we)&&a(S).length===0?h(i):h(u,!1)})}l(r),s(e,r)};m(Ma,e=>{a(G)&&e(qa)})}l(ce),va(ce,e=>t(Be,e),()=>a(Be));var Ze=d(ce,2),ea=d(Ze,2);{var ja=e=>{var r=Rt(),o=n(r),i=n(o);mt(i,{class:"h-5 w-5 shrink-0"});var u=d(i,2),h=n(u,!0);l(u),l(o),l(r),F(()=>M(h,a(R))),s(e,r)};m(ea,e=>{a(R)&&e(ja)})}var aa=d(ea,2);{var Oa=e=>{var r=Dt(),o=d(n(r),6);o.__click=function(...i){bt?.apply(this,i)},l(r),F(()=>V(o,"href",a(wa))),s(e,r)};m(aa,e=>{a(J)&&e(Oa)})}var ta=d(aa,2);{var za=e=>{var r=qt();Ie(r,20,()=>Array(8),ia,(o,i)=>{var u=Mt();s(o,u)}),l(r),s(e,r)};m(ta,e=>{a(H)&&a(g).length===0&&e(za)})}var ra=d(ta,2);{var Na=e=>{var r=jt();s(e,r)};m(ra,e=>{a(U)&&!a(H)&&a(g).length===0&&!a(R)&&!a(J)&&e(Na)})}var oa=d(ra,2);{var Wa=e=>{var r=sr(),o=X(r);Lt(o,{get items(){return a(g)},itemKey:Le,lgCols:4,card:(B,v=ot)=>{const P=Fe(()=>Le(v())),w=Fe(()=>Ca(v().ad_started_on));var k=er(),W=n(k);{var $=f=>{var p=Ot(),b=n(p),A=n(b,!0);l(b),l(p),F(()=>M(A,v().page_name)),s(f,p)};m(W,f=>{v().page_name&&f($)})}var E=d(W,2);{var re=f=>{var p=zt(),b=d(n(p),2),A=n(b);l(b),l(p),F(()=>M(A,`${a(w)??""} day${a(w)!==1?"s":""} active`)),s(f,p)};m(E,f=>{v().ad_started_on&&f(re)})}var C=d(E,2);{var Q=f=>{var p=Kt(),b=n(p);{var A=x=>{var y=$t(),ae=n(y);{var me=se=>{var le=Nt();ge(le,Qa=>ga?.(Qa)),F(()=>V(le,"src",v().video_preview_image_url||v().image_url)),ca(le),s(se,le)},Va=se=>{var le=Wt();s(se,le)};m(ae,se=>{v().video_preview_image_url||v().image_url?se(me):se(Va,!1)})}ne(2),l(y),s(x,y)},Y=x=>{var y=Ht();ge(y,(ae,me)=>St?.(ae,me),()=>({onBeforePlay:()=>Ea(a(P))})),F(()=>{V(y,"src",v().video_url),V(y,"poster",v().video_preview_image_url||v().image_url||void 0)}),s(x,y)};m(b,x=>{a(Ue).has(a(P))?x(A):x(Y,!1)})}l(p),s(f,p)},qe=f=>{var p=he(),b=X(p);{var A=Y=>{var x=Gt(),y=n(x);ge(y,ae=>ga?.(ae)),l(x),F(()=>{V(y,"src",v().image_url),V(y,"alt",v().body_text||"Ad creative")}),ca(y),s(Y,x)};m(b,Y=>{v().image_url&&Y(A)},!0)}s(f,p)};m(C,f=>{v().display_format==="VIDEO"&&v().video_url?f(Q):f(qe,!1)})}var Pe=d(C,2),ve=n(Pe);{var de=f=>{const p=Fe(()=>a(N).has(a(P)));var b=Vt();b.__click=()=>Pa(a(P));var A=n(b),Y=n(A,!0);l(A);var x=d(A,2),y=n(x,!0);l(x),l(b),F(()=>{vt(A,1,`text-xs leading-relaxed font-[family:var(--font-mono)] ${a(p)?"":"line-clamp-3"}`,"svelte-ns09l2"),M(Y,v().body_text),M(y,a(p)?"Show less":"Show more")}),s(f,b)};
3m(ve,f=>{v().body_text&&f(de)})}var oe=d(ve,2),Ee=n(oe);{var je=f=>{var p=Qt(),b=n(p),A=d(b);gt(A,{class:"h-3 w-3 shrink-0"}),l(p),F(()=>{V(p,"href",v().landing_page),M(b,`${v().cta??""} `)}),s(f,p)},Ce=f=>{var p=he(),b=X(p);{var A=x=>{var y=Yt(),ae=n(y,!0);l(y),F(me=>{V(y,"href",v().landing_page),M(ae,me)},[()=>Ye(v().landing_page)]),s(x,y)},Y=x=>{var y=Jt();s(x,y)};m(b,x=>{v().landing_page?x(A):x(Y,!1)},!0)}s(f,p)};m(Ee,f=>{v().cta&&v().landing_page?f(je):f(Ce,!1)})}var fe=d(Ee,2),pe=n(fe),Oe=n(pe);ht(Oe,{class:"h-4 w-4"}),l(pe);var L=d(pe,2);{var O=f=>{var p=Xt();s(f,p)};m(L,f=>{Z()||f(O)})}l(fe),l(oe);var ze=d(oe,2);{var Ga=f=>{var p=Zt(),b=n(p,!0);l(p),F(A=>M(b,A),[()=>Ye(v().landing_page)]),s(f,p)};m(ze,f=>{v().cta&&v().landing_page&&f(Ga)})}l(Pe),l(k),s(B,k)},$$slots:{card:!0}});var i=d(o,2);va(i,I=>t(xe,I),()=>a(xe));var u=d(i,2);{var h=I=>{var B=or(),v=n(B);{var P=k=>{var W=ar();s(k,W)},w=k=>{var W=he(),$=X(W);{var E=C=>{var Q=tr();ne(2),s(C,Q)},re=C=>{var Q=rr();Q.__click=()=>void Xe(),s(C,Q)};m($,C=>{Z()?C(re,!1):C(E)},!0)}s(k,W)};m(v,k=>{a(ie)?k(P):k(w,!1)})}l(B),s(I,B)};m(u,I=>{(a(j)||a(ie))&&I(h)})}s(e,r)};m(oa,e=>{a(g).length>0&&e(Wa)})}var sa=d(oa,2);{var $a=e=>{var r=nr();Ie(r,20,()=>[{t:"One free brand",d:"Run the tool now, sign up later."},{t:"Every active ad",d:"See creative, headline, CTA, landing page."},{t:"Live from Meta",d:"Pulled at request time, never stale data."}],o=>o.t,(o,i)=>{var u=lr(),h=n(u),I=n(h);yt(I,{class:"h-3.5 w-3.5"}),l(h);var B=d(h,2),v=n(B),P=n(v,!0);l(v);var w=d(v,2),k=n(w,!0);l(w),l(B),l(u),F(()=>{M(P,i.t),M(k,i.d)}),s(o,u)}),l(r),ge(r,o=>ha?.(o)),s(e,r)};m(sa,e=>{a(U)||e($a)})}var la=d(sa,2);{var Ha=e=>{var r=vr(),o=X(r),i=d(n(o),2),u=d(n(i),2),h=d(n(u),6);Ie(h,20,()=>Array(8),ia,(B,v,P)=>{var w=cr();ye(w,`background: ${P===2||P===5?"var(--coral-tint)":"var(--charcoal-06)"}; animation-delay: ${P*.1}s;`);var k=n(w);{var W=$=>{var E=ir();s($,E)};m(k,$=>{(P===2||P===5)&&$(W)})}l(w),s(B,w)}),l(h),ne(2),l(u),ne(2),l(i),l(o),ge(o,B=>ha?.(B));var I=d(o,2);kt(I,{}),s(e,r)};m(la,e=>{a(U)||e(Ha)})}var na=d(la,2),Ka=n(na);wt(Ka,{title:"Frequently Asked Questions",subtitle:"Everything you need to know about spying on competitor ads.",get items(){return Sa}}),l(na),l(Ae),F(e=>{ye(Ae,`padding-top: ${a(U)?"clamp(0.75rem, 2vh, 1.5rem)":"clamp(1.5rem, calc(20vh - 4rem), 200px)"}; transition: padding-top 0.5s ease-out;`),ye(Ua,` 4 max-height: ${a(U)?"0px":"500px"}; 5 opacity: ${a(U)?0:1}; 6 overflow: hidden; 7 margin-bottom: ${a(U)?"0":"2rem"}; 8 transition: max-height 0.5s ease-out, opacity 0.3s ease-out, margin-bottom 0.4s ease-out; 9 `),Me.disabled=e,ye(Ze,` 10 max-height: ${a(U)?"0px":"80px"}; 11 opacity: ${a(U)?0:1}; 12 overflow: hidden; 13 transition: max-height 0.4s ease-out, opacity 0.25s ease-out; 14 `)},[()=>a(H)||!a(T).trim()]),Te("submit",ce,Fa),Te("blur",ee,Ta),Te("focus",ee,()=>{a(S).length>0&&t(G,!0)}),ft(ee,()=>a(T),e=>t(T,e)),s(ya,Ae),at()}dt(["input","keydown","mousedown","click"]);export{Kr as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.