Tech stack
Tech stack
Detect the technologies powering each prospect's website — CMS, JavaScript frameworks, analytics suites, payment processors, hosting and CDN — and return one structured row per site.
Typical use cases:
- Qualify prospects by maturity (custom build vs. drag-and-drop site builder).
- Filter by buying signal (already running paid analytics, already accepting cards).
- Route leads to the right offer based on the platform they operate.
Inputs
Items without a resolvable site_web are dropped before billing.
| Field | Type | Required | Notes |
|---|---|---|---|
items |
array | yes | 1 to 10,000 POI rows |
items[].site_web |
string | yes | HTTP(S) URL of the website to fingerprint |
source_job_id |
string | no | UUID of an upstream job to chain from |
Outputs
One enriched row per input item. Detection is best-effort: any column may be null when the signal is absent or ambiguous.
| Column | Type | Description |
|---|---|---|
tech_cms |
string | null | Primary content management system or site builder (e.g. wordpress, shopify, webflow). |
tech_analytics |
string | null | Analytics products detected on the site (e.g. ga4, matomo, plausible). |
tech_ads_pixels |
string | null | Advertising pixels detected (e.g. meta, google_ads, linkedin, tiktok). |
The full per-site report — three-tier hierarchy, business signals, technical metadata — is available on the job detail page; the CSV exposes the flat signals above for filtering and pipeline branching.
Lifecycle
Standard outsend job lifecycle; see /docs/concepts/jobs-lifecycle. Progress is reported per site, in the sites unit.
Pipeline
needs: [site_web]
produces: [tech_cms, tech_analytics, tech_ads_pixels]
Any upstream module that emits site_web — scrap being the canonical source — can feed techstack.
Endpoints
Create a job
POST /api/jobs/techstack
{
"items": [
{ "site_web": "https://example.com" },
{ "site_web": "https://another.example" }
],
"source_job_id": "8b3e…optional"
}
Returns the created job with its id and initial pending status.
Inspect a job
GET /api/jobs/{job_id}
Stream progress
GET /api/jobs/{job_id}/stream
Server-sent events, one event per processed site plus terminal status transitions.
Download results
GET /api/jobs/{job_id}/download
Returns the enriched list. Each row carries the original POI fields plus the columns documented in Outputs.
Limits
See /docs/concepts/limits for global limits. URL scheme must be http:// or https://. A job with zero valid items after site_web filtering is rejected with 400.
Errors
| HTTP | Code / message | When it happens |
|---|---|---|
| 400 | Aucun établissement avec site web |
No item in the payload has a usable site_web. |
| 400 | Quota dépassé |
The job's EF cost exceeds MAX_EF_PER_JOB. |
| 400 | Validation error | Payload shape invalid (size, missing fields, bad types). |
Errors are returned as JSON with a detail field. Once a job is running, per-item failures land in the result row (empty columns) rather than as HTTP errors.
What's next
The techstack output composes naturally with:
pricing— extract published prices and plans from the same sites.ads_intelligence— profile marketing maturity (pixels, retargeting, CMP, CRM).pagespeed— measure real-world performance and Core Web Vitals.