FR
Copied
Modules

Closed check

Check whether each point of interest is still operating, has shut down, or is uncertain: based on real abandonment signals on its website.

Purpose

The dead_check module inspects the website attached to each point of interest (POI) and decides whether the underlying business looks alive, dead, or uncertain. It correlates several abandonment signals on the same domain: expiring registration, redirection to an unrelated property (resale or rebranding), parking pages disguised as real sites, and stale or invalid TLS certificates. Directory listings (Doctolib, Pages Jaunes, Yelp, etc.) are recognised as such rather than blindly flagged as a personal site.

Inputs

A list of POIs, each carrying at least a website. Items without a site_web are filtered out at submit time.

Field Type Required Description
items array of POI objects yes 1 to 10 000 entries. Entries without a site_web are dropped before execution.
source_job_id string no Identifier of the upstream list-producing job (typically a scrap). Used for lineage in the UI and the pipeline.

No other tuning parameters: the module runs in a single mode.

Outputs

Each input row keeps its original columns and gains the following:

Column Type Description
status string Verdict: alive (the site answers like an active business), stale (reachable but abandoned-looking: under-construction page or no update for more than two years), dead (DNS failure, refused connection, server error, parking page, default server page, empty page), unknown (could not decide: protected page, timeout, or no URL), aggregator (the URL is a directory listing, not the business's own site).
reasons string Signals behind the verdict, joined with \| (for example parking_page, http_403_protected, no_url).
final_url string URL reached after redirects.
http_status integer HTTP status of the final response.
last_modified string Last modification date announced by the server, when available.
ssl_valid string Whether the TLS certificate is valid.
response_ms integer Response time in milliseconds.
domain_expires_at string Domain expiry date, when the registry publishes it.
domain_expires_in_days integer Days left before the domain expires.
registrar string Domain registrar.
redirect_off_domain string Whether the site redirects to another domain (resale or rebranding).

The site_alive entry of the module registry is a signal, not a CSV header: in a pipeline, the alive_only rule of filter keeps the rows whose status is alive or stale.

The progress unit during execution is sites; the result unit is also sites.

Lifecycle

Standard job states. See Jobs lifecycle. Partial counters stream over SSE so early verdicts can be consumed without waiting for the final export.

Pipeline

Pipelinable; typically inserted right after the list-producing step, before any expensive enrichment.

Slot Value
needs site_web
produces site_alive
Category verify
Typical upstream scrap
Typical downstream emails, techstack, ads_intelligence, filter

A common pattern is scrap, then dead_check, then filter with alive_only (keeps status alive or stale), then any enrichment module. This avoids spending budget on shuttered businesses.

Endpoints

Create a job:

POST /api/jobs/dead-check
Content-Type: application/json

{
  "items": [
    { "site_web": "https://example.com", "nom": "Example Co" }
  ],
  "source_job_id": "…"
}

Response: a JobPublic object with id, status, and the standard job metadata. Poll GET /api/jobs/{id} or subscribe to the SSE stream for progress; download the final CSV from the job detail page once status = "done".

For the full job API surface (list, detail, cancel, export, events), see Jobs API. For per-account quotas, see Limits.

Errors

HTTP detail Cause
400 Aucun établissement avec site web No input item carries a site_web field.
400 Quota dépassé : … Estimated cost exceeds the per-job equivalent-France quota.
401 / 403 — Missing or inactive session.

Errors raised after the job has been created surface on the job detail page and via the SSE error event; the job ends in status = "error" and partial results, if any, remain downloadable.

What's next