FR
Copied
Modules

Pricing

Pricing

Extract published rate cards from each point of interest's website. The module walks a cascade of structured sources (JSON-LD, Microdata, Open Graph, dedicated pricing routes, homepage fallbacks) and returns a normalized amount, currency, and billing period per site.

It is an enrichment step, not a discovery step. It expects a prior list of POIs with a resolved site_web: typically the output of a scrap job.

Inputs

Items missing site_web are silently dropped at validation time.

Field Type Required Notes
items array yes 1 to 10,000 points of interest
items[].site_web string yes Absolute URL of the vendor's main site
source_job_id string no ID of the upstream job that produced the list

Outputs

Each input row keeps its original columns and gains the columns below. Rows without a price are kept with these columns empty, so input cardinality is preserved.

Column Description
pricing_min_eur Lowest price found, as a number with two decimals. Despite the name, the amount is given in the detected currency, without conversion.
pricing_max_eur Highest price found, same rule.
pricing_currency EUR, USD or GBP.
pricing_period mois (monthly) or an (yearly) when a period is attached to the price, empty otherwise.
pricing_source Where the price was read: json_ld, microdata, og, pricing_page or homepage_regex.
pricing_source_url URL of the page the price was read from.
pricing_confidence high, medium or low.

The registry lists price_amount, price_currency, price_period and price_confidence under produces: these are signal names that correspond to the columns above.

Lifecycle

Standard outsend job lifecycle; see /docs/concepts/jobs-lifecycle. Pricing jobs are serialized against other network-heavy jobs on the same account.

Pipeline

needs:    [site_web]
produces: [price_amount, price_currency, price_period, price_confidence]

Typical chain: scrap -> pricing -> filter, with a category rule on pricing_confidence (values high, medium) to keep the vendors whose price was read reliably.

Endpoints

Method Path Purpose
POST /api/jobs/pricing Create a pricing job
GET /api/jobs List the caller's jobs
GET /api/jobs/{id} Fetch a single job and its progress
GET /api/jobs/{id}/download Stream results as JSON or CSV
POST /api/jobs/{id}/cancel Stop a running job

Create a job

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

{
  "items": [
    { "site_web": "https://example-saas.com" },
    { "site_web": "https://another-vendor.io" }
  ],
  "source_job_id": "job_01HX..."
}

Limits

See /docs/concepts/limits. One concurrent pricing job per account.

Errors

Per-item outcomes rather than whole-job failure.

Condition Behavior
No pricing page found Row returned with empty pricing_* columns. Job still completes done.
Login wall Row returned with empty pricing_* columns.

Job-level errors (invalid payload, empty input after filtering, quota exceeded) surface as 400 from POST /api/jobs/pricing with a JobValidationError message.

What's next