AdResonance
Enter App

Industrial & Manufacturing

Demand systems for catalogs, parts, and quote-driven buyers.

Manufacturers, distributors, and technical suppliers run ad spend against buyers the consumer playbook doesn't reach. AdResonance reads industrial demand signals, routes budget against catalog depth, and governs creative for regulated and technical products.

What you gain

Long-tail catalog coverage

Campaigns that keep producing demand for the SKUs that actually matter — replacement parts, configurable components, regulated product lines — not just the top sellers.

Qualified buyer capture

Budget follows quote-intent signal, not vanity impressions. The system learns which category pages, comparison queries, and part numbers produce real quoting activity.

Distributor and dealer coordination

Governed creative, channel policy, and budget allocation that respect co-op agreements, regional exclusivity, and distributor contracts.

Channel coverage beyond DTC

Execution across the ad surfaces industrial buyers actually use — search, trade-vertical display, supplier networks, category directories — not just the consumer social stack.

How it works

1

Ingest your catalog

Product feeds, category taxonomies, part numbers, spec sheets, and regulated-claim rules come in as inputs. Governance policy is applied at ingest, not at execution.

2

Route demand by category

Budget is routed against category-level demand signals, not aggregate account spend. Long-tail SKUs get coverage proportional to measured quote-intent, not arbitrary caps.

3

Allocate against qualified signal

The allocation engine weights spend by qualified-buyer signal: part-number search, spec-comparison queries, RFQ events, configurator starts. Factor breakdown is persisted per decision.

4

Execute with governance

Claims get checked against your regulated-language rules. Distributor agreements shape who can bid on what. Every override is logged against policy version.

Member of

NVIDIA Inception Program

Use cases

OEM replacement parts

Hundreds of thousands of SKUs where each part has a specific buyer, a specific search pattern, and a specific margin. Conventional ad platforms collapse them into one budget.

MRO supply

Maintenance, repair, and operations suppliers with fragmented demand across industry verticals and regional distributor networks.

Specialty machinery and components

Long sales cycles, technical specifications, configurator-driven quoting. Demand capture requires category depth, not creative variety.

Regulated industrial products

Product lines where every claim must pass compliance review. Policy-governed creative and audit-logged publishing are non-negotiable.

Distributor and co-op campaigns

Manufacturer-funded campaigns executed through distributors. Budget rules, territory exclusivity, and co-op match requirements are enforced in-system.

What you get

Five connected primitives that work together as a single system.

Catalog

Catalog-aware decisioning

Product feeds, part numbers, and category taxonomies are first-class inputs, not post-hoc filters. Allocation can see catalog depth.

Signal

Industrial demand signal

Quote-intent, spec-comparison, part-number search, and configurator events are treated as primary signal — not auxiliary data.

Policy

Regulated-claim governance

Policy rules check creative against approved-claim libraries before execution. Every publish event is logged against policy version.

Routing

Distributor-aware routing

Budget routing respects co-op agreements, territory exclusivity, and distributor contracts at the campaign and creative level.

Audit

Decision lineage per SKU

For any product line, any category, any market: retrieve the full decision history — inputs, policy, allocation, overrides, execution.

Developer Preview — 2026-04-22

Proof chain — a denial artifact

The model under contact with a regulated-claim rule.

One narrow complete path. A specialty industrial SKU has a claim library. A generator proposes ad copy that cites an unapproved claim. Policy denies the publish. The refusal lands in the record. The channel is never called.

Every artifact below is threaded through one decision_id, one sku_id, and one policy_version. JSON is sanitized; field shapes match the public contract on /developers.

1
Context in

Catalog payload.

An industrial SKU enters the Commerce layer with its regulated-claim library. The approved claims for this product at library_version v3.2 are CE-marked circulation and continuous operation to 180°C. Nothing else is pre-approved.
{
  "sku_id": "sku_indupump_440_hi_temp",
  "product_family": "InduPump 440 Series",
  "display_name": "InduPump 440 High-Temp Circulation Pump",
  "category": "industrial/pumps/circulation/high-temp",
  "spec_sheet_ref": "specs/indupump-440.pdf",
  "regulated": true,
  "claim_library_version": "v3.2",
  "regulated_claims": [
    {
      "claim": "CE-marked for industrial circulation applications",
      "library_version": "v3.2",
      "approved": true
    },
    {
      "claim": "Rated for continuous operation up to 180°C",
      "library_version": "v3.2",
      "approved": true
    }
  ],
  "distributor_network": "direct_and_authorized_resellers"
}
2
Constraint applied

Policy rule in the library.

A single rule from regulated_claim_library_v3.2. Mode is enforced, surface is publish. The constraint is explicit: every claim the creative cites must exist in the SKU's approved_claims list at the matching library version. The default verdict on violation is deny.
{
  "policy_id": "regulated_claim_library_enforcement",
  "policy_version": "regulated_claim_library_v3.2",
  "label": "Regulated claim library enforcement",
  "description": "Ad copy for regulated SKUs may only cite claims that are present in the approved claim library for that SKU at the current library_version.",
  "mode": "enforced",
  "applies_to": ["publish"],
  "constraint": "creative.claims ⊆ catalog.regulated_claims where library_version == policy.library_version",
  "default_decision_on_violation": "deny"
}
3
Decision made

Decision is generated. It carries a problem.

A refresh_creative Decision is proposed in response to rising food-safe-circulation intent. Confidence 0.76. auto_executable: true. The Decision itself is clean. The linked creative is not — it reproduces a claim the catalog does not approve for this SKU.
{
  "id": "dec_01HXY2N8K4P5RXQK9VPYZW2QF4",
  "type": "refresh_creative",
  "priority": "medium",
  "confidence": 0.76,
  "summary": "Refresh ad copy for InduPump 440 — align to rising food-safe circulation intent",
  "reasoning": "Qualified-quote signal for 'food-safe circulation pump' rose 23% week-over-week on Meta. Proposed creative variant repositions the product against that intent.",
  "auto_executable": true,
  "action": {
    "type": "refresh_creative",
    "campaign_id": "cmp_ind_meta_8841",
    "creative_id": "crt_01HXY2N8K4P5A7V3NPUBM2QF4",
    "objective": "align_creative_to_rising_intent",
    "constraints": {
      "target_sku": "sku_indupump_440_hi_temp",
      "must_cite_from": "catalog.regulated_claims"
    }
  },
  "computed_at": "2026-04-22T16:14:07Z",
  "policy_version": "regulated_claim_library_v3.2"
}

Linked creative snapshot — crt_01HXY2N8K4P5A7V3NPUBM2QF4

Engineered for the hardest jobs. The InduPump 440 is FDA-approved for food-grade applications, CE-marked for industrial circulation, and rated for continuous operation up to 180°C. Built to outlast the plant.

Two of these claims are in catalog.regulated_claims. "FDA-approved for food-grade applications" is not. This mix is exactly what a generator produces and a policy exists to catch.

4
Denied

Policy evaluates. The verdict is deny.

Not require_approval. Not an approval-queue ticket. The evaluation returns deny, names the specific unmatched claim, cites the policy_id and policy_version, and closes. There is no human-review step to land this on someone's desk.
{
  "evaluation_id": "eval_01HXY2N8K5Q6SYRL0WQZAX3RG5",
  "decision_id": "dec_01HXY2N8K4P5RXQK9VPYZW2QF4",
  "policy_version": "regulated_claim_library_v3.2",
  "decision": "deny",
  "requires_approval": false,
  "triggered_policies": [
    {
      "policy_id": "regulated_claim_library_enforcement",
      "decision": "deny",
      "reason": "Generated creative cites claim 'FDA-approved for food-grade applications' which is not present in catalog.regulated_claims for sku_indupump_440_hi_temp at library_version v3.2. Regulated-claim enforcement requires citation-to-library match on the publish surface.",
      "requires_approval": false,
      "constraint": "creative.claims ⊆ catalog.regulated_claims where library_version == v3.2",
      "unmatched_claims": ["FDA-approved for food-grade applications"]
    }
  ],
  "bypassed_policies": [],
  "evaluated_at": "2026-04-22T16:14:07Z"
}
5
Record preserved

The refusal is recorded. The mutation log is intentionally empty.

A runtime event lands on the event-trace plane carrying the full envelope — org, decision, policy, trace, surface. Critically, before_state_hash equals after_state_hash: nothing on the publish surface changed. And when the Mutation Log is queried for this decision_id on the publish surface, the result is empty. That absence is the evidence.

Runtime event (event-trace plane)

{
  "event_id": "evt_01HXY2N8K6R7TZSM1XRABY4SH6",
  "org_id": "org_01HW3T9P2Q8YXZ3N5B7C9DFA2V",
  "workspace_id": "ws_01HW5RN8K2P7Q3VXY4Z5A6B7C8",
  "user_id": null,
  "decision_id": "dec_01HXY2N8K4P5RXQK9VPYZW2QF4",
  "trace_id": "trc_01HXY2N8K7S8UANN2YSABCZ5TI7",
  "surface": "publish",
  "timestamp": "2026-04-22T16:14:07Z",
  "policy_ids": ["regulated_claim_library_enforcement"],
  "before_state_hash": "h_7f3a9c2b8e14",
  "after_state_hash": "h_7f3a9c2b8e14",
  "delta_summary": "Publish denied by regulated-claim enforcement",
  "payload": {
    "verdict": "deny",
    "evaluation_id": "eval_01HXY2N8K5Q6SYRL0WQZAX3RG5",
    "policy_version": "regulated_claim_library_v3.2"
  }
}

Mutation log lookup (publish surface, same decision_id)

{
  "query": {
    "decision_id": "dec_01HXY2N8K4P5RXQK9VPYZW2QF4",
    "surface": "publish"
  },
  "entries": [],
  "count": 0
}

No publishing-side mutation exists for this decision.

If the control plane had waived the constraint, there would be a Mutation Log entry here with status: "success", the platform_campaign_id, and the resulting channel-side state. The entry does not exist because the channel was never called. A later query from compliance, finance, or platform engineering asking "did we publish this claim on this SKU?" returns count: 0, with the refusal event as the explanation.

Most proof blocks show the system doing something. This one shows the system preventing something. That is the control plane, not a dashboard.

Footnotes

Policy grounding. regulated_claim_library_v3.2 is illustrative of the contract shape for an enforced policy. It is not claimed as a currently shipped default rule. The public policy primitive — evaluation context, decision verdicts (allow / require_approval / deny), versioning — is the part the Developer Preview commits to. Specific default libraries are onboarded through controlled engagement.

Event type. The runtime event envelope matches the schema published on /architecture. The event-type vocabulary itself is intentionally held out of the v1 public contract; this example shows envelope shape, not a committed type name.

IDs and values. All identifiers, timestamps, hashes, and textual content are sanitized stand-ins. The structural shape matches the contract; the specific values do not correspond to any real account, campaign, or publisher.

Developer Preview — 2026-04-22

Proof chain — a require_approval artifact

The model under contact with a distributor territory contract.

Where the previous proof showed a hard refusal, this one shows a pause. A manufacturer wants to rebalance spend into a region where a distributor holds territorial exclusivity. The Decision is proposed. Policy evaluates. Execution does not halt — it waits for the distributor named in the contract to release it.

Threaded through one decision_id, one contract_id, one policy_version. Territorial scope is carried as values inside the existing action.scope field on the rebalance_spend Decision — no new public primitive is introduced. Contract on /developers.

1
Context in

Distributor contract enters as domain input.

A contract book is available to the decision runtime. For us-az and the indupump-industrial product family, SouthwestDist Corp holds exclusive rights through the end of 2026; manufacturer-direct ads in that territory require distributor approval. This is domain data — it is not a new public contract object, and the proof does not teach it as one.
{
  "contract_id": "contract_dist_swdist_2026",
  "manufacturer": "InduPump Industrial, Inc.",
  "distributor": {
    "distributor_id": "dist_southwestdist_corp",
    "display_name": "SouthwestDist Corp"
  },
  "contract_version": "2026-Q1",
  "territorial_exclusivity": [
    {
      "region": "us-az",
      "product_family": "indupump-industrial",
      "exclusive": true,
      "manufacturer_direct_ads": "require_distributor_approval",
      "effective": "2026-01-01",
      "expires": "2026-12-31"
    }
  ],
  "co_op_program": "available_on_approval"
}
2
Constraint applied

