Authentication

All authenticated endpoints accept two methods:

  • Session cookie — automatically set when you log in through the web UI
  • Bearer token — use your API key for programmatic access

Find your API key on the Settings page. You can regenerate it at any time.

bash
curl -X POST https://siteintelica.com/api/analyze \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
No API key? Some endpoints are public and don't require authentication. These are marked with Public below.

Rate Limits

Limits are enforced per user account. Exceeding them returns 429 Too Many Requests.

PlanScans/DayAPI Requests/Hour
Free510
Pro100200
Business1,0001,000
Anonymous (no account)3

Rate limit headers are included in responses:

X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0

Error Handling

All endpoints return JSON error responses with an error field:

{"error": "Daily scan limit reached. Upgrade for more.", "plan": "free", "limit": 5}
StatusMeaning
400Bad request — missing or invalid parameters
401Unauthorized — invalid API key or not logged in
403Forbidden — feature requires a higher plan tier
429Rate limit exceeded
500Server error
503Service unavailable (e.g., Cloudflare Radar not configured)

Base URL

All endpoints are relative to your SiteIntelica instance:

https://siteintelica.com/api/...

All request bodies use Content-Type: application/json unless noted otherwise.

POST /api/analyze Auth Optional

Full website analysis — tech stack detection, security audit, SEO, DNS, SSL, performance, and more. Features are gated by plan tier.

Request Body

FieldTypeRequiredDescription
urlstringYesFull URL including http:// or https://
forcebooleanNoBypass 5-minute scan cache
bash
curl -X POST https://siteintelica.com/api/analyze \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://github.com", "force": true}'
Response (truncated)
{
  "plan": "pro",
  "technologies": [{"name": "React", "categories": ["JavaScript frameworks"], "confidence": 100}],
  "seo": {"title": "GitHub", "description": "...", "score": 85},
  "security": {"grade": "A", "headers": {...}},
  "network": {"A": ["140.82.121.4"], "AAAA": [...]},
  "performance": {"score": 92, ...},
  "radarDeepScan": {"verdicts": {"phishing": false, "malware": false}, ...}
}
POST /api/bulk-analyze Auth Required Pro+

Batch scan multiple URLs from an uploaded CSV or TXT file. Each URL gets full tech stack analysis.

Request

Send as multipart/form-data with a file field containing a CSV/TXT with one URL per line.

bash
curl -X POST https://siteintelica.com/api/bulk-analyze \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@urls.csv"

List Jobs

GET /api/bulk-analyze returns your recent bulk scan jobs with status and results.

POST /api/scrape Auth Required

Smart scraper — extracts structured data from any URL: title, meta tags, headings, links, images, emails, phones, social profiles, JSON-LD, Open Graph, and custom CSS selectors.

Request Body

FieldTypeRequiredDescription
urlstringYesURL to scrape (auto-prefixed with https:// if missing)
selectorsobjectNoKey-value map of CSS selectors to extract, e.g. {"price": ".price-tag"}
bash
curl -X POST https://siteintelica.com/api/scrape \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/products",
    "selectors": {
      "prices": ".product-price",
      "titles": "h2.product-name"
    }
  }'
Response (truncated)
{
  "url": "https://example.com/products",
  "statusCode": 200,
  "title": "Products — Example Store",
  "description": "Browse our catalog...",
  "links": [{"href": "/product/1", "text": "Widget A", "isExternal": false}],
  "emails": ["info@example.com"],
  "customSelectors": {
    "prices": ["$29.99", "$49.99"],
    "titles": ["Widget A", "Widget B"]
  },
  "fetchedAt": "2026-04-13T10:30:00Z"
}
POST /api/crawl Auth Required

Site crawler — follows internal links up to 30 pages, building a page map with SEO health data per page (title, word count, load time, issues).

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to crawl (e.g. example.com)
maxPagesnumberNoMax pages to crawl (default: 20, max: 30)
bash
curl -X POST https://siteintelica.com/api/crawl \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com", "maxPages": 15}'
Response (truncated)
{
  "domain": "example.com",
  "pagesFound": 42,
  "pagesCrawled": 15,
  "pages": [
    {"url": "https://example.com/", "statusCode": 200, "title": "Example", "wordCount": 340, "loadTimeMs": 230, "issues": []},
    {"url": "https://example.com/about", "statusCode": 200, "title": "About Us", "wordCount": 520, "loadTimeMs": 180, "issues": ["Missing meta description"]}
  ],
  "summary": {"avgWordCount": 430, "avgLoadTimeMs": 205, "totalIssues": 3, "healthPercent": 87}
}
POST /api/contacts Auth Required

Contact finder — deep multi-page scan of /contact, /about, /team, /imprint pages to extract emails, phones, social profiles, and key people.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to scan (e.g. example.com)
bash
curl -X POST https://siteintelica.com/api/contacts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'
Response (truncated)
{
  "domain": "example.com",
  "emails": [
    {"address": "info@example.com", "source": "/contact", "type": "general"},
    {"address": "sales@example.com", "source": "/about", "type": "sales"}
  ],
  "phones": [{"number": "+1-555-0100", "source": "/contact"}],
  "socialProfiles": {"twitter": ["@example"], "linkedin": ["company/example"]},
  "people": [{"name": "Jane Doe", "role": "CEO", "linkedin": "in/janedoe"}],
  "pagesScanned": 6,
  "confidence": "high"
}
POST /api/content-watch Auth Required

Content change tracker — monitor specific CSS selectors on any page for text changes. Supports add, remove, check, and snapshot actions.

Actions

