DEV Community

clause-netizen
clause-netizen

Posted on

Detect any website tech stack, metadata, socials & a screenshot — in one API call

If you've ever needed to know what a website is built with — its framework, its meta tags, the social accounts it links to, plus a screenshot — you've probably reached for three or four different tools to get it. Here's how to get all of it from a single HTTP request.

The problem

Say you're enriching inbound leads, or keeping an eye on a competitor's stack, or doing quick due-diligence on a domain. The data you want is scattered:

  • Tech stack detection → one tool
  • Page metadata / OpenGraph → another
  • Linked social profiles → manual scraping
  • A screenshot → a headless-browser service

That's a lot of moving parts for "tell me about this URL."

One request instead

SiteIntel bundles it into a single GET. Here's the call through RapidAPI:

curl --request GET \
  --url 'https://siteintel.p.rapidapi.com/v1/analyze?url=https://stripe.com' \
  --header 'X-RapidAPI-Key: YOUR_KEY' \
  --header 'X-RapidAPI-Host: siteintel.p.rapidapi.com'
Enter fullscreen mode Exit fullscreen mode

And the response (this is a real call against stripe.com):

{
  "final_url": "https://stripe.com/en-ca",
  "status": 200,
  "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
  "description": "Stripe is a financial services platform...",
  "lang": "en-CA",
  "favicon": "https://images.stripeassets.com/.../favicon.svg",
  "open_graph": {
    "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
    "image": "https://images.stripeassets.com/.../Stripe.jpg",
    "type": "website"
  },
  "detected_tech": ["Next.js"],
  "social_links": [
    "https://github.com/stripe",
    "https://www.youtube.com/watch?v=eMSqlQMk480"
  ],
  "emails": ["jane.diaz@stripe.com"],
  "server": "nginx"
}
Enter fullscreen mode Exit fullscreen mode

No LLM in the loop, so it's fast and the cost per call stays low.

Using it in code

A small example: take a list of domains and pull the framework + a contact signal for each.

const HEADERS = {
  "X-RapidAPI-Key": process.env.RAPIDAPI_KEY,
  "X-RapidAPI-Host": "siteintel.p.rapidapi.com",
};

async function analyze(url) {
  const res = await fetch(
    `https://siteintel.p.rapidapi.com/v1/analyze?url=${encodeURIComponent(url)}`,
    { headers: HEADERS }
  );
  return res.json();
}

const domains = ["https://stripe.com", "https://vercel.com", "https://figma.com"];

for (const d of domains) {
  const data = await analyze(d);
  console.log(`${d.padEnd(24)} ${data.detected_tech.join(", ") || ""}`);
}
Enter fullscreen mode Exit fullscreen mode
https://stripe.com       Next.js
https://vercel.com       Next.js
https://figma.com        React
Enter fullscreen mode Exit fullscreen mode

Where this is actually useful

  • Lead enrichment — turn a raw domain into firmographic-ish signals (stack, socials, a contact email) before it hits your CRM.
  • Competitor monitoring — diff detected_tech over time to catch a re-platform.
  • Sales research — "this prospect runs Shopify" changes your pitch.
  • Content / link previewsopen_graph + favicon + a screenshot endpoint (/v1/screenshot) cover preview cards.

Try it without signing up

There's a live demo on the site — paste any URL and watch the JSON come back: siteintel.duckdns.org. When you want it in your own code, the free tier on RapidAPI is 50 requests/month, and Pro is $9.99 for higher throughput.

A couple of honest caveats: tech detection is signal-based, so it finds what's detectable from the markup and headers (it won't see a backend language with no client footprint), and the email field only surfaces addresses already published on the page. For metadata, stack, socials, and screenshots in one call, though, it saves a real amount of plumbing.

If you build something with it, I'd genuinely like to hear what — drop a comment.

Top comments (0)