Intempt
  1. Data Ingestion & Tracking
Intempt
  • Installation
    • Basic Intempt Installation
    • Create source
    • Web Snippet
    • Google Tag Manager
    • Autocapture setup
    • SPA tracking
    • Environment Setup
    • Validating Installation
  • SDK
    • JS SDK
    • Android SDK
    • iOS SDK
    • Node.js SDK
  • API Reference
    • Track data
      POST
    • Consent
      POST
    • Choose API
      POST
    • Recommendations Feed API
      POST
  • Data Ingestion & Tracking
    • identify()
    • track()
    • record()
    • alias()
    • group()
    • consent()
    • intempt:html / intempt:page / intempt:session
    • Product Catalog Ingestion via API
  • Data Models & Event Schema
    • Event Schema Overview
    • Required Fields
    • Attribute Schema
    • Product Catalog Schema
  • Webhooks
    • Webhook Configuration
  • Server Side Experiments
    • Overview
    • Choose API endpoint
    • Handling Experiment Response
  1. Data Ingestion & Tracking

Product Catalog Ingestion via API

1. Catalog Source Integration (JSON or XML)#

Use this when your product catalog is available as a publicly hosted JSON or XML feed.
This is the recommended method for:
Shopify stores
WooCommerce stores
Large catalogs (> 1,000 products)
Nightly cron sync jobs

Supported File Types#

Catalog feeds can be provided as:
JSON
XML
Your feed must contain a products array:

JSON Example#

{
  "products": [
    {
      "product": {
        "id": "123",
        "title": "Product Name",
        "description": "Details...",
        "url": "https://example.com/product",
        "image_link": "https://example.com/image.jpg"
      }
    }
  ]
}

Minimum Required Product Fields#

Each product must contain:
FieldDescription
idUnique product identifier
titleProduct name
descriptionTextual description
urlProduct page URL
image_linkImage URL
These fields ensure every product is visible, linkable, and usable in Recommendations.

Creating a Catalog Source#

Step 1 — Initiate#

1.
Go to Recommendations
2.
Click Manage Catalog Sources
3.
Click Create Catalog Source
4.
Enter a name for your catalog

Step 2 — Configure Source URL#

1.
Enter the feed URL (JSON or XML)
2.
Enable Authentication only if required
3.
Click Next

Step 3 — Map Fields#

Map your feed fields to Intempt’s required catalog fields:
Source FieldIntempt Field
idid
titletitle
linkurl
descriptiondescription
image_linkimage_link
priceprice
Optional:
categories
tags
brand
variants
custom fields
Enable Sync Field on fields you want Intempt to ingest.
Click Create Catalog Source to finish.

Managing Catalog Sources#

After creation, Intempt automatically:
Fetches updates from the feed
Updates product records
Keeps the catalog synchronized
You may edit the source at any time:
Change URL
Update login credentials
Modify mappings

Deleting a Catalog Source#

1.
Go to Manage Custom Catalog Sources
2.
Open the dropdown beside the source
3.
Click Delete
This is useful for removing test or deprecated sources.

2. Direct API-Based Product Ingestion#

(Important: Solves the VNed “anonymous users created” issue)#

You can also push product data via the Track API, but you must use the correct payload.

✔ RULE:#

If productId is provided,
you do NOT need userId or profileId.
This prevents the system from creating anonymous users during bulk product sync operations (e.g., WooCommerce → Intempt sync).

API Payload Format (Correct)#

Use this structure when sending product data directly to Intempt:
{
  "productId": "123",
  "data": {
    "title": "Wine Bottle",
    "amount": 150,
    "quantity": 4,
    "categories": [
      { "id": 2300, "name": "Closed Reflex", "slug": "closed-reflex" },
      { "id": 2151, "name": "Optics", "slug": "optics" }
    ],
    "images": [
      {
        "id": 11689,
        "src": "https://example.com/image1.jpg",
        "name": "image1.jpg"
      },
      {
        "id": 11690,
        "src": "https://example.com/image2.jpg",
        "name": "image2.jpg"
      }
    ],
    "tags": [
      { "id": 10, "name": "Featured" },
      { "id": 14, "name": "Best Seller" }
    ]
  }
}

✔ You may include any nested data inside data:#

categories (any number of levels)
tags
images
metadata
product attributes
custom WooCommerce/Shopify fields
variant data

❌ Wrong Payload (causes anonymous users)#

Do NOT send product arrays inside an event:
{
  "eventTitle": "Products",
  "data": {
    "products": [ ... ]
  }
}
This forces Intempt to create a profile per event → hundreds of anonymous users.

✔ Correct: Treat Product Sync as Product Records, Not Events#

Use:
{
  "productId": "...",
  "data": { ... }
}
NOT:
{
  "eventTitle": "...",
  "userId": "...",
  "data": { products: [...] }
}

Why productId Removes the Need for userId / profileId#

When productId is included:
Intempt switches into catalog ingestion mode
No new user is created
No profile merging logic is triggered
The product is stored directly in the product catalog
This is the correct and intended method for WooCommerce / Shopify / custom backend product syncs.

Summary#

The Product Catalog ingestion framework includes:

✔ Catalog Source Integration#

For JSON/XML feeds mapped through the UI.

✔ Direct API-Based Product Ingestion#

For syncing products programmatically.

✔ No userId/profileId required when productId is used#

Prevents anonymous users and ensures clean ingestion.

✔ Supports nested product structures#

(categories, tags, images, metadata, variations, etc.)
Using the correct ingestion approach ensures your product catalog is imported cleanly and is fully compatible with Intempt’s Recommendations engine.
Modified at 2025-12-03 15:01:08
Previous
intempt:html / intempt:page / intempt:session
Next
Event Schema Overview
Built with