Ads profile
Ads profile
The ads_intelligence module profiles the marketing stack of each POI's website and condenses the findings into a single 0–100 marketing maturity score. It splits a list of prospects into two actionable segments: businesses that already invest in paid acquisition, and businesses still on a cold first-touch.
Detections match the homepage against community-maintained filter lists (uBlock Origin, EasyList, EasyPrivacy) plus a curated outsend signature table, covering advertising pixels, retargeting networks, CMPs, marketing CRMs and chat widgets.
Inputs
Only items with a non-empty site_web are processed.
| Field | Type | Required | Notes |
|---|---|---|---|
site_web |
string | yes | Absolute URL of the POI's website |
nom |
string | no | Carried through for reporting |
place_id |
string | no | Used to join back to the source list |
source_job_id |
string | no | ID of an upstream scrap job to chain |
Batch size: 1 to 10 000 items per job.
Outputs
One row per processed POI. Paid-media pixels and retargeting weigh the most in the score; chat widgets the least.
| Column | Type | Description |
|---|---|---|
ads_score |
integer | Marketing maturity score, 0–100 |
pixels_detected |
string[] | Advertising pixels found on the page (e.g. meta, google_ads, tiktok) |
crm_detected |
string | Marketing CRM identified, if any (e.g. hubspot, klaviyo, brevo) |
chat_widget |
string | Chat solution identified, if any (e.g. intercom, crisp, drift) |
marketing_tools |
string[] | Other marketing technologies (CMP, CDP, affiliation, retargeting networks) |
Granular fields also stored: ads_active, ads_networks, pixel_meta, pixel_google_ads, cmp_vendor, retargeting, crm_marketing, chat_widgets.
Lifecycle
Standard outsend job lifecycle; see /docs/concepts/jobs-lifecycle. Progress is reported per item in the sites unit.
Pipeline
| Direction | Keys |
|---|---|
needs |
site_web |
produces |
ads_active, ads_score, ads_networks, pixel_meta, pixel_google_ads, cmp_vendor, retargeting, crm_marketing, chat_widgets |
Any upstream job that emits site_web (typically scrap) can feed ads_intelligence. The job picker defaults to the most recent scrap job of the current account.
Endpoints
Create job
POST /api/jobs/ads-intelligence
{
"items": [
{ "site_web": "https://example.com", "nom": "Example", "place_id": "..." }
],
"source_job_id": "optional-upstream-job-uuid"
}
Response: a JobPublic document describing the newly created job (id, status, job_type, output_filename, ef_cost, timestamps).
| Status | When |
|---|---|
400 |
No item has a site_web, or per-job EF quota exceeded |
401 |
Missing or invalid session |
403 |
Account inactive |
422 |
Payload does not match the schema (e.g. items empty or > 10 000) |
Job state, progress and results are read through the shared job endpoints (GET /api/jobs/{id}, GET /api/jobs/{id}/results, SSE stream).
Limits
See /docs/concepts/limits. Per-item EF cost: ~1 / 3 / 3700 EF. Wall time per item: 0.6 – 6 s.
Errors
| Error | Cause |
|---|---|
Aucun établissement avec site web |
All items were missing site_web after normalisation |
Quota dépassé |
Estimated EF cost exceeds the per-job ceiling |
| Item-level fetch failure | Recorded on the row; the job continues with the next item |
| Empty homepage / non-HTML response | Row emitted with ads_score = 0 and empty detections |
What's next
Pair ads_intelligence with the following modules to extend the prospect profile: