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.
When you exceed the rate limit you'll receive a 429 Too Many Requests response. Retry after the window resets (60 seconds).
GET /scrape
Enrich a single domain with hiring intent signals and tech stack detection.
| Param | Type | Required | Description |
|---|---|---|---|
| domain | string | Yes | Domain 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
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 Field | Type | Required | Description |
|---|---|---|---|
| domains | array | Yes | List 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
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
StackSight uses Stripe webhooks to handle subscription lifecycle events automatically.
| Event | Effect |
|---|---|
| checkout.session.completed | Provisions API key and upgrades plan |
| invoice.payment_succeeded | Resets monthly usage quota on billing cycle |
| customer.subscription.deleted | Downgrades 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"]
}
}
| Field | Type | Description |
|---|---|---|
| source | string | "cache" or "live" → whether data was served from cache or freshly scraped |
| data.company_name | string | Resolved company name |
| data.is_hiring | boolean | Whether the company is actively hiring |
| data.engineering_roles | array | Engineering job titles detected |
| data.sales_roles | array | Sales job titles detected |
| data.detected_tech_stack | array | Technologies found on their careers/jobs pages |
Error Codes
| Status | Meaning |
|---|---|
| 400 | Missing or invalid domain parameter |
| 401 | Missing or invalid API key |
| 429 | Rate limit exceeded → retry after 60s |
| 500 | Scrape 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);