FR
Copied
Modules

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:

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

Each input row keeps its original columns and gains the columns below. Detection is best-effort: any cell may be empty when the signal is absent or ambiguous. Multi-value cells are joined with \|.

Column Description
status Reachability of the site, same values as dead_check (alive, stale, dead, unknown, aggregator).
cms, cms_version Content management system or site builder, and its version when exposed.
cms_outdated yes, no, unknown or n/a.
page_builder Page builder (for WordPress sites, for example).
frameworks_js, frameworks_css JavaScript and CSS frameworks.
analytics Analytics products.
marketing_crm Marketing automation and CRM tools.
chat Chat widgets.
payment, ecommerce Payment providers and e-commerce platforms.
hosting_cdn Hosting provider and CDN.
tag_manager, ab_testing Tag managers and A/B testing tools.
compliance Consent and compliance tools.
ad_pixels Advertising pixels.
wp_plugins WordPress plugins and themes detected.
schema_types schema.org types found on the page.
schema_telephone, schema_address, schema_opening_hours Values declared in the site's own structured data.
tech_alerts Notable technical alerts (outdated CMS, for example).
tech_all_json Full detection as JSON, one entry per technology.

The full per-site report (three-tier hierarchy, business signals, technical metadata) is available on the job detail page. The registry lists tech_cms, tech_analytics and tech_ads_pixels under produces: these are signals that correspond to the cms, analytics and ad_pixels columns above.

The file also carries cms_version, frameworks_css, ecommerce, ab_testing, schema_address and schema_opening_hours (address and opening hours declared in the site's structured data, when present).

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: