> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create products from ad-server inventory

> Turn synced ad-server inventory into validated product drafts in Inventory Components or through your storefront agent

Once your ad server (Google Ad Manager, FreeWheel, or SpringServe) is connected and its inventory has synced, you turn that inventory into **products** buyers can discover and buy. Open **Inventory Components** to do the whole job directly, or describe an exact product to your storefront agent and let it use the same typed product tools for you.

## How a product gets created

Both paths follow the same server contract, so you see the exact request before anything is saved:

1. **Pick inventory.** Choose the ad-server objects to package, such as ad units or placements from your synced inventory. If the package uses GAM key-values for targeting, create signal components from that ad-server targeting rather than putting raw key-values in the inventory selector bundle.
2. **Draft.** In Inventory Components, select reviewed components, enter a product name and optional description, and choose from human-readable creative formats reported by the source. The Inventory Selector task offers the same form after you pick exact ad-server rows. Neither widget sends the selection back into chat.
3. **Validate.** Choose **Review product**. This checks the complete draft against your ad server without persisting it and surfaces field-level issues (see [What validation surfaces](#what-validation-surfaces)).
4. **Confirm and create.** Choose **Create draft product** only after validation succeeds. That explicit click saves the exact reviewed request as `draft`; it is not visible to buyers until you activate it.

After creation, Inventory Components refreshes the Products tab. In chat, the agent confirms the product landed by listing your products back to you.

## If GAM shows only the network

A connected Google Ad Manager source should expose the selector types and
inventory rows that its sync can read, such as ad units, placements, and custom
targeting. Seeing only the GAM network, with no selectable inventory below it,
is not a completed product-setup state. It does not mean you must first invent
title or geography keys.

1. Confirm the source sync has completed and open its Health or diagnostics
   view.
2. Check that the Scope3 service account still has GAM inventory read access.
3. Inspect the source's advertised selector capabilities. A selector type can
   be absent because GAM does not expose it for that network or because the
   integration does not support it; an advertised type with no rows is a sync
   or product defect.
4. If the source is healthy but still exposes no inventory rows, contact
   Scope3 with the source ID, last sync time, missing selector type, and a
   screenshot. Do not work around it by creating unsupported targeting keys.

Titles, sections, geography, and similar commercial groupings are not all
native GAM inventory levels. Once inventory is visible, package native
selectors directly and use existing GAM custom targeting or product metadata
for the additional dimensions your network actually maintains.

### What validation surfaces

Validation (and preview) returns two kinds of findings:

* **Blocking problems** that stop the product from being valid — for example a creative format your ad server doesn't recognize. Fix these before creating.
* **Advisory warnings** that never block creating the product, but flag a gap worth closing:
  * **No publisher properties declared.** The product doesn't say which [publisher properties](/v2/concepts/identity-documents) (the publisher inventory it covers) it sells. Declaring at least one is recommended so buyers can see what they're buying.
  * **A declared property wasn't found.** You named a specific property (by id or tag) that isn't in the registry or on the publisher's [`adagents.json`](/v2/concepts/identity-documents) — usually a typo. The check skips a publisher that exposes no property list yet (not-yet-crawled), so valid-but-unindexed inventory isn't flagged.
  * **Publisher hasn't authorized your agent.** A declared publisher's [`adagents.json`](/v2/concepts/identity-documents) doesn't list your storefront's sales agent. The product still authors fine; treat the warning as a publisher-owned authorization gap to fix before depending on that inventory. The check reads the publisher's live `adagents.json`, so a publisher that simply hasn't been crawled yet is not flagged.

Advisory warnings are informational: authoring a product never requires properties to be declared or a publisher to have authorized you. They help you catch gaps early.

## Creating several products at once

When you have a set of products to add, for example a spreadsheet of ad units, you do not have to approve them one by one. The agent validates and previews each draft, then creates the whole set after **a single approval**.

* **Drop a spreadsheet into the chat.** Attach a CSV or spreadsheet of products and the agent maps the rows into drafts, validates them, and proposes the batch.
* **One approval for the batch.** You approve the full set once rather than per product.
* **It keeps going if one fails.** Bulk creation continues on error: if one product can't be created, the rest still are. At the end you get a clear per-product result showing which products were created and which failed, with the reason, so you can re-run just the ones that need attention.

You can also ask the agent to make the first pass for you. For example:

* "Set up my initial products for me."
* "Take a crack at my first cut."
* "Here is a list of sections and ad units; bulk create products from it."

The agent should inspect inventory selector capabilities, browse representative ad-server rows, map publisher/property/placement evidence into product drafts, validate the full set, and ask you to approve the batch before it creates anything.

## Updating several products at once

When you need to change a set of products, for example fixing the ones that failed during a batch create or adjusting pricing across a slate, you do not have to approve each edit one at a time. The agent applies all patches after **a single approval**.

* **Describe the changes in chat.** Tell the agent which products to update and what to change. You can paste a list or describe the edits; the agent maps them to the matching products and shows you what will change before asking for approval.
* **One approval for the batch.** You approve the full set of updates once rather than per product.
* **It keeps going if one fails.** Bulk updates continue on error: if one product can't be updated, the rest still are. At the end you get a clear per-product result showing which products were updated and which failed, with the reason, so you can re-run just the ones that need attention.

## Product status

Every product has a status:

| Status     | Meaning                                                                                               |
| ---------- | ----------------------------------------------------------------------------------------------------- |
| `draft`    | Not yet live, not visible to buyers.                                                                  |
| `active`   | Live and discoverable by buyers.                                                                      |
| `archived` | Taken off the market. Archive a product to stop offering it; make it `active` again to bring it back. |

Inventory Components and Inventory Selector create new products as `draft` so you can review them before activation. In chat, state whether you want a draft or an active product; the confirmation shows the exact status before the write.

## GAM key-value signal targeting

GAM key-value targeting is supported through signal components, not as raw
product selector fields. For simple one-key mappings, browse the
`custom_targeting_key` and `custom_targeting_value` ad-server targeting types
and create a `custom_key_value` component. For composite logic, create a
`gam_targeting_groups` component: groups are OR'd
together, criteria inside a group are AND'd together, and multiple values in one
criterion are OR'd by GAM for that key.

Before answering whether a source supports key-value targeting, read the
source's signal-component capabilities. A GAM-backed ad server source can advertise
`mappingKinds[].mappingKind: "gam_targeting_groups"` and API targeting types such
as `custom_targeting_key` and `custom_targeting_value`. If those capabilities
are present, tell the operator that key-value targeting is supported through
signal components, then validate and create the component.

### Property and tag mappings

Some large networks map each publisher property or site in GAM with key-values
instead of breaking out placements or ad units per property. Sellers can now
author and preview those source-scoped mappings, including tag-based mappings,
through the [property and tag mapping task](/v2/storefront/inventory-sources/tasks/import-mapping).

This authoring slice records the seller's execution address. It does not replace
`publisher_properties`, grant publisher authorization, or claim that downstream
media-buy execution consumes the mapping yet.

Do not use GAM key-values as a substitute for `publisher_properties`, and do
not describe a mapping as proof of which properties a product sells. Use
key-values for source targeting where the source capabilities support it; use
ad units, placements, or declared publisher properties for the product's
inventory and property definition.

See [Ad-server signal components](/v2/storefront/esa/signals) for the
`gam_targeting_groups` request shape and validation flow.

## Related

<CardGroup cols={2}>
  <Card title="Inventory sources overview" href="/v2/storefront/inventory-sources/overview" icon="plug">
    How sources sync inventory you can package
  </Card>

  <Card title="Ad-server access" href="/v2/storefront/inventory-sources/ad-server-access" icon="shield-check">
    What each ad server asks for, and why
  </Card>

  <Card title="Source diagnostics" href="/v2/storefront/inventory-sources/diagnostics" icon="stethoscope">
    Check sync health before packaging
  </Card>

  <Card title="Storefront onboarding" href="/v2/setup/storefront-onboarding" icon="store">
    End-to-end seller setup
  </Card>
</CardGroup>
