FR
Copied
Modules

Emails

Find a working email address for each point of interest from a previous list.

Purpose

Enrichment module: infers email addresses from each POI's website. Personal mailboxes rank above generic ones (info@, contact@, hello@). No address is invented — empty when no candidate qualifies.

Inputs

A list of POIs each carrying at least a website. The two execution modes differ in coverage vs cost.

Field Type Required Description
items array of POI objects yes 1 to 10 000 entries. Entries without a site_web are filtered out before execution.
mode "normal" | "deep" no, defaults to "normal" normal runs the standard extraction. deep runs an exhaustive second pass and requires a previously completed normal run on the same source.
source_job_id string conditionally Required when mode = "deep". Must reference a done emails job in normal mode on the same upstream source.

Outputs

Each input POI is augmented with up to two email fields. Original POI columns are preserved; the job appends:

Column Type Description
email string | null Best-ranked address for this POI. Empty when no candidate qualifies.
email_personal string | null Set when the best candidate looks like a person's mailbox rather than a generic role address.

Ranking is deterministic. Progress unit: sites. Result unit: emails.

Lifecycle

Standard job lifecycle: see Jobs & lifecycle.

Pipeline

Slot Value
needs poi_list (POIs with a site_web field)
produces enriched_list (POIs augmented with email, email_personal)
Typical upstream scrap
Typical downstream verify_emails, delivery_check, filter

Default pipeline config: { "mode": "normal" }. deep is intended as a manual follow-up on POIs that came back empty from the normal run.

Endpoints

Create a job:

POST /api/jobs/emails
Content-Type: application/json

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

Response: a JobPublic object with id, status, and standard metadata. For the full job API surface, see Jobs API.

Limits

Global quotas: see /docs/concepts/limits. Module-specific caps:

Limit Value
Minimum items per job 1
Maximum items per job 10 000
Items kept only those with a non-empty site_web
deep mode prerequisite A done normal emails job on the same source_job_id

Items without a website are dropped during normalization. If the filtered list is empty, the job is rejected with "Aucun établissement avec site web".

Errors

HTTP detail Cause
400 Mode email invalide : ... (attendu: normal | deep) mode is neither normal nor deep.
400 Aucun établissement avec site web No input item carries a site_web field.
400 Le mode Deep Extract n'est dispo qu'après une extraction normale ... mode = "deep" submitted without a valid prior normal run on the same source.
400 Quota dépassé : ... Estimated cost exceeds the per-job equivalent-France quota.
401 / 403 Missing or inactive session.

Errors raised after creation surface via the SSE error event; the job ends in status = "error" and partial results remain downloadable.

What's next