Preset / Developer Tools
AI Competitor Research Agent
account_treeAutomation Steps
wait_selector
bodywait
Value: 2
javascript
Value: return (async function(){ const root=location.href,origin=location.origin; const uniq=(a,n)=>Array.from(new Set(a.map(x=>(x||'').replace(/\s+/g,' ').trim()).filter(Boolean))).slice(0,n); const txt=e=>e?(e.innerText||e.textContent||'').replace(/\s+/g,' ').trim():''; const meta=(d,n)=>{const e=d.querySelector('meta[name="'+n+'"],meta[property="'+n+'"]');return e?(e.content||'').trim():''}; const parse=(d,url,type)=>{ const raw=d.body?(d.body.innerText||d.body.textContent||''):''; const lines=uniq(raw.split(/\n+/).filter(x=>x.trim().length>=12&&x.trim().length<=400),400); const heads=uniq(Array.from(d.querySelectorAll('h1,h2,h3')).map(txt),60); const h1=txt(d.querySelector('h1')); const paras=uniq(Array.from(d.querySelectorAll('main p,article p,body p')).map(txt).filter(x=>x.length>=30),18); const money=/(?:[$€£]\s?\d[\d,.]*(?:\s?\/\s?(?:mo|month|yr|year))?|\d[\d,.]*\s?(?:USD|EUR|GBP))/i; const prices=uniq(lines.filter(x=>money.test(x)).flatMap(x=>x.match(/(?:[$€£]\s?\d[\d,.]*(?:\s?\/\s?(?:mo|month|yr|year))?|\d[\d,.]*\s?(?:USD|EUR|GBP))/ig)||[]),30); const blocks=uniq(Array.from(d.querySelectorAll('section,article,[class*="price" i],[class*="plan" i]')).map(txt).filter(x=>x.length>=30&&x.length<=1800&&(money.test(x)||/free|enterprise|per month|per year|billing/i.test(x))),20); const ctas=uniq(Array.from(d.querySelectorAll('a,button,[role="button"]')).map(txt).filter(x=>/^(get|start|try|book|request|contact|buy|see|view|learn|explore|sign up|join|compare|watch|download|talk)/i.test(x)),25); const audience=uniq(heads.concat(lines).filter(x=>/^(for |use cases?|solutions? for|built for|made for)/i.test(x)||/teams?|agencies|startups|enterprise|developers|marketers|sales|operations|creators|small business/i.test(x)),35); const claims=uniq([h1].concat(heads,lines).filter(x=>/best|leading|#1|all-in-one|fastest|easiest|powerful|trusted by|save time|increase|grow|transform|automate|scale|without/i.test(x)),35); const features=uniq(Array.from(d.querySelectorAll('main li,main h3,main h4,article li,article h3')).map(txt).concat(heads.filter(x=>!money.test(x))),60); const integrations=uniq(Array.from(d.querySelectorAll('a[href*="integrat" i],a[href*="apps" i],img[alt]')).map(e=>txt(e)||e.alt||'').concat(lines.filter(x=>/integrat|connects? with|works with|native app/i.test(x))),40); return {url,page_type:type,title:txt(d.querySelector('title')),meta_description:meta(d,'description')||meta(d,'og:description'),main_headline:h1,headings:heads,calls_to_action:ctas,pricing:{prices,plans_and_plan_differences:blocks},additional_features:features,integrations,use_cases_and_target_audiences:audience,positioning_and_marketing_claims:claims,representative_copy:paras}; }; const home=parse(document,root,'homepage'); const bits=(home.title||'').split(/[|–—-]/).map(x=>x.trim()).filter(Boolean); const company=meta(document,'og:site_name')||bits[0]||txt(document.querySelector('header a[aria-label],header a'))||''; let sub=''; const h=document.querySelector('h1'); if(h){let n=h.nextElementSibling;while(n&&!sub){const v=txt(n);if(v.length>=25&&v.length<=500)sub=v;n=n.nextElementSibling}} if(!sub)sub=home.representative_copy[0]||home.meta_description||''; const deny=/blog|news|press|article|resource|case-stud|customer-stor|privacy|terms|legal|cookie|career|jobs|login|log-in|signin|sign-in|signup|sign-up|register|account|auth|support|help|docs|documentation|community|status|affiliate|contact/i; const rules=[['pricing',/pricing|plans?|packages?|subscriptions?/,100],['features',/features?|capabilities|functionality/,90],['product',/product|platform|overview|how-it-works/,82],['solutions',/solutions?|use-cases?|industries|teams/,76],['integrations',/integrations?|apps?|marketplace|connectors?/,72]]; const cand=[]; Array.from(document.querySelectorAll('a[href]')).forEach(a=>{try{const u=new URL(a.getAttribute('href'),root);if(u.origin!==origin||!/^https?:$/.test(u.protocol))return;const path=(u.pathname||'/').replace(/\/$/,'')||'/',label=txt(a),hay=(path+' '+label).toLowerCase();if(path==='/'||deny.test(hay))return;let best=null;rules.forEach(r=>{if(r[1].test(hay)){const s=r[2]+(label&&r[1].test(label.toLowerCase())?8:0)-path.split('/').length;if(!best||s>best.score)best={category:r[0],score:s}}});if(best)cand.push({category:best.category,score:best.score,title:label,url:origin+path})}catch(e){}}); cand.sort((a,b)=>b.score-a.score); const urls=new Set(),cats=new Set(),selected=[]; cand.forEach(x=>{if(selected.length<5&&!urls.has(x.url)&&!cats.has(x.category)){urls.add(x.url);cats.add(x.category);selected.push(x)}}); const get=async item=>{const c=new AbortController(),t=setTimeout(()=>c.abort(),8000);try{const r=await fetch(item.url,{credentials:'same-origin',signal:c.signal,headers:{Accept:'text/html'}}),html=await r.text(),d=new DOMParser().parseFromString(html,'text/html'),p=parse(d,r.url||item.url,item.category);p.http_status=r.status;return p}catch(e){return {url:item.url,page_type:item.category,error:String(e&&e.message?e.message:e)}}finally{clearTimeout(t)}}; const pages=await Promise.all(selected.map(get)); const clean=(a,n,max)=>uniq((a||[]).filter(x=>typeof x==='string').map(x=>x.replace(/\s+/g,' ').trim()).filter(x=>x.length>=3&&x.length<=(max||220)&&!/cookie|all rights reserved|llms\.txt|sign in|©/i.test(x)),n); const pricingPage=pages.find(p=>p.page_type==='pricing'&&!p.error)||null; const pricingText=pricingPage?((pricingPage.pricing.plans_and_plan_differences||[]).join(' ')):''; const planNames=['Free','Starter','Hobby','Basic','Pro','Professional','Team','Business','Growth','Premium','Enterprise']; const plans=[]; const priceRe=/[$€£]\s?\d[\d,.]*(?:\s?\/\s?(?:month|mo|year|yr))?|Custom(?:\/month)?|Contact Sales/i; planNames.forEach(name=>{const lower=pricingText.toLowerCase(),needle=name.toLowerCase();let at=0,best=null;while((at=lower.indexOf(needle,at))!==-1){const start=at+name.length,prefix=pricingText.slice(start,start+55);if(/^\s*(?:\d[\d,.]*\s*credits?(?:\s*\/\s*month)?|[$€£]\s?\d|Custom)/i.test(prefix)){let stop=Math.min(pricingText.length,start+240);planNames.filter(n=>n!==name).forEach(n=>{const pos=lower.indexOf(n.toLowerCase(),start);if(pos!==-1&&pos<stop)stop=pos});const segment=pricingText.slice(start,stop),m=segment.match(priceRe);if(m&&(!best||m.index<best.distance))best={price:m[0],distance:m.index}}at+=name.length}if(best)plans.push({name:name,price:best.price.replace(/\s+/g,' ').trim()})}); const pageFeatures=pages.flatMap(p=>p.error?[]:(p.additional_features||[])); const pageIntegrations=pages.flatMap(p=>p.error?[]:(p.integrations||[])); const pageUseCases=pages.flatMap(p=>p.error?[]:(p.use_cases_and_target_audiences||[])); const pageClaims=pages.flatMap(p=>p.error?[]:(p.positioning_and_marketing_claims||[])); const result={competitor:{ website:root, company_or_product_name:company, homepage:{ main_headline:home.main_headline||'', subheadline:sub, product_description:home.meta_description||home.representative_copy[0]||'', target_audience:clean(home.use_cases_and_target_audiences.filter(x=>/developer|engineer|team|enterprise|operations|leader|business|compan|agenc|startup|regulated|industr/i.test(x)&&!/giving time back|ready to|built for one-off/i.test(x)),6,180), key_value_propositions:clean(home.positioning_and_marketing_claims.filter(x=>!/^(ready to|a better way|learn|explore)/i.test(x)),8,220) }, pricing:{ plans:plans, notes:pricingPage?clean(pricingPage.representative_copy,10,260):[] }, major_features:clean(home.additional_features.concat(pageFeatures).filter(x=>!/break|requires constant|maintenance|tightly coupled|one-off tasks|starting from scratch|limited adaptability|hallucinate|fail on/i.test(x)),24,140), integrations:clean(pageIntegrations.map(x=>x.replace(/\s+logo$/i,'')).filter(x=>!/^(skyvern|integrations?|check out integration|background image|partner built|all categories)$/i.test(x)),24,80), use_cases:clean(pageUseCases,20,180), positioning_and_marketing_claims:clean(home.positioning_and_marketing_claims.concat(pageClaims),20,220), calls_to_action:clean(home.calls_to_action.concat(pages.flatMap(p=>p.error?[]:(p.calls_to_action||[]))),12,80), sources:[{page_type:'homepage',url:root}].concat(selected.map(x=>({page_type:x.category,url:x.url}))), crawl_summary:{internal_pages_selected:selected.length,internal_pages_collected:pages.filter(p=>!p.error).length,max_internal_pages:5} }}; let out=document.getElementById('figranium-competitor-result');if(!out){out=document.createElement('pre');out.id='figranium-competitor-result';out.setAttribute('aria-hidden','true');out.style.cssText='position:fixed;left:0;bottom:0;width:1px;height:1px;overflow:hidden;opacity:.01;z-index:-1';(document.body||document.documentElement).appendChild(out)}out.textContent=JSON.stringify(result);return {collected:true,internal_pages:pages.length} })();
wait_selector
#figranium-competitor-resultcodeExtraction Script
const node = data.document.querySelector('#figranium-competitor-result'); if (!node) return { error: 'Collector did not produce a result' }; return JSON.parse(node.textContent);