InfoSum
Datafly Signal delivers hashed first-party identifiers to InfoSum, the privacy-first data clean room platform from WPP. Once your data is in an InfoSum dataset, you can collaborate with advertisers, publishers, and other partners using deterministic identity matching — without raw PII ever leaving your environment.
Signal writes files to an S3 bucket that your InfoSum Bunker imports from; InfoSum is not called over HTTP. The connection fields below set the file layout InfoSum needs. Not yet tested against a live Bunker import.
Why route InfoSum through Datafly Signal
- Delivery happens server-to-server. Signal sends events to InfoSum from your own infrastructure rather than from the visitor’s browser, so delivery does not depend on client-side conditions.
- Email, phone number, first name, last name, date of birth and postcode are hashed before leaving your infrastructure. Signal normalises (trim and lowercase) and applies SHA-256 inside your own deployment, so InfoSum receives match keys rather than raw personal data.
- Presets for General, Automotive, E-commerce and Insurance. The mapping starts from a working configuration for your vertical instead of a blank field map.
- One consent decision governs every destination. InfoSum is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
What InfoSum does
InfoSum’s core idea is a decentralised Bunker model: every party (you, the advertiser, the publisher) keeps their own data in their own InfoSum-managed environment. To collaborate, parties run matched analyses against each other’s bunkers using Private Set Intersection (PSI) — the platform computes overlaps and aggregates without anyone seeing the other side’s raw rows.
Common use cases:
- Audience overlap analysis with media partners
- Closed-loop measurement (campaign exposure ↔ outcomes)
- Audience activation to walled-garden ad platforms via InfoSum destinations (The Trade Desk, Amazon Data Manager, Google, etc.)
- Insight generation across first-party datasets
Prerequisites
An InfoSum account and Bunker
InfoSum is enterprise-only; contact InfoSum for access. Your Bunker’s region must match the residency requirements of the data.
An S3 bucket InfoSum imports from
A bucket you grant your Bunker access to (InfoSum’s cross-account S3 import), or one InfoSum provides, plus an AWS access key that can write to it.
An import in InfoSum
Create an import connector for the bucket and prefix, then a recordset and normalisation configuration for the columns listed below. InfoSum automates an import only while the source, the file format and the normalisation configuration stay the same, which is why every file Signal writes has the same columns.
Configure in Signal
Configuration fields
| Field | Required | Description |
|---|---|---|
bucket, region | Yes | The S3 bucket and its region. |
access_key_id, secret_access_key | Yes | AWS credentials with write access to the bucket. |
prefix | No | Object key prefix; point the InfoSum import at the same prefix. |
file_format | Yes | csv or parquet (InfoSum does not import NDJSON). |
schema_mode | Yes | blueprint: one column per key. |
schema_columns | Yes | The fixed column list, for example message_id,event_name,event_timestamp,customer_id,email,phone,first_name,last_name,postcode,date_of_birth,consent,funnel_stage,vehicle_make,vehicle_model,quote_value,dealer_id,order_value,currency,insurance_type (drop the ones your preset does not use). |
batch_size | Yes | Rows per file, for example 10000. Unset, Signal writes one file per event. |
batch_max_wait_ms | No | Longest a partly filled file waits before it is written (default one minute). |
Files are written as <prefix>/yyyy=YYYY/mm=MM/dd=DD/hh=HH/<message_id>.csv (or .parquet).
Integrations created before 0.10.0 without these fields write NDJSON in the warehouse layout (identifiers inside properties_json), one file per event, which InfoSum cannot import. Set the fields above (#1559).
Identity signals
Every row carries the identity columns; the preset adds event columns.
| Column | Source | Format |
|---|---|---|
customer_id | user_id | Plain text |
email | identify trait email | SHA-256 of the trimmed, lower-cased address |
phone | identify trait phone | SHA-256 of the E.164 number (with +) |
first_name, last_name | identify traits | SHA-256 of the trimmed, lower-cased name |
postcode | identify trait postcode | SHA-256 of the lower-cased postcode with spaces removed |
date_of_birth | identify trait dob | SHA-256 of the value as sent (use YYYY-MM-DD) |
consent | marketing consent state | granted or denied |
Visitors with no user ID, email or phone are dropped. Pre-hashed keys match only if your collaborator normalises and hashes the same way. InfoSum’s Global Schema expects phone, postcode and date of birth raw (and hashes them itself during normalisation in your Bunker); hashed, they can only be used as custom keys agreed with the collaborator.
| Preset | Rows |
|---|---|
| General | identify, sign_up |
| Automotive | funnel stages (vehicle_viewed, finance_quote_requested, trade_in_valued, test_drive_booked, dealer_contacted, service_appointment_booked) with funnel_stage, vehicle_make, vehicle_model, quote_value, dealer_id |
| E-commerce | identify, sign_up, purchase with order_value, currency |
| Insurance | identify, quote_requested (insurance_type, quote_value), purchase as policy_purchased (insurance_type, order_value, currency) |
How to send user data
Call datafly.identify() when a user logs in, registers or submits a form:
datafly.identify("user-123", {
email: "jane.doe@example.com",
phone: "+44 7700 900123",
first_name: "Jane",
last_name: "Doe",
postcode: "SW1A 1AA"
});Stored event context
Alongside the fields your blueprint maps (where email, phone, names and address are stored as normalised SHA-256 by default), each file row carries the event’s collected context exactly as Signal received it. The blueprint does not filter or hash the context: this is deliberate (decision 2026-09-23), so the context is complete for attribution, fraud and debugging queries, and it is listed here so you can decide what to keep.
| Stored | What it contains |
|---|---|
| Visitor request | IP address, user agent, Accept-Language, locale and timezone |
| Page | URL including its query string, path, title and referrer |
| Campaign | UTM source, medium, campaign, term and content |
| Consent | The visitor’s consent state |
| Location | GeoIP country, region and city, and the network (ASN) |
| Device | Screen size; for app events the OS and version, manufacturer, model, advertising ID and IDFV when the app collected them |
| Vendor IDs | Cookie and click identifiers in vendor_ids (for example the _fbp browser ID, gclid, ttclid, the GA client ID) |
| Session and library | Session ID, number and engagement time; the collector’s name and version |
| Partner attributes | Profile attributes from partner enrichment (partner_attrs) |
In each NDJSON line these are the context object, with anonymous_id, user_id, device_id, message_id, event_id, click_ids and collected_ids beside the mapped properties. In CSV and Parquet with the canonical schema they are the ip_address, user_agent, page_url, page_path and page_referrer columns and, in full, the context_json column. In blueprint schema mode only the columns you declare are written.
The IP address, device and advertising IDs, and cookie and click identifiers are personal data under UK and EU GDPR. To keep any of them out of storage, strip, mask or hash the field for every integration with the organisation data layer, apply URL redaction to page URLs, or remove it in the installed blueprint; and set the storage’s retention to match your privacy notice. See Personal data by integration.
Consent
InfoSum data should be sent under the marketing or advertising consent category, depending on your downstream use cases. Visitors who have not granted the required consent are filtered out by Signal before any record reaches your InfoSum Bunker.
For regulated regions, InfoSum supports per-record consent attributes in the dataset schema — Signal includes the visitor’s CMP consent state on every record so consent enforcement can be applied at activation time.
Troubleshooting
| Problem | Solution |
|---|---|
| InfoSum import fails to parse the files | Check file_format is csv or parquet, schema_mode is blueprint and schema_columns is set, so every file has the same header. |
| Thousands of tiny files | Set batch_size. |
| Low match rate with partners | Confirm both sides normalise the same way before hashing (lower-case, spaces removed; E.164 for phone). |
Upload 403 AccessDenied | The access key cannot write to the bucket or prefix. |