Creating Catalogs
Catalog Data Needs: What to Consider
When deciding on what data to share with Kevel, you should consider what’s needed to satisfy the three categories of usage for product data in Kevel’s systems (some of which may overlap):
- Campaign management — product attributes needed to find and add the right products to campaigns by your AdOps team. If you plan to use Kevel Self Serve, you should consider what your advertisers need as well.
- Targeting — product attributes stored on ads to ensure the most relevant sponsored listing is shown to end users. This typically matches the filters available on your website (eg categories, price, brand) so that Kevel can effectively narrow the candidate list of ads to match the specific facets active on a given product listing page
- Rendering — product details required to display the sponsored listing on your website or app. Some integrations only need the SKU and lookup details in their systems after winning ads are returned. Others want ad responses to match organic listings (eg images, title, description, link).
Catalog Definition
To begin the process of ingesting your catalog of items, Kevel first needs to understand the shape of the catalog data and how that data will be used. To do so, you'll define search keys to help filter the data, and aliases to correlate your unique product attribute keys with Kevel's reserved keys.
The only required property of a Catalog definition is a unique identifier for items, but there are other recommended configurations to create the best experience for AdOps users and enable Attribution and Reporting functionality detailed in the sections that follow.
Catalog Definition Properties
| Property | Description |
|---|---|
| Name | Name of the Catalog to identify it in user interfaces |
| ID Key | The key associated with the unique identifier of this Catalog’s items (e.g. SKU). This key must appear in the data for items synced to this Catalog. Note that the ID Key cannot be changed after the catalog is created. |
Search Keys
Defining Catalog search keys enables granular, custom filtering of items in that Catalog. For example, defining a search key for "price" enables searches like "show me all items that have a price greater than $50" or "show me all items that have a price between $100–$500." Product Catalog items are often categorized—so, defining a search key for "category" enables searches like "show me all items that have the category shirts or blouses."
Search keys are optional. If you don't specify any search keys when you create a Catalog, you can search items by the ID Key defined for that Catalog.
Search Key Properties
| Property | Description |
|---|---|
| Key | The key of the attribute in product item data (e.g. price) |
| Type | Acceptable values:
|
| Cardinality | Acceptable values: one or many. Identifies whether the values for this search key will be an array or single value. Note: cardinality many is not supported for keys of type text. |
| Catalog ID | The ID of another Kevel Catalog that contains the definition of ref type search keys. Supported for search keys of type ref only. See Referenced Catalogs section for more information. |
| UI Config | See table below for options |
Kevel's Management UI for creating Ads from products can be customized to create the optimal experience for campaign managers. For each search key, you can configure the following UI Configuration.
UI Configuration
| Property | Description |
|---|---|
| Display Column | Boolean that controls whether the Key is displayed as a column in the products table |
| Display Filter | Boolean that controls whether the Key is displayed as a filter alongside the products table |
| Typeahead | Boolean that controls whether filter is a typeahead/autocomplete style input. When true, distinct values from the related table for this Key will be listed in the filter dropdown. When false, a standard text input element is rendered. |
| Filter by One | Boolean that controls whether filter is single or multi-select |
| Filter by Range | Boolean that controls whether the filter is a single or range (minimum and maximum values) input. Only applicable for number type Keys |
| Label | A friendly name for the Key used for column headers and filter input labels. If this is not set, the Key is used verbatim. For example, your source product data may have an attribute prod_primary_brand that can be displayed as simply Brand |
| Order | The relative order to display the search key. If not set, the order the keys were created determines the display order. Note: Kevel's Management UI allows users to reorder and hide product table columns to meet their individual preferences that are saved in browser local storage—if present, those settings override the Order set here. |
| Allowed Values | Where a filter has a dropdown of selectable items, the items displayed will be limited to this list of IDs in the related table. |
| Ancestors Key | Reference to the attribute name in the ref Catalog that holds data about the ancestors of a given item. Used in the display of filters where the items are of a hierarchical nature, for example product categories or other taxonomies. |
Aliases
Aliases allow you to correlate your unique product attribute keys with Kevel systems. This means you don't have to change your naming conventions when connecting your item feed to Kevel. The following aliases are recommended to create the best experience for UI users and enable Attribution and Reporting functionality:
| Alias | Description |
|---|---|
| kevel/name | The name of the item. This is used by the Management UI when displaying the product table and Creatives derived from Catalog data will use this for their Title |
| kevel/image | A publicly-accessible URL for the primary product image. This is used by the Management UI when displaying the product table and Creatives derived from Catalog data may use too |
| kevel/product-id | The ID of items that should be used for "same product" matches by Kevel's Attribution model. This could be the ID Key or a non-unique ID (e.g. UPC) that may be shared across items in the Catalog—for example, a t-shirt may appear in the Catalog multiple times for each available size or color but all of those items share the same UPC |
| kevel/brand-id | The ID of the brand that this item belongs to. This is used for "same brand" matches by Kevel's Attribution model. |
| kevel/brand-name | The name of the brand that this item belongs to. This is used for Reporting purposes. |
| kevel/main-category-id | The ID of the main or primary category this item belongs to. This is used for "same category" matches by Kevel's Attribution model. For example, an item may belong to a set of hierarchical categories: Toys > Games > Board Games. In this case, Board Games would be the main category. |
| kevel/main-category-name | The name of the main or primary category this item belongs to. This is used for Reporting purposes. |
| kevel/categories | An array of categories that this item belongs to. |
| kevel/merchant-id | The ID of the merchant that sells this item. This can be used to enhance reporting for marketplaces that offer the same item for sale by multiple merchants or vendors. |
| kevel/merchant-name | The name of the merchant that sells this item. |
Referenced Catalogs
As noted in the Search Keys section above, one of the Search Key Types is ref, a reference (by ID) to an item in another Catalog. Refs reduce the size of items stored in product Catalogs and reduce data duplication by storing details on referenced attributes centrally instead of repeating those details on every product item.
Category taxonomy data is the most common use of refs. To use refs in this way, include an attribute with name categories (e.g.) on each product item that is an array (cardinality: many) of category IDs. For example:
...
"categories": [
141259,
135968,
137174,
136361
]
...The details of these categories are stored in a separate Catalog which can be synced independently of the product Catalog—these category definitions can even be shared across multiple product Catalogs offering further efficiencies. Here is an example item in a categories "feed" file:
{
"id": 136361,
"name": "Clutch Bags",
"parent-id": 135971,
"ancestors": [
135971,
141258
]
}These items have the properties detailed in the table below. Note that aliases can also be used in this context so the literal property names can differ from this example.
| Property | Description |
|---|---|
| id* | The unique identifier for this category item. |
| name* | The name of the category as displayed in the Management UI. |
| parent-id | A single ID of the category that is the current item's most direct parent. For level 1 categories, the value of this attribute should be null. |
| ancestors | An array of all category IDs that are higher up in the taxonomy tree than the item at hand. For level 1 categories, the value of this attribute should be an empty array []. |
*indicates required property

With refs configured as described above, Kevel's Management UI can render rich filters that include hierarchical category captions.
Targetable categories
Category targeting reads its list of categories from a separate table, not from your product Catalog. The table type is kevel/targetable-categories. The Ad Server UI and Console pickers use the table to list the categories people can target, and GET /v1/category-catalog returns it. To use the categories on Flights and Ads, see Set up category targeting.
The table feeds the pickers only. Kevel does not read it when it selects Ads. A Flight or Ad keeps matching its saved category IDs if you later remove a category from the table.
The name kevel/categories belongs to two other things: a table type that Console's product category picker reads, and an alias on a products table that lists each product's categories (see Aliases). Neither is the table category targeting reads.
Table rules
One table per network. A network has exactly one table of this type. GET /v1/category-catalog returns a 400 when the network has none or has more than one. The endpoint does not combine tables.
- None: "No kevel/targetable-categories table is configured for this network."
- More than one: "More than one kevel/targetable-categories table is configured for this network."
Row keys. Each row exposes these keys.
| Key | Description |
|---|---|
kevel/category-id | Required. The category ID, a string of up to 200 characters. This is the value a Flight or Ad saves, so it must equal the category your pages send. A longer ID can sit in the table but cannot be saved on a Flight or Ad. |
kevel/category-name | Optional. The label the pickers show. Without it, the pickers show the ID. |
kevel/category-parent-id | Optional. The kevel/category-id of the parent row. The pickers use it to show a tree, and a parent that is not a row in the table makes the row a top-level entry. It does not change matching: a parent does not match its children. |
Each row must expose kevel/category-id, either as a literal key or through an alias that maps it to your ID field. A row that has neither comes back with a null Id.
One row for each level. Every level of the hierarchy is its own row. Where your IDs are full paths, the ID is the full path, the name is the last level, and the parent is the path above it:
kevel/category-id | kevel/category-name | kevel/category-parent-id |
|---|---|---|
Household | Household | (empty) |
Household > Paper & Plastic | Paper & Plastic | Household |
Household > Paper & Plastic > Paper Towels | Paper Towels | Household > Paper & Plastic |
Who sets up the table
The table is separate from your product catalog. It can hold your site's own category taxonomy, with no connection to your products, or Kevel can build it from the categories in your product feed and refresh it each time the feed is ingested. Your Kevel representative sets it up. After that, you can update it through the Catalog Management API.
Size and checking
Category targeting currently supports up to 10,000 categories in the table. If you have more, contact your Kevel representative so we can review how to support you.
A category that is not in the table still matches when a Flight or Ad carries its ID, which you can set through the Management API.
To check the table, call List Category Catalog, GET /v1/category-catalog, with your Management API key. A 200 returns the rows as Id, Name and ParentId.
Updated 4 days ago
