Extra phones
Extra phones
The phones_extra module digs past the single switchboard line returned by a typical map listing and surfaces the additional voice channels a business exposes on its own site: direct lines, mobile numbers, sales desks, support hotlines, and lingering fax numbers.
Purpose
Discovery sources publish one canonical phone per location. Real organisations publish several across homepage, landing pages, team bios, and legal notices. phones_extra reads the public-facing pages of each website attached to a POI, extracts every phone-shaped token, validates them through Google's phonenumbers library, normalises to E.164, and deduplicates against the primary number already on file.
Inputs
The module operates on an enriched POI list — typically the result of a prior discovery run.
| Field | Required | Notes |
|---|---|---|
site_web |
yes | POIs without a website are filtered out at submit. |
name |
no | Used for output labelling and audit trail. |
phone |
no | When present, used as the dedupe reference. |
address |
no | Used to bias country detection for ambiguous formats. |
Items missing site_web are silently dropped; if the filtered list is empty the request is rejected with a validation error.
Outputs
Each input POI is returned with up to three additional phone fields. Empty strings indicate the module ran but found nothing of that kind.
| Column | Type | Description |
|---|---|---|
phone_secondary |
string | Additional landline distinct from the primary number, E.164. |
mobile |
string | Mobile line detected via national numbering plan, E.164. |
fax |
string | Fax number when explicitly labelled on the page, E.164. |
All numbers are validated and normalised. Anything that fails validation is discarded rather than surfaced as a best-effort guess.
Lifecycle
Standard job lifecycle — see Jobs lifecycle. Progress is reported in sites and final volume in numéros.
Pipeline
phones_extra is an enrichment module: it augments an existing POI list rather than generating one.
needs: poi_list
produces: enriched_list
Typical chain:
discovery → phones_extra → verify_emails → filter → campaign
Endpoints
POST /api/jobs/phones-extra
Create a new extra-phones job from a list of POIs.
Body
| Field | Type | Required | Description |
|---|---|---|---|
items |
array | yes | POIs to enrich, each with at least site_web. |
source_job_id |
string (uuid) | no | Parent job ID when chaining from a prior run. |
Response
Returns the standard JobPublic envelope (id, status, job_type, output_filename, quota cost, timestamps).
Example
POST /api/jobs/phones-extra
Content-Type: application/json
{
"source_job_id": "f3c2…",
"items": [
{ "name": "Acme SAS", "site_web": "https://acme.example", "phone": "+33123456789" },
{ "name": "Beta Co", "site_web": "https://beta.example" }
]
}
{
"id": "9a7b…",
"status": "pending",
"job_type": "phones_extra",
"output_filename": "telephones-extra-2-sites.xlsx"
}
Global quotas and per-job ceilings: see Limits.
Errors
| Condition | Response |
|---|---|
No item carries a site_web |
400 — Aucun établissement avec site web. |
| Estimated cost above the per-job quota | 400 — quota exceeded, with the numeric overage. |
| Account quota exhausted | 400 — quota check failure before insert. |
Malformed body (missing items, wrong types) |
422 — request validation error. |
Runtime errors on individual sites do not abort the job: the affected POI is recorded with empty extra-phone fields and the worker moves on.
What's next
- Verify emails — pair freshly found direct lines with deliverable inboxes.
- Filter — slice the enriched list by presence of a mobile, by country code, or by any combination of the new fields.