Policy rule evaluates scope against territorial exclusivity.

A single rule from distributor_territory_exclusivity_v1. Mode is enforced; it runs at both decision_runtime and publish surfaces. The constraint is set- theoretic: if the Decision's scope regions intersect an active exclusive territory, the verdict becomes require_approval, keyed to the distributor named in the contract.
{
  "policy_id": "distributor_territory_exclusivity",
  "policy_version": "distributor_territory_exclusivity_v1",
  "label": "Distributor territorial exclusivity",
  "description": "rebalance_spend and campaign-execution Decisions whose scope overlaps an active distributor-exclusive territory must route through the named distributor for approval before execution.",
  "mode": "enforced",
  "applies_to": ["decision_runtime", "publish"],
  "constraint": "decision.action.scope.regions ∩ contract.territorial_exclusivity.where(exclusive == true).region ⟹ require_approval(distributor_id)",
  "default_decision_on_violation": "require_approval"
}
3
Decision made

A rebalance_spend Decision overlaps a protected territory.

Qualified demand in Southwest US rose 27% week-over-week. The decision runtime proposes shifting $1,200/day from Google into Meta, scoped to TX, AZ, and NM. The Decision shape is clean against the published rebalance_spend contract — territory lives inside action.scope.regions. The problem is not the Decision, it is the AZ value inside the scope array.
{
  "id": "dec_01J0A7M4B8N3RXQK9VPYZW2QF4",
  "type": "rebalance_spend",
  "priority": "high",
  "confidence": 0.81,
  "summary": "Shift $1,200/day from Google into Meta, targeting Southwest US on rising qualified-quote signal",
  "reasoning": "Qualified-quote signal for industrial circulation equipment rose 27% week-over-week across Southwest US (TX, AZ, NM). Northeast signal is flat. Reallocating to match observed demand.",
  "auto_executable": true,
  "action": {
    "type": "rebalance_spend",
    "source_channel": "google",
    "target_channel": "meta",
    "amount": 1200,
    "currency": "USD",
    "cadence": "daily",
    "scope": {
      "regions": ["us-tx", "us-az", "us-nm"],
      "product_family": "indupump-industrial"
    },
    "reason": "rising_qualified_demand_southwest"
  },
  "computed_at": "2026-04-22T16:47:33Z",
  "policy_version": "distributor_territory_exclusivity_v1"
}
4
Paused — approval required

Policy returns require_approval, naming the approver.

Not deny. Not a silent route-around. The evaluation returns require_approval, identifies us-az as the overlapping region, cites the contract, and names dist_southwestdist_corp as the approver identity. The Decision does not execute. It does not get dropped either.
{
  "evaluation_id": "eval_01J0A7M4C9P4SXMT0ANMPDX3QE",
  "decision_id": "dec_01J0A7M4B8N3RXQK9VPYZW2QF4",
  "policy_version": "distributor_territory_exclusivity_v1",
  "decision": "require_approval",
  "requires_approval": true,
  "triggered_policies": [
    {
      "policy_id": "distributor_territory_exclusivity",
      "decision": "require_approval",
      "reason": "action.scope.regions includes 'us-az', which overlaps active exclusive territory for distributor SouthwestDist Corp (contract_dist_swdist_2026) on product_family 'indupump-industrial'. Manufacturer-direct execution requires distributor approval under contract terms.",
      "requires_approval": true,
      "approver_identity": "dist_southwestdist_corp",
      "constraint": "decision.action.scope.regions ∩ contract.territorial_exclusivity.region ⟹ require_approval(distributor_id)",
      "overlapping_regions": ["us-az"]
    }
  ],
  "bypassed_policies": [],
  "evaluated_at": "2026-04-22T16:47:33Z"
}
5
Record preserved

Workflow pauses. The record names who can release it.

The Workflow enters paused_for_approval. A runtime event lands on the event-trace plane naming the approver and the evaluation that produced the pause. The Mutation Log on the publish surface is empty, but unlike the denial case, the empty state carries state: "pending_approval" — not terminal. If the distributor approves, a Mutation Log entry will appear here. If not, a refusal event will close the workflow. Either way, the decision is addressable.

Workflow run

{
  "run_id": "wf_01J0A7M4D0Q5TYNU1BNQQGW4RF",
  "workflow_id": "execute_rebalance_spend",
  "status": "paused_for_approval",
  "idempotency_key": "dec_01J0A7M4B8N3RXQK9VPYZW2QF4-attempt-1",
  "current_step_id": "await_distributor_approval",
  "requested_by": "agent:decision-runtime-cron",
  "org_id": "org_01HW3T9P2Q8YXZ3N5B7C9DFA2V",
  "retry_count": 0,
  "awaiting_approval": true,
  "created_at": "2026-04-22T16:47:33Z",
  "updated_at": "2026-04-22T16:47:34Z"
}

Approval-request event (event-trace plane)

{
  "event_id": "evt_01J0A7M4E1R6UZOV2CPOPHX5SG",
  "org_id": "org_01HW3T9P2Q8YXZ3N5B7C9DFA2V",
  "workspace_id": "ws_01HW5RN8K2P7Q3VXY4Z5A6B7C8",
  "user_id": null,
  "decision_id": "dec_01J0A7M4B8N3RXQK9VPYZW2QF4",
  "trace_id": "trc_01J0A7M4F2S7VAPW3DQOQIY6TH",
  "surface": "decision_runtime",
  "timestamp": "2026-04-22T16:47:33Z",
  "policy_ids": ["distributor_territory_exclusivity"],
  "before_state_hash": "h_a3b9d8f4e217",
  "after_state_hash": "h_c7e1a8b5f329",
  "delta_summary": "Workflow paused pending distributor approval (SouthwestDist Corp)",
  "payload": {
    "verdict": "require_approval",
    "evaluation_id": "eval_01J0A7M4C9P4SXMT0ANMPDX3QE",
    "approver_identity": "dist_southwestdist_corp",
    "workflow_run_id": "wf_01J0A7M4D0Q5TYNU1BNQQGW4RF"
  }
}

Mutation log lookup (publish surface, same decision_id)

{
  "query": {
    "decision_id": "dec_01J0A7M4B8N3RXQK9VPYZW2QF4",
    "surface": "publish"
  },
  "entries": [],
  "count": 0,
  "state": "pending_approval"
}

The mutation log is empty, and the state is pending — not terminal.

Emptiness in Proof 1 was evidence of refusal. Here, emptiness is evidence of a resolvable pause. The same query returns count: 0 in both cases — but the state field is what makes the two outcomes legible to a later consumer. The control plane distinguishes no from not-yet in the record itself.

Proof 1 showed the system saying no. This one shows the system saying not yet — and naming who gets to release it. Both verdicts live in the same operating record.

Footnotes

Policy grounding. distributor_territory_exclusivity_v1 is illustrative of the contract shape for an enforced require_approval policy. It is not claimed as a currently shipped default. The public commitment is the evaluation result (allow / require_approval / deny) and the approver identity convention; specific default libraries are onboarded through controlled engagement.

Scope as domain data. Territorial exclusivity is expressed as values inside the published action.scope field on the rebalance_spend Decision type. The proof does not introduce a new public contract object for territory. If a region convention were ever elevated to a public type, it would ship as a /developers extension and be announced under a new dated preview.

Event type and IDs. The runtime event envelope matches the schema on /architecture. The event-type vocabulary is intentionally held. All identifiers, timestamps, hashes, and textual content are sanitized stand-ins; values do not correspond to any real account, contract, or distributor.

Frequently asked questions

Related solutions

Infrastructure for advertising capital.

Pay on what the system governs. Scale without upgrading.