API Documentation

Turn any domain into a complete company profile → hiring signals, tech stack, and enrichment data in one REST API call.

Quick Start

Get your free API key at stacksight.org, then make your first call:

curl -X GET "https://stacksight.org/scrape?domain=stripe.com"   -H "X-API-Key: ss_your_key"

Authentication

X-API-Key Header

Pass your key in the X-API-Key header on every request. API keys are prefixed with ss_.

-H "X-API-Key: ss_abc123..."

You can find your API key in your dashboard at any time.

Rate Limits

Requests are rate-limited per minute per API key. Monthly quotas reset on your billing date.

Free
25
total requests
Starter
500
per month · 60/min
Pro
5,000
per month · 300/min
Business
50,000
per month · 1,000/min

When you exceed the rate limit you'll receive a 429 Too Many Requests response. Retry after the window resets (60 seconds).

GET /scrape

GET /scrape

Enrich a single domain with hiring intent signals and tech stack detection.

ParamTypeRequiredDescription
domainstringYesDomain to enrich, e.g. stripe.com
curl "https://stacksight.org/scrape?domain=notion.so"   -H "X-API-Key: ss_your_key"

Example Response

{
  "domain": "notion.so",
  "source": "live",
  "data": {
    "company_name": "Notion",
    "is_hiring": true,
    "engineering_roles": ["Backend Engineer", "ML Engineer"],
    "sales_roles": ["Account Executive"],
    "detected_tech_stack": ["React", "Cloudflare", "Google Analytics", "Intercom"],
    "cached": false
  }
}

POST /bulk

POST /bulk Pro & Business

Enrich up to 50 domains in a single request. Runs concurrently → same speed as one. Each domain counts as 1 request against your monthly quota.

Body FieldTypeRequiredDescription
domainsarrayYesList of domains to enrich. Max 50.
curl -X POST "https://stacksight.org/bulk"   -H "X-API-Key: ss_your_key"   -H "Content-Type: application/json"   -d '{"domains": ["stripe.com", "notion.so", "vercel.com"]}'
{
  "results": [
    {"domain": "stripe.com", "source": "cache", "data": {"company_name": "Stripe", "is_hiring": true, ...}},
    {"domain": "notion.so",  "source": "live",  "data": {"company_name": "Notion",  "is_hiring": true, ...}},
    {"domain": "vercel.com", "source": "cache", "data": {"company_name": "Vercel",  "is_hiring": true, ...}}
  ],
  "count": 3
}

GET /usage

GET /usage

Returns your current plan, usage stats, and remaining quota.

curl "https://stacksight.org/usage"   -H "X-API-Key: ss_your_key"
{
  "plan": "pro",
  "requests_used": 142,
  "requests_limit": 5000,
  "requests_remaining": 4858,
  "created_at": "2026-07-01T12:00:00"
}

Webhooks

POST /webhooks/stripe

StackSight uses Stripe webhooks to handle subscription lifecycle events automatically.

EventEffect
checkout.session.completedProvisions API key and upgrades plan
invoice.payment_succeededResets monthly usage quota on billing cycle
customer.subscription.deletedDowngrades account to free plan

Webhook signatures are verified using your Stripe webhook secret. Business plan customers can contact support@stacksight.org to configure custom webhook destinations.

Response Schema

All responses wrap the result in a data object:

{
  "source": "cache",   // or "live" for a fresh scrape
  "data": {
    "company_name": "Stripe",
    "is_hiring": true,
    "engineering_roles": ["Backend Engineer", "ML Engineer"],
    "sales_roles": ["Account Executive", "Solutions Engineer"],
    "detected_tech_stack": ["React", "AWS", "Cloudflare"]
  }
}
FieldTypeDescription
sourcestring"cache" or "live" → whether data was served from cache or freshly scraped
data.company_namestringResolved company name
data.is_hiringbooleanWhether the company is actively hiring
data.engineering_rolesarrayEngineering job titles detected
data.sales_rolesarraySales job titles detected
data.detected_tech_stackarrayTechnologies found on their careers/jobs pages

Error Codes

StatusMeaning
400Missing or invalid domain parameter
401Missing or invalid API key
429Rate limit exceeded → retry after 60s
500Scrape failed, please retry

Code Examples

Python

import requests

r = requests.get(
    "https://stacksight.org/scrape",
    params={"domain": "stripe.com"},
    headers={"X-API-Key": "ss_your_key"}
)
print(r.json())

JavaScript

const res = await fetch('https://stacksight.org/scrape?domain=stripe.com', {
  headers: { 'X-API-Key': 'ss_your_key' }
});
console.log(await res.json());

Node.js (axios)

const axios = require('axios');
const { data } = await axios.get('https://stacksight.org/scrape', {
  params: { domain: 'stripe.com' },
  headers: { 'X-API-Key': 'ss_your_key' }
});
console.log(data);