ActionExtra FieldsDescription
addurl, selector, optional labelAdd a new content watch
removewatchIdRemove a watch
checkCheck all watches for changes
snapshotswatchIdGet snapshot history for a watch
bash
# Add a content watch
curl -X POST https://siteintelica.com/api/content-watch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "add",
    "url": "https://example.com/pricing",
    "selector": ".price-amount",
    "label": "Pricing page amount"
  }'

# Check all watches for changes
curl -X POST https://siteintelica.com/api/content-watch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action": "check"}'
GET /api/content-watch Auth Required

List all active content watches for your account.

bash
curl https://siteintelica.com/api/content-watch \
  -H "Authorization: Bearer YOUR_API_KEY"
GET /api/traffic?domain=example.com Auth Required

Multi-source traffic estimation — combines Tranco, Cloudflare Radar, Wayback Machine, CDN detection, and ad network presence into a composite estimate.

Query Parameters

ParamTypeRequiredDescription
domainstringYesDomain to analyze
GET /api/similar?domain=example.com Auth Required

Find domains with similar tech stacks using Jaccard similarity scoring. Requires a prior scan of the domain.

Query Parameters

ParamTypeRequiredDescription
domainstringYesDomain to find similar sites for
POST /api/leads Auth Required

Search scanned domains by technology — find sites using specific stacks (e.g. "WordPress + WooCommerce but not Cloudflare").

Request Body

FieldTypeRequiredDescription
includestring[]YesTechnologies that must be present
excludestring[]NoTechnologies that must be absent
limitnumberNoMax results (default: 100, max: 500)
bash
curl -X POST https://siteintelica.com/api/leads \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"include": ["WordPress", "WooCommerce"], "exclude": ["Cloudflare"], "limit": 50}'

Technology Stats

GET /api/leads returns the most popular technologies across all scanned domains.

GET /api/history/:domain Public

Returns the scan timeline for a domain with tech stack diffs between scans.

bash
curl https://siteintelica.com/api/history/github.com
GET /api/radar/top-domains Public

Global top domains by DNS query volume from Cloudflare Radar.

Query Parameters

ParamTypeRequiredDescription
limitnumberNoNumber of domains (default: 100, max: 100)
bash
curl https://siteintelica.com/api/radar/top-domains?limit=10
POST /api/monitor Auth Required

Manage your domain watchlist. Add or remove domains to monitor for tech stack changes, security regressions, and downtime.

Request Body

FieldTypeRequiredDescription
actionstringNoSet to "remove" to remove; otherwise adds
urlstringFor addFull URL including protocol
domainstringFor removeDomain to stop monitoring
labelstringNoCustom label for the watched domain
intervalstringNohourly, daily, or weekly

GET /api/monitor returns your monitored domains with latest scan data.

POST /api/uptime Auth Required

Run an HTTP health check on a domain — returns status code, response latency, and SSL certificate expiry.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to check

GET /api/uptime?domain=example.com&days=30 returns historical uptime data.

POST /api/ai/summary Auth Required

AI-generated executive summary and SWOT analysis from the latest scan data. Powered by Google Gemini with local fallback.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to summarize (must have a prior scan)
POST /api/ai/seo-audit Auth Required

AI-powered comprehensive SEO audit report from scan data.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to audit
POST /api/ai/email Auth Required

Generate a tech-aware B2B cold email draft based on scan intelligence.

Request Body

FieldTypeRequiredDescription
domainstringYesTarget domain
POST /api/ai/upgrades Auth Required

AI-generated tech stack upgrade recommendations and risk analysis.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to analyze
POST /api/ai/competitor-gap Auth Required

AI comparison of two scanned domains — identifies competitive gaps in tech, security, SEO, and performance.

Request Body

FieldTypeRequiredDescription
domainAstringYesFirst domain
domainBstringYesSecond domain
GET /api/export Auth Required

Export your scan data as JSON or CSV.

Query Parameters

ParamTypeRequiredDescription
formatstringNojson (default) or csv
typestringNoscans (default) or history
domainstringFor historyDomain to export history for
bash
# Export all scans as CSV
curl https://siteintelica.com/api/export?format=csv \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o scans.csv

# Export history for a specific domain
curl "https://siteintelica.com/api/export?type=history&domain=github.com&format=json" \
  -H "Authorization: Bearer YOUR_API_KEY"
POST /api/share Auth Required

Create shareable report links for scanned domains.

Request Body

FieldTypeRequiredDescription
domainstringYesDomain to share
titlestringNoCustom title
expiresInDaysnumberNoAuto-expire after N days

GET /api/share lists your shared reports.

GET /api/badge/:domain/:metric Public

Embeddable SVG badges for README files. Returns a shields.io-style badge.

Path Parameters

ParamDescription
domainDomain name
metricOne of: security, performance, seo, tech-count
markdown
![Security](https://siteintelica.com/api/badge/github.com/security)
![Performance](https://siteintelica.com/api/badge/github.com/performance)
GET /api/user/usage Auth Required

Returns your API usage stats — request counts by day/week/month and per-endpoint breakdown.

POST /api/user/webhook Auth Required

Set or clear your webhook URL. SiteIntelica will POST events (monitoring changes, security alerts) to this URL.

Request Body

FieldTypeRequiredDescription
webhookUrlstringNoFull URL (http/https). Send empty to clear.
POST /api/user/settings Auth Required

Account management actions.

Actions

ActionExtra FieldsDescription
update_emailemailChange your email address
change_passwordcurrentPassword, newPasswordChange your password
regenerate_api_keyGenerate a new API key (invalidates old one)
delete_accountconfirmEmailPermanently delete your account