diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5f6ccb26c..74ca321ee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -404,6 +404,15 @@ Run `npm run lint` before committing. The `lint` command is able to fix some eas `npm lint` uses [Prettier](https://prettier.io), which offers integrations for consistent formatting for many editors and IDEs. +Run `npm run validate` to validate that all example files match their corresponding schemas. The validator: + +- Builds an in-memory map of all local schema files by their `$id` (useful for validating unpublished schemas in PRs) +- Automatically fetches remote/published schemas via HTTP/HTTPS when `$ref` references aren't found locally +- Caches fetched remote schemas to avoid duplicate requests +- Reports validation results including count of remote schemas fetched + +The command validates `components`, `extensions`, and `schemas` directories by default, or you can specify specific directories: `npm run validate components/datatypes/paid-media`. + ### Re-Use and Modularity In order to encourage re-use of definitions and modularity of schema files, avoid putting all property declarations into the root of the schema, instead use a `definitions` object with one sub-key for each semantic unit. Then, at the bottom of your schema definition, `$ref`erence them using the `allOf` construct. diff --git a/bin/validate-schemas.js b/bin/validate-schemas.js new file mode 100755 index 000000000..c571a6ee2 --- /dev/null +++ b/bin/validate-schemas.js @@ -0,0 +1,354 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); +const https = require('https'); +const http = require('http'); +const Ajv = require('ajv'); + +// Cache for fetched remote schemas +const remoteSchemaCache = new Map(); + +/** + * Fetch a remote schema via HTTP/HTTPS + */ +function fetchRemoteSchema(url) { + return new Promise((resolve, reject) => { + // Check cache first + if (remoteSchemaCache.has(url)) { + return resolve(remoteSchemaCache.get(url)); + } + + const protocol = url.startsWith('https:') ? https : http; + + protocol.get(url, (res) => { + if (res.statusCode !== 200) { + return reject(new Error(`Failed to fetch ${url}: HTTP ${res.statusCode}`)); + } + + let data = ''; + res.on('data', (chunk) => data += chunk); + res.on('end', () => { + try { + const schema = JSON.parse(data); + remoteSchemaCache.set(url, schema); + resolve(schema); + } catch (e) { + reject(new Error(`Failed to parse JSON from ${url}: ${e.message}`)); + } + }); + }).on('error', (e) => { + reject(new Error(`Failed to fetch ${url}: ${e.message}`)); + }); + }); +} + +/** + * Recursively find all JSON files in a directory + */ +function findJsonFiles(dir, fileList = []) { + const files = fs.readdirSync(dir); + + files.forEach(file => { + // Skip .git and docs directories + if (file === '.git' || file === 'docs') { + return; + } + + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isDirectory()) { + findJsonFiles(filePath, fileList); + } else if (file.endsWith('.json')) { + fileList.push(filePath); + } + }); + + return fileList; +} + +/** + * Build a map of $id to schema file paths by searching parent directories + */ +function buildSchemaMap(targetDir, searchRoot) { + const schemaMap = new Map(); + const allFiles = findJsonFiles(searchRoot); + + allFiles.forEach(filePath => { + if (filePath.endsWith('.schema.json')) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const schema = JSON.parse(content); + + if (schema.$id) { + schemaMap.set(schema.$id, { + path: filePath, + schema: schema + }); + } + } catch (error) { + console.error(`Error reading schema file ${filePath}:`, error.message); + } + } + }); + + return schemaMap; +} + +/** + * Find all example files recursively + */ +function findExampleFiles(dir, fileList = []) { + const files = fs.readdirSync(dir); + + files.forEach(file => { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isDirectory()) { + findExampleFiles(filePath, fileList); + } else if (file.match(/\.example\.\d+\.json$/)) { + fileList.push(filePath); + } + }); + + return fileList; +} + +/** + * Validate examples against their schemas + */ +async function validateExamples(targetDir, schemaMap) { + const results = { + total: 0, + passed: 0, + failed: 0, + errors: [], + remoteFetches: 0 + }; + + // Find all example files recursively + const examplePaths = findExampleFiles(targetDir); + + for (const examplePath of examplePaths) { + // Find corresponding schema file + const exampleFile = path.basename(examplePath); + const schemaFile = exampleFile.replace(/\.example\.\d+\.json$/, '.schema.json'); + const schemaPath = path.join(path.dirname(examplePath), schemaFile); + + if (!fs.existsSync(schemaPath)) { + results.errors.push({ + file: exampleFile, + error: `Schema file not found: ${schemaFile}` + }); + results.total++; + results.failed++; + continue; + } + + try { + const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8')); + const example = JSON.parse(fs.readFileSync(examplePath, 'utf8')); + + // Create AJV instance with custom schema loader + const ajv = new Ajv({ + allErrors: true, + verbose: true, + v5: true, + loadSchema: async (uri) => { + // First check if it's in our local schema map + if (schemaMap.has(uri)) { + return schemaMap.get(uri).schema; + } + + // Try to fetch remotely + try { + console.log(` Fetching remote schema: ${uri}`); + results.remoteFetches++; + return await fetchRemoteSchema(uri); + } catch (e) { + throw new Error(`Cannot resolve schema ${uri}: ${e.message}`); + } + } + }); + + // Add all schemas from the map to AJV + schemaMap.forEach((value, key) => { + try { + ajv.addSchema(value.schema, key); + } catch (e) { + // Schema might already be added or have issues + } + }); + + // Compile and validate (use compileAsync to support loadSchema) + let validate; + try { + validate = await ajv.compileAsync(schema); + } catch (compileError) { + results.errors.push({ + file: exampleFile, + error: `Schema compilation error: ${compileError.message}`, + details: compileError + }); + results.total++; + results.failed++; + continue; + } + + const valid = validate(example); + results.total++; + + if (!valid) { + results.failed++; + + // Analyze errors to provide helpful information + const errorDetails = validate.errors.map(err => { + let message = ` - Path: ${err.dataPath || err.instancePath || '(root)'}`; + + if (err.keyword === 'required') { + message += `\n Missing required field: ${err.params.missingProperty}`; + message += `\n Schema path: ${err.schemaPath}`; + } else if (err.keyword === 'additionalProperties') { + message += `\n Additional property not allowed: ${err.params.additionalProperty}`; + message += `\n Schema path: ${err.schemaPath}`; + } else if (err.keyword === 'type') { + message += `\n Expected type: ${err.params.type}, got: ${typeof err.data}`; + if (err.data !== null && typeof err.data === 'object' && !Array.isArray(err.data)) { + message += `\n Actual value keys: ${Object.keys(err.data).slice(0, 5).join(', ')}${Object.keys(err.data).length > 5 ? '...' : ''}`; + } else if (typeof err.data === 'string') { + message += `\n Actual value: "${err.data.substring(0, 50)}${err.data.length > 50 ? '...' : ''}"`; + } + message += `\n Schema path: ${err.schemaPath}`; + } else if (err.keyword === 'enum') { + message += `\n Value "${err.data}" must be one of: ${err.params.allowedValues.join(', ')}`; + message += `\n Schema path: ${err.schemaPath}`; + } else { + message += `\n ${err.keyword}: ${err.message}`; + if (err.params) { + message += `\n Params: ${JSON.stringify(err.params, null, 2)}`; + } + message += `\n Schema path: ${err.schemaPath}`; + } + + return message; + }); + + results.errors.push({ + file: exampleFile, + schema: schemaFile, + errors: errorDetails, + errorCount: validate.errors.length + }); + } else { + results.passed++; + } + + } catch (error) { + results.errors.push({ + file: exampleFile, + error: `Error processing file: ${error.message}` + }); + results.total++; + results.failed++; + } + } + + return results; +} + +/** + * Main function + */ +async function main() { + const args = process.argv.slice(2); + + // Default to validating components, extensions, and schemas directories + const defaultDirs = ['components', 'extensions', 'schemas']; + const targetDirs = args.length > 0 ? args : defaultDirs; + + // Validate that all target directories exist + const validDirs = targetDirs.filter(dir => { + if (!fs.existsSync(dir)) { + console.warn(`Warning: Directory not found: ${dir}`); + return false; + } + return true; + }); + + if (validDirs.length === 0) { + console.error('Error: No valid directories to validate'); + process.exit(1); + } + + console.log(`\n${'='.repeat(80)}`); + console.log(`Validating schemas in: ${validDirs.join(', ')}`); + console.log(`${'='.repeat(80)}\n`); + + // Find the repository root (current directory when run as npm script) + const repoRoot = process.cwd(); + console.log(`Repository root: ${repoRoot}\n`); + + // Build schema map (always search entire repo for schema references) + console.log('Building schema map...'); + const schemaMap = buildSchemaMap(null, repoRoot); + console.log(`Found ${schemaMap.size} schemas\n`); + + // Validate examples in each directory + console.log('Validating examples...\n'); + const allResults = { + total: 0, + passed: 0, + failed: 0, + errors: [], + remoteFetches: 0 + }; + + for (const dir of validDirs) { + const results = await validateExamples(dir, schemaMap); + allResults.total += results.total; + allResults.passed += results.passed; + allResults.failed += results.failed; + allResults.errors.push(...results.errors); + allResults.remoteFetches += results.remoteFetches; + } + + // Print results + console.log(`\n${'='.repeat(80)}`); + console.log('VALIDATION RESULTS'); + console.log(`${'='.repeat(80)}\n`); + console.log(`Total examples: ${allResults.total}`); + console.log(`Passed: ${allResults.passed}`); + console.log(`Failed: ${allResults.failed}`); + if (allResults.remoteFetches > 0) { + console.log(`Remote schemas fetched: ${allResults.remoteFetches}`); + } + console.log(''); + + if (allResults.errors.length > 0) { + console.log(`${'='.repeat(80)}`); + console.log('ERRORS'); + console.log(`${'='.repeat(80)}\n`); + + allResults.errors.forEach((error, index) => { + console.log(`${index + 1}. ${error.file}`); + if (error.schema) { + console.log(` Schema: ${error.schema}`); + } + if (error.error) { + console.log(` Error: ${error.error}`); + } + if (error.errors) { + console.log(` Validation errors (${error.errorCount}):`); + error.errors.forEach(err => console.log(err)); + } + console.log(''); + }); + } + + process.exit(allResults.failed > 0 ? 1 : 0); +} + +main(); + diff --git a/components/fieldgroups/paid-media/core-paid-media-account-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-account-details.example.1.json new file mode 100644 index 000000000..c4d4567a4 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-account-details.example.1.json @@ -0,0 +1,66 @@ +{ + "xdm:paidMedia": { + "xdm:accountDetails": { + "xdm:accountName": "Acme Corp - Meta Business Account", + "xdm:accountType": "business", + "xdm:businessName": "Acme Corporation", + "xdm:industry": "Technology", + "xdm:country": "US", + "xdm:isTestAccount": false, + "xdm:parentAccountID": "parent_account_987654321", + "xdm:agencyID": "agency_456789123", + "xdm:permissions": ["owner", "admin"], + "xdm:spendingLimits": { + "xdm:dailyLimit": 5000, + "xdm:monthlyLimit": 150000, + "xdm:totalLimit": 1000000 + }, + "xdm:billingInfo": { + "xdm:billingType": "credit_card", + "xdm:paymentMethod": "Visa ending in 1234", + "xdm:creditLimit": 500000, + "xdm:currentBalance": 125000 + }, + "xdm:contactInfo": { + "xdm:primaryEmail": "john.doe@acmecorp.com", + "xdm:phone": "+1-415-555-0120", + "xdm:website": "https://www.acmecorp.com", + "xdm:address": { + "xdm:street1": "123 Innovation Drive", + "xdm:street2": "Suite 500", + "xdm:city": "San Francisco", + "xdm:state": "California", + "xdm:region": "CA", + "xdm:postalCode": "94105", + "xdm:country": "US" + } + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_business_verification_status", + "xdm:stringValue": "verified" + }, + { + "xdm:fieldName": "meta_ad_account_id", + "xdm:stringValue": "act_123456789012345" + }, + { + "xdm:fieldName": "meta_business_manager_name", + "xdm:stringValue": "Acme Corp Business Manager" + }, + { + "xdm:fieldName": "meta_account_creation_date", + "xdm:stringValue": "2020-03-15T08:00:00Z" + }, + { + "xdm:fieldName": "meta_two_factor_enabled", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_agency_relationship", + "xdm:stringValue": "direct" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-account-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-account-details.schema.json new file mode 100644 index 000000000..27228e783 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-account-details.schema.json @@ -0,0 +1,253 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/account-details", + "title": "Core Paid Media Account Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Account-specific details and configuration fields for paid media accounts", + "definitions": { + "account-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:accountDetails": { + "type": "object", + "title": "Account Details", + "description": "Specific details for paid media accounts", + "properties": { + "xdm:accountName": { + "type": "string", + "title": "Account Name", + "description": "Display name of the ad account" + }, + "xdm:accountType": { + "type": "string", + "title": "Account Type", + "description": "Type of account", + "enum": ["business", "personal", "agency", "brand", "other"], + "meta:enum": { + "business": "Business Account", + "personal": "Personal Account", + "agency": "Agency Account", + "brand": "Brand Account", + "other": "Other Account Type" + } + }, + "xdm:businessName": { + "type": "string", + "title": "Business Name", + "description": "Name of the business associated with the account" + }, + "xdm:industry": { + "type": "string", + "title": "Industry", + "description": "Industry category of the business" + }, + "xdm:country": { + "type": "string", + "title": "Country", + "description": "Country where the account is registered (ISO country code)" + }, + "xdm:isTestAccount": { + "type": "boolean", + "title": "Is Test Account", + "description": "Whether this is a test/sandbox account" + }, + "xdm:parentAccountID": { + "type": "string", + "title": "Parent Account ID", + "description": "ID of parent account (for sub-accounts or managed accounts)" + }, + "xdm:agencyID": { + "type": "string", + "title": "Agency ID", + "description": "ID of managing agency (if applicable)" + }, + "xdm:permissions": { + "type": "array", + "title": "Account Permissions", + "description": "User permissions for this account", + "items": { + "type": "string", + "enum": [ + "owner", + "admin", + "analyst", + "campaign_manager", + "creative_manager", + "finance_manager", + "viewer" + ], + "meta:enum": { + "owner": "Account Owner", + "admin": "Administrator", + "analyst": "Analyst", + "campaign_manager": "Campaign Manager", + "creative_manager": "Creative Manager", + "finance_manager": "Finance Manager", + "viewer": "Viewer" + } + } + }, + "xdm:spendingLimits": { + "type": "object", + "title": "Spending Limits", + "description": "Account-level spending limits", + "properties": { + "xdm:dailyLimit": { + "type": "number", + "title": "Daily Spending Limit", + "description": "Daily spending limit in account currency", + "minimum": 0 + }, + "xdm:monthlyLimit": { + "type": "number", + "title": "Monthly Spending Limit", + "description": "Monthly spending limit in account currency", + "minimum": 0 + }, + "xdm:totalLimit": { + "type": "number", + "title": "Total Spending Limit", + "description": "Total account spending limit", + "minimum": 0 + } + } + }, + "xdm:billingInfo": { + "type": "object", + "title": "Billing Information", + "description": "Account billing details", + "properties": { + "xdm:billingType": { + "type": "string", + "title": "Billing Type", + "enum": [ + "prepaid", + "postpaid", + "credit_line", + "credit_card" + ], + "meta:enum": { + "prepaid": "Prepaid", + "postpaid": "Postpaid", + "credit_line": "Credit Line", + "credit_card": "Credit Card" + } + }, + "xdm:paymentMethod": { + "type": "string", + "title": "Payment Method", + "description": "Primary payment method" + }, + "xdm:creditLimit": { + "type": "number", + "title": "Credit Limit", + "description": "Account credit limit", + "minimum": 0 + }, + "xdm:currentBalance": { + "type": "number", + "title": "Current Balance", + "description": "Current account balance", + "minimum": 0 + } + } + }, + "xdm:contactInfo": { + "type": "object", + "title": "Contact Information", + "description": "Account contact details", + "properties": { + "xdm:primaryEmail": { + "type": "string", + "format": "email", + "title": "Primary Email", + "description": "Primary contact email" + }, + "xdm:phone": { + "type": "string", + "title": "Phone Number", + "description": "Primary contact phone number" + }, + "xdm:website": { + "type": "string", + "title": "Website URL", + "description": "Business website URL" + }, + "xdm:address": { + "type": "object", + "title": "Business Address", + "properties": { + "xdm:street1": { + "type": "string", + "title": "Street Address Line 1", + "description": "First line of street address" + }, + "xdm:street2": { + "type": "string", + "title": "Street Address Line 2", + "description": "Second line of street address (suite, apt, etc.)" + }, + "xdm:street3": { + "type": "string", + "title": "Street Address Line 3", + "description": "Third line of street address" + }, + "xdm:city": { + "type": "string", + "title": "City" + }, + "xdm:state": { + "type": "string", + "title": "State/Province", + "description": "State or province" + }, + "xdm:region": { + "type": "string", + "title": "Region", + "description": "State, province, or region" + }, + "xdm:postalCode": { + "type": "string", + "title": "Postal Code" + }, + "xdm:country": { + "type": "string", + "title": "Country" + } + } + } + } + }, + "xdm:additionalDetails": { + "title": "Additional Account Details", + "description": "Platform-specific account details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/account-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-ad-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.1.json new file mode 100644 index 000000000..07de93625 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.1.json @@ -0,0 +1,52 @@ +{ + "xdm:paidMedia": { + "xdm:adDetails": { + "xdm:adType": "video", + "xdm:reviewStatus": "approved", + "xdm:reviewStatusReasons": [], + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:payingAdvertiserName": "Acme Corporation", + "xdm:socialMediaProperties": { + "xdm:effectiveObjectStoryID": "post_123456789_987654321", + "xdm:isShareable": true, + "xdm:favoriteDisplayMode": "default" + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567890123" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_video_id", + "xdm:stringValue": "987654321012345" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-ad-details.example.2.json b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.2.json new file mode 100644 index 000000000..9a7c15e47 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.2.json @@ -0,0 +1,57 @@ +{ + "xdm:paidMedia": { + "xdm:adDetails": { + "xdm:adType": "image", + "xdm:reviewStatus": "approved", + "xdm:reviewStatusReasons": [], + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:payingAdvertiserName": "Acme Corporation", + "xdm:socialMediaProperties": { + "xdm:effectiveObjectStoryID": "post_123456789_111222333", + "xdm:sourceInstagramMediaID": "ig_acmecorp_media_111222333", + "xdm:isShareable": true, + "xdm:favoriteDisplayMode": "default" + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567891111" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567892222" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567893333" + }, + { + "xdm:fieldName": "meta_image_hash", + "xdm:stringValue": "abc123def456ghi789jkl012" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_SALES" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITH_BID_CAP" + }, + { + "xdm:fieldName": "meta_dynamic_creative", + "xdm:stringValue": "true" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-ad-details.example.3.json b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.3.json new file mode 100644 index 000000000..3e4718534 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-ad-details.example.3.json @@ -0,0 +1,60 @@ +{ + "xdm:paidMedia": { + "xdm:adDetails": { + "xdm:adType": "carousel", + "xdm:reviewStatus": "approved", + "xdm:reviewStatusReasons": [], + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:payingAdvertiserName": "Acme Corporation", + "xdm:socialMediaProperties": { + "xdm:effectiveObjectStoryID": "post_123456789_444555666", + "xdm:isShareable": true, + "xdm:favoriteDisplayMode": "default" + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567894444" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567895555" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567896666" + }, + { + "xdm:fieldName": "meta_carousel_card_count", + "xdm:stringValue": "5" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_SALES" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "COST_CAP" + }, + { + "xdm:fieldName": "meta_catalog_id", + "xdm:stringValue": "catalog_987654321" + }, + { + "xdm:fieldName": "meta_product_set_id", + "xdm:stringValue": "product_set_123456" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-ad-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-ad-details.schema.json new file mode 100644 index 000000000..db4e68ba0 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-ad-details.schema.json @@ -0,0 +1,370 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/ad-details", + "title": "Core Paid Media Ad Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Ad-specific details and configuration fields for paid media ads", + "definitions": { + "ad-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:adDetails": { + "type": "object", + "title": "Ad Details", + "description": "Specific details for individual paid media ads", + "properties": { + "xdm:adType": { + "type": "string", + "title": "Ad Type", + "description": "Type of ad creative", + "enum": [ + "text", + "image", + "video", + "carousel", + "collection", + "dynamic", + "responsive", + "shopping", + "app_install", + "lead_form", + "playable", + "interactive", + "other" + ], + "meta:enum": { + "text": "Text Ad", + "image": "Image Ad", + "video": "Video Ad", + "carousel": "Carousel Ad", + "collection": "Collection Ad", + "dynamic": "Dynamic Ad", + "responsive": "Responsive Ad", + "shopping": "Shopping Ad", + "app_install": "App Install Ad", + "lead_form": "Lead Form Ad", + "playable": "Playable Ad", + "interactive": "Interactive Ad", + "other": "Other Ad Type" + } + }, + "xdm:adSubtype": { + "type": "string", + "title": "Ad Subtype", + "description": "Additional classification of the ad beyond the main type (GenStudio migration aid)" + }, + "xdm:creative": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-creative", + "title": "Creative Details", + "description": "Creative content and assets for the ad" + }, + "xdm:reviewStatus": { + "type": "string", + "title": "Review Status", + "description": "Ad review/approval status", + "enum": [ + "pending", + "approved", + "rejected", + "under_review", + "needs_attention", + "not_reviewed" + ], + "meta:enum": { + "pending": "Pending Review", + "approved": "Approved", + "rejected": "Rejected", + "under_review": "Under Review", + "needs_attention": "Needs Attention", + "not_reviewed": "Not Reviewed" + } + }, + "xdm:reviewStatusReasons": { + "type": "array", + "title": "Review Status Reasons", + "description": "Reasons for review rejection or issues", + "items": { + "type": "string" + } + }, + "xdm:deliveryStatus": { + "type": "string", + "title": "Delivery Status", + "description": "Current delivery status of the ad", + "enum": [ + "active", + "inactive", + "pending", + "learning", + "limited", + "not_delivering", + "completed" + ], + "meta:enum": { + "active": "Actively Delivering", + "inactive": "Not Delivering", + "pending": "Pending Delivery", + "learning": "In Learning Phase", + "limited": "Limited Delivery", + "not_delivering": "Not Delivering", + "completed": "Delivery Completed" + } + }, + "xdm:isPinDeleted": { + "type": "boolean", + "title": "Is Pin Deleted", + "description": "Whether the original pin/post is deleted (for social platforms)" + }, + "xdm:isRemovable": { + "type": "boolean", + "title": "Is Removable", + "description": "Whether the ad can be removed" + }, + "xdm:payingAdvertiserName": { + "type": "string", + "title": "Paying Advertiser Name", + "description": "Name of the paying advertiser (for political/regulated ads)" + }, + "xdm:creativeAssetGroupsSpec": { + "type": "object", + "title": "Creative Asset Groups Spec", + "description": "Specification for dynamic creative or asset customization", + "properties": { + "xdm:isDynamic": { + "type": "boolean", + "title": "Is Dynamic Creative", + "description": "Whether this uses dynamic creative assembly" + }, + "xdm:assetGroups": { + "type": "array", + "title": "Asset Groups", + "description": "Groups of creative assets", + "items": { + "type": "object", + "properties": { + "xdm:groupName": { + "type": "string", + "title": "Group Name" + }, + "xdm:assetIDs": { + "type": "array", + "title": "Asset IDs", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "xdm:degreesOfFreedomSpec": { + "type": "object", + "title": "Degrees of Freedom Spec", + "description": "Specification for automated creative features (AI enhancements)", + "properties": { + "xdm:enabled": { + "type": "boolean", + "title": "AI Enhancement Enabled", + "description": "Whether AI creative enhancements are enabled" + }, + "xdm:features": { + "type": "array", + "title": "AI Features", + "description": "Specific AI features enabled", + "items": { + "type": "string" + } + } + } + }, + "xdm:socialMediaProperties": { + "type": "object", + "title": "Social Media Properties", + "description": "Properties specific to social media ads", + "properties": { + "xdm:effectiveObjectStoryID": { + "type": "string", + "title": "Effective Object Story ID", + "description": "Links to the social media post used as the ad" + }, + "xdm:sourceInstagramMediaID": { + "type": "string", + "title": "Source Instagram Media ID", + "description": "Instagram media ID for Instagram-originated creatives" + }, + "xdm:objectStorySpec": { + "type": "object", + "title": "Object Story Spec", + "description": "Full story specification for complex ad types", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:isShareable": { + "type": "boolean", + "title": "Is Shareable", + "description": "Whether users can share the ad with friends" + }, + "xdm:favoriteDisplayMode": { + "type": "string", + "title": "Favorite Display Mode", + "description": "How users can favorite the creative within the app" + } + } + }, + "xdm:appProperties": { + "type": "object", + "title": "App Properties", + "description": "Properties for app install/engagement ads", + "properties": { + "xdm:appInstallProperties": { + "type": "object", + "title": "App Install Properties", + "description": "Properties for app install ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:deepLinkProperties": { + "type": "object", + "title": "Deep Link Properties", + "description": "Properties for deep link ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + }, + "xdm:leadGenerationProperties": { + "type": "object", + "title": "Lead Generation Properties", + "description": "Properties for lead generation ads", + "properties": { + "xdm:leadGenerationFormID": { + "type": "string", + "title": "Lead Generation Form ID", + "description": "ID of the lead generation form" + }, + "xdm:offerDisclaimerID": { + "type": "string", + "title": "Offer Disclaimer ID", + "description": "ID of offer disclaimer associated with the creative" + } + } + }, + "xdm:partnershipProperties": { + "type": "object", + "title": "Partnership Properties", + "description": "Properties for partnership/creator ads", + "properties": { + "xdm:creatorPartnershipType": { + "type": "string", + "title": "Creator Partnership Type", + "description": "Type of creator partnership" + }, + "xdm:profileProperties": { + "type": "object", + "title": "Profile Properties", + "description": "Profile properties for partnership ads", + "properties": { + "xdm:profileID": { + "type": "string", + "title": "Profile ID", + "description": "ID of the associated profile" + } + } + } + } + }, + "xdm:interactionProperties": { + "type": "object", + "title": "Interaction Properties", + "description": "Properties for interactive ad features", + "properties": { + "xdm:chatProperties": { + "type": "object", + "title": "Chat Properties", + "description": "Properties for chat-enabled ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:webViewProperties": { + "type": "object", + "title": "Web View Properties", + "description": "Properties for web view ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:adToLensProperties": { + "type": "object", + "title": "Ad to Lens Properties", + "description": "Properties for AR lens ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:adToCallProperties": { + "type": "object", + "title": "Ad to Call Properties", + "description": "Properties for call-to-action ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:adToMessageProperties": { + "type": "object", + "title": "Ad to Message Properties", + "description": "Properties for message ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:reminderProperties": { + "type": "object", + "title": "Reminder Properties", + "description": "Properties for reminder ads", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + }, + "xdm:urlTracking": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-url-tracking" + }, + "xdm:additionalDetails": { + "title": "Additional Ad Details", + "description": "Platform-specific ad details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/ad-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-adgroup-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-adgroup-details.example.1.json new file mode 100644 index 000000000..d72d14f20 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-adgroup-details.example.1.json @@ -0,0 +1,92 @@ +{ + "xdm:paidMedia": { + "xdm:adGroupDetails": { + "xdm:adGroupType": "standard", + "xdm:childAdType": "video", + "xdm:budgetSettings": { + "xdm:budgetInMicroCurrency": 500000000, + "xdm:bidInMicroCurrency": 1250000, + "xdm:bidStrategyType": "lowest_cost", + "xdm:targetCpa": 25.5, + "xdm:targetRoas": 3.5, + "xdm:roasValueMicro": 3500000 + }, + "xdm:optimizationSettings": { + "xdm:conversionWindow": "7d_click_1d_view", + "xdm:isAutoTargetingEnabled": true, + "xdm:isCampaignOptimization": false + }, + "xdm:placementSettings": { + "xdm:placementGroup": "automatic_placements", + "xdm:placements": [ + "facebook_feed", + "instagram_feed", + "facebook_marketplace", + "facebook_video_feeds", + "facebook_right_column", + "instagram_explore", + "instagram_reels", + "messenger_inbox", + "audience_network_native", + "audience_network_banner", + "audience_network_interstitial", + "audience_network_rewarded_video" + ], + "xdm:deviceTypes": ["mobile", "desktop"] + }, + "xdm:deliverySettings": { + "xdm:pacingDeliveryType": "standard", + "xdm:deliveryConstraint": "none", + "xdm:deliveryStatus": "active", + "xdm:reachGoal": 125000, + "xdm:impressionGoal": 500000 + }, + "xdm:trackingSettings": { + "xdm:pixelID": "pixel_123456789", + "xdm:measurementProviderNames": ["meta", "adobe"], + "xdm:eventSources": ["pixel", "app"], + "xdm:skadnetworkProperties": { + "xdm:status": "enrolled" + } + }, + "xdm:brandSafetyConfig": { + "xdm:inventoryFilter": "standard", + "xdm:blockedCategories": ["mature_content", "political"] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_adset_name", + "xdm:stringValue": "Fall Launch - Video - 25-54 - Tech Enthusiasts" + }, + { + "xdm:fieldName": "meta_optimization_goal", + "xdm:stringValue": "LINK_CLICKS" + }, + { + "xdm:fieldName": "meta_billing_event", + "xdm:stringValue": "IMPRESSIONS" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + }, + { + "xdm:fieldName": "meta_destination_type", + "xdm:stringValue": "WEBSITE" + }, + { + "xdm:fieldName": "meta_promoted_object_type", + "xdm:stringValue": "PAGE" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-adgroup-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-adgroup-details.schema.json new file mode 100644 index 000000000..2a872d05a --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-adgroup-details.schema.json @@ -0,0 +1,326 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/adgroup-details", + "title": "Core Paid Media Ad Group Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Ad group-specific details and configuration fields for paid media ad groups/ad sets/ad squads", + "definitions": { + "adgroup-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:adGroupDetails": { + "type": "object", + "title": "Ad Group Details", + "description": "Specific details for paid media ad groups/ad sets/ad squads", + "properties": { + "xdm:adGroupType": { + "type": "string", + "title": "Ad Group Type", + "description": "Type of ad group", + "enum": [ + "standard", + "dynamic", + "smart", + "shopping", + "video", + "app_install", + "lead_generation", + "reach_frequency", + "other" + ], + "meta:enum": { + "standard": "Standard Ad Group", + "dynamic": "Dynamic Ad Group", + "smart": "Smart/Automated Ad Group", + "shopping": "Shopping Ad Group", + "video": "Video Ad Group", + "app_install": "App Install Ad Group", + "lead_generation": "Lead Generation Ad Group", + "reach_frequency": "Reach & Frequency Ad Group", + "other": "Other Ad Group Type" + } + }, + "xdm:childAdType": { + "type": "string", + "title": "Child Ad Type", + "description": "Type of ads contained in this ad group" + }, + "xdm:promotedObject": { + "type": "object", + "title": "Promoted Object", + "description": "Object being promoted at ad group level", + "properties": { + "xdm:objectType": { + "type": "string", + "title": "Object Type" + }, + "xdm:objectID": { + "type": "string", + "title": "Object ID" + }, + "xdm:productSetID": { + "type": "string", + "title": "Product Set ID", + "description": "Product catalog set ID for shopping campaigns" + } + } + }, + "xdm:budgetSettings": { + "type": "object", + "title": "Budget Settings", + "description": "Ad group budget configuration", + "properties": { + "xdm:budgetInMicroCurrency": { + "type": "integer", + "title": "Budget (Micro Currency)", + "description": "Budget amount in micro currency units" + }, + "xdm:bidInMicroCurrency": { + "type": "integer", + "title": "Bid (Micro Currency)", + "description": "Bid amount in micro currency units" + }, + "xdm:bidStrategyType": { + "type": "string", + "title": "Bid Strategy Type", + "enum": [ + "manual_cpc", + "enhanced_cpc", + "maximize_clicks", + "maximize_conversions", + "target_cpa", + "target_roas", + "target_impression_share", + "automatic", + "lowest_cost", + "cost_cap", + "bid_cap", + "min_roas" + ], + "meta:enum": { + "manual_cpc": "Manual CPC", + "enhanced_cpc": "Enhanced CPC", + "maximize_clicks": "Maximize Clicks", + "maximize_conversions": "Maximize Conversions", + "target_cpa": "Target CPA", + "target_roas": "Target ROAS", + "target_impression_share": "Target Impression Share", + "automatic": "Automatic Bidding", + "lowest_cost": "Lowest Cost", + "cost_cap": "Cost Cap", + "bid_cap": "Bid Cap", + "min_roas": "Minimum ROAS" + } + }, + "xdm:targetCpa": { + "type": "number", + "title": "Target CPA", + "description": "Target cost per acquisition" + }, + "xdm:targetRoas": { + "type": "number", + "title": "Target ROAS", + "description": "Target return on ad spend" + }, + "xdm:roasValueMicro": { + "type": "integer", + "title": "ROAS Value (Micro)", + "description": "Desired ROAS value in micro currency" + } + } + }, + "xdm:targeting": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-targeting", + "title": "Ad Group Targeting", + "description": "Targeting specifications for the ad group" + }, + "xdm:optimizationSettings": { + "type": "object", + "title": "Optimization Settings", + "description": "Ad group optimization configuration", + "properties": { + "xdm:optimizationGoalMetadata": { + "type": "object", + "title": "Optimization Goal Metadata", + "description": "Metadata for optimization goals", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:conversionWindow": { + "type": "string", + "title": "Conversion Window", + "description": "Delivery optimization window" + }, + "xdm:isAutoTargetingEnabled": { + "type": "boolean", + "title": "Auto Targeting Enabled", + "description": "Whether auto-targeting is enabled" + }, + "xdm:isCampaignOptimization": { + "type": "boolean", + "title": "Campaign Optimization", + "description": "Whether creative optimization is enabled" + } + } + }, + "xdm:placementSettings": { + "type": "object", + "title": "Placement Settings", + "description": "Ad placement configuration", + "properties": { + "xdm:placementGroup": { + "type": "string", + "title": "Placement Group", + "description": "Campaign placement group type" + }, + "xdm:placements": { + "type": "array", + "title": "Placements", + "description": "Specific ad placements", + "items": { + "type": "string" + } + }, + "xdm:deviceTypes": { + "type": "array", + "title": "Device Types", + "description": "Targeted device types", + "items": { + "type": "string" + } + } + } + }, + "xdm:deliverySettings": { + "type": "object", + "title": "Delivery Settings", + "description": "Ad delivery configuration", + "properties": { + "xdm:pacingDeliveryType": { + "type": "string", + "title": "Pacing Delivery Type", + "enum": ["standard", "accelerated"], + "meta:enum": { + "standard": "Standard Delivery", + "accelerated": "Accelerated Delivery" + } + }, + "xdm:deliveryConstraint": { + "type": "string", + "title": "Delivery Constraint", + "description": "Type of delivery constraint" + }, + "xdm:deliveryStatus": { + "type": "string", + "title": "Delivery Status", + "description": "Current delivery status" + }, + "xdm:reachGoal": { + "type": "integer", + "title": "Reach Goal", + "description": "Target reach goal" + }, + "xdm:impressionGoal": { + "type": "integer", + "title": "Impression Goal", + "description": "Target impression goal" + } + } + }, + "xdm:trackingSettings": { + "type": "object", + "title": "Tracking Settings", + "description": "Tracking and measurement configuration", + "properties": { + "xdm:pixelID": { + "type": "string", + "title": "Pixel ID", + "description": "Pixel associated with the ad group" + }, + "xdm:measurementProviderNames": { + "type": "array", + "title": "Measurement Provider Names", + "description": "Approved measurement providers", + "items": { + "type": "string" + } + }, + "xdm:eventSources": { + "type": "array", + "title": "Event Sources", + "description": "Event sources for tracking", + "items": { + "type": "string" + } + }, + "xdm:skadnetworkProperties": { + "type": "object", + "title": "SKAdNetwork Properties", + "description": "SKAdNetwork configuration for iOS", + "properties": { + "xdm:status": { + "type": "string", + "title": "SKAdNetwork Status", + "description": "SKAdNetwork enrollment status" + } + } + }, + "xdm:urlTracking": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-url-tracking" + } + } + }, + "xdm:brandSafetyConfig": { + "type": "object", + "title": "Brand Safety Configuration", + "description": "Brand safety and content filtering settings", + "properties": { + "xdm:inventoryFilter": { + "type": "string", + "title": "Inventory Filter", + "description": "Brand safety inventory filter level" + }, + "xdm:blockedCategories": { + "type": "array", + "title": "Blocked Categories", + "description": "Content categories to avoid", + "items": { + "type": "string" + } + } + } + }, + "xdm:additionalDetails": { + "title": "Additional Ad Group Details", + "description": "Platform-specific ad group details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/adgroup-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-asset-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.1.json new file mode 100644 index 000000000..e674328ea --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.1.json @@ -0,0 +1,75 @@ +{ + "xdm:paidMedia": { + "xdm:assetDetails": { + "xdm:assetType": "video", + "xdm:assetSubType": "mp4", + "title": "Fall Product Launch - 30 Second Hero Video", + "description": "Introducing our latest product innovation with stunning visuals and compelling storytelling. Features product benefits, customer testimonials, and call-to-action.", + "xdm:content": "", + "xdm:mediaProperties": { + "xdm:url": "https://cdn.acmecorp.com/videos/fall-launch-hero-30s.mp4", + "xdm:permalinkURL": "https://cdn.acmecorp.com/videos/fall-launch-hero-30s.mp4", + "xdm:thumbnailURL": "https://cdn.acmecorp.com/videos/thumbnails/fall-launch-hero-30s.jpg", + "xdm:source": "https://cdn.acmecorp.com/videos/fall-launch-hero-30s.mp4", + "xdm:hash": "sha256:abc123def456ghi789jkl012mno345pqr678stu901vwx234yz" + }, + "xdm:dimensions": { + "xdm:width": 1920, + "xdm:height": 1080, + "xdm:aspectRatio": "16:9", + "xdm:orientation": "landscape" + }, + "xdm:fileProperties": { + "xdm:fileSize": 45678912, + "xdm:fileSizeFormatted": "43.5 MB", + "xdm:mimeType": "video/mp4", + "xdm:fileExtension": "mp4", + "xdm:encoding": "h264" + }, + "xdm:videoProperties": { + "xdm:duration": 30, + "xdm:frameRate": 30, + "xdm:bitrate": 12000, + "xdm:codec": "h264", + "xdm:hasAudio": true, + "xdm:youtubeVideoID": "" + }, + "xdm:usageMetadata": { + "xdm:usageCount": 5, + "xdm:lastUsedDate": "2025-11-10T08:00:00Z", + "xdm:associatedCampaigns": ["campaign_fall_2025_launch"], + "xdm:associatedAds": ["ad_vid_987654321", "ad_vid_987654322"] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_video_id", + "xdm:stringValue": "987654321012345" + }, + { + "xdm:fieldName": "meta_video_status", + "xdm:stringValue": "ready" + }, + { + "xdm:fieldName": "meta_video_upload_date", + "xdm:stringValue": "2025-10-28T14:30:00Z" + }, + { + "xdm:fieldName": "meta_video_thumbnail_url", + "xdm:stringValue": "https://scontent.xx.fbcdn.net/v/t15.5256-10/video_thumb.jpg" + }, + { + "xdm:fieldName": "meta_video_format_support", + "xdm:stringValue": "feed,story,reels" + }, + { + "xdm:fieldName": "meta_video_captions_auto_generated", + "xdm:stringValue": "false" + }, + { + "xdm:fieldName": "meta_video_sound_collection_id", + "xdm:stringValue": "sound_collection_123456" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-asset-details.example.2.json b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.2.json new file mode 100644 index 000000000..b7c91a173 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.2.json @@ -0,0 +1,73 @@ +{ + "xdm:paidMedia": { + "xdm:assetDetails": { + "xdm:assetType": "image", + "xdm:assetSubType": "jpeg", + "title": "Holiday Sale - Hero Banner Image", + "description": "Eye-catching hero banner featuring holiday sale messaging with product showcase and promotional offer. Optimized for feed and story placements.", + "xdm:content": "", + "xdm:mediaProperties": { + "xdm:url": "https://cdn.acmecorp.com/images/holiday-sale-hero-banner.jpg", + "xdm:permalinkURL": "https://cdn.acmecorp.com/images/holiday-sale-hero-banner.jpg", + "xdm:thumbnailURL": "https://cdn.acmecorp.com/images/thumbnails/holiday-sale-hero-banner-thumb.jpg", + "xdm:source": "https://cdn.acmecorp.com/images/holiday-sale-hero-banner.jpg", + "xdm:hash": "sha256:xyz789abc456def123ghi890jkl567mno234pqr901stu678vwx345" + }, + "xdm:dimensions": { + "xdm:width": 1200, + "xdm:height": 628, + "xdm:aspectRatio": "1.91:1", + "xdm:orientation": "landscape" + }, + "xdm:fileProperties": { + "xdm:fileSize": 2456789, + "xdm:fileSizeFormatted": "2.3 MB", + "xdm:mimeType": "image/jpeg", + "xdm:fileExtension": "jpg", + "xdm:encoding": "jpeg" + }, + "xdm:imageProperties": { + "xdm:colorSpace": "sRGB", + "xdm:hasTransparency": false, + "xdm:isAnimated": false, + "xdm:dominantColors": ["#FF6B35", "#004E89", "#FFFFFF"] + }, + "xdm:usageMetadata": { + "xdm:usageCount": 3, + "xdm:lastUsedDate": "2025-11-10T09:00:00Z", + "xdm:associatedCampaigns": ["campaign_holiday_2025"], + "xdm:associatedAds": ["ad_img_456789123"] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_image_hash", + "xdm:stringValue": "abc123def456ghi789jkl012" + }, + { + "xdm:fieldName": "meta_image_status", + "xdm:stringValue": "active" + }, + { + "xdm:fieldName": "meta_image_upload_date", + "xdm:stringValue": "2025-11-01T09:00:00Z" + }, + { + "xdm:fieldName": "meta_image_url", + "xdm:stringValue": "https://scontent.xx.fbcdn.net/v/t45.1600-4/image_hash.jpg" + }, + { + "xdm:fieldName": "meta_image_format_support", + "xdm:stringValue": "feed,story,marketplace" + }, + { + "xdm:fieldName": "meta_text_overlay_percentage", + "xdm:stringValue": "15" + }, + { + "xdm:fieldName": "meta_image_quality_score", + "xdm:stringValue": "9.0" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-asset-details.example.3.json b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.3.json new file mode 100644 index 000000000..86e7ac452 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-asset-details.example.3.json @@ -0,0 +1,153 @@ +{ + "xdm:paidMedia": { + "xdm:assetDetails": { + "xdm:assetType": "lead_form", + "xdm:assetSubType": "instant_form", + "title": "Product Demo Request - Instant Form", + "description": "Lead generation form for product demo requests. Collects contact information and company details for sales follow-up.", + "xdm:content": "", + "xdm:mediaProperties": { + "xdm:url": "", + "xdm:permalinkURL": "", + "xdm:thumbnailURL": "", + "xdm:source": "", + "xdm:hash": "" + }, + "xdm:fileProperties": { + "xdm:fileSize": 0, + "xdm:fileSizeFormatted": "0 B", + "xdm:mimeType": "application/json", + "xdm:fileExtension": "json", + "xdm:encoding": "" + }, + "xdm:leadFormProperties": { + "xdm:formID": "form_lead_789123456", + "xdm:formName": "Product Demo Request Form", + "xdm:formType": "instant_form", + "xdm:formFields": [ + { + "xdm:fieldName": "full_name", + "xdm:fieldType": "text", + "xdm:fieldLabel": "Full Name", + "xdm:required": true, + "xdm:prefilled": true + }, + { + "xdm:fieldName": "email", + "xdm:fieldType": "email", + "xdm:fieldLabel": "Email Address", + "xdm:required": true, + "xdm:prefilled": true + }, + { + "xdm:fieldName": "phone_number", + "xdm:fieldType": "phone", + "xdm:fieldLabel": "Phone Number", + "xdm:required": true, + "xdm:prefilled": true + }, + { + "xdm:fieldName": "company_name", + "xdm:fieldType": "text", + "xdm:fieldLabel": "Company Name", + "xdm:required": true, + "xdm:prefilled": false + }, + { + "xdm:fieldName": "job_title", + "xdm:fieldType": "text", + "xdm:fieldLabel": "Job Title", + "xdm:required": true, + "xdm:prefilled": false + }, + { + "xdm:fieldName": "company_size", + "xdm:fieldType": "select", + "xdm:fieldLabel": "Company Size", + "xdm:required": true, + "xdm:prefilled": false, + "xdm:options": [ + "1-10", + "11-50", + "51-200", + "201-500", + "501-1000", + "1000+" + ] + }, + { + "xdm:fieldName": "industry", + "xdm:fieldType": "select", + "xdm:fieldLabel": "Industry", + "xdm:required": false, + "xdm:prefilled": false, + "xdm:options": [ + "Technology", + "Healthcare", + "Finance", + "Retail", + "Manufacturing", + "Other" + ] + }, + { + "xdm:fieldName": "timeline", + "xdm:fieldType": "select", + "xdm:fieldLabel": "When are you looking to implement?", + "xdm:required": false, + "xdm:prefilled": false, + "xdm:options": [ + "Immediately", + "1-3 months", + "3-6 months", + "6+ months", + "Just researching" + ] + } + ], + "xdm:privacyPolicyURL": "https://www.acmecorp.com/privacy", + "xdm:customDisclaimer": "We respect your privacy. Your information will only be used to contact you about our products and services." + }, + "xdm:usageMetadata": { + "xdm:usageCount": 8, + "xdm:lastUsedDate": "2025-11-10T10:00:00Z", + "xdm:associatedCampaigns": ["campaign_b2b_lead_gen_2025"], + "xdm:associatedAds": ["ad_form_789123456"] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_form_id", + "xdm:stringValue": "789123456789012" + }, + { + "xdm:fieldName": "meta_form_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_form_type", + "xdm:stringValue": "LEAD_GENERATION" + }, + { + "xdm:fieldName": "meta_form_created_date", + "xdm:stringValue": "2025-10-25T11:00:00Z" + }, + { + "xdm:fieldName": "meta_form_updated_date", + "xdm:stringValue": "2025-11-02T14:30:00Z" + }, + { + "xdm:fieldName": "meta_crm_integration", + "xdm:stringValue": "salesforce" + }, + { + "xdm:fieldName": "meta_lead_delivery_method", + "xdm:stringValue": "webhook" + }, + { + "xdm:fieldName": "meta_webhook_url", + "xdm:stringValue": "https://api.acmecorp.com/leads/webhook" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-asset-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-asset-details.schema.json new file mode 100644 index 000000000..e59bc7b89 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-asset-details.schema.json @@ -0,0 +1,390 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/asset-details", + "title": "Core Paid Media Asset Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Asset-specific details and configuration fields for paid media creative assets", + "definitions": { + "asset-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:assetDetails": { + "type": "object", + "title": "Asset Details", + "description": "Specific details for paid media creative assets", + "properties": { + "xdm:assetType": { + "type": "string", + "title": "Asset Type", + "description": "Type of creative asset", + "enum": [ + "image", + "video", + "audio", + "text", + "html5", + "document", + "lead_form", + "dynamic_education", + "youtube_video", + "other" + ], + "meta:enum": { + "image": "Image Asset", + "video": "Video Asset", + "audio": "Audio Asset", + "text": "Text Asset", + "html5": "HTML5 Asset", + "document": "Document Asset", + "lead_form": "Lead Form Asset", + "dynamic_education": "Dynamic Education Asset", + "youtube_video": "YouTube Video Asset", + "other": "Other Asset Type" + } + }, + "xdm:assetSubType": { + "type": "string", + "title": "Asset Sub-type", + "description": "More specific asset sub-type or format" + }, + "title": { + "type": "string", + "title": "Asset Title", + "description": "Title or name of the asset" + }, + "description": { + "type": "string", + "title": "Asset Description", + "description": "Description of the asset content" + }, + "xdm:content": { + "type": "string", + "title": "Asset Content", + "description": "Text content of the asset (for text assets)" + }, + "xdm:sourceURL": { + "type": "string", + "title": "Source URL", + "description": "Source URL of the asset (GenStudio migration aid)" + }, + "xdm:mediaProperties": { + "type": "object", + "title": "Media Properties", + "description": "Properties specific to media assets", + "properties": { + "xdm:url": { + "type": "string", + "title": "Asset URL", + "description": "Direct URL to access the asset" + }, + "xdm:permalinkURL": { + "type": "string", + "title": "Permalink URL", + "description": "Permanent link to the asset" + }, + "xdm:thumbnailURL": { + "type": "string", + "title": "Thumbnail URL", + "description": "URL for asset thumbnail" + }, + "xdm:source": { + "type": "string", + "title": "Source URL", + "description": "Original source URL of the asset" + }, + "xdm:hash": { + "type": "string", + "title": "Asset Hash", + "description": "Unique hash identifier for the asset content" + } + } + }, + "xdm:dimensions": { + "type": "object", + "title": "Asset Dimensions", + "description": "Dimensional properties of the asset", + "properties": { + "xdm:width": { + "type": "integer", + "title": "Width", + "description": "Width in pixels" + }, + "xdm:height": { + "type": "integer", + "title": "Height", + "description": "Height in pixels" + }, + "xdm:aspectRatio": { + "type": "string", + "title": "Aspect Ratio", + "description": "Aspect ratio of the asset (e.g., 16:9, 1:1)" + }, + "xdm:orientation": { + "type": "string", + "title": "Orientation", + "enum": ["landscape", "portrait", "square"], + "meta:enum": { + "landscape": "Landscape", + "portrait": "Portrait", + "square": "Square" + } + } + } + }, + "xdm:fileProperties": { + "type": "object", + "title": "File Properties", + "description": "File-specific properties", + "properties": { + "xdm:fileSize": { + "type": "integer", + "title": "File Size", + "description": "File size in bytes" + }, + "xdm:fileSizeFormatted": { + "type": "string", + "title": "File Size Formatted", + "description": "Human-readable file size (e.g., 2.5 MB)" + }, + "xdm:mimeType": { + "type": "string", + "title": "MIME Type", + "description": "MIME type of the file" + }, + "xdm:fileExtension": { + "type": "string", + "title": "File Extension", + "description": "File extension (e.g., jpg, mp4, pdf)" + }, + "xdm:encoding": { + "type": "string", + "title": "Encoding", + "description": "File encoding format" + } + } + }, + "xdm:videoProperties": { + "type": "object", + "title": "Video Properties", + "description": "Properties specific to video assets", + "properties": { + "xdm:duration": { + "type": "number", + "title": "Duration", + "description": "Video duration in seconds" + }, + "xdm:frameRate": { + "type": "number", + "title": "Frame Rate", + "description": "Video frame rate (fps)" + }, + "xdm:bitrate": { + "type": "integer", + "title": "Bitrate", + "description": "Video bitrate in kbps" + }, + "xdm:codec": { + "type": "string", + "title": "Video Codec", + "description": "Video codec used" + }, + "xdm:hasAudio": { + "type": "boolean", + "title": "Has Audio", + "description": "Whether the video contains audio" + }, + "xdm:youtubeVideoID": { + "type": "string", + "title": "YouTube Video ID", + "description": "YouTube video ID (for YouTube video assets)" + } + } + }, + "xdm:imageProperties": { + "type": "object", + "title": "Image Properties", + "description": "Properties specific to image assets", + "properties": { + "xdm:colorSpace": { + "type": "string", + "title": "Color Space", + "description": "Color space of the image (e.g., RGB, CMYK)" + }, + "xdm:hasTransparency": { + "type": "boolean", + "title": "Has Transparency", + "description": "Whether the image has transparency/alpha channel" + }, + "xdm:isAnimated": { + "type": "boolean", + "title": "Is Animated", + "description": "Whether the image is animated (e.g., GIF)" + }, + "xdm:dominantColors": { + "type": "array", + "title": "Dominant Colors", + "description": "Dominant colors in the image", + "items": { + "type": "string" + } + } + } + }, + "xdm:interactionProperties": { + "type": "object", + "title": "Interaction Properties", + "description": "Properties for interactive assets", + "properties": { + "xdm:interactionType": { + "type": "string", + "title": "Interaction Type", + "description": "Type of interaction supported by the asset" + }, + "xdm:buttonProperties": { + "type": "object", + "title": "Button Properties", + "description": "Properties for interactive buttons", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + }, + "xdm:webViewProperties": { + "type": "object", + "title": "Web View Properties", + "description": "Properties for web view interactions", + "properties": { + "xdm:url": { + "type": "string", + "title": "Web View URL", + "description": "URL for web view interaction" + } + } + }, + "xdm:deepLinkProperties": { + "type": "object", + "title": "Deep Link Properties", + "description": "Properties for deep link interactions", + "additionalProperties": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + }, + "xdm:leadFormProperties": { + "type": "object", + "title": "Lead Form Properties", + "description": "Properties specific to lead form assets", + "properties": { + "xdm:backgroundImageAsset": { + "type": "string", + "title": "Background Image Asset", + "description": "Background image asset for lead forms" + }, + "xdm:formFields": { + "type": "array", + "title": "Form Fields", + "description": "Fields included in the lead form", + "items": { + "type": "object", + "properties": { + "xdm:fieldType": { + "type": "string", + "title": "Field Type" + }, + "xdm:fieldLabel": { + "type": "string", + "title": "Field Label" + }, + "xdm:isRequired": { + "type": "boolean", + "title": "Is Required" + } + } + } + } + } + }, + "xdm:dynamicEducationProperties": { + "type": "object", + "title": "Dynamic Education Properties", + "description": "Properties for dynamic education assets", + "properties": { + "xdm:imageURL": { + "type": "string", + "title": "Image URL", + "description": "Main image URL for dynamic education asset" + }, + "xdm:thumbnailImageURL": { + "type": "string", + "title": "Thumbnail Image URL", + "description": "Thumbnail image URL for dynamic education asset" + } + } + }, + "xdm:usageMetadata": { + "type": "object", + "title": "Usage Metadata", + "description": "Metadata about asset usage", + "properties": { + "xdm:usageCount": { + "type": "integer", + "title": "Usage Count", + "description": "Number of times this asset has been used" + }, + "xdm:lastUsedDate": { + "type": "string", + "format": "date-time", + "title": "Last Used Date", + "description": "When the asset was last used" + }, + "xdm:associatedCampaigns": { + "type": "array", + "title": "Associated Campaigns", + "description": "Campaigns that use this asset", + "items": { + "type": "string" + } + }, + "xdm:associatedAds": { + "type": "array", + "title": "Associated Ads", + "description": "Ads that use this asset", + "items": { + "type": "string" + } + } + } + }, + "xdm:additionalDetails": { + "title": "Additional Asset Details", + "description": "Platform-specific asset details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/asset-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.example.1.json new file mode 100644 index 000000000..e396ed179 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.example.1.json @@ -0,0 +1,88 @@ +{ + "xdm:paidMedia": { + "xdm:attributionMetrics": { + "xdm:attributionModel": "DATA_DRIVEN", + "xdm:clickAttributionWindow": "30_DAY", + "xdm:viewAttributionWindow": "1_DAY", + "xdm:engagementAttributionWindow": "7_DAY", + "xdm:crossDeviceAttribution": { + "xdm:enabled": true, + "xdm:crossDeviceConversions": 425, + "xdm:crossDeviceConversionRate": 0.34, + "xdm:deviceSwitchRate": 0.42, + "xdm:averageDevicesPerPath": 1.8, + "xdm:devicePathBreakdown": { + "xdm:mobileToDesktop": 245, + "xdm:desktopToMobile": 125, + "xdm:mobileToMobileApp": 55 + } + }, + "xdm:attributionWeight": 0.85, + "xdm:touchpointPosition": "middle", + "xdm:touchpointSequence": 3, + "xdm:totalTouchpoints": 4, + "xdm:pathLength": 8, + "xdm:timeToConversion": 199.2, + "xdm:attributionConfidence": 0.92, + "xdm:incrementalImpact": 0.7, + "xdm:baselineConversions": 375, + "xdm:incrementalConversions": 875, + "xdm:liftPercentage": 2.33, + "xdm:attributionMethodology": { + "xdm:algorithmType": "data_driven", + "xdm:modelVersion": "v3.2", + "xdm:trainingPeriod": "90_days", + "xdm:dataQuality": 0.95, + "xdm:sampleSize": 100000 + }, + "xdm:crossChannelAttribution": { + "xdm:channelContribution": 0.5, + "xdm:channelSequence": [ + { + "xdm:channel": "paid_social", + "xdm:position": 1, + "xdm:weight": 0.28 + }, + { + "xdm:channel": "paid_search", + "xdm:position": 2, + "xdm:weight": 0.22 + }, + { + "xdm:channel": "email", + "xdm:position": 3, + "xdm:weight": 0.15 + }, + { + "xdm:channel": "paid_social", + "xdm:position": 4, + "xdm:weight": 0.35 + } + ], + "xdm:dominantChannel": "paid_social" + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_attribution_setting", + "xdm:stringValue": "7_day_click_1_day_view" + }, + { + "xdm:fieldName": "meta_conversion_tracking_pixel", + "xdm:stringValue": "pixel_123456789" + }, + { + "xdm:fieldName": "meta_attribution_model_version", + "xdm:stringValue": "v3.2" + }, + { + "xdm:fieldName": "meta_cross_device_enabled", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_attribution_data_freshness", + "xdm:stringValue": "2025-11-10T08:00:00Z" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.schema.json new file mode 100644 index 000000000..9b660bb37 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-attribution-metrics.schema.json @@ -0,0 +1,331 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/attribution-metrics", + "title": "Core Paid Media Attribution Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Attribution window and methodology details for paid media campaigns", + "definitions": { + "attribution-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:attributionMetrics": { + "type": "object", + "title": "Attribution Metrics", + "description": "Attribution window and methodology details", + "properties": { + "xdm:attributionModel": { + "type": "string", + "title": "Attribution Model", + "description": "Attribution model used for conversions", + "enum": [ + "LAST_CLICK", + "FIRST_CLICK", + "LINEAR", + "TIME_DECAY", + "POSITION_BASED", + "DATA_DRIVEN", + "EVEN_CREDIT", + "CUSTOM" + ], + "meta:enum": { + "LAST_CLICK": "Last Click", + "FIRST_CLICK": "First Click", + "LINEAR": "Linear", + "TIME_DECAY": "Time Decay", + "POSITION_BASED": "Position Based", + "DATA_DRIVEN": "Data Driven", + "EVEN_CREDIT": "Even Credit", + "CUSTOM": "Custom Model" + } + }, + "xdm:clickAttributionWindow": { + "type": "string", + "title": "Click Attribution Window", + "description": "Click attribution window (e.g., '7_DAY', '30_DAY', or number of days as string)", + "enum": [ + "1_DAY", + "7_DAY", + "14_DAY", + "28_DAY", + "30_DAY", + "60_DAY", + "90_DAY", + "CUSTOM" + ], + "meta:enum": { + "1_DAY": "1 Day", + "7_DAY": "7 Days", + "14_DAY": "14 Days", + "28_DAY": "28 Days", + "30_DAY": "30 Days", + "60_DAY": "60 Days", + "90_DAY": "90 Days", + "CUSTOM": "Custom Window" + } + }, + "xdm:viewAttributionWindow": { + "type": "string", + "title": "View Attribution Window", + "description": "View attribution window (e.g., '1_DAY', '7_DAY', or number of days as string)", + "enum": [ + "1_DAY", + "7_DAY", + "14_DAY", + "28_DAY", + "30_DAY", + "CUSTOM" + ], + "meta:enum": { + "1_DAY": "1 Day", + "7_DAY": "7 Days", + "14_DAY": "14 Days", + "28_DAY": "28 Days", + "30_DAY": "30 Days", + "CUSTOM": "Custom Window" + } + }, + "xdm:engagementAttributionWindow": { + "type": "string", + "title": "Engagement Attribution Window", + "description": "Engagement attribution window (e.g., '1_DAY', '7_DAY', or number of days as string)", + "enum": [ + "1_DAY", + "7_DAY", + "14_DAY", + "28_DAY", + "30_DAY", + "CUSTOM" + ], + "meta:enum": { + "1_DAY": "1 Day", + "7_DAY": "7 Days", + "14_DAY": "14 Days", + "28_DAY": "28 Days", + "30_DAY": "30 Days", + "CUSTOM": "Custom Window" + } + }, + "xdm:crossDeviceAttribution": { + "type": "object", + "title": "Cross-Device Attribution Metrics", + "description": "Detailed cross-device attribution metrics", + "properties": { + "xdm:enabled": { + "type": "boolean", + "title": "Enabled" + }, + "xdm:crossDeviceConversions": { + "type": "number", + "title": "Cross Device Conversions", + "minimum": 0 + }, + "xdm:crossDeviceConversionRate": { + "type": "number", + "title": "Cross Device Conversion Rate", + "minimum": 0, + "maximum": 1 + }, + "xdm:deviceSwitchRate": { + "type": "number", + "title": "Device Switch Rate", + "minimum": 0, + "maximum": 1 + }, + "xdm:averageDevicesPerPath": { + "type": "number", + "title": "Average Devices Per Path", + "minimum": 0 + }, + "xdm:devicePathBreakdown": { + "type": "object", + "title": "Device Path Breakdown", + "properties": { + "xdm:mobileToDesktop": { + "type": "number", + "minimum": 0 + }, + "xdm:desktopToMobile": { + "type": "number", + "minimum": 0 + }, + "xdm:mobileToMobileApp": { + "type": "number", + "minimum": 0 + } + } + } + } + }, + "xdm:attributionWeight": { + "type": "number", + "title": "Attribution Weight", + "description": "Weight assigned to this touchpoint in attribution", + "minimum": 0, + "maximum": 1 + }, + "xdm:touchpointPosition": { + "type": "string", + "title": "Touchpoint Position", + "description": "Position of this touchpoint in the customer journey", + "enum": ["first", "middle", "last", "only"], + "meta:enum": { + "first": "First Touchpoint", + "middle": "Middle Touchpoint", + "last": "Last Touchpoint", + "only": "Only Touchpoint" + } + }, + "xdm:touchpointSequence": { + "type": "integer", + "title": "Touchpoint Sequence", + "description": "Sequence number of this touchpoint in the journey", + "minimum": 1 + }, + "xdm:totalTouchpoints": { + "type": "integer", + "title": "Total Touchpoints", + "description": "Total number of touchpoints in the conversion path", + "minimum": 1 + }, + "xdm:pathLength": { + "type": "integer", + "title": "Path Length", + "description": "Length of the conversion path in days", + "minimum": 0 + }, + "xdm:timeToConversion": { + "type": "number", + "title": "Time to Conversion", + "description": "Time from this touchpoint to conversion in hours", + "minimum": 0 + }, + "xdm:attributionConfidence": { + "type": "number", + "title": "Attribution Confidence", + "description": "Confidence score for the attribution", + "minimum": 0, + "maximum": 1 + }, + "xdm:incrementalImpact": { + "type": "number", + "title": "Incremental Impact", + "description": "Incremental impact of this touchpoint on conversion", + "minimum": 0, + "maximum": 1 + }, + "xdm:baselineConversions": { + "type": "number", + "title": "Baseline Conversions", + "description": "Expected conversions without this touchpoint", + "minimum": 0 + }, + "xdm:incrementalConversions": { + "type": "number", + "title": "Incremental Conversions", + "description": "Additional conversions attributed to this touchpoint", + "minimum": 0 + }, + "xdm:liftPercentage": { + "type": "number", + "title": "Lift Percentage", + "description": "Percentage lift in conversions due to this touchpoint", + "minimum": 0 + }, + "xdm:attributionMethodology": { + "type": "object", + "title": "Attribution Methodology", + "description": "Details about the attribution methodology used", + "properties": { + "xdm:algorithmType": { + "type": "string", + "title": "Algorithm Type", + "description": "Type of attribution algorithm used" + }, + "xdm:modelVersion": { + "type": "string", + "title": "Model Version", + "description": "Version of the attribution model" + }, + "xdm:trainingPeriod": { + "type": "string", + "title": "Training Period", + "description": "Period used to train the attribution model" + }, + "xdm:dataQuality": { + "type": "number", + "title": "Data Quality", + "description": "Quality score of data used for attribution", + "minimum": 0, + "maximum": 1 + }, + "xdm:sampleSize": { + "type": "integer", + "title": "Sample Size", + "description": "Sample size used for attribution modeling", + "minimum": 0 + } + } + }, + "xdm:crossChannelAttribution": { + "type": "object", + "title": "Cross-Channel Attribution", + "description": "Attribution across different marketing channels", + "properties": { + "xdm:channelContribution": { + "type": "number", + "title": "Channel Contribution", + "description": "This channel's contribution to the conversion", + "minimum": 0, + "maximum": 1 + }, + "xdm:channelSequence": { + "type": "array", + "title": "Channel Sequence", + "description": "Sequence of channels in the conversion path", + "items": { + "type": "object", + "properties": { + "xdm:channel": { + "type": "string" + }, + "xdm:position": { + "type": "integer" + }, + "xdm:weight": { + "type": "number" + } + } + } + }, + "xdm:dominantChannel": { + "type": "string", + "title": "Dominant Channel", + "description": "Channel with the highest attribution weight" + } + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/attribution-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-campaign-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-campaign-details.example.1.json new file mode 100644 index 000000000..f9fe896b0 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-campaign-details.example.1.json @@ -0,0 +1,99 @@ +{ + "xdm:paidMedia": { + "xdm:campaignDetails": { + "xdm:campaignType": "traffic", + "xdm:subType": "link_clicks", + "xdm:isAutomatedCampaign": false, + "xdm:promotedObject": { + "xdm:objectType": "page", + "xdm:objectID": "page_acmecorp_official", + "xdm:objectName": "Acme Corp Official Page", + "xdm:objectURL": "https://www.acmecorp.com/fall-launch" + }, + "xdm:budgetSettings": { + "xdm:isCampaignBudgetOptimization": true, + "xdm:spendCap": 2500, + "xdm:bidStrategy": "LOWEST_COST_WITHOUT_CAP", + "xdm:bidAmount": 0 + }, + "xdm:scheduling": { + "xdm:isAlwaysOn": false, + "xdm:flightDates": [ + { + "xdm:startDate": "2025-11-01T00:00:00Z", + "xdm:endDate": "2025-11-30T23:59:59Z", + "xdm:budget": 60000 + } + ], + "xdm:dayParting": { + "xdm:enabled": false, + "xdm:schedule": [] + } + }, + "xdm:frequencyCapping": { + "xdm:enabled": true, + "xdm:impressionCap": 5, + "xdm:timePeriod": "week" + }, + "xdm:conversionTracking": { + "xdm:pixelIDs": ["pixel_123456789"], + "xdm:conversionEvents": [ + "PageView", + "ViewContent", + "AddToCart", + "InitiateCheckout", + "Purchase" + ], + "xdm:attributionWindow": "7d_click_1d_view" + }, + "xdm:ios14CampaignType": "REGULAR_CAMPAIGN", + "xdm:skanEnabled": true, + "xdm:skanPostbackWindow": "POSTBACK_WINDOW_MODE2", + "xdm:appProfilePageEnabled": false, + "xdm:catalogId": "catalog_987654321", + "xdm:productSetId": "product_set_123456", + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_campaign_name", + "xdm:stringValue": "Fall 2025 Product Launch - Traffic Campaign" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_special_ad_categories", + "xdm:stringValue": "NONE" + }, + { + "xdm:fieldName": "meta_campaign_budget_optimization", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + }, + { + "xdm:fieldName": "meta_campaign_spending_limit", + "xdm:stringValue": "2500" + }, + { + "xdm:fieldName": "meta_campaign_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_effective_status", + "xdm:stringValue": "ACTIVE" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-campaign-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-campaign-details.schema.json new file mode 100644 index 000000000..0f6236f7d --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-campaign-details.schema.json @@ -0,0 +1,481 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/campaign-details", + "title": "Core Paid Media Campaign Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Campaign-specific details and configuration fields for paid media campaigns", + "definitions": { + "campaign-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:campaignDetails": { + "type": "object", + "title": "Campaign Details", + "description": "Specific details for paid media campaigns", + "properties": { + "xdm:campaignType": { + "type": "string", + "title": "Campaign Type", + "description": "Type of campaign", + "enum": [ + "search", + "display", + "video", + "shopping", + "social", + "mobile_app", + "connected_tv", + "audio", + "native", + "lead_generation", + "catalog_sales", + "sponsored_products", + "sponsored_brands", + "sponsored_display", + "sponsored_tv", + "traffic", + "other" + ], + "meta:enum": { + "search": "Search Campaign", + "display": "Display Campaign", + "video": "Video Campaign", + "shopping": "Shopping Campaign", + "social": "Social Media Campaign", + "mobile_app": "Mobile App Campaign", + "connected_tv": "Connected TV Campaign", + "audio": "Audio Campaign", + "native": "Native Campaign", + "lead_generation": "Lead Generation Campaign", + "catalog_sales": "Catalog Sales Campaign", + "sponsored_products": "Sponsored Products (Amazon)", + "sponsored_brands": "Sponsored Brands (Amazon)", + "sponsored_display": "Sponsored Display (Amazon)", + "sponsored_tv": "Sponsored TV (Amazon)", + "traffic": "Traffic Campaign", + "other": "Other Campaign Type" + } + }, + "xdm:subType": { + "type": "string", + "title": "Campaign Sub-type", + "description": "More specific campaign sub-type or format" + }, + "xdm:promotedObject": { + "type": "object", + "title": "Promoted Object", + "description": "Object being promoted by the campaign", + "properties": { + "xdm:objectType": { + "type": "string", + "title": "Object Type", + "enum": [ + "page", + "app", + "product", + "event", + "website", + "catalog", + "other" + ], + "meta:enum": { + "page": "Social Media Page", + "app": "Mobile App", + "product": "Product/Service", + "event": "Event", + "website": "Website", + "catalog": "Product Catalog", + "other": "Other Object" + } + }, + "xdm:objectID": { + "type": "string", + "title": "Object ID", + "description": "ID of the promoted object" + }, + "xdm:objectName": { + "type": "string", + "title": "Object Name", + "description": "Name of the promoted object" + }, + "xdm:objectURL": { + "type": "string", + "title": "Object URL", + "description": "URL of the promoted object" + } + } + }, + "xdm:budgetSettings": { + "type": "object", + "title": "Budget Settings", + "description": "Campaign budget configuration", + "properties": { + "xdm:isCampaignBudgetOptimization": { + "type": "boolean", + "title": "Campaign Budget Optimization", + "description": "Whether campaign uses automatic budget optimization" + }, + "xdm:spendCap": { + "type": "number", + "title": "Spend Cap", + "description": "Maximum amount that can be spent", + "minimum": 0 + }, + "xdm:bidStrategy": { + "type": "string", + "title": "Bid Strategy", + "description": "Bidding strategy for the campaign" + }, + "xdm:bidAmount": { + "type": "number", + "title": "Bid Amount", + "description": "Bid amount or target cost" + } + } + }, + "xdm:targeting": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-targeting", + "title": "Campaign Targeting", + "description": "Targeting specifications for the campaign" + }, + "xdm:scheduling": { + "type": "object", + "title": "Campaign Scheduling", + "description": "Campaign scheduling settings", + "properties": { + "xdm:isAlwaysOn": { + "type": "boolean", + "title": "Always On", + "description": "Whether campaign runs continuously" + }, + "xdm:flightDates": { + "type": "array", + "title": "Flight Dates", + "description": "Campaign flight periods", + "items": { + "type": "object", + "properties": { + "xdm:startDate": { + "type": "string", + "format": "date-time", + "title": "Flight Start Date" + }, + "xdm:endDate": { + "type": "string", + "format": "date-time", + "title": "Flight End Date" + }, + "xdm:budget": { + "type": "number", + "title": "Flight Budget", + "minimum": 0 + } + } + } + }, + "xdm:dayParting": { + "type": "object", + "title": "Day Parting", + "description": "Time-of-day scheduling", + "properties": { + "xdm:enabled": { + "type": "boolean", + "title": "Day Parting Enabled" + }, + "xdm:schedule": { + "type": "array", + "title": "Schedule", + "items": { + "type": "object", + "properties": { + "xdm:dayOfWeek": { + "type": "string", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ], + "meta:enum": { + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday" + } + }, + "xdm:startHour": { + "type": "integer", + "minimum": 0, + "maximum": 23 + }, + "xdm:endHour": { + "type": "integer", + "minimum": 0, + "maximum": 23 + } + } + } + } + } + } + } + }, + "xdm:frequencyCapping": { + "type": "object", + "title": "Frequency Capping", + "description": "Frequency cap settings", + "properties": { + "xdm:enabled": { + "type": "boolean", + "title": "Frequency Capping Enabled" + }, + "xdm:impressionCap": { + "type": "integer", + "title": "Impression Cap", + "description": "Maximum impressions per user" + }, + "xdm:timePeriod": { + "type": "string", + "title": "Time Period", + "enum": ["hour", "day", "week", "month"], + "meta:enum": { + "hour": "Per Hour", + "day": "Per Day", + "week": "Per Week", + "month": "Per Month" + } + } + } + }, + "xdm:conversionTracking": { + "type": "object", + "title": "Conversion Tracking", + "description": "Conversion tracking configuration", + "properties": { + "xdm:pixelIDs": { + "type": "array", + "title": "Pixel IDs", + "description": "Tracking pixel IDs associated with campaign", + "items": { + "type": "string" + } + }, + "xdm:conversionEvents": { + "type": "array", + "title": "Conversion Events", + "description": "Events being tracked for conversions", + "items": { + "type": "string" + } + }, + "xdm:attributionWindow": { + "type": "string", + "title": "Attribution Window", + "description": "Attribution window as a string (e.g., '7d_click_1d_view')" + }, + "xdm:urlTracking": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-url-tracking" + } + } + }, + "xdm:ios14CampaignType": { + "type": "string", + "title": "iOS 14 Campaign Type", + "description": "Campaign type for iOS 14+ attribution handling", + "enum": [ + "REGULAR_CAMPAIGN", + "IOS14_CAMPAIGN", + "ADVANCED_DEDICATED_CAMPAIGN" + ], + "meta:enum": { + "REGULAR_CAMPAIGN": "Regular Campaign", + "IOS14_CAMPAIGN": "iOS 14 Dedicated Campaign", + "ADVANCED_DEDICATED_CAMPAIGN": "Advanced Dedicated Campaign" + } + }, + "xdm:skanEnabled": { + "type": "boolean", + "title": "SKAN Enabled", + "description": "Whether SKAdNetwork (Apple's attribution framework) is enabled for this campaign" + }, + "xdm:skanPostbackWindow": { + "type": "string", + "title": "SKAN Postback Window", + "description": "SKAN 4.0 postback window mode selection", + "enum": [ + "POSTBACK_WINDOW_MODE1", + "POSTBACK_WINDOW_MODE2", + "POSTBACK_WINDOW_MODE3" + ], + "meta:enum": { + "POSTBACK_WINDOW_MODE1": "Postback Window 1 (0-2 days)", + "POSTBACK_WINDOW_MODE2": "Postback Window 2 (3-7 days)", + "POSTBACK_WINDOW_MODE3": "Postback Window 3 (8-35 days)" + } + }, + "xdm:appProfilePageEnabled": { + "type": "boolean", + "title": "App Profile Page Enabled", + "description": "Whether App Profile Page is enabled for the campaign" + }, + "xdm:isAutomatedCampaign": { + "type": "boolean", + "title": "Is Automated Campaign", + "description": "Whether this is an automated/smart campaign with machine learning optimization" + }, + "xdm:automatedCampaignType": { + "type": "string", + "title": "Automated Campaign Type", + "description": "Specific type of automated campaign", + "enum": [ + "SMART_PLUS", + "SMART_PERFORMANCE_WEB", + "PERFORMANCE_MAX", + "MAXIMUM_DELIVERY", + "AUTO_CAMPAIGN", + "DYNAMIC_CREATIVE", + "GMV_MAX", + "OTHER" + ], + "meta:enum": { + "SMART_PLUS": "Smart+ Campaign (TikTok)", + "SMART_PERFORMANCE_WEB": "Smart Performance Web Campaign (TikTok)", + "PERFORMANCE_MAX": "Performance Max (Google)", + "MAXIMUM_DELIVERY": "Maximum Delivery (LinkedIn)", + "AUTO_CAMPAIGN": "Auto Campaign (Amazon)", + "DYNAMIC_CREATIVE": "Dynamic Creative Optimization", + "GMV_MAX": "GMV Max Campaign (TikTok)", + "OTHER": "Other Automated Type" + } + }, + "xdm:catalogId": { + "type": "string", + "title": "Catalog ID", + "description": "Product catalog identifier for catalog-based campaigns" + }, + "xdm:catalogAuthorizedBusinessCenterId": { + "type": "string", + "title": "Catalog Authorized Business Center ID", + "description": "Business Center ID that authorized the catalog access" + }, + "xdm:productSource": { + "type": "string", + "title": "Product Source", + "description": "Source of products for the campaign", + "enum": [ + "CATALOG", + "STORE", + "TIKTOK_SHOP", + "AMAZON", + "SHOPIFY", + "MANUAL", + "OTHER" + ], + "meta:enum": { + "CATALOG": "Product Catalog", + "STORE": "Online Store", + "TIKTOK_SHOP": "TikTok Shop", + "AMAZON": "Amazon Store", + "SHOPIFY": "Shopify Store", + "MANUAL": "Manually Selected Products", + "OTHER": "Other Product Source" + } + }, + "xdm:productSetId": { + "type": "string", + "title": "Product Set ID", + "description": "Specific product set within catalog" + }, + "xdm:storeId": { + "type": "string", + "title": "Store ID", + "description": "Online store identifier (e.g., TikTok Shop ID, Amazon Store ID)" + }, + "xdm:storeAuthorizedBusinessCenterId": { + "type": "string", + "title": "Store Authorized Business Center ID", + "description": "Business Center ID that authorized the store access" + }, + "xdm:placementBidAdjustments": { + "type": "array", + "title": "Placement Bid Adjustments", + "description": "Bid adjustment percentages by ad placement", + "items": { + "type": "object", + "properties": { + "xdm:placement": { + "type": "string", + "title": "Placement", + "description": "Placement identifier (e.g., TOP_OF_SEARCH, PRODUCT_PAGE, HOME, DETAIL_PAGE)" + }, + "xdm:placementType": { + "type": "string", + "title": "Placement Type", + "description": "Type of placement", + "enum": [ + "SEARCH", + "PRODUCT_PAGE", + "HOME", + "FEED", + "STORIES", + "REELS", + "OTHER" + ], + "meta:enum": { + "SEARCH": "Search", + "PRODUCT_PAGE": "Product Page", + "HOME": "Home", + "FEED": "Feed", + "STORIES": "Stories", + "REELS": "Reels", + "OTHER": "Other" + } + }, + "xdm:adjustmentPercentage": { + "type": "number", + "title": "Adjustment Percentage", + "description": "Bid adjustment percentage (e.g., 50 for +50%, -25 for -25%)" + } + }, + "required": ["xdm:placement", "xdm:adjustmentPercentage"] + } + }, + "xdm:additionalDetails": { + "title": "Additional Campaign Details", + "description": "Platform-specific campaign details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/campaign-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.example.1.json new file mode 100644 index 000000000..e40610098 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.example.1.json @@ -0,0 +1,126 @@ +{ + "xdm:paidMedia": { + "xdm:conversionMetrics": { + "xdm:postClickConversions": 1250, + "xdm:postViewConversions": 385, + "xdm:postEngagementConversions": 125, + "xdm:totalConversions": 1760, + "xdm:conversionRate": 0.0352, + "xdm:costPerAction": 10.23, + "xdm:conversionsByType": { + "xdm:purchases": 875, + "xdm:addToCart": 2340, + "xdm:initiateCheckout": 1450, + "xdm:leads": 245, + "xdm:registrations": 180, + "xdm:downloads": 320, + "xdm:subscriptions": 95, + "xdm:customEvents": 125 + }, + "xdm:conversionValue": { + "xdm:totalValue": 187500, + "xdm:averageOrderValue": 214.29, + "xdm:purchaseValue": 187500, + "xdm:leadValue": 12250, + "xdm:registrationValue": 9000, + "xdm:subscriptionValue": 28500, + "xdm:customEventValue": 6250 + }, + "xdm:conversionTiming": { + "xdm:averageTimeToConversion": 8.3, + "xdm:medianTimeToConversion": 5.2, + "xdm:conversionsWithin1Day": 425, + "xdm:conversionsWithin3Days": 780, + "xdm:conversionsWithin7Days": 1250, + "xdm:conversionsWithin14Days": 1520, + "xdm:conversionsWithin30Days": 1760, + "xdm:conversionLag": 8.3 + }, + "xdm:conversionPath": { + "xdm:averagePathLength": 4.2, + "xdm:medianPathLength": 3, + "xdm:singleTouchConversions": 180, + "xdm:multiTouchConversions": 1580, + "xdm:averageTouchpoints": 4.2, + "xdm:assistedConversions": 890, + "xdm:directConversions": 870 + }, + "xdm:conversionQuality": { + "xdm:repeatPurchaseRate": 0.32, + "xdm:customerLifetimeValue": 642.5, + "xdm:averageSessionDuration": 245, + "xdm:bounceRate": 0.18, + "xdm:pagesPerSession": 5.8, + "xdm:engagementScore": 7.5, + "xdm:qualityScore": 8.2 + }, + "xdm:leadMetrics": { + "xdm:totalLeads": 245, + "xdm:qualifiedLeads": 185, + "xdm:leadQualificationRate": 0.755, + "xdm:salesQualifiedLeads": 125, + "xdm:marketingQualifiedLeads": 185, + "xdm:leadToOpportunityRate": 0.51, + "xdm:leadToCustomerRate": 0.28, + "xdm:averageLeadScore": 72, + "xdm:costPerLead": 73.47, + "xdm:costPerQualifiedLead": 97.3 + }, + "xdm:microConversions": { + "xdm:pageViews": 45000, + "xdm:productViews": 12500, + "xdm:videoViews": 8900, + "xdm:formStarts": 890, + "xdm:formCompletions": 245, + "xdm:emailSignups": 320, + "xdm:socialShares": 456, + "xdm:wishlistAdds": 678, + "xdm:storeLocatorSearches": 234 + }, + "xdm:conversionFunnel": { + "xdm:impressions": 50000, + "xdm:clicks": 2500, + "xdm:landingPageViews": 2340, + "xdm:productViews": 1850, + "xdm:addToCart": 980, + "xdm:initiateCheckout": 625, + "xdm:purchases": 875, + "xdm:clickToLandingRate": 0.936, + "xdm:landingToProductRate": 0.791, + "xdm:productToCartRate": 0.53, + "xdm:cartToCheckoutRate": 0.638, + "xdm:checkoutToPurchaseRate": 1.4 + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_conversion_tracking_pixel", + "xdm:stringValue": "pixel_123456789" + }, + { + "xdm:fieldName": "meta_attribution_window", + "xdm:stringValue": "7_day_click_1_day_view" + }, + { + "xdm:fieldName": "meta_conversion_api_enabled", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_deduplication_enabled", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_server_side_tracking", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_conversion_value_currency", + "xdm:stringValue": "USD" + }, + { + "xdm:fieldName": "meta_offline_conversions_enabled", + "xdm:stringValue": "false" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.schema.json new file mode 100644 index 000000000..d9b43b700 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-conversion-metrics.schema.json @@ -0,0 +1,319 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/conversion-metrics", + "title": "Core Paid Media Conversion Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Detailed conversion tracking metrics for paid media campaigns", + "definitions": { + "conversion-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:conversionMetrics": { + "type": "object", + "title": "Conversion Metrics", + "description": "Detailed conversion tracking metrics", + "properties": { + "xdm:postClickConversions": { + "type": "number", + "title": "Post-Click Conversions", + "description": "Conversions attributed to clicks", + "minimum": 0 + }, + "xdm:postViewConversions": { + "type": "number", + "title": "Post-View Conversions", + "description": "Conversions attributed to views", + "minimum": 0 + }, + "xdm:postEngagementConversions": { + "type": "number", + "title": "Post-Engagement Conversions", + "description": "Conversions attributed to engagements", + "minimum": 0 + }, + "xdm:actionValue": { + "type": "number", + "title": "Action Value", + "description": "Total value of all conversion actions", + "minimum": 0 + }, + "xdm:actionType": { + "type": "string", + "title": "Action Type", + "description": "Type of conversion action being measured (e.g., 'purchase', 'lead', 'app_install')" + }, + "xdm:actionSource": { + "type": "string", + "title": "Action Source", + "description": "Source of the conversion action (e.g., 'website', 'app', 'offline')" + }, + "xdm:oneDayClickActionValue": { + "type": "number", + "title": "1-Day Click Action Value", + "description": "Action value attributed to clicks within 1-day attribution window", + "minimum": 0 + }, + "xdm:oneDayViewActionValue": { + "type": "number", + "title": "1-Day View Action Value", + "description": "Action value attributed to views within 1-day attribution window", + "minimum": 0 + }, + "xdm:sevenDayClickActionValue": { + "type": "number", + "title": "7-Day Click Action Value", + "description": "Action value attributed to clicks within 7-day attribution window", + "minimum": 0 + }, + "xdm:oneDayClickConversions": { + "type": "number", + "title": "1-Day Click Conversions", + "description": "Number of conversions attributed to clicks within 1-day attribution window", + "minimum": 0 + }, + "xdm:oneDayViewConversions": { + "type": "number", + "title": "1-Day View Conversions", + "description": "Number of conversions attributed to views within 1-day attribution window", + "minimum": 0 + }, + "xdm:sevenDayClickConversions": { + "type": "number", + "title": "7-Day Click Conversions", + "description": "Number of conversions attributed to clicks within 7-day attribution window", + "minimum": 0 + }, + "xdm:conversionsByType": { + "type": "object", + "title": "Conversions by Type", + "description": "Breakdown of conversions by event type", + "properties": { + "xdm:purchases": { + "type": "number", + "title": "Purchases", + "minimum": 0 + }, + "xdm:addToCart": { + "type": "number", + "title": "Add to Cart", + "minimum": 0 + }, + "xdm:initiateCheckout": { + "type": "number", + "title": "Initiate Checkout", + "minimum": 0 + }, + "xdm:leads": { + "type": "number", + "title": "Leads", + "minimum": 0 + }, + "xdm:registrations": { + "type": "number", + "title": "Registrations", + "minimum": 0 + }, + "xdm:downloads": { + "type": "number", + "title": "Downloads", + "minimum": 0 + }, + "xdm:subscriptions": { + "type": "number", + "title": "Subscriptions", + "minimum": 0 + }, + "xdm:customEvents": { + "type": "number", + "title": "Custom Events", + "minimum": 0 + } + } + }, + "xdm:conversionRate": { + "type": "number", + "title": "Conversion Rate", + "description": "Overall conversion rate", + "minimum": 0, + "maximum": 1 + }, + "xdm:costPerAction": { + "type": "number", + "title": "Cost Per Action", + "description": "Average cost per conversion action", + "minimum": 0 + }, + "xdm:conversionLag": { + "type": "number", + "title": "Conversion Lag", + "description": "Average time from ad interaction to conversion (in hours)", + "minimum": 0 + }, + "xdm:conversionPath": { + "type": "object", + "title": "Conversion Path Metrics", + "description": "Metrics about the conversion path and touchpoints", + "properties": { + "xdm:averagePathLength": { + "type": "number", + "title": "Average Path Length", + "minimum": 0 + }, + "xdm:medianPathLength": { + "type": "number", + "title": "Median Path Length", + "minimum": 0 + }, + "xdm:singleTouchConversions": { + "type": "number", + "title": "Single Touch Conversions", + "minimum": 0 + }, + "xdm:multiTouchConversions": { + "type": "number", + "title": "Multi Touch Conversions", + "minimum": 0 + }, + "xdm:averageTouchpoints": { + "type": "number", + "title": "Average Touchpoints", + "minimum": 0 + }, + "xdm:assistedConversions": { + "type": "number", + "title": "Assisted Conversions", + "minimum": 0 + }, + "xdm:directConversions": { + "type": "number", + "title": "Direct Conversions", + "minimum": 0 + } + } + }, + "xdm:assistedConversions": { + "type": "number", + "title": "Assisted Conversions", + "description": "Conversions where this ad assisted but wasn't the last touch", + "minimum": 0 + }, + "xdm:directConversions": { + "type": "number", + "title": "Direct Conversions", + "description": "Conversions where this ad was the last touch", + "minimum": 0 + }, + "xdm:newCustomerConversions": { + "type": "number", + "title": "New Customer Conversions", + "description": "Conversions from new customers", + "minimum": 0 + }, + "xdm:returningCustomerConversions": { + "type": "number", + "title": "Returning Customer Conversions", + "description": "Conversions from returning customers", + "minimum": 0 + }, + "xdm:averageOrderValue": { + "type": "number", + "title": "Average Order Value", + "description": "Average value per conversion", + "minimum": 0 + }, + "xdm:totalOrderValue": { + "type": "number", + "title": "Total Order Value", + "description": "Total value of all conversions", + "minimum": 0 + }, + "xdm:conversionQuality": { + "type": "object", + "title": "Conversion Quality", + "description": "Quality metrics for conversions", + "properties": { + "xdm:qualityScore": { + "type": "number", + "title": "Quality Score", + "description": "Overall conversion quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:fraudRate": { + "type": "number", + "title": "Fraud Rate", + "description": "Percentage of conversions flagged as fraudulent", + "minimum": 0, + "maximum": 1 + }, + "xdm:validationRate": { + "type": "number", + "title": "Validation Rate", + "description": "Percentage of conversions that passed validation", + "minimum": 0, + "maximum": 1 + } + } + }, + "xdm:leads": { + "type": "integer", + "title": "Leads", + "description": "Total number of leads generated", + "minimum": 0 + }, + "xdm:qualifiedLeads": { + "type": "integer", + "title": "Qualified Leads", + "description": "Number of qualified/validated leads", + "minimum": 0 + }, + "xdm:costPerLead": { + "type": "number", + "title": "Cost Per Lead", + "description": "Average cost per lead", + "minimum": 0 + }, + "xdm:leadFormOpens": { + "type": "integer", + "title": "Lead Form Opens", + "description": "Number of times lead form was opened", + "minimum": 0 + }, + "xdm:leadFormSubmissions": { + "type": "integer", + "title": "Lead Form Submissions", + "description": "Number of lead form submissions", + "minimum": 0 + }, + "xdm:leadFormCompletionRate": { + "type": "number", + "title": "Lead Form Completion Rate", + "description": "Percentage of opened forms that were submitted", + "minimum": 0, + "maximum": 1 + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/conversion-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-cost-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-cost-metrics.example.1.json new file mode 100644 index 000000000..9c01b8238 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-cost-metrics.example.1.json @@ -0,0 +1,40 @@ +{ + "xdm:paidMedia": { + "xdm:costMetrics": { + "xdm:spendInMicroCurrency": 18000000000, + "xdm:averageCpc": 7.2, + "xdm:averageCpm": 36.0, + "xdm:averageCpe": 2.02, + "xdm:averageCpv": 0.15, + "xdm:averageCpa": 14.4, + "xdm:averageCpl": 73.47, + "xdm:bidAmount": 8.5, + "xdm:bidAmountMicro": 8500000, + "xdm:maxBid": 12.0, + "xdm:minBid": 3.5, + "xdm:impressionShare": { + "xdm:impressionShare": 0.68, + "xdm:impressionShareRank": 0.72, + "xdm:impressionShareBudget": 0.85, + "xdm:lostImpressionShareRank": 0.15, + "xdm:lostImpressionShareBudget": 0.17, + "xdm:exactMatchImpressionShare": 0.75, + "xdm:topImpressionShare": 0.42, + "xdm:absoluteTopImpressionShare": 0.28 + }, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 60000, + "xdm:budgetSpent": 18000, + "xdm:budgetRemaining": 42000, + "xdm:budgetUtilization": 0.3, + "xdm:dailyBudget": 2000, + "xdm:dailySpend": 600, + "xdm:dailyBudgetUtilization": 0.3, + "xdm:pacingStatus": "on_track", + "xdm:projectedSpend": 60000, + "xdm:budgetOverrun": 0, + "xdm:budgetUnderrun": 0 + } + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-cost-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-cost-metrics.schema.json new file mode 100644 index 000000000..ea6bee263 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-cost-metrics.schema.json @@ -0,0 +1,327 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/cost-metrics", + "title": "Core Paid Media Cost Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Detailed cost and bidding metrics for paid media campaigns", + "definitions": { + "cost-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:costMetrics": { + "type": "object", + "title": "Cost Metrics", + "description": "Detailed cost and bidding metrics", + "properties": { + "xdm:spendInMicroCurrency": { + "type": "integer", + "title": "Spend (Micro Currency)", + "description": "Amount spent in micro currency units", + "minimum": 0 + }, + "xdm:averageCpm": { + "type": "number", + "title": "Average CPM", + "description": "Average cost per thousand impressions", + "minimum": 0 + }, + "xdm:averageCpc": { + "type": "number", + "title": "Average CPC", + "description": "Average cost per click", + "minimum": 0 + }, + "xdm:averageCpe": { + "type": "number", + "title": "Average CPE", + "description": "Average cost per engagement", + "minimum": 0 + }, + "xdm:averageCpv": { + "type": "number", + "title": "Average CPV", + "description": "Average cost per video view", + "minimum": 0 + }, + "xdm:averageCpa": { + "type": "number", + "title": "Average CPA", + "description": "Average cost per acquisition/action", + "minimum": 0 + }, + "xdm:averageCpl": { + "type": "number", + "title": "Average CPL", + "description": "Average cost per lead", + "minimum": 0 + }, + "xdm:bidAmount": { + "type": "number", + "title": "Bid Amount", + "description": "Average bid amount", + "minimum": 0 + }, + "xdm:bidAmountMicro": { + "type": "integer", + "title": "Bid Amount (Micro Currency)", + "description": "Bid amount in micro currency units", + "minimum": 0 + }, + "xdm:maxBid": { + "type": "number", + "title": "Maximum Bid", + "description": "Maximum bid amount set", + "minimum": 0 + }, + "xdm:minBid": { + "type": "number", + "title": "Minimum Bid", + "description": "Minimum bid amount set", + "minimum": 0 + }, + "xdm:targetBid": { + "type": "number", + "title": "Target Bid", + "description": "Target bid amount for automated bidding", + "minimum": 0 + }, + "xdm:actualBid": { + "type": "number", + "title": "Actual Bid", + "description": "Actual bid amount used in auctions", + "minimum": 0 + }, + "xdm:qualityScore": { + "type": "number", + "title": "Quality Score", + "description": "Ad quality score (platform-specific)", + "minimum": 0, + "maximum": 10 + }, + "xdm:adRank": { + "type": "number", + "title": "Ad Rank", + "description": "Ad rank score used for auction positioning", + "minimum": 0 + }, + "xdm:competitionIndex": { + "type": "number", + "title": "Competition Index", + "description": "Competition level index for the auction", + "minimum": 0, + "maximum": 1 + }, + "xdm:impressionShare": { + "type": "object", + "title": "Impression Share Metrics", + "description": "Detailed impression share metrics", + "properties": { + "xdm:impressionShare": { + "type": "number", + "title": "Impression Share", + "minimum": 0, + "maximum": 1 + }, + "xdm:impressionShareRank": { + "type": "number", + "title": "Impression Share Rank", + "minimum": 0, + "maximum": 1 + }, + "xdm:impressionShareBudget": { + "type": "number", + "title": "Impression Share Budget", + "minimum": 0, + "maximum": 1 + }, + "xdm:lostImpressionShareRank": { + "type": "number", + "title": "Lost Impression Share Rank", + "minimum": 0, + "maximum": 1 + }, + "xdm:lostImpressionShareBudget": { + "type": "number", + "title": "Lost Impression Share Budget", + "minimum": 0, + "maximum": 1 + }, + "xdm:exactMatchImpressionShare": { + "type": "number", + "title": "Exact Match Impression Share", + "minimum": 0, + "maximum": 1 + }, + "xdm:topImpressionShare": { + "type": "number", + "title": "Top Impression Share", + "minimum": 0, + "maximum": 1 + }, + "xdm:absoluteTopImpressionShare": { + "type": "number", + "title": "Absolute Top Impression Share", + "minimum": 0, + "maximum": 1 + } + } + }, + "xdm:lostImpressionShareRank": { + "type": "number", + "title": "Lost Impression Share (Rank)", + "description": "Impression share lost due to ad rank", + "minimum": 0, + "maximum": 1 + }, + "xdm:lostImpressionShareBudget": { + "type": "number", + "title": "Lost Impression Share (Budget)", + "description": "Impression share lost due to budget constraints", + "minimum": 0, + "maximum": 1 + }, + "xdm:budgetUtilization": { + "type": "object", + "title": "Budget Utilization Metrics", + "description": "Detailed budget utilization metrics", + "properties": { + "xdm:budgetAllocated": { + "type": "number", + "title": "Budget Allocated", + "minimum": 0 + }, + "xdm:budgetSpent": { + "type": "number", + "title": "Budget Spent", + "minimum": 0 + }, + "xdm:budgetRemaining": { + "type": "number", + "title": "Budget Remaining", + "minimum": 0 + }, + "xdm:budgetUtilization": { + "type": "number", + "title": "Budget Utilization", + "minimum": 0, + "maximum": 1 + }, + "xdm:dailyBudget": { + "type": "number", + "title": "Daily Budget", + "minimum": 0 + }, + "xdm:dailySpend": { + "type": "number", + "title": "Daily Spend", + "minimum": 0 + }, + "xdm:dailyBudgetUtilization": { + "type": "number", + "title": "Daily Budget Utilization", + "minimum": 0, + "maximum": 1 + }, + "xdm:pacingStatus": { + "type": "string", + "title": "Pacing Status", + "enum": ["on_track", "ahead", "behind", "paused"], + "meta:enum": { + "on_track": "On Track", + "ahead": "Ahead", + "behind": "Behind", + "paused": "Paused" + } + }, + "xdm:projectedSpend": { + "type": "number", + "title": "Projected Spend", + "minimum": 0 + }, + "xdm:budgetOverrun": { + "type": "number", + "title": "Budget Overrun", + "minimum": 0 + }, + "xdm:budgetUnderrun": { + "type": "number", + "title": "Budget Underrun", + "minimum": 0 + } + } + }, + "xdm:budgetRemaining": { + "type": "number", + "title": "Budget Remaining", + "description": "Remaining budget amount", + "minimum": 0 + }, + "xdm:budgetPacing": { + "type": "number", + "title": "Budget Pacing", + "description": "Budget pacing percentage (actual vs. planned)", + "minimum": 0 + }, + "xdm:costEfficiency": { + "type": "number", + "title": "Cost Efficiency", + "description": "Cost efficiency score compared to benchmarks", + "minimum": 0 + }, + "xdm:marginOfError": { + "type": "number", + "title": "Margin of Error", + "description": "Statistical margin of error for cost metrics", + "minimum": 0, + "maximum": 1 + }, + "xdm:confidenceLevel": { + "type": "number", + "title": "Confidence Level", + "description": "Statistical confidence level for cost metrics", + "minimum": 0, + "maximum": 1 + }, + "xdm:costTrend": { + "type": "string", + "title": "Cost Trend", + "description": "Trend direction for costs", + "enum": ["increasing", "decreasing", "stable", "volatile"], + "meta:enum": { + "increasing": "Costs are increasing", + "decreasing": "Costs are decreasing", + "stable": "Costs are stable", + "volatile": "Costs are volatile" + } + }, + "xdm:costVariance": { + "type": "number", + "title": "Cost Variance", + "description": "Variance in cost metrics", + "minimum": 0 + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/cost-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.example.1.json b/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.example.1.json new file mode 100644 index 000000000..12b25e2ea --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.example.1.json @@ -0,0 +1,61 @@ +{ + "xdm:paidMedia": { + "xdm:breakdownType": "device_platform_demographic", + "xdm:dimensionalBreakdowns": { + "xdm:deviceType": "mobile", + "xdm:platform": "instagram", + "xdm:placement": "instagram_feed", + "xdm:ageGroup": "25-34", + "xdm:age": "25-34", + "xdm:gender": "female", + "xdm:country": "US", + "xdm:region": "California", + "xdm:city": "San Francisco", + "xdm:language": "en", + "xdm:interestCategory": "technology", + "xdm:behaviorCategory": "online_shoppers", + "xdm:audienceSegment": "tech_enthusiasts_25_54", + "xdm:campaignObjective": "traffic", + "xdm:optimizationGoal": "link_clicks", + "xdm:creativeFormat": "single_image", + "xdm:adPosition": "feed", + "xdm:position": "feed", + "xdm:timeOfDay": "afternoon", + "xdm:dayOfWeek": "Tuesday", + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_platform", + "xdm:stringValue": "instagram" + }, + { + "xdm:fieldName": "meta_placement", + "xdm:stringValue": "instagram_feed" + }, + { + "xdm:fieldName": "meta_device_platform", + "xdm:stringValue": "mobile" + }, + { + "xdm:fieldName": "meta_publisher_platform", + "xdm:stringValue": "instagram" + }, + { + "xdm:fieldName": "meta_impression_device", + "xdm:stringValue": "mobile_iphone" + }, + { + "xdm:fieldName": "meta_age_bucket", + "xdm:stringValue": "25-34" + }, + { + "xdm:fieldName": "meta_gender", + "xdm:stringValue": "female" + }, + { + "xdm:fieldName": "meta_region", + "xdm:stringValue": "California" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.schema.json b/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.schema.json new file mode 100644 index 000000000..7545ef963 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-dimensional-breakdowns.schema.json @@ -0,0 +1,160 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/dimensional-breakdowns", + "title": "Core Paid Media Dimensional Breakdowns", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Dimensional breakdown fields for paid media metrics aggregation", + "definitions": { + "dimensional-breakdowns": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:breakdownType": { + "type": "string", + "title": "Breakdown Type", + "description": "Indicates which dimension this metrics row is broken down by (GenStudio migration aid)" + }, + "xdm:dimensionalBreakdowns": { + "type": "object", + "title": "Dimensional Breakdowns", + "description": "Dimensional breakdowns for metrics aggregation", + "properties": { + "xdm:deviceType": { + "type": "string", + "title": "Device Type", + "description": "Device type for this metrics record", + "enum": ["desktop", "mobile", "tablet", "tv", "other"], + "meta:enum": { + "desktop": "Desktop", + "mobile": "Mobile", + "tablet": "Tablet", + "tv": "Connected TV", + "other": "Other Device" + } + }, + "xdm:placement": { + "type": "string", + "title": "Placement", + "description": "Ad placement for this metrics record" + }, + "xdm:ageGroup": { + "type": "string", + "title": "Age Group", + "description": "Age group demographic breakdown" + }, + "xdm:age": { + "type": "string", + "title": "Age", + "description": "Alias of ageGroup for migration" + }, + "xdm:gender": { + "type": "string", + "title": "Gender", + "description": "Gender demographic breakdown", + "enum": ["male", "female", "all", "unknown"], + "meta:enum": { + "male": "Male", + "female": "Female", + "all": "All Genders", + "unknown": "Unknown/Unspecified" + } + }, + "xdm:country": { + "type": "string", + "title": "Country", + "description": "Country for geographic breakdown (ISO country code)" + }, + "xdm:region": { + "type": "string", + "title": "Region", + "description": "Region/state for geographic breakdown" + }, + "xdm:city": { + "type": "string", + "title": "City", + "description": "City for geographic breakdown" + }, + "xdm:language": { + "type": "string", + "title": "Language", + "description": "Language for demographic breakdown" + }, + "xdm:interestCategory": { + "type": "string", + "title": "Interest Category", + "description": "Interest category for targeting breakdown" + }, + "xdm:behaviorCategory": { + "type": "string", + "title": "Behavior Category", + "description": "Behavior category for targeting breakdown" + }, + "xdm:audienceSegment": { + "type": "string", + "title": "Audience Segment", + "description": "Custom audience segment identifier" + }, + "xdm:campaignObjective": { + "type": "string", + "title": "Campaign Objective", + "description": "Campaign objective for context in multi-level reports" + }, + "xdm:optimizationGoal": { + "type": "string", + "title": "Optimization Goal", + "description": "Optimization goal for context in multi-level reports" + }, + "xdm:creativeFormat": { + "type": "string", + "title": "Creative Format", + "description": "Creative format breakdown (image, video, carousel, etc.)" + }, + "xdm:adPosition": { + "type": "string", + "title": "Ad Position", + "description": "Position of the ad on the platform" + }, + "xdm:position": { + "type": "string", + "title": "Position", + "description": "Alias of adPosition for migration" + }, + "xdm:platform": { + "type": "string", + "title": "Platform", + "description": "Platform breakdown (e.g., facebook, instagram, search, display)" + }, + "xdm:timeOfDay": { + "type": "string", + "title": "Time of Day", + "description": "Time of day breakdown (morning, afternoon, evening, night)" + }, + "xdm:dayOfWeek": { + "type": "string", + "title": "Day of Week", + "description": "Day of week breakdown" + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/dimensional-breakdowns" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-experience-details.example.1.json b/components/fieldgroups/paid-media/core-paid-media-experience-details.example.1.json new file mode 100644 index 000000000..4957003ed --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-experience-details.example.1.json @@ -0,0 +1,140 @@ +{ + "xdm:paidMedia": { + "xdm:experienceDetails": { + "xdm:experienceName": "Fall 2025 Product Showcase Carousel", + "xdm:experienceDescription": "Multi-product carousel showcasing our latest tech accessories", + "xdm:experienceType": "carousel", + "xdm:sourceURL": "https://cdn.acmecorp.com/experiences/fall2025-carousel", + "xdm:thumbnailURL": "https://cdn.acmecorp.com/experiences/fall2025-carousel-thumb.jpg", + "xdm:landingPageURL": "https://shop.acmecorp.com/products", + "xdm:headingText": "Discover Our Latest Tech", + "xdm:bodyText": "Shop our newest collection of premium accessories", + "xdm:callToAction": "Shop Now", + "xdm:assetIDs": [ + "asset_001", + "asset_002", + "asset_003", + "asset_004", + "asset_005" + ], + "xdm:assetGUIDs": [ + "meta_act_123_asset_001", + "meta_act_123_asset_002", + "meta_act_123_asset_003", + "meta_act_123_asset_004", + "meta_act_123_asset_005" + ], + "xdm:carouselProperties": { + "xdm:cardCount": 5, + "xdm:cards": [ + { + "xdm:cardIndex": 1, + "xdm:assetID": "asset_001", + "xdm:assetGUID": "meta_act_123_asset_001", + "xdm:heading": "Premium Wireless Headphones", + "description": "Experience crystal-clear sound with 40-hour battery life", + "xdm:destinationURL": "https://shop.acmecorp.com/products/headphones-premium" + }, + { + "xdm:cardIndex": 2, + "xdm:assetID": "asset_002", + "xdm:assetGUID": "meta_act_123_asset_002", + "xdm:heading": "Smart Fitness Watch", + "description": "Track your health and fitness goals with precision", + "xdm:destinationURL": "https://shop.acmecorp.com/products/watch-fitness" + }, + { + "xdm:cardIndex": 3, + "xdm:assetID": "asset_003", + "xdm:assetGUID": "meta_act_123_asset_003", + "xdm:heading": "Portable Bluetooth Speaker", + "description": "Powerful sound in a compact, waterproof design", + "xdm:destinationURL": "https://shop.acmecorp.com/products/speaker-portable" + }, + { + "xdm:cardIndex": 4, + "xdm:assetID": "asset_004", + "xdm:assetGUID": "meta_act_123_asset_004", + "xdm:heading": "Wireless Charging Pad", + "description": "Fast wireless charging for all your devices", + "xdm:destinationURL": "https://shop.acmecorp.com/products/charger-wireless" + }, + { + "xdm:cardIndex": 5, + "xdm:assetID": "asset_005", + "xdm:assetGUID": "meta_act_123_asset_005", + "xdm:heading": "USB-C Hub Adapter", + "description": "Connect all your devices with this versatile hub", + "xdm:destinationURL": "https://shop.acmecorp.com/products/hub-usbc" + } + ] + }, + "xdm:interactionProperties": { + "xdm:isInteractive": true, + "xdm:interactionType": "swipe" + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_display_url", + "xdm:stringValue": "shop.acmecorp.com/products" + }, + { + "xdm:fieldName": "meta_final_url", + "xdm:stringValue": "https://shop.acmecorp.com/products?utm_source=facebook&utm_medium=carousel&utm_campaign=showcase2025" + }, + { + "xdm:fieldName": "meta_carousel_type", + "xdm:stringValue": "product_carousel" + }, + { + "xdm:fieldName": "meta_auto_advance", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_looping", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_catalog_id", + "xdm:stringValue": "catalog_987654321" + }, + { + "xdm:fieldName": "meta_product_set_id", + "xdm:stringValue": "product_set_123456" + }, + { + "xdm:fieldName": "meta_dynamic_ads", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_allow_swipe", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_allow_tap", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_allow_zoom", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_allow_fullscreen", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_interaction_tracking", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_card_view_tracking", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_swipe_tracking", + "xdm:booleanValue": true + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-experience-details.schema.json b/components/fieldgroups/paid-media/core-paid-media-experience-details.schema.json new file mode 100644 index 000000000..7d2235d70 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-experience-details.schema.json @@ -0,0 +1,315 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/experience-details", + "title": "Core Paid Media Experience Details", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Experience-specific details and configuration fields for paid media creative experiences", + "definitions": { + "experience-details": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:experienceDetails": { + "type": "object", + "title": "Experience Details", + "description": "Specific details for paid media creative experiences", + "properties": { + "xdm:experienceName": { + "type": "string", + "title": "Experience Name", + "description": "Name of the creative experience" + }, + "xdm:experienceDescription": { + "type": "string", + "title": "Experience Description", + "description": "Description of the creative experience" + }, + "xdm:experienceType": { + "type": "string", + "title": "Experience Type", + "description": "Type of creative experience", + "enum": [ + "single_image", + "single_video", + "carousel", + "collection", + "slideshow", + "canvas", + "instant_experience", + "playable", + "other" + ], + "meta:enum": { + "single_image": "Single Image Experience", + "single_video": "Single Video Experience", + "carousel": "Carousel Experience", + "collection": "Collection Experience", + "slideshow": "Slideshow Experience", + "canvas": "Canvas Experience", + "instant_experience": "Instant Experience", + "playable": "Playable Experience", + "other": "Other Experience Type" + } + }, + "xdm:sourceURL": { + "type": "string", + "title": "Source URL", + "description": "Source URL of the experience" + }, + "xdm:thumbnailURL": { + "type": "string", + "title": "Thumbnail URL", + "description": "Thumbnail URL for the experience" + }, + "xdm:landingPageURL": { + "type": "string", + "title": "Landing Page URL", + "description": "Landing page URL for the experience" + }, + "xdm:headingText": { + "type": "string", + "title": "Heading Text", + "description": "Main heading or title text displayed in the experience" + }, + "xdm:bodyText": { + "type": "string", + "title": "Body Text", + "description": "Body or description text displayed in the experience" + }, + "xdm:callToAction": { + "type": "string", + "title": "Call To Action", + "description": "Call to action text or button label" + }, + "xdm:assetIDs": { + "type": "array", + "title": "Asset IDs", + "description": "Array of asset IDs used in this experience", + "items": { + "type": "string" + } + }, + "xdm:assetGUIDs": { + "type": "array", + "title": "Asset GUIDs", + "description": "Array of asset GUIDs used in this experience", + "items": { + "type": "string" + } + }, + "xdm:carouselProperties": { + "type": "object", + "title": "Carousel Properties", + "description": "Properties specific to carousel experiences", + "properties": { + "xdm:cardCount": { + "type": "integer", + "title": "Card Count", + "description": "Number of cards in the carousel", + "minimum": 1 + }, + "xdm:cards": { + "type": "array", + "title": "Carousel Cards", + "description": "Individual cards in the carousel", + "items": { + "type": "object", + "properties": { + "xdm:cardIndex": { + "type": "integer", + "title": "Card Index", + "description": "Position of the card in the carousel" + }, + "xdm:assetID": { + "type": "string", + "title": "Asset ID", + "description": "Asset ID for this card" + }, + "xdm:assetGUID": { + "type": "string", + "title": "Asset GUID", + "description": "Asset GUID for this card" + }, + "xdm:heading": { + "type": "string", + "title": "Card Heading", + "description": "Heading text for this card" + }, + "xdm:description": { + "type": "string", + "title": "Card Description", + "description": "Description text for this card" + }, + "xdm:destinationURL": { + "type": "string", + "title": "Destination URL", + "description": "Destination URL for this card" + } + } + } + } + } + }, + "xdm:collectionProperties": { + "type": "object", + "title": "Collection Properties", + "description": "Properties specific to collection experiences", + "properties": { + "xdm:coverAssetID": { + "type": "string", + "title": "Cover Asset ID", + "description": "Asset ID for the collection cover" + }, + "xdm:coverAssetGUID": { + "type": "string", + "title": "Cover Asset GUID", + "description": "Asset GUID for the collection cover" + }, + "xdm:itemCount": { + "type": "integer", + "title": "Item Count", + "description": "Number of items in the collection", + "minimum": 1 + } + } + }, + "xdm:videoProperties": { + "type": "object", + "title": "Video Experience Properties", + "description": "Properties specific to video experiences", + "properties": { + "xdm:duration": { + "type": "number", + "title": "Duration", + "description": "Video duration in seconds" + }, + "xdm:hasSound": { + "type": "boolean", + "title": "Has Sound", + "description": "Whether the video experience includes sound" + }, + "xdm:autoplay": { + "type": "boolean", + "title": "Autoplay", + "description": "Whether the video autoplays" + } + } + }, + "xdm:interactionProperties": { + "type": "object", + "title": "Interaction Properties", + "description": "Properties for interactive experiences", + "properties": { + "xdm:isInteractive": { + "type": "boolean", + "title": "Is Interactive", + "description": "Whether the experience is interactive" + }, + "xdm:interactionType": { + "type": "string", + "title": "Interaction Type", + "description": "Type of interaction supported", + "enum": [ + "swipe", + "tap", + "click", + "scroll", + "playable", + "form", + "other" + ], + "meta:enum": { + "swipe": "Swipe Interaction", + "tap": "Tap Interaction", + "click": "Click Interaction", + "scroll": "Scroll Interaction", + "playable": "Playable Interaction", + "form": "Form Interaction", + "other": "Other Interaction Type" + } + } + } + }, + "xdm:instantExperienceProperties": { + "type": "object", + "title": "Instant Experience Properties", + "description": "Properties specific to instant/canvas experiences", + "properties": { + "xdm:templateType": { + "type": "string", + "title": "Template Type", + "description": "Type of instant experience template used" + }, + "xdm:componentCount": { + "type": "integer", + "title": "Component Count", + "description": "Number of components in the instant experience" + } + } + }, + "xdm:performanceMetadata": { + "type": "object", + "title": "Performance Metadata", + "description": "Metadata about experience performance", + "properties": { + "xdm:usageCount": { + "type": "integer", + "title": "Usage Count", + "description": "Number of times this experience has been used" + }, + "xdm:lastUsedDate": { + "type": "string", + "format": "date-time", + "title": "Last Used Date", + "description": "When the experience was last used" + }, + "xdm:associatedCampaigns": { + "type": "array", + "title": "Associated Campaigns", + "description": "Campaigns that use this experience", + "items": { + "type": "string" + } + }, + "xdm:associatedAds": { + "type": "array", + "title": "Associated Ads", + "description": "Ads that use this experience", + "items": { + "type": "string" + } + } + } + }, + "xdm:additionalDetails": { + "title": "Additional Experience Details", + "description": "Platform-specific experience details not defined in core schema. Allows ingestion of arbitrary fields from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "$ref": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field" + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/experience-details" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-extended-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-extended-metrics.example.1.json new file mode 100644 index 000000000..15222a2c2 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-extended-metrics.example.1.json @@ -0,0 +1,112 @@ +{ + "xdm:paidMedia": { + "xdm:extendedMetrics": { + "xdm:viewableImpressions": 42500, + "xdm:viewabilityRate": 0.85, + "xdm:measurableImpressions": 48000, + "xdm:measurabilityRate": 0.96, + "xdm:socialEngagement": { + "xdm:likes": 8934, + "xdm:reactions": 9876, + "xdm:loves": 3456, + "xdm:wows": 1234, + "xdm:hahas": 567, + "xdm:sads": 89, + "xdm:angrys": 34, + "xdm:comments": 1247, + "xdm:shares": 892, + "xdm:saves": 456, + "xdm:follows": 234, + "xdm:profileVisits": 1890, + "xdm:linkClicks": 2500, + "xdm:photoViews": 12500, + "xdm:postEngagements": 12345, + "xdm:engagementRate": 0.247 + }, + "xdm:appMetrics": { + "xdm:appInstalls": 0, + "xdm:appEvents": 0, + "xdm:appEventValue": 0, + "xdm:appEngagements": 0, + "xdm:appPurchases": 0, + "xdm:appRevenue": 0, + "xdm:appRetention": 0, + "xdm:appUninstalls": 0 + }, + "xdm:leadMetrics": { + "xdm:leadSubmissions": 245, + "xdm:leadFormOpens": 890, + "xdm:leadFormCompletionRate": 0.275, + "xdm:leadQuality": 7.5, + "xdm:qualifiedLeads": 185, + "xdm:leadQualificationRate": 0.755 + }, + "xdm:ecommerceMetrics": { + "xdm:productViews": 12500, + "xdm:addToCart": 2340, + "xdm:addToCartRate": 0.187, + "xdm:checkouts": 1450, + "xdm:checkoutRate": 0.62, + "xdm:purchases": 875, + "xdm:purchaseRate": 0.603, + "xdm:revenue": 187500, + "xdm:averageOrderValue": 214.29, + "xdm:itemsPerOrder": 2.3, + "xdm:cartAbandonment": 0.397, + "xdm:wishlistAdds": 678, + "xdm:productReviews": 45 + }, + "xdm:brandMetrics": { + "xdm:brandAwareness": 0.42, + "xdm:brandRecall": 0.38, + "xdm:brandConsideration": 0.28, + "xdm:brandPreference": 0.22, + "xdm:brandLoyalty": 0.18, + "xdm:brandSentiment": 0.75, + "xdm:netPromoterScore": 45 + }, + "xdm:offlineMetrics": { + "xdm:storeVisits": 0, + "xdm:storeLocatorSearches": 234, + "xdm:directionsRequests": 156, + "xdm:phoneCallClicks": 89, + "xdm:offlineConversions": 0, + "xdm:offlineRevenue": 0 + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_viewable_impressions", + "xdm:stringValue": "42500" + }, + { + "xdm:fieldName": "meta_post_engagement", + "xdm:stringValue": "12345" + }, + { + "xdm:fieldName": "meta_post_reactions", + "xdm:stringValue": "9876" + }, + { + "xdm:fieldName": "meta_post_comments", + "xdm:stringValue": "1247" + }, + { + "xdm:fieldName": "meta_post_shares", + "xdm:stringValue": "892" + }, + { + "xdm:fieldName": "meta_post_saves", + "xdm:stringValue": "456" + }, + { + "xdm:fieldName": "meta_link_clicks", + "xdm:stringValue": "2500" + }, + { + "xdm:fieldName": "meta_outbound_clicks", + "xdm:stringValue": "2340" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-extended-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-extended-metrics.schema.json new file mode 100644 index 000000000..b2c187315 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-extended-metrics.schema.json @@ -0,0 +1,263 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/extended-metrics", + "title": "Core Paid Media Extended Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Extended performance metrics beyond core metrics for paid media campaigns", + "definitions": { + "extended-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:extendedMetrics": { + "type": "object", + "title": "Extended Metrics", + "description": "Additional metrics beyond core metrics", + "properties": { + "xdm:viewableImpressions": { + "type": "integer", + "title": "Viewable Impressions", + "description": "Number of viewable impressions", + "minimum": 0 + }, + "xdm:viewabilityRate": { + "type": "number", + "title": "Viewability Rate", + "description": "Percentage of impressions that were viewable", + "minimum": 0, + "maximum": 1 + }, + "xdm:uniqueClicks": { + "type": "integer", + "title": "Unique Clicks", + "description": "Number of unique users who clicked", + "minimum": 0 + }, + "xdm:linkClicks": { + "type": "integer", + "title": "Link Clicks", + "description": "Number of clicks on links", + "minimum": 0 + }, + "xdm:outboundClicks": { + "type": "integer", + "title": "Outbound Clicks", + "description": "Number of clicks leading to external sites", + "minimum": 0 + }, + "xdm:saves": { + "type": "integer", + "title": "Saves", + "description": "Number of saves/bookmarks", + "minimum": 0 + }, + "xdm:shares": { + "type": "integer", + "title": "Shares", + "description": "Number of shares", + "minimum": 0 + }, + "xdm:likes": { + "type": "integer", + "title": "Likes", + "description": "Number of likes/reactions", + "minimum": 0 + }, + "xdm:comments": { + "type": "integer", + "title": "Comments", + "description": "Number of comments", + "minimum": 0 + }, + "xdm:pageEngagement": { + "type": "integer", + "title": "Page Engagement", + "description": "Page engagement actions", + "minimum": 0 + }, + "xdm:pageLikes": { + "type": "integer", + "title": "Page Likes", + "description": "Page likes", + "minimum": 0 + }, + "xdm:postEngagement": { + "type": "integer", + "title": "Post Engagement", + "description": "Post engagement actions", + "minimum": 0 + }, + "xdm:postComments": { + "type": "integer", + "title": "Post Comments", + "description": "Comments on posts", + "minimum": 0 + }, + "xdm:postReactions": { + "type": "integer", + "title": "Post Reactions", + "description": "Reactions on posts", + "minimum": 0 + }, + "xdm:postShares": { + "type": "integer", + "title": "Post Shares", + "description": "Shares of posts", + "minimum": 0 + }, + "xdm:postSaves": { + "type": "integer", + "title": "Post Saves", + "description": "Saves of posts", + "minimum": 0 + }, + "xdm:follows": { + "type": "integer", + "title": "Follows", + "description": "Number of new followers gained", + "minimum": 0 + }, + "xdm:profileVisits": { + "type": "integer", + "title": "Profile Visits", + "description": "Number of profile visits generated", + "minimum": 0 + }, + "xdm:websiteVisits": { + "type": "integer", + "title": "Website Visits", + "description": "Number of website visits generated", + "minimum": 0 + }, + "xdm:averageDwellTime": { + "type": "number", + "title": "Average Dwell Time", + "description": "Average dwell time (seconds) (alias for qualityMetrics.dwellTime to ease migration)", + "minimum": 0 + }, + "xdm:appInstalls": { + "type": "integer", + "title": "App Installs", + "description": "Number of app installations", + "minimum": 0 + }, + "xdm:appOpens": { + "type": "integer", + "title": "App Opens", + "description": "Number of app opens", + "minimum": 0 + }, + "xdm:leadSubmissions": { + "type": "integer", + "title": "Lead Submissions", + "description": "Number of lead form submissions", + "minimum": 0 + }, + "xdm:signups": { + "type": "integer", + "title": "Signups", + "description": "Number of user signups", + "minimum": 0 + }, + "xdm:downloads": { + "type": "integer", + "title": "Downloads", + "description": "Number of downloads", + "minimum": 0 + }, + "xdm:subscriptions": { + "type": "integer", + "title": "Subscriptions", + "description": "Number of subscriptions", + "minimum": 0 + }, + "xdm:checkouts": { + "type": "integer", + "title": "Checkouts", + "description": "Number of checkout initiations", + "minimum": 0 + }, + "xdm:addToCarts": { + "type": "integer", + "title": "Add to Carts", + "description": "Number of add to cart actions", + "minimum": 0 + }, + "xdm:wishlistAdds": { + "type": "integer", + "title": "Wishlist Adds", + "description": "Number of wishlist additions", + "minimum": 0 + }, + "xdm:productViews": { + "type": "integer", + "title": "Product Views", + "description": "Number of product page views", + "minimum": 0 + }, + "xdm:photoViews": { + "type": "integer", + "title": "Photo Views", + "description": "Number of photo views", + "minimum": 0 + }, + "xdm:catalogViews": { + "type": "integer", + "title": "Catalog Views", + "description": "Number of catalog views", + "minimum": 0 + }, + "xdm:storeVisits": { + "type": "integer", + "title": "Store Visits", + "description": "Number of physical store visits", + "minimum": 0 + }, + "xdm:callsGenerated": { + "type": "integer", + "title": "Calls Generated", + "description": "Number of phone calls generated", + "minimum": 0 + }, + "xdm:directionsRequested": { + "type": "integer", + "title": "Directions Requested", + "description": "Number of direction requests", + "minimum": 0 + }, + "xdm:eventResponses": { + "type": "integer", + "title": "Event Responses", + "description": "Number of event responses", + "minimum": 0 + }, + "xdm:messagesSent": { + "type": "integer", + "title": "Messages Sent", + "description": "Number of messages sent", + "minimum": 0 + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/extended-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-identifiers.example.1.json b/components/fieldgroups/paid-media/core-paid-media-identifiers.example.1.json new file mode 100644 index 000000000..220a2f334 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-identifiers.example.1.json @@ -0,0 +1,76 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:network": "meta", + "xdm:entityType": "ad", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:adID": "23851234567890123", + "xdm:adGUID": "meta_act_123456789012345_23851234567890123", + "xdm:experienceID": "creative_vid_987654321", + "xdm:experienceGUID": "meta_act_123456789012345_creative_vid_987654321", + "xdm:assetID": "asset_456789123456789", + "xdm:assetGUID": "meta_act_123456789012345_asset_456789123456789", + "xdm:hierarchyPath": "act_123456789012345/23851234567890789/23851234567890456/23851234567890123", + "xdm:entityIDs": { + "xdm:account": { + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:accountID": "act_123456789012345" + }, + "xdm:campaign": { + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:campaignID": "23851234567890789" + }, + "xdm:adGroup": { + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:adGroupID": "23851234567890456" + }, + "xdm:ad": { + "xdm:adGUID": "meta_act_123456789012345_23851234567890123", + "xdm:adID": "23851234567890123" + }, + "xdm:experience": { + "xdm:experienceGUID": "meta_act_123456789012345_creative_vid_987654321", + "xdm:experienceID": "creative_vid_987654321" + }, + "xdm:asset": { + "xdm:assetGUID": "meta_act_123456789012345_asset_456789123456789", + "xdm:assetID": "asset_456789123456789" + } + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_account_id", + "xdm:stringValue": "act_123456789012345" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567890123" + }, + { + "xdm:fieldName": "meta_business_id", + "xdm:stringValue": "987654321098765" + }, + { + "xdm:fieldName": "meta_page_id", + "xdm:stringValue": "123456789012345" + }, + { + "xdm:fieldName": "meta_instagram_account_id", + "xdm:stringValue": "ig_acmecorp" + } + ] + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-identifiers.schema.json b/components/fieldgroups/paid-media/core-paid-media-identifiers.schema.json new file mode 100644 index 000000000..5578ecbda --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-identifiers.schema.json @@ -0,0 +1,251 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "title": "Core Paid Media Identifiers", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Core identifier fields used across all paid media entities and ad networks", + "definitions": { + "core-identifiers": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:adNetwork": { + "type": "string", + "title": "Ad Network", + "description": "The advertising platform/network", + "enum": [ + "meta", + "google_ads", + "google_cm360", + "snapchat", + "pinterest", + "tiktok", + "linkedin", + "amazon", + "reddit", + "twitter", + "other" + ], + "meta:enum": { + "meta": "Meta Ads (Facebook/Instagram)", + "google_ads": "Google Ads", + "google_cm360": "Google Campaign Manager 360", + "snapchat": "Snapchat Ads", + "pinterest": "Pinterest Ads", + "tiktok": "TikTok Ads", + "linkedin": "LinkedIn Ads", + "amazon": "Amazon Ads", + "reddit": "Reddit Ads", + "twitter": "Twitter/X Ads", + "other": "Other ad network" + } + }, + "xdm:network": { + "type": "string", + "title": "Network", + "description": "Alias of adNetwork for migration from GenStudio templates" + }, + "xdm:accountID": { + "type": "string", + "title": "Account ID", + "description": "Unique identifier for the ad account within the network" + }, + "xdm:accountGUID": { + "type": "string", + "title": "Account GUID", + "description": "Unique identifier for the ad account across all networks" + }, + "xdm:campaignID": { + "type": "string", + "title": "Campaign ID", + "description": "Unique identifier for the campaign within the network" + }, + "xdm:campaignGUID": { + "type": "string", + "title": "Campaign GUID", + "description": "Unique identifier for the campaign across all networks" + }, + "xdm:adGroupID": { + "type": "string", + "title": "Ad Group ID", + "description": "Unique identifier for the ad group/ad set/ad squad within the network" + }, + "xdm:adGroupGUID": { + "type": "string", + "title": "Ad Group GUID", + "description": "Unique identifier for the ad group/ad set/ad squad across all networks" + }, + "xdm:adID": { + "type": "string", + "title": "Ad ID", + "description": "Unique identifier for the individual ad within the network" + }, + "xdm:adGUID": { + "type": "string", + "title": "Ad GUID", + "description": "Unique identifier for the individual ad across all networks" + }, + "xdm:experienceID": { + "type": "string", + "title": "Experience ID", + "description": "Unique identifier for creative experience (multi-asset compositions) within the network" + }, + "xdm:experienceGUID": { + "type": "string", + "title": "Experience GUID", + "description": "Unique identifier for creative experience (multi-asset compositions) across all networks" + }, + "xdm:assetID": { + "type": "string", + "title": "Asset ID", + "description": "Unique identifier for creative assets (images, videos, etc.) within the network" + }, + "xdm:assetGUID": { + "type": "string", + "title": "Asset GUID", + "description": "Unique identifier for creative assets (images, videos, etc.) across all networks" + }, + "xdm:portfolioID": { + "type": "string", + "title": "Portfolio ID", + "description": "Portfolio identifier for grouping campaigns (Amazon Ads and similar platforms) within the network" + }, + "xdm:portfolioGUID": { + "type": "string", + "title": "Portfolio GUID", + "description": "Portfolio identifier for grouping campaigns (Amazon Ads and similar platforms) across all networks" + }, + "xdm:entityIDs": { + "type": "object", + "title": "Entity IDs", + "description": "Nested platform entity identifiers to ease migration from GenStudio templates", + "properties": { + "xdm:account": { + "type": "object", + "properties": { + "xdm:accountGUID": { + "type": "string", + "title": "Account GUID" + }, + "xdm:accountID": { + "type": "string", + "title": "Account ID" + } + } + }, + "xdm:campaign": { + "type": "object", + "properties": { + "xdm:campaignGUID": { + "type": "string", + "title": "Campaign GUID" + }, + "xdm:campaignID": { + "type": "string", + "title": "Campaign ID" + } + } + }, + "xdm:adGroup": { + "type": "object", + "properties": { + "xdm:adGroupGUID": { + "type": "string", + "title": "Ad Group GUID" + }, + "xdm:adGroupID": { + "type": "string", + "title": "Ad Group ID" + } + } + }, + "xdm:ad": { + "type": "object", + "properties": { + "xdm:adGUID": { + "type": "string", + "title": "Ad GUID" + }, + "xdm:adID": { + "type": "string", + "title": "Ad ID" + } + } + }, + "xdm:experience": { + "type": "object", + "properties": { + "xdm:experienceGUID": { + "type": "string", + "title": "Experience GUID" + }, + "xdm:experienceID": { + "type": "string", + "title": "Experience ID" + } + } + }, + "xdm:asset": { + "type": "object", + "properties": { + "xdm:assetGUID": { + "type": "string", + "title": "Asset GUID" + }, + "xdm:assetID": { + "type": "string", + "title": "Asset ID" + } + } + } + } + }, + "xdm:entityType": { + "type": "string", + "title": "Entity Type", + "description": "Type of paid media entity this record represents", + "enum": [ + "account", + "campaign", + "adGroup", + "ad", + "experience", + "asset" + ], + "meta:enum": { + "account": "Ad Account", + "campaign": "Campaign", + "adGroup": "Ad Group/Ad Set/Ad Squad", + "ad": "Individual Ad", + "experience": "Creative Experience", + "asset": "Creative Asset" + } + }, + "xdm:hierarchyPath": { + "type": "string", + "title": "Hierarchy Path", + "description": "Full hierarchical path showing parent-child relationships (e.g., account_id/campaign_id/adgroup_id/ad_id)" + } + }, + "required": ["xdm:adNetwork", "xdm:entityType"] + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/core-identifiers" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-metadata.example.1.json b/components/fieldgroups/paid-media/core-paid-media-metadata.example.1.json new file mode 100644 index 000000000..4b3b602bd --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-metadata.example.1.json @@ -0,0 +1,80 @@ +{ + "xdm:paidMedia": { + "xdm:metadata": { + "xdm:name": "Fall 2025 Product Launch - Traffic Campaign", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:currencyCode": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2025-10-15T10:00:00Z", + "xdm:updatedTime": "2025-11-09T15:30:00Z", + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z", + "xdm:objective": "traffic", + "xdm:budgetType": "daily", + "xdm:dailyBudget": 2000, + "xdm:lifetimeBudget": 0, + "xdm:biddingStrategy": "lowest_cost_without_cap", + "xdm:optimizationGoal": "link_clicks", + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_campaign_name", + "xdm:stringValue": "Fall 2025 Product Launch - Traffic Campaign" + }, + { + "xdm:fieldName": "meta_campaign_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_effective_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_configured_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_special_ad_categories", + "xdm:stringValue": "NONE" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + }, + { + "xdm:fieldName": "meta_budget_optimization", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_daily_budget", + "xdm:stringValue": "2000" + }, + { + "xdm:fieldName": "meta_created_time", + "xdm:stringValue": "2025-10-15T10:00:00Z" + }, + { + "xdm:fieldName": "meta_updated_time", + "xdm:stringValue": "2025-11-09T15:30:00Z" + }, + { + "xdm:fieldName": "meta_start_time", + "xdm:stringValue": "2025-11-01T00:00:00Z" + }, + { + "xdm:fieldName": "meta_stop_time", + "xdm:stringValue": "2025-11-30T23:59:59Z" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-metadata.schema.json b/components/fieldgroups/paid-media/core-paid-media-metadata.schema.json new file mode 100644 index 000000000..62e2ab9b7 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-metadata.schema.json @@ -0,0 +1,228 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "title": "Core Paid Media Metadata", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/data/record"], + "description": "Core metadata fields common across paid media entities", + "definitions": { + "core-metadata": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:metadata": { + "type": "object", + "title": "Paid Media Core Metadata", + "description": "Common metadata fields for paid media entities", + "properties": { + "xdm:name": { + "type": "string", + "title": "Name", + "description": "Display name of the entity (campaign name, ad name, etc.)" + }, + "xdm:status": { + "type": "string", + "title": "Status", + "description": "Current status of the entity", + "enum": [ + "active", + "paused", + "deleted", + "archived", + "draft", + "completed", + "pending_review", + "rejected", + "unknown" + ], + "meta:enum": { + "active": "Active/Running", + "paused": "Paused", + "deleted": "Deleted", + "archived": "Archived", + "draft": "Draft", + "completed": "Completed", + "pending_review": "Pending Review", + "rejected": "Rejected", + "unknown": "Unknown Status" + } + }, + "xdm:servingStatus": { + "type": "string", + "title": "Serving Status", + "description": "Detailed serving status indicating why entity may not be serving", + "enum": [ + "CAMPAIGN_STATUS_ENABLED", + "PENDING_START_DATE", + "ENDED", + "CAMPAIGN_OUT_OF_BUDGET", + "ACCOUNT_OUT_OF_BUDGET", + "CAMPAIGN_PAUSED", + "ADVERTISER_PAUSED", + "PENDING_REVIEW", + "PENDING_MODERATION", + "REJECTED", + "CAMPAIGN_INCOMPLETE", + "PAYMENT_FAILURE", + "BILLING_HOLD", + "POLICING_SUSPENDED", + "OTHER" + ], + "meta:enum": { + "CAMPAIGN_STATUS_ENABLED": "Actively Serving", + "PENDING_START_DATE": "Scheduled - Not Yet Started", + "ENDED": "Campaign Ended", + "CAMPAIGN_OUT_OF_BUDGET": "Campaign Budget Exhausted", + "ACCOUNT_OUT_OF_BUDGET": "Account Budget Exhausted", + "CAMPAIGN_PAUSED": "Campaign Paused", + "ADVERTISER_PAUSED": "Account Paused", + "PENDING_REVIEW": "Pending Review", + "PENDING_MODERATION": "Pending Moderation", + "REJECTED": "Rejected by Review", + "CAMPAIGN_INCOMPLETE": "Campaign Setup Incomplete", + "PAYMENT_FAILURE": "Payment Method Failed", + "BILLING_HOLD": "Billing Hold", + "POLICING_SUSPENDED": "Suspended for Policy Violation", + "OTHER": "Other Status" + } + }, + "xdm:currency": { + "type": "string", + "title": "Currency", + "description": "Currency code (ISO 4217) for monetary values" + }, + "xdm:currencyCode": { + "type": "string", + "title": "Currency Code", + "description": "Alias of currency (ISO 4217) for migration from GenStudio templates" + }, + "xdm:timezone": { + "type": "string", + "title": "Timezone", + "description": "Timezone for the entity (e.g., America/New_York)" + }, + "xdm:timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "The time when the metadata record was captured or last updated (GenStudio migration aid)" + }, + "xdm:startTime": { + "type": "string", + "format": "date-time", + "title": "Start Time", + "description": "When the entity becomes active/starts running" + }, + "xdm:endTime": { + "type": "string", + "format": "date-time", + "title": "End Time", + "description": "When the entity stops running/expires" + }, + "xdm:start": { + "type": "string", + "format": "date", + "title": "Start Date", + "description": "Campaign start date (GenStudio migration aid)" + }, + "xdm:end": { + "type": "string", + "format": "date", + "title": "End Date", + "description": "Campaign end date (GenStudio migration aid)" + }, + "xdm:objective": { + "type": "string", + "title": "Objective", + "description": "Campaign or ad group objective/goal", + "enum": [ + "awareness", + "consideration", + "conversions", + "reach", + "traffic", + "engagement", + "app_installs", + "video_views", + "lead_generation", + "catalog_sales", + "store_visits", + "other" + ], + "meta:enum": { + "awareness": "Brand Awareness", + "consideration": "Consideration", + "conversions": "Conversions", + "reach": "Reach", + "traffic": "Traffic/Link Clicks", + "engagement": "Engagement", + "app_installs": "App Installs", + "video_views": "Video Views", + "lead_generation": "Lead Generation", + "catalog_sales": "Catalog Sales", + "store_visits": "Store Visits", + "other": "Other Objective" + } + }, + "xdm:budgetType": { + "type": "string", + "title": "Budget Type", + "description": "Type of budget allocation", + "enum": ["daily", "lifetime", "campaign_budget_optimization"], + "meta:enum": { + "daily": "Daily Budget", + "lifetime": "Lifetime Budget", + "campaign_budget_optimization": "Campaign Budget Optimization" + } + }, + "xdm:dailyBudget": { + "type": "number", + "title": "Daily Budget", + "description": "Daily budget amount in account currency", + "minimum": 0 + }, + "xdm:lifetimeBudget": { + "type": "number", + "title": "Lifetime Budget", + "description": "Total lifetime budget amount in account currency", + "minimum": 0 + }, + "xdm:budget": { + "type": "number", + "title": "Budget", + "description": "Total campaign budget (GenStudio migration aid - alias for lifetimeBudget)", + "minimum": 0 + }, + "xdm:biddingStrategy": { + "type": "string", + "title": "Bidding Strategy", + "description": "Bidding strategy used for the entity" + }, + "xdm:optimizationGoal": { + "type": "string", + "title": "Optimization Goal", + "description": "What the ad delivery is optimized for" + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/core-metadata" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-metrics.example.1.json new file mode 100644 index 000000000..e8b1b9b54 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-metrics.example.1.json @@ -0,0 +1,120 @@ +{ + "xdm:paidMedia": { + "xdm:metrics": { + "xdm:impressions": 50000, + "xdm:clicks": 2500, + "xdm:spend": 18000, + "xdm:reach": 26000, + "xdm:frequency": 1.92, + "xdm:ctr": 0.05, + "xdm:cpm": 36.0, + "xdm:cpc": 7.2, + "xdm:conversions": 1250, + "xdm:conversionValue": 187500, + "xdm:costPerConversion": 14.4, + "xdm:roas": 10.42, + "xdm:videoViews": 8900, + "xdm:videoCompletions": 5785, + "xdm:engagements": 12345, + "xdm:engagementRate": 0.247, + "xdm:additionalMetrics": [ + { + "xdm:metricName": "outbound_clicks", + "xdm:metricValue": 2340, + "xdm:metricType": "clicks", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "link_clicks", + "xdm:metricValue": 2500, + "xdm:metricType": "clicks", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "landing_page_views", + "xdm:metricValue": 2340, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "post_engagement", + "xdm:metricValue": 12345, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "post_reactions", + "xdm:metricValue": 9876, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "post_comments", + "xdm:metricValue": 1247, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "post_shares", + "xdm:metricValue": 892, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "post_saves", + "xdm:metricValue": 456, + "xdm:metricType": "engagement", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "video_30_sec_watched_actions", + "xdm:metricValue": 6234, + "xdm:metricType": "video", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "video_p95_watched_actions", + "xdm:metricValue": 5785, + "xdm:metricType": "video", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "video_avg_time_watched_actions", + "xdm:metricValue": 18.5, + "xdm:metricType": "video", + "xdm:metricUnit": "seconds" + }, + { + "xdm:metricName": "cost_per_outbound_click", + "xdm:metricValue": 7.69, + "xdm:metricType": "cost", + "xdm:metricUnit": "currency" + }, + { + "xdm:metricName": "cost_per_unique_click", + "xdm:metricValue": 8.12, + "xdm:metricType": "cost", + "xdm:metricUnit": "currency" + }, + { + "xdm:metricName": "unique_clicks", + "xdm:metricValue": 2217, + "xdm:metricType": "clicks", + "xdm:metricUnit": "count" + }, + { + "xdm:metricName": "unique_ctr", + "xdm:metricValue": 0.0443, + "xdm:metricType": "rate", + "xdm:metricUnit": "percentage" + }, + { + "xdm:metricName": "frequency", + "xdm:metricValue": 1.92, + "xdm:metricType": "frequency", + "xdm:metricUnit": "count" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-metrics.schema.json new file mode 100644 index 000000000..ac2a295ae --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-metrics.schema.json @@ -0,0 +1,169 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/core-metrics", + "title": "Core Paid Media Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Core performance metrics common across paid media platforms", + "definitions": { + "core-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:metrics": { + "type": "object", + "title": "Paid Media Core Metrics", + "description": "Common performance metrics for paid media campaigns", + "properties": { + "xdm:impressions": { + "type": "integer", + "title": "Impressions", + "description": "Number of times ads were displayed", + "minimum": 0 + }, + "xdm:clicks": { + "type": "integer", + "title": "Clicks", + "description": "Number of clicks on ads", + "minimum": 0 + }, + "xdm:spend": { + "type": "number", + "title": "Spend", + "description": "Amount spent in account currency", + "minimum": 0 + }, + "xdm:reach": { + "type": "integer", + "title": "Reach", + "description": "Number of unique users who saw the ads", + "minimum": 0 + }, + "xdm:frequency": { + "type": "number", + "title": "Frequency", + "description": "Average number of times each user saw the ads", + "minimum": 0 + }, + "xdm:ctr": { + "type": "number", + "title": "Click-Through Rate", + "description": "Click-through rate (clicks/impressions)", + "minimum": 0, + "maximum": 1 + }, + "xdm:cpm": { + "type": "number", + "title": "Cost Per Mille", + "description": "Cost per thousand impressions", + "minimum": 0 + }, + "xdm:cpc": { + "type": "number", + "title": "Cost Per Click", + "description": "Average cost per click", + "minimum": 0 + }, + "xdm:conversions": { + "type": "number", + "title": "Conversions", + "description": "Total number of conversions", + "minimum": 0 + }, + "xdm:conversionValue": { + "type": "number", + "title": "Conversion Value", + "description": "Total value of conversions in account currency", + "minimum": 0 + }, + "xdm:costPerConversion": { + "type": "number", + "title": "Cost Per Conversion", + "description": "Average cost per conversion", + "minimum": 0 + }, + "xdm:roas": { + "type": "number", + "title": "Return on Ad Spend", + "description": "Return on ad spend (conversion value / spend)", + "minimum": 0 + }, + "xdm:videoViews": { + "type": "integer", + "title": "Video Views", + "description": "Number of video views", + "minimum": 0 + }, + "xdm:videoCompletions": { + "type": "integer", + "title": "Video Completions", + "description": "Number of video completions", + "minimum": 0 + }, + "xdm:engagements": { + "type": "integer", + "title": "Engagements", + "description": "Total engagement actions (likes, shares, comments, etc.)", + "minimum": 0 + }, + "xdm:engagementRate": { + "type": "number", + "title": "Engagement Rate", + "description": "Engagement rate (engagements/impressions)", + "minimum": 0, + "maximum": 1 + }, + "xdm:additionalMetrics": { + "title": "Additional Metrics", + "description": "Platform-specific or custom metrics not defined in core schema. Allows ingestion of arbitrary metrics from paid media network APIs without requiring schema changes.", + "type": "array", + "items": { + "type": "object", + "properties": { + "xdm:metricName": { + "title": "Metric Name", + "type": "string", + "description": "Name of the metric (e.g., 'video_30_sec_watched_actions', 'video_p95_watched_actions', 'outbound_click_rate')" + }, + "xdm:metricValue": { + "title": "Metric Value", + "type": "number", + "description": "Numeric value of the metric" + }, + "xdm:metricType": { + "title": "Metric Type", + "type": "string", + "description": "Type/category of metric (e.g., 'video', 'conversion', 'engagement', 'attribution')" + }, + "xdm:metricUnit": { + "title": "Metric Unit", + "type": "string", + "description": "Unit of measurement (e.g., 'count', 'percentage', 'currency', 'seconds')" + } + }, + "required": ["xdm:metricName", "xdm:metricValue"] + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/core-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-quality-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-quality-metrics.example.1.json new file mode 100644 index 000000000..21508681f --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-quality-metrics.example.1.json @@ -0,0 +1,37 @@ +{ + "xdm:paidMedia": { + "xdm:qualityMetrics": { + "xdm:relevanceScore": 9.0, + "xdm:engagementScore": 8.2, + "xdm:conversionScore": 8.8, + "xdm:overallQualityScore": 8.67, + "xdm:negativeActions": 25, + "xdm:negativeActionRate": 0.0005, + "xdm:positiveActions": 12345, + "xdm:positiveActionRate": 0.247, + "xdm:brandSafetyScore": 9.5, + "xdm:viewabilityScore": 8.5, + "xdm:fraudScore": 0.5, + "xdm:invalidTrafficRate": 0.02, + "xdm:botTrafficRate": 0.015, + "xdm:humanTrafficRate": 0.985, + "xdm:attentionScore": 7.8, + "xdm:dwellTime": 4.2, + "xdm:interactionDepth": 3.5, + "xdm:creativeFatigue": 2.1, + "xdm:frequencyFatigue": 1.8, + "xdm:audienceRelevance": 8.9, + "xdm:contextualRelevance": 8.5, + "xdm:emotionalResonance": 7.6, + "xdm:memorabilityScore": 7.2, + "xdm:brandLiftScore": 6.8, + "xdm:intentLiftScore": 7.4, + "xdm:qualityTrend": "improving", + "xdm:benchmarkComparison": { + "xdm:industryAverage": 7.5, + "xdm:percentileRank": 78, + "xdm:competitorAverage": 7.8 + } + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-quality-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-quality-metrics.schema.json new file mode 100644 index 000000000..21d788404 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-quality-metrics.schema.json @@ -0,0 +1,247 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/quality-metrics", + "title": "Core Paid Media Quality Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Ad quality and performance indicators for paid media campaigns", + "definitions": { + "quality-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:qualityMetrics": { + "type": "object", + "title": "Quality Metrics", + "description": "Ad quality and performance indicators", + "properties": { + "xdm:relevanceScore": { + "type": "number", + "title": "Relevance Score", + "description": "Ad relevance score", + "minimum": 0, + "maximum": 10 + }, + "xdm:engagementScore": { + "type": "number", + "title": "Engagement Score", + "description": "Ad engagement quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:conversionScore": { + "type": "number", + "title": "Conversion Score", + "description": "Ad conversion quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:overallQualityScore": { + "type": "number", + "title": "Overall Quality Score", + "description": "Overall ad quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:negativeActions": { + "type": "integer", + "title": "Negative Actions", + "description": "Number of negative actions (hides, reports, etc.)", + "minimum": 0 + }, + "xdm:negativeActionRate": { + "type": "number", + "title": "Negative Action Rate", + "description": "Rate of negative actions", + "minimum": 0, + "maximum": 1 + }, + "xdm:positiveActions": { + "type": "integer", + "title": "Positive Actions", + "description": "Number of positive actions (likes, shares, etc.)", + "minimum": 0 + }, + "xdm:positiveActionRate": { + "type": "number", + "title": "Positive Action Rate", + "description": "Rate of positive actions", + "minimum": 0, + "maximum": 1 + }, + "xdm:brandSafetyScore": { + "type": "number", + "title": "Brand Safety Score", + "description": "Brand safety compliance score", + "minimum": 0, + "maximum": 10 + }, + "xdm:viewabilityScore": { + "type": "number", + "title": "Viewability Score", + "description": "Ad viewability quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:fraudScore": { + "type": "number", + "title": "Fraud Score", + "description": "Ad fraud risk score (higher = more risk)", + "minimum": 0, + "maximum": 10 + }, + "xdm:invalidTrafficRate": { + "type": "number", + "title": "Invalid Traffic Rate", + "description": "Percentage of traffic flagged as invalid", + "minimum": 0, + "maximum": 1 + }, + "xdm:botTrafficRate": { + "type": "number", + "title": "Bot Traffic Rate", + "description": "Percentage of traffic identified as bot traffic", + "minimum": 0, + "maximum": 1 + }, + "xdm:humanTrafficRate": { + "type": "number", + "title": "Human Traffic Rate", + "description": "Percentage of traffic verified as human", + "minimum": 0, + "maximum": 1 + }, + "xdm:attentionScore": { + "type": "number", + "title": "Attention Score", + "description": "User attention quality score", + "minimum": 0, + "maximum": 10 + }, + "xdm:dwellTime": { + "type": "number", + "title": "Dwell Time", + "description": "Average time users spend viewing the ad (seconds)", + "minimum": 0 + }, + "xdm:interactionDepth": { + "type": "number", + "title": "Interaction Depth", + "description": "Depth of user interaction with the ad", + "minimum": 0 + }, + "xdm:creativeFatigue": { + "type": "number", + "title": "Creative Fatigue", + "description": "Creative fatigue score (higher = more fatigued)", + "minimum": 0, + "maximum": 10 + }, + "xdm:frequencyFatigue": { + "type": "number", + "title": "Frequency Fatigue", + "description": "Frequency fatigue score", + "minimum": 0, + "maximum": 10 + }, + "xdm:audienceRelevance": { + "type": "number", + "title": "Audience Relevance", + "description": "Relevance of ad to target audience", + "minimum": 0, + "maximum": 10 + }, + "xdm:contextualRelevance": { + "type": "number", + "title": "Contextual Relevance", + "description": "Relevance of ad to content context", + "minimum": 0, + "maximum": 10 + }, + "xdm:emotionalResonance": { + "type": "number", + "title": "Emotional Resonance", + "description": "Emotional impact score of the ad", + "minimum": 0, + "maximum": 10 + }, + "xdm:memorabilityScore": { + "type": "number", + "title": "Memorability Score", + "description": "Ad memorability score", + "minimum": 0, + "maximum": 10 + }, + "xdm:brandLiftScore": { + "type": "number", + "title": "Brand Lift Score", + "description": "Brand awareness lift score", + "minimum": 0, + "maximum": 10 + }, + "xdm:intentLiftScore": { + "type": "number", + "title": "Intent Lift Score", + "description": "Purchase intent lift score", + "minimum": 0, + "maximum": 10 + }, + "xdm:qualityTrend": { + "type": "string", + "title": "Quality Trend", + "description": "Trend direction for quality metrics", + "enum": ["improving", "declining", "stable", "volatile"], + "meta:enum": { + "improving": "Quality is improving", + "declining": "Quality is declining", + "stable": "Quality is stable", + "volatile": "Quality is volatile" + } + }, + "xdm:benchmarkComparison": { + "type": "object", + "title": "Benchmark Comparison", + "description": "Comparison to industry benchmarks", + "properties": { + "xdm:industryAverage": { + "type": "number", + "title": "Industry Average", + "description": "Industry average quality score" + }, + "xdm:percentileRank": { + "type": "number", + "title": "Percentile Rank", + "description": "Percentile rank compared to industry", + "minimum": 0, + "maximum": 100 + }, + "xdm:competitorAverage": { + "type": "number", + "title": "Competitor Average", + "description": "Average quality score of competitors" + } + } + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/quality-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/components/fieldgroups/paid-media/core-paid-media-video-metrics.example.1.json b/components/fieldgroups/paid-media/core-paid-media-video-metrics.example.1.json new file mode 100644 index 000000000..67e70e26e --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-video-metrics.example.1.json @@ -0,0 +1,95 @@ +{ + "xdm:paidMedia": { + "xdm:videoMetrics": { + "xdm:videoPlays": 9500, + "xdm:video3SecViews": 8900, + "xdm:video2SecViews": 9200, + "xdm:video6SecViews": 8450, + "xdm:video10SecViews": 7890, + "xdm:videoViewRate2Sec": 0.968, + "xdm:videoViewRate6Sec": 0.889, + "xdm:video15SecViews": 7234, + "xdm:video30SecViews": 6234, + "xdm:videoQuartile1": 8234, + "xdm:videoQuartile2": 7456, + "xdm:videoQuartile3": 6789, + "xdm:videoCompletions": 5785, + "xdm:videoCompletionRate": 0.65, + "xdm:videoViewRate25Percent": 0.867, + "xdm:videoViewRate50Percent": 0.785, + "xdm:videoViewRate75Percent": 0.715, + "xdm:videoViewRate100Percent": 0.609, + "xdm:averageVideoWatchTime": 18.5, + "xdm:totalVideoWatchTime": 175750, + "xdm:videoMrcViews": 8234, + "xdm:videoThroughplayViews": 5785, + "xdm:videoSkips": 1265, + "xdm:videoSkipRate": 0.133, + "xdm:videoReplays": 456, + "xdm:videoPauses": 1234, + "xdm:videoResumes": 1156, + "xdm:videoFullscreenViews": 2345, + "xdm:videoMutes": 890, + "xdm:videoUnmutes": 678, + "xdm:videoVolumeChanges": 234, + "xdm:videoClickToPlays": 3456, + "xdm:videoAutoPlays": 6044, + "xdm:videoViewabilityRate": 0.85, + "xdm:videoAudibilityRate": 0.72, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_video_plays", + "xdm:stringValue": "9500" + }, + { + "xdm:fieldName": "meta_video_3_sec_views", + "xdm:stringValue": "8900" + }, + { + "xdm:fieldName": "meta_video_30_sec_watched_actions", + "xdm:stringValue": "6234" + }, + { + "xdm:fieldName": "meta_video_p25_watched_actions", + "xdm:stringValue": "8234" + }, + { + "xdm:fieldName": "meta_video_p50_watched_actions", + "xdm:stringValue": "7456" + }, + { + "xdm:fieldName": "meta_video_p75_watched_actions", + "xdm:stringValue": "6789" + }, + { + "xdm:fieldName": "meta_video_p95_watched_actions", + "xdm:stringValue": "5785" + }, + { + "xdm:fieldName": "meta_video_p100_watched_actions", + "xdm:stringValue": "5785" + }, + { + "xdm:fieldName": "meta_video_avg_time_watched_actions", + "xdm:stringValue": "18.5" + }, + { + "xdm:fieldName": "meta_video_total_time_watched", + "xdm:stringValue": "175750" + }, + { + "xdm:fieldName": "meta_video_completion_rate", + "xdm:stringValue": "0.65" + }, + { + "xdm:fieldName": "meta_video_viewability_rate", + "xdm:stringValue": "0.85" + }, + { + "xdm:fieldName": "meta_video_sound_on_rate", + "xdm:stringValue": "0.72" + } + ] + } + } +} diff --git a/components/fieldgroups/paid-media/core-paid-media-video-metrics.schema.json b/components/fieldgroups/paid-media/core-paid-media-video-metrics.schema.json new file mode 100644 index 000000000..c7c4c86b3 --- /dev/null +++ b/components/fieldgroups/paid-media/core-paid-media-video-metrics.schema.json @@ -0,0 +1,260 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/mixins/paid-media/video-metrics", + "title": "Core Paid Media Video Metrics", + "type": "object", + "meta:extensible": true, + "meta:abstract": true, + "meta:intendedToExtend": ["https://ns.adobe.com/xdm/classes/summarymetrics"], + "description": "Video-specific performance metrics for paid media campaigns", + "definitions": { + "video-metrics": { + "properties": { + "xdm:paidMedia": { + "type": "object", + "properties": { + "xdm:videoMetrics": { + "type": "object", + "title": "Video Metrics", + "description": "Metrics specific to video ads", + "properties": { + "xdm:videoPlays": { + "type": "integer", + "title": "Video Plays", + "description": "Number of video plays", + "minimum": 0 + }, + "xdm:video3SecViews": { + "type": "integer", + "title": "3-Second Video Views", + "description": "Number of 3-second video views", + "minimum": 0 + }, + "xdm:video2SecViews": { + "type": "integer", + "title": "2-Second Video Views", + "description": "Number of times video was viewed for at least 2 seconds", + "minimum": 0 + }, + "xdm:video6SecViews": { + "type": "integer", + "title": "6-Second Video Views", + "description": "Number of times video was viewed for at least 6 seconds", + "minimum": 0 + }, + "xdm:video10SecViews": { + "type": "integer", + "title": "10-Second Video Views", + "description": "Number of times video was viewed for at least 10 seconds", + "minimum": 0 + }, + "xdm:videoViewRate2Sec": { + "type": "number", + "title": "2-Second Video View Rate", + "description": "Percentage of videos viewed for at least 2 seconds", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoViewRate6Sec": { + "type": "number", + "title": "6-Second Video View Rate", + "description": "Percentage of videos viewed for at least 6 seconds", + "minimum": 0, + "maximum": 1 + }, + "xdm:video15SecViews": { + "type": "integer", + "title": "15-Second Video Views", + "description": "Number of 15-second video views", + "minimum": 0 + }, + "xdm:video30SecViews": { + "type": "integer", + "title": "30-Second Video Views", + "description": "Number of 30-second video views", + "minimum": 0 + }, + "xdm:videoQuartile1": { + "type": "integer", + "title": "Video 25% Completion", + "description": "Number of videos watched to 25%", + "minimum": 0 + }, + "xdm:videoQuartile2": { + "type": "integer", + "title": "Video 50% Completion", + "description": "Number of videos watched to 50%", + "minimum": 0 + }, + "xdm:videoQuartile3": { + "type": "integer", + "title": "Video 75% Completion", + "description": "Number of videos watched to 75%", + "minimum": 0 + }, + "xdm:videoCompletions": { + "type": "integer", + "title": "Video Completions", + "description": "Number of videos watched to completion", + "minimum": 0 + }, + "xdm:videoCompletionRate": { + "type": "number", + "title": "Video Completion Rate", + "description": "Percentage of videos watched to completion", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoViewRate25Percent": { + "type": "number", + "title": "25% Video View Rate", + "description": "Percentage of videos viewed to 25% completion", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoViewRate50Percent": { + "type": "number", + "title": "50% Video View Rate", + "description": "Percentage of videos viewed to 50% completion", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoViewRate75Percent": { + "type": "number", + "title": "75% Video View Rate", + "description": "Percentage of videos viewed to 75% completion", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoViewRate100Percent": { + "type": "number", + "title": "100% Video View Rate", + "description": "Percentage of videos viewed to 100% completion", + "minimum": 0, + "maximum": 1 + }, + "xdm:averageVideoWatchTime": { + "type": "number", + "title": "Average Video Watch Time", + "description": "Average time spent watching videos in seconds", + "minimum": 0 + }, + "xdm:totalVideoWatchTime": { + "type": "number", + "title": "Total Video Watch Time", + "description": "Total time spent watching videos in seconds", + "minimum": 0 + }, + "xdm:videoMrcViews": { + "type": "integer", + "title": "Video MRC Views", + "description": "Video views meeting MRC standards", + "minimum": 0 + }, + "xdm:videoThroughplayViews": { + "type": "integer", + "title": "Video Throughplay Views", + "description": "Number of throughplay video views", + "minimum": 0 + }, + "xdm:videoSkips": { + "type": "integer", + "title": "Video Skips", + "description": "Number of video skips", + "minimum": 0 + }, + "xdm:videoSkipRate": { + "type": "number", + "title": "Video Skip Rate", + "description": "Percentage of videos that were skipped", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoReplays": { + "type": "integer", + "title": "Video Replays", + "description": "Number of video replays", + "minimum": 0 + }, + "xdm:videoPauses": { + "type": "integer", + "title": "Video Pauses", + "description": "Number of video pauses", + "minimum": 0 + }, + "xdm:videoResumes": { + "type": "integer", + "title": "Video Resumes", + "description": "Number of video resumes after pause", + "minimum": 0 + }, + "xdm:videoFullscreenViews": { + "type": "integer", + "title": "Video Fullscreen Views", + "description": "Number of fullscreen video views", + "minimum": 0 + }, + "xdm:videoMutes": { + "type": "integer", + "title": "Video Mutes", + "description": "Number of video mutes", + "minimum": 0 + }, + "xdm:videoUnmutes": { + "type": "integer", + "title": "Video Unmutes", + "description": "Number of video unmutes", + "minimum": 0 + }, + "xdm:videoVolumeChanges": { + "type": "integer", + "title": "Video Volume Changes", + "description": "Number of video volume changes", + "minimum": 0 + }, + "xdm:videoClickToPlays": { + "type": "integer", + "title": "Video Click to Plays", + "description": "Number of click-to-play actions", + "minimum": 0 + }, + "xdm:videoAutoPlays": { + "type": "integer", + "title": "Video Auto Plays", + "description": "Number of auto-play video starts", + "minimum": 0 + }, + "xdm:videoViewabilityRate": { + "type": "number", + "title": "Video Viewability Rate", + "description": "Percentage of video impressions that were viewable", + "minimum": 0, + "maximum": 1 + }, + "xdm:videoAudibilityRate": { + "type": "number", + "title": "Video Audibility Rate", + "description": "Percentage of video views with audible sound", + "minimum": 0, + "maximum": 1 + } + } + } + } + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/video-metrics" + } + ], + "meta:status": "experimental" +} diff --git a/package.json b/package.json index f57f6d984..d37c4a778 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "clean": "rm -rf docs/reference", "markdown": "./bin/pre-doc-gen.sh && jsonschema2md -o docs/reference -d docsource --link-abstract abstract.md --link-extensible extensions.md --link-status status.md --link-id id.md --link-custom extensions.md --link-additional extensions.md -v \"06\" || : && rm -rf docsource", "test": "mocha", + "validate": "node bin/validate-schemas.js", "lint": "prettier --write *.json RELEASING.md CHANGELOG.md CONTRIBUTING.md README.md docs/*.md schemas/*/**/*.md schemas/*/*.json schemas/*/**/*.json components/*/*.json components/*/**/*.json extensions/*/**/*.json extensions/*/*/**/*.json && git diff --exit-code", "lint-quick": "pretty-quick", "package": "npm run markdown && curl -o \"./node_modules/markdown-importer-0.0.4-jar-with-dependencies.jar\" -C - https://artifactory.corp.adobe.com/artifactory/maven-markdown-tools-release/io/adobe/udp/markdown-importer/0.0.4/markdown-importer-0.0.4-jar-with-dependencies.jar && java -jar ./node_modules/markdown-importer-0.0.4-jar-with-dependencies.jar markdown2aem.yaml", @@ -36,6 +37,7 @@ "@adobe/jsonschema2md": "1.1.0", "ajv": "5.5.0", "ajv-cli": "^2.1.0", + "ajv-formats": "^3.0.1", "camelcase": "^4.1.0", "deep-diff": "^1.0.2", "deep-rename-keys": "^0.2.1", diff --git a/schemas/paid-media/paid-media-account-lookup.example.1.json b/schemas/paid-media/paid-media-account-lookup.example.1.json new file mode 100644 index 000000000..3738a8f77 --- /dev/null +++ b/schemas/paid-media/paid-media-account-lookup.example.1.json @@ -0,0 +1,324 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "account", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:metadata": { + "xdm:name": "Acme Corp - Meta Business Account", + "xdm:status": "active", + "xdm:currency": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2020-03-15T08:00:00Z", + "xdm:updatedTime": "2025-11-09T15:30:00Z" + }, + "xdm:accountDetails": { + "xdm:accountName": "Acme Corp - Meta Business Account", + "xdm:accountType": "business", + "xdm:businessName": "Acme Corporation", + "xdm:industry": "Technology", + "xdm:country": "US", + "xdm:isTestAccount": false, + "xdm:parentAccountID": "987654321098765", + "xdm:permissions": ["admin", "campaign_manager", "finance_manager"], + "xdm:spendingLimits": { + "xdm:dailyLimit": 5000, + "xdm:monthlyLimit": 150000, + "xdm:totalLimit": 1000000 + }, + "xdm:billingInfo": { + "xdm:billingType": "credit_card", + "xdm:paymentMethod": "credit_card", + "xdm:creditLimit": 500000, + "xdm:currentBalance": 125000 + }, + "xdm:contactInfo": { + "xdm:primaryEmail": "john.doe@acmecorp.com", + "xdm:phone": "+1-415-555-0120", + "xdm:website": "https://www.acmecorp.com", + "xdm:address": { + "xdm:street1": "123 Innovation Drive", + "xdm:street2": "Suite 500", + "xdm:city": "San Francisco", + "xdm:region": "CA", + "xdm:postalCode": "94105", + "xdm:country": "US" + } + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_business_id", + "xdm:stringValue": "123456789012345" + }, + { + "xdm:fieldName": "meta_business_manager_id", + "xdm:stringValue": "987654321098765" + }, + { + "xdm:fieldName": "meta_legal_entity_name", + "xdm:stringValue": "Acme Corporation Inc." + }, + { + "xdm:fieldName": "meta_tax_id", + "xdm:stringValue": "12-3456789" + }, + { + "xdm:fieldName": "meta_business_email", + "xdm:stringValue": "advertising@acmecorp.com" + }, + { + "xdm:fieldName": "meta_business_category", + "xdm:stringValue": "Technology Company" + }, + { + "xdm:fieldName": "meta_business_vertical", + "xdm:stringValue": "Software as a Service" + }, + { + "xdm:fieldName": "meta_employee_count", + "xdm:stringValue": "1001-5000" + }, + { + "xdm:fieldName": "meta_annual_revenue", + "xdm:stringValue": "50000000-100000000" + }, + { + "xdm:fieldName": "meta_year_established", + "xdm:numberValue": 2010 + }, + { + "xdm:fieldName": "meta_publicly_traded", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_stock_symbol", + "xdm:stringValue": "ACME" + }, + { + "xdm:fieldName": "meta_parent_company", + "xdm:stringValue": "Acme Holdings LLC" + }, + { + "xdm:fieldName": "meta_payment_method_id", + "xdm:stringValue": "pm_1234567890abcdef" + }, + { + "xdm:fieldName": "meta_billing_currency", + "xdm:stringValue": "USD" + }, + { + "xdm:fieldName": "meta_billing_email", + "xdm:stringValue": "billing@acmecorp.com" + }, + { + "xdm:fieldName": "meta_billing_contact", + "xdm:stringValue": "Jane Smith" + }, + { + "xdm:fieldName": "meta_billing_phone", + "xdm:stringValue": "+1-415-555-0150" + }, + { + "xdm:fieldName": "meta_invoice_delivery", + "xdm:stringValue": "email" + }, + { + "xdm:fieldName": "meta_payment_terms", + "xdm:stringValue": "immediate" + }, + { + "xdm:fieldName": "meta_available_credit", + "xdm:numberValue": 375000 + }, + { + "xdm:fieldName": "meta_last_payment_date", + "xdm:stringValue": "2025-11-03T10:30:00Z" + }, + { + "xdm:fieldName": "meta_last_payment_amount", + "xdm:numberValue": 45000 + }, + { + "xdm:fieldName": "meta_next_billing_date", + "xdm:stringValue": "2025-12-01T00:00:00Z" + }, + { + "xdm:fieldName": "meta_auto_pay_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_billing_threshold", + "xdm:numberValue": 10000 + }, + { + "xdm:fieldName": "meta_tax_exempt", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_primary_contact_name", + "xdm:stringValue": "John Doe" + }, + { + "xdm:fieldName": "meta_primary_contact_title", + "xdm:stringValue": "Director of Digital Marketing" + }, + { + "xdm:fieldName": "meta_primary_contact_user_id", + "xdm:stringValue": "user_abc123xyz" + }, + { + "xdm:fieldName": "meta_technical_contact_name", + "xdm:stringValue": "Sarah Johnson" + }, + { + "xdm:fieldName": "meta_technical_contact_email", + "xdm:stringValue": "sarah.johnson@acmecorp.com" + }, + { + "xdm:fieldName": "meta_technical_contact_phone", + "xdm:stringValue": "+1-415-555-0130" + }, + { + "xdm:fieldName": "meta_technical_contact_title", + "xdm:stringValue": "Marketing Technology Manager" + }, + { + "xdm:fieldName": "meta_current_daily_spend", + "xdm:numberValue": 3250 + }, + { + "xdm:fieldName": "meta_current_monthly_spend", + "xdm:numberValue": 87500 + }, + { + "xdm:fieldName": "meta_lifetime_spend", + "xdm:numberValue": 425000 + }, + { + "xdm:fieldName": "meta_spend_limit_reset_day", + "xdm:numberValue": 1 + }, + { + "xdm:fieldName": "meta_alert_threshold", + "xdm:numberValue": 0.8 + }, + { + "xdm:fieldName": "meta_alerts_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_pause_on_limit_reached", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "meta_timezone", + "xdm:stringValue": "America/Los_Angeles" + }, + { + "xdm:fieldName": "meta_language", + "xdm:stringValue": "en_US" + }, + { + "xdm:fieldName": "meta_attribution_window", + "xdm:stringValue": "28d_click_1d_view" + }, + { + "xdm:fieldName": "meta_conversion_tracking", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_pixel_id", + "xdm:stringValue": "pixel_123456789" + }, + { + "xdm:fieldName": "meta_catalog_id", + "xdm:stringValue": "catalog_987654321" + }, + { + "xdm:fieldName": "meta_app_id", + "xdm:stringValue": "app_456789123" + }, + { + "xdm:fieldName": "meta_domain_verification", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_verified_domains", + "xdm:stringValue": "acmecorp.com,shop.acmecorp.com" + }, + { + "xdm:fieldName": "meta_brand_safety_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_ad_review_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_auto_optimization_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_account_health", + "xdm:stringValue": "good" + }, + { + "xdm:fieldName": "meta_compliance_status", + "xdm:stringValue": "compliant" + }, + { + "xdm:fieldName": "meta_verification_status", + "xdm:stringValue": "verified" + }, + { + "xdm:fieldName": "meta_risk_level", + "xdm:stringValue": "low" + }, + { + "xdm:fieldName": "meta_last_review_date", + "xdm:stringValue": "2025-10-15T14:30:00Z" + }, + { + "xdm:fieldName": "meta_next_review_date", + "xdm:stringValue": "2026-01-15T00:00:00Z" + }, + { + "xdm:fieldName": "meta_crm_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_crm_provider", + "xdm:stringValue": "Salesforce" + }, + { + "xdm:fieldName": "meta_analytics_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_analytics_provider", + "xdm:stringValue": "Adobe Analytics" + }, + { + "xdm:fieldName": "meta_cdp_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_cdp_provider", + "xdm:stringValue": "Adobe Real-Time CDP" + }, + { + "xdm:fieldName": "meta_attribution_provider", + "xdm:stringValue": "Adobe Attribution AI" + }, + { + "xdm:fieldName": "meta_data_warehouse_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "meta_data_warehouse_provider", + "xdm:stringValue": "Snowflake" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-account-lookup.example.2.json b/schemas/paid-media/paid-media-account-lookup.example.2.json new file mode 100644 index 000000000..48c3ba718 --- /dev/null +++ b/schemas/paid-media/paid-media-account-lookup.example.2.json @@ -0,0 +1,336 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "account", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:metadata": { + "xdm:name": "Acme Corp - Google Ads Account", + "xdm:status": "active", + "xdm:currency": "USD", + "xdm:timezone": "America/New_York", + "xdm:createdTime": "2019-06-20T10:00:00Z", + "xdm:updatedTime": "2025-11-09T12:00:00Z" + }, + "xdm:accountDetails": { + "xdm:accountName": "Acme Corp - Google Ads Account", + "xdm:accountType": "business", + "xdm:businessName": "Acme Corporation", + "xdm:industry": "Technology", + "xdm:country": "US", + "xdm:isTestAccount": false, + "xdm:parentAccountID": "mcc_111222333444", + "xdm:permissions": ["owner", "admin"], + "xdm:spendingLimits": { + "xdm:dailyLimit": 8000, + "xdm:monthlyLimit": 240000, + "xdm:totalLimit": 0 + }, + "xdm:billingInfo": { + "xdm:billingType": "postpaid", + "xdm:paymentMethod": "invoice", + "xdm:creditLimit": 750000, + "xdm:currentBalance": 85000 + }, + "xdm:contactInfo": { + "xdm:primaryEmail": "emily.marketing@acmecorp.com", + "xdm:phone": "+1-212-555-0220", + "xdm:website": "https://www.acmecorp.com", + "xdm:address": { + "xdm:street1": "456 Commerce Boulevard", + "xdm:street2": "Floor 12", + "xdm:city": "New York", + "xdm:region": "NY", + "xdm:postalCode": "10001", + "xdm:country": "US" + } + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_business_id", + "xdm:stringValue": "google_business_987654321" + }, + { + "xdm:fieldName": "google_legal_entity_name", + "xdm:stringValue": "Acme Corporation Inc." + }, + { + "xdm:fieldName": "google_tax_id", + "xdm:stringValue": "12-3456789" + }, + { + "xdm:fieldName": "google_business_phone", + "xdm:stringValue": "+1-212-555-0200" + }, + { + "xdm:fieldName": "google_business_email", + "xdm:stringValue": "google-ads@acmecorp.com" + }, + { + "xdm:fieldName": "google_business_category", + "xdm:stringValue": "Technology Company" + }, + { + "xdm:fieldName": "google_business_vertical", + "xdm:stringValue": "Software as a Service" + }, + { + "xdm:fieldName": "google_employee_count", + "xdm:stringValue": "1001-5000" + }, + { + "xdm:fieldName": "google_annual_revenue", + "xdm:stringValue": "50000000-100000000" + }, + { + "xdm:fieldName": "google_year_established", + "xdm:numberValue": 2010 + }, + { + "xdm:fieldName": "google_publicly_traded", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_stock_symbol", + "xdm:stringValue": "ACME" + }, + { + "xdm:fieldName": "google_parent_company", + "xdm:stringValue": "Acme Holdings LLC" + }, + { + "xdm:fieldName": "google_payment_method_id", + "xdm:stringValue": "billing_profile_567890" + }, + { + "xdm:fieldName": "google_billing_currency", + "xdm:stringValue": "USD" + }, + { + "xdm:fieldName": "google_billing_email", + "xdm:stringValue": "ap@acmecorp.com" + }, + { + "xdm:fieldName": "google_billing_contact", + "xdm:stringValue": "Robert Finance" + }, + { + "xdm:fieldName": "google_billing_phone", + "xdm:stringValue": "+1-212-555-0250" + }, + { + "xdm:fieldName": "google_invoice_delivery", + "xdm:stringValue": "email" + }, + { + "xdm:fieldName": "google_payment_terms", + "xdm:stringValue": "net_30" + }, + { + "xdm:fieldName": "google_available_credit", + "xdm:numberValue": 665000 + }, + { + "xdm:fieldName": "google_last_payment_date", + "xdm:stringValue": "2025-11-01T09:00:00Z" + }, + { + "xdm:fieldName": "google_last_payment_amount", + "xdm:numberValue": 62000 + }, + { + "xdm:fieldName": "google_next_billing_date", + "xdm:stringValue": "2025-12-01T00:00:00Z" + }, + { + "xdm:fieldName": "google_auto_pay_enabled", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "google_billing_threshold", + "xdm:numberValue": 50000 + }, + { + "xdm:fieldName": "google_tax_exempt", + "xdm:booleanValue": false + }, + { + "xdm:fieldName": "google_primary_contact_name", + "xdm:stringValue": "Emily Marketing" + }, + { + "xdm:fieldName": "google_primary_contact_title", + "xdm:stringValue": "VP of Digital Marketing" + }, + { + "xdm:fieldName": "google_primary_contact_user_id", + "xdm:stringValue": "user_google_xyz789" + }, + { + "xdm:fieldName": "google_technical_contact_name", + "xdm:stringValue": "Michael Tech" + }, + { + "xdm:fieldName": "google_technical_contact_email", + "xdm:stringValue": "michael.tech@acmecorp.com" + }, + { + "xdm:fieldName": "google_technical_contact_phone", + "xdm:stringValue": "+1-212-555-0230" + }, + { + "xdm:fieldName": "google_technical_contact_title", + "xdm:stringValue": "Senior Marketing Analyst" + }, + { + "xdm:fieldName": "google_current_daily_spend", + "xdm:numberValue": 6500 + }, + { + "xdm:fieldName": "google_current_monthly_spend", + "xdm:numberValue": 145000 + }, + { + "xdm:fieldName": "google_lifetime_spend", + "xdm:numberValue": 2850000 + }, + { + "xdm:fieldName": "google_spend_limit_reset_day", + "xdm:numberValue": 1 + }, + { + "xdm:fieldName": "google_alert_threshold", + "xdm:numberValue": 0.9 + }, + { + "xdm:fieldName": "google_alerts_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_pause_on_limit_reached", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_timezone", + "xdm:stringValue": "America/New_York" + }, + { + "xdm:fieldName": "google_language", + "xdm:stringValue": "en_US" + }, + { + "xdm:fieldName": "google_attribution_window", + "xdm:stringValue": "30d_click" + }, + { + "xdm:fieldName": "google_conversion_tracking", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_domain_verification", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_verified_domains", + "xdm:stringValue": "acmecorp.com,shop.acmecorp.com,www.acmecorp.com" + }, + { + "xdm:fieldName": "google_brand_safety_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_ad_review_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_auto_optimization_enabled", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_account_health", + "xdm:stringValue": "excellent" + }, + { + "xdm:fieldName": "google_compliance_status", + "xdm:stringValue": "compliant" + }, + { + "xdm:fieldName": "google_verification_status", + "xdm:stringValue": "verified" + }, + { + "xdm:fieldName": "google_risk_level", + "xdm:stringValue": "low" + }, + { + "xdm:fieldName": "google_last_review_date", + "xdm:stringValue": "2025-09-20T10:00:00Z" + }, + { + "xdm:fieldName": "google_next_review_date", + "xdm:stringValue": "2025-12-20T00:00:00Z" + }, + { + "xdm:fieldName": "google_crm_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_crm_provider", + "xdm:stringValue": "Salesforce" + }, + { + "xdm:fieldName": "google_analytics_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_analytics_provider", + "xdm:stringValue": "Google Analytics 4" + }, + { + "xdm:fieldName": "google_cdp_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_cdp_provider", + "xdm:stringValue": "Adobe Real-Time CDP" + }, + { + "xdm:fieldName": "google_attribution_provider", + "xdm:stringValue": "Google Ads Attribution" + }, + { + "xdm:fieldName": "google_data_warehouse_integration", + "xdm:booleanValue": true + }, + { + "xdm:fieldName": "google_data_warehouse_provider", + "xdm:stringValue": "BigQuery" + }, + { + "xdm:fieldName": "google_customer_id", + "xdm:stringValue": "1234567890" + }, + { + "xdm:fieldName": "google_manager_customer_id", + "xdm:stringValue": "111222333444" + }, + { + "xdm:fieldName": "google_account_type", + "xdm:stringValue": "standard" + }, + { + "xdm:fieldName": "google_account_creation_date", + "xdm:stringValue": "2019-06-20T10:00:00Z" + }, + { + "xdm:fieldName": "google_conversion_tracking_id", + "xdm:stringValue": "AW-123456789" + }, + { + "xdm:fieldName": "google_remarketing_tag_id", + "xdm:stringValue": "DC-987654321" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-account-lookup.schema.json b/schemas/paid-media/paid-media-account-lookup.schema.json new file mode 100644 index 000000000..7bfc220cc --- /dev/null +++ b/schemas/paid-media/paid-media-account-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-account-lookup", + "title": "Paid Media Account Lookup", + "type": "object", + "description": "Schema for paid media account lookup dataset containing account metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/account-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/account-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-ad-lookup.example.1.json b/schemas/paid-media/paid-media-ad-lookup.example.1.json new file mode 100644 index 000000000..72d3d94e3 --- /dev/null +++ b/schemas/paid-media/paid-media-ad-lookup.example.1.json @@ -0,0 +1,182 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "ad", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:adID": "23851234567890123", + "xdm:adGUID": "meta_act_123456789012345_23851234567890123", + "xdm:experienceID": "creative_vid_987654321", + "xdm:experienceGUID": "meta_act_123456789012345_creative_vid_987654321", + "xdm:hierarchyPath": "act_123456789012345/23851234567890789/23851234567890456/23851234567890123", + "xdm:metadata": { + "xdm:name": "Fall Product Launch - 30s Video Ad", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2025-10-28T16:00:00Z", + "xdm:updatedTime": "2025-11-09T13:00:00Z", + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z" + }, + "xdm:adDetails": { + "xdm:adType": "video", + "xdm:adFormat": "single_video", + "xdm:reviewStatus": "approved", + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:creativeDetails": { + "xdm:creativeID": "creative_vid_987654321", + "xdm:creativeName": "Fall Product Launch - 30s Video", + "xdm:creativeType": "video", + "xdm:creativeFormat": "feed_video", + "xdm:creativeVersion": "v2.1", + "xdm:creativeTemplate": "video_standard", + "xdm:dynamicCreative": false, + "xdm:personalized": true, + "xdm:localized": true, + "xdm:locale": "en_US", + "xdm:brandID": "brand_acme_123", + "xdm:campaignTheme": "fall_2025_launch" + }, + "xdm:adReviewDetails": { + "xdm:reviewStatus": "approved", + "xdm:reviewDate": "2025-11-05T14:30:00Z", + "xdm:reviewerID": "meta_reviewer_456", + "xdm:reviewNotes": "Approved - complies with all advertising policies", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:lastModifiedDate": "2025-11-05T10:15:00Z", + "xdm:autoApproved": false, + "xdm:requiresManualReview": false + }, + "xdm:deliveryDetails": { + "xdm:deliveryStatus": "active", + "xdm:effectiveStatus": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:pacing": "standard", + "xdm:deliveryEstimate": "good", + "xdm:learningPhase": "completed", + "xdm:lastDeliveryCheck": "2025-11-10T08:00:00Z", + "xdm:estimatedDailyReach": 125000, + "xdm:saturationLevel": "low" + }, + "xdm:socialMediaProperties": { + "xdm:postID": "post_123456789_987654321", + "xdm:pageID": "page_acmecorp_official", + "xdm:instagramAccountID": "ig_acmecorp", + "xdm:allowComments": true, + "xdm:allowSharing": true, + "xdm:allowLikes": true, + "xdm:commentCount": 1247, + "xdm:shareCount": 892, + "xdm:likeCount": 8934, + "xdm:reactionCount": 9876, + "xdm:saveCount": 456, + "xdm:hideCount": 23, + "xdm:reportCount": 2, + "xdm:organicImpressions": 45000, + "xdm:organicReach": 32000, + "xdm:viralImpressions": 12000, + "xdm:viralReach": 8500 + }, + "xdm:callToAction": { + "xdm:type": "learn_more", + "xdm:text": "Learn More", + "xdm:url": "https://www.acmecorp.com/fall-launch?utm_source=facebook&utm_medium=video&utm_campaign=fall2025", + "xdm:displayUrl": "acmecorp.com/fall-launch", + "xdm:deepLink": "acmecorp://products/fall-launch", + "xdm:trackingTemplate": "https://track.acmecorp.com/click?ad={ad_id}&placement={placement}", + "xdm:utmParameters": { + "xdm:source": "facebook", + "xdm:medium": "video", + "xdm:campaign": "fall2025", + "xdm:content": "30s_video", + "xdm:term": "product_launch" + } + }, + "xdm:linkProperties": { + "xdm:destinationURL": "https://www.acmecorp.com/fall-launch", + "xdm:displayURL": "acmecorp.com", + "xdm:urlTags": "utm_source=facebook&utm_medium=video&utm_campaign=fall2025", + "xdm:trackingPixels": [ + "https://track.acmecorp.com/impression?ad=vid_987654321", + "https://analytics.acmecorp.com/pixel?type=view&id=fall2025" + ], + "xdm:clickTrackers": [ + "https://track.acmecorp.com/click?ad=vid_987654321", + "https://analytics.acmecorp.com/pixel?type=click&id=fall2025" + ], + "xdm:conversionTracking": true, + "xdm:conversionPixelID": "pixel_123456789" + }, + "xdm:appProperties": { + "xdm:appID": "app_456789123", + "xdm:appName": "Acme Shopping", + "xdm:appPlatform": "ios", + "xdm:appStoreURL": "https://apps.apple.com/app/acme-shopping/id123456789", + "xdm:appDeepLink": "acmecorp://products/fall-launch", + "xdm:appEventTracking": true, + "xdm:appEventName": "product_view", + "xdm:sdkVersion": "9.2.1" + }, + "xdm:leadGenProperties": { + "xdm:formID": "form_not_applicable", + "xdm:formType": "not_applicable", + "xdm:instantForm": false, + "xdm:privacyPolicyURL": "https://www.acmecorp.com/privacy", + "xdm:customDisclaimer": "By submitting, you agree to receive marketing communications from Acme Corp." + }, + "xdm:interactionProperties": { + "xdm:allowInteraction": true, + "xdm:interactionType": "video_engagement", + "xdm:swipeUpEnabled": false, + "xdm:pollEnabled": false, + "xdm:quizEnabled": false, + "xdm:gamificationEnabled": false, + "xdm:arEnabled": false, + "xdm:threeDEnabled": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567890123" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_video_id", + "xdm:stringValue": "987654321012345" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-ad-lookup.example.2.json b/schemas/paid-media/paid-media-ad-lookup.example.2.json new file mode 100644 index 000000000..c36a5a72b --- /dev/null +++ b/schemas/paid-media/paid-media-ad-lookup.example.2.json @@ -0,0 +1,180 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "ad", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:adID": "23851234567890124", + "xdm:adGUID": "meta_act_123456789012345_23851234567890124", + "xdm:experienceID": "creative_img_456789123", + "xdm:experienceGUID": "meta_act_123456789012345_creative_img_456789123", + "xdm:hierarchyPath": "act_123456789012345/23851234567890789/23851234567890456/23851234567890124", + "xdm:metadata": { + "xdm:name": "Holiday Sale - Hero Banner Ad", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2025-11-01T10:00:00Z", + "xdm:updatedTime": "2025-11-09T11:00:00Z", + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z" + }, + "xdm:adDetails": { + "xdm:adType": "image", + "xdm:adFormat": "single_image", + "xdm:reviewStatus": "approved", + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:creativeDetails": { + "xdm:creativeID": "creative_img_456789123", + "xdm:creativeName": "Holiday Sale - Hero Banner", + "xdm:creativeType": "image", + "xdm:creativeFormat": "feed_image", + "xdm:creativeVersion": "v1.0", + "xdm:creativeTemplate": "image_standard", + "xdm:dynamicCreative": false, + "xdm:personalized": false, + "xdm:localized": true, + "xdm:locale": "en_US", + "xdm:brandID": "brand_acme_123", + "xdm:campaignTheme": "holiday_2025" + }, + "xdm:adReviewDetails": { + "xdm:reviewStatus": "approved", + "xdm:reviewDate": "2025-11-01T12:00:00Z", + "xdm:reviewerID": "meta_reviewer_789", + "xdm:reviewNotes": "Approved - meets all policy requirements", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:lastModifiedDate": "2025-11-01T09:30:00Z", + "xdm:autoApproved": true, + "xdm:requiresManualReview": false + }, + "xdm:deliveryDetails": { + "xdm:deliveryStatus": "active", + "xdm:effectiveStatus": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:pacing": "standard", + "xdm:deliveryEstimate": "excellent", + "xdm:learningPhase": "completed", + "xdm:lastDeliveryCheck": "2025-11-10T08:00:00Z", + "xdm:estimatedDailyReach": 85000, + "xdm:saturationLevel": "low" + }, + "xdm:socialMediaProperties": { + "xdm:postID": "post_123456789_987654322", + "xdm:pageID": "page_acmecorp_official", + "xdm:instagramAccountID": "ig_acmecorp", + "xdm:allowComments": true, + "xdm:allowSharing": true, + "xdm:allowLikes": true, + "xdm:commentCount": 856, + "xdm:shareCount": 623, + "xdm:likeCount": 6234, + "xdm:reactionCount": 6890, + "xdm:saveCount": 312, + "xdm:hideCount": 15, + "xdm:reportCount": 1, + "xdm:organicImpressions": 28000, + "xdm:organicReach": 21000, + "xdm:viralImpressions": 8500, + "xdm:viralReach": 6200 + }, + "xdm:callToAction": { + "xdm:type": "shop_now", + "xdm:text": "Shop Now", + "xdm:url": "https://shop.acmecorp.com/holiday-sale?utm_source=facebook&utm_medium=image&utm_campaign=holiday2025", + "xdm:displayUrl": "shop.acmecorp.com/holiday-sale", + "xdm:deepLink": "acmecorp://shop/holiday-sale", + "xdm:trackingTemplate": "https://track.acmecorp.com/click?ad={ad_id}&placement={placement}", + "xdm:utmParameters": { + "xdm:source": "facebook", + "xdm:medium": "image", + "xdm:campaign": "holiday2025", + "xdm:content": "hero_banner", + "xdm:term": "holiday_sale" + } + }, + "xdm:linkProperties": { + "xdm:destinationURL": "https://shop.acmecorp.com/holiday-sale", + "xdm:displayURL": "shop.acmecorp.com", + "xdm:urlTags": "utm_source=facebook&utm_medium=image&utm_campaign=holiday2025", + "xdm:trackingPixels": [ + "https://track.acmecorp.com/impression?ad=img_456789123" + ], + "xdm:clickTrackers": [ + "https://track.acmecorp.com/click?ad=img_456789123" + ], + "xdm:conversionTracking": true, + "xdm:conversionPixelID": "pixel_123456789" + }, + "xdm:appProperties": { + "xdm:appID": "app_456789123", + "xdm:appName": "Acme Shopping", + "xdm:appPlatform": "ios", + "xdm:appStoreURL": "https://apps.apple.com/app/acme-shopping/id123456789", + "xdm:appDeepLink": "acmecorp://shop/holiday-sale", + "xdm:appEventTracking": true, + "xdm:appEventName": "view_sale", + "xdm:sdkVersion": "9.2.1" + }, + "xdm:leadGenProperties": { + "xdm:formID": "form_not_applicable", + "xdm:formType": "not_applicable", + "xdm:instantForm": false, + "xdm:privacyPolicyURL": "https://www.acmecorp.com/privacy", + "xdm:customDisclaimer": "" + }, + "xdm:interactionProperties": { + "xdm:allowInteraction": true, + "xdm:interactionType": "click", + "xdm:swipeUpEnabled": false, + "xdm:pollEnabled": false, + "xdm:quizEnabled": false, + "xdm:gamificationEnabled": false, + "xdm:arEnabled": false, + "xdm:threeDEnabled": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_ad_id", + "xdm:stringValue": "23851234567890124" + }, + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_image_hash", + "xdm:stringValue": "abc123def456ghi789jkl012" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-ad-lookup.example.3.json b/schemas/paid-media/paid-media-ad-lookup.example.3.json new file mode 100644 index 000000000..13b64e152 --- /dev/null +++ b/schemas/paid-media/paid-media-ad-lookup.example.3.json @@ -0,0 +1,171 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "ad", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:campaignID": "9876543210", + "xdm:campaignGUID": "google_ads_1234567890_9876543210", + "xdm:adGroupID": "5555666677", + "xdm:adGroupGUID": "google_ads_1234567890_5555666677", + "xdm:adID": "8888999900", + "xdm:adGUID": "google_ads_1234567890_8888999900", + "xdm:experienceID": "creative_rda_111222333", + "xdm:experienceGUID": "google_ads_1234567890_creative_rda_111222333", + "xdm:hierarchyPath": "1234567890/9876543210/5555666677/8888999900", + "xdm:metadata": { + "xdm:name": "Responsive Display Ad - Tech Solutions", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/New_York", + "xdm:createdTime": "2025-09-20T14:00:00Z", + "xdm:updatedTime": "2025-11-09T08:00:00Z", + "xdm:startTime": "2025-10-01T00:00:00Z" + }, + "xdm:adDetails": { + "xdm:adType": "responsive", + "xdm:adFormat": "responsive_display_ad", + "xdm:reviewStatus": "approved", + "xdm:deliveryStatus": "active", + "xdm:isPinDeleted": false, + "xdm:isRemovable": true, + "xdm:creativeDetails": { + "xdm:creativeID": "creative_rda_111222333", + "xdm:creativeName": "Responsive Display Ad - Tech Solutions", + "xdm:creativeType": "responsive_display", + "xdm:creativeFormat": "responsive_display_ad", + "xdm:creativeVersion": "v3.2", + "xdm:creativeTemplate": "responsive_display_standard", + "xdm:dynamicCreative": true, + "xdm:personalized": true, + "xdm:localized": true, + "xdm:locale": "en_US", + "xdm:brandID": "brand_acme_123", + "xdm:campaignTheme": "tech_solutions_2025" + }, + "xdm:adReviewDetails": { + "xdm:reviewStatus": "approved", + "xdm:reviewDate": "2025-09-21T10:00:00Z", + "xdm:reviewerID": "google_reviewer_123", + "xdm:reviewNotes": "Approved - complies with Google Ads policies", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:lastModifiedDate": "2025-09-20T16:00:00Z", + "xdm:autoApproved": false, + "xdm:requiresManualReview": true + }, + "xdm:deliveryDetails": { + "xdm:deliveryStatus": "active", + "xdm:effectiveStatus": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:pacing": "standard", + "xdm:deliveryEstimate": "good", + "xdm:learningPhase": "completed", + "xdm:lastDeliveryCheck": "2025-11-10T07:00:00Z", + "xdm:estimatedDailyReach": 95000, + "xdm:saturationLevel": "medium" + }, + "xdm:socialMediaProperties": { + "xdm:postID": "", + "xdm:pageID": "", + "xdm:instagramAccountID": "", + "xdm:allowComments": false, + "xdm:allowSharing": false, + "xdm:allowLikes": false, + "xdm:commentCount": 0, + "xdm:shareCount": 0, + "xdm:likeCount": 0, + "xdm:reactionCount": 0, + "xdm:saveCount": 0, + "xdm:hideCount": 0, + "xdm:reportCount": 0, + "xdm:organicImpressions": 0, + "xdm:organicReach": 0, + "xdm:viralImpressions": 0, + "xdm:viralReach": 0 + }, + "xdm:callToAction": { + "xdm:type": "learn_more", + "xdm:text": "Learn More", + "xdm:url": "https://www.acmecorp.com/solutions?utm_source=google&utm_medium=display&utm_campaign=tech_solutions", + "xdm:displayUrl": "acmecorp.com/solutions", + "xdm:deepLink": "", + "xdm:trackingTemplate": "{lpurl}?ad_id={creative}&placement={placement}", + "xdm:utmParameters": { + "xdm:source": "google", + "xdm:medium": "display", + "xdm:campaign": "tech_solutions", + "xdm:content": "responsive_display", + "xdm:term": "" + } + }, + "xdm:linkProperties": { + "xdm:destinationURL": "https://www.acmecorp.com/solutions", + "xdm:displayURL": "acmecorp.com", + "xdm:urlTags": "utm_source=google&utm_medium=display&utm_campaign=tech_solutions", + "xdm:trackingPixels": [], + "xdm:clickTrackers": [], + "xdm:conversionTracking": true, + "xdm:conversionPixelID": "" + }, + "xdm:appProperties": { + "xdm:appID": "", + "xdm:appName": "", + "xdm:appPlatform": "", + "xdm:appStoreURL": "", + "xdm:appDeepLink": "", + "xdm:appEventTracking": false, + "xdm:appEventName": "", + "xdm:sdkVersion": "" + }, + "xdm:leadGenProperties": { + "xdm:formID": "form_not_applicable", + "xdm:formType": "not_applicable", + "xdm:instantForm": false, + "xdm:privacyPolicyURL": "https://www.acmecorp.com/privacy", + "xdm:customDisclaimer": "" + }, + "xdm:interactionProperties": { + "xdm:allowInteraction": true, + "xdm:interactionType": "click", + "xdm:swipeUpEnabled": false, + "xdm:pollEnabled": false, + "xdm:quizEnabled": false, + "xdm:gamificationEnabled": false, + "xdm:arEnabled": false, + "xdm:threeDEnabled": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_ad_id", + "xdm:stringValue": "8888999900" + }, + { + "xdm:fieldName": "google_ad_group_id", + "xdm:stringValue": "5555666677" + }, + { + "xdm:fieldName": "google_campaign_id", + "xdm:stringValue": "9876543210" + }, + { + "xdm:fieldName": "google_ad_type", + "xdm:stringValue": "RESPONSIVE_DISPLAY_AD" + }, + { + "xdm:fieldName": "google_ad_status", + "xdm:stringValue": "ENABLED" + }, + { + "xdm:fieldName": "google_policy_summary_approval_status", + "xdm:stringValue": "APPROVED" + }, + { + "xdm:fieldName": "google_ad_strength", + "xdm:stringValue": "EXCELLENT" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-ad-lookup.schema.json b/schemas/paid-media/paid-media-ad-lookup.schema.json new file mode 100644 index 000000000..9758f1bef --- /dev/null +++ b/schemas/paid-media/paid-media-ad-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-ad-lookup", + "title": "Paid Media Ad Lookup", + "type": "object", + "description": "Schema for paid media ad lookup dataset containing individual ad metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/ad-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/ad-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-adgroup-lookup.example.1.json b/schemas/paid-media/paid-media-adgroup-lookup.example.1.json new file mode 100644 index 000000000..f1a859ee8 --- /dev/null +++ b/schemas/paid-media/paid-media-adgroup-lookup.example.1.json @@ -0,0 +1,237 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "adGroup", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:hierarchyPath": "act_123456789012345/23851234567890789/23851234567890456", + "xdm:metadata": { + "xdm:name": "Fall Launch - Video - 25-54 - Tech Enthusiasts", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2025-10-20T12:00:00Z", + "xdm:updatedTime": "2025-11-09T14:00:00Z", + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z", + "xdm:objective": "traffic", + "xdm:budgetType": "daily", + "xdm:dailyBudget": 500, + "xdm:lifetimeBudget": 0, + "xdm:biddingStrategy": "lowest_cost_without_cap", + "xdm:optimizationGoal": "link_clicks" + }, + "xdm:adGroupDetails": { + "xdm:adGroupType": "standard", + "xdm:childAdType": "video", + "xdm:budgetSettings": { + "xdm:budgetType": "daily", + "xdm:dailyBudget": 500, + "xdm:lifetimeBudget": 0, + "xdm:budgetRemaining": 350, + "xdm:budgetSpent": 150, + "xdm:budgetUtilization": 0.3, + "xdm:pacing": "standard", + "xdm:pacingType": "standard", + "xdm:budgetOptimization": false, + "xdm:sharedBudget": false, + "xdm:budgetResetTime": "00:00:00", + "xdm:budgetTimezone": "America/Los_Angeles" + }, + "xdm:targetingSettings": { + "xdm:geoTargeting": { + "xdm:countries": ["US"], + "xdm:regions": ["California", "New York", "Texas", "Florida"], + "xdm:cities": [ + "San Francisco", + "Los Angeles", + "New York", + "Austin", + "Miami" + ], + "xdm:postalCodes": [], + "xdm:dmas": ["807", "501", "803"], + "xdm:radius": 0, + "xdm:radiusUnit": "mile", + "xdm:locationType": "home" + }, + "xdm:demographicTargeting": { + "xdm:ageMin": 25, + "xdm:ageMax": 54, + "xdm:genders": ["male", "female"], + "xdm:languages": ["en"], + "xdm:education": ["college", "grad_school"], + "xdm:relationshipStatus": [], + "xdm:workEmployers": [], + "xdm:workPositions": ["manager", "director", "executive"] + }, + "xdm:interestTargeting": { + "xdm:interests": [ + "Technology", + "Business", + "Innovation", + "Entrepreneurship" + ], + "xdm:behaviors": [ + "Early technology adopters", + "Business decision makers" + ], + "xdm:lifeEvents": [] + }, + "xdm:audienceTargeting": { + "xdm:customAudiences": [ + "audience_website_visitors_30d", + "audience_app_users" + ], + "xdm:lookalikeSources": ["audience_purchasers_90d"], + "xdm:lookalikeSimilarity": 0.05, + "xdm:excludedAudiences": ["audience_existing_customers"], + "xdm:audienceExpansion": true, + "xdm:detailedTargeting": "expansion_all" + }, + "xdm:deviceTargeting": { + "xdm:devices": ["mobile", "desktop"], + "xdm:platforms": ["ios", "android", "windows", "mac"], + "xdm:osVersions": [], + "xdm:deviceModels": [], + "xdm:connectionTypes": ["wifi", "cellular"] + } + }, + "xdm:optimizationSettings": { + "xdm:optimizationGoal": "link_clicks", + "xdm:billingEvent": "impressions", + "xdm:bidStrategy": "lowest_cost_without_cap", + "xdm:bidAmount": 0, + "xdm:bidCap": 0, + "xdm:costCap": 0, + "xdm:roas": 0, + "xdm:optimizationEvent": "LINK_CLICK", + "xdm:conversionWindow": "7d_click_1d_view", + "xdm:attributionSetting": "7_day_click_1_day_view", + "xdm:deliveryType": "standard", + "xdm:campaignBudgetOptimization": false + }, + "xdm:placementSettings": { + "xdm:placementType": "automatic", + "xdm:placements": [ + "facebook_feed", + "instagram_feed", + "facebook_marketplace", + "facebook_video_feeds", + "facebook_right_column", + "instagram_explore", + "instagram_reels", + "messenger_inbox", + "audience_network_native", + "audience_network_banner", + "audience_network_interstitial", + "audience_network_rewarded_video" + ], + "xdm:excludedPlacements": [], + "xdm:publisherPlatforms": [ + "facebook", + "instagram", + "messenger", + "audience_network" + ], + "xdm:devicePlatforms": ["mobile", "desktop"], + "xdm:facebookPositions": [ + "feed", + "marketplace", + "video_feeds", + "right_column", + "instant_article", + "instream_video" + ], + "xdm:instagramPositions": ["stream", "story", "explore", "reels"], + "xdm:messengerPositions": ["messenger_home", "sponsored_messages"], + "xdm:audienceNetworkPositions": [ + "classic", + "instream_video", + "rewarded_video" + ] + }, + "xdm:deliverySettings": { + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z", + "xdm:scheduleType": "continuous", + "xdm:dayParting": false, + "xdm:dayPartingSchedule": [], + "xdm:frequencyCap": { + "xdm:enabled": true, + "xdm:impressions": 3, + "xdm:period": "day" + }, + "xdm:deliveryEstimate": "good", + "xdm:learningPhase": "learning", + "xdm:minimumRoas": 0 + }, + "xdm:trackingSettings": { + "xdm:pixelID": "pixel_123456789", + "xdm:conversionTracking": true, + "xdm:offlineConversionTracking": false, + "xdm:appEventTracking": true, + "xdm:urlParameters": "utm_source=facebook&utm_medium=paid&utm_campaign=fall2025&utm_content=video_adset", + "xdm:trackingSpecs": [ + { + "xdm:eventType": "LINK_CLICK", + "xdm:eventSource": "pixel", + "xdm:eventID": "pixel_123456789" + }, + { + "xdm:eventType": "PAGE_VIEW", + "xdm:eventSource": "pixel", + "xdm:eventID": "pixel_123456789" + } + ] + }, + "xdm:brandSafetySettings": { + "xdm:blockLists": ["block_list_sensitive_content"], + "xdm:inventoryFilter": "standard", + "xdm:contentCategories": ["news", "entertainment", "technology"], + "xdm:excludedCategories": ["mature_content", "political"], + "xdm:publisherBlockLists": [], + "xdm:appBlockLists": [] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_adset_id", + "xdm:stringValue": "23851234567890456" + }, + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_adset_name", + "xdm:stringValue": "Fall Launch - Video - 25-54 - Tech Enthusiasts" + }, + { + "xdm:fieldName": "meta_optimization_goal", + "xdm:stringValue": "LINK_CLICKS" + }, + { + "xdm:fieldName": "meta_billing_event", + "xdm:stringValue": "IMPRESSIONS" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + }, + { + "xdm:fieldName": "meta_destination_type", + "xdm:stringValue": "WEBSITE" + }, + { + "xdm:fieldName": "meta_promoted_object_type", + "xdm:stringValue": "PAGE" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-adgroup-lookup.example.2.json b/schemas/paid-media/paid-media-adgroup-lookup.example.2.json new file mode 100644 index 000000000..0f83defeb --- /dev/null +++ b/schemas/paid-media/paid-media-adgroup-lookup.example.2.json @@ -0,0 +1,213 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "adGroup", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:campaignID": "9876543210", + "xdm:campaignGUID": "google_ads_1234567890_9876543210", + "xdm:adGroupID": "5555666677", + "xdm:adGroupGUID": "google_ads_1234567890_5555666677", + "xdm:hierarchyPath": "1234567890/9876543210/5555666677", + "xdm:metadata": { + "xdm:name": "Tech Professionals - Responsive Display", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/New_York", + "xdm:createdTime": "2025-09-15T10:00:00Z", + "xdm:updatedTime": "2025-11-09T09:00:00Z", + "xdm:startTime": "2025-10-01T00:00:00Z", + "xdm:objective": "awareness", + "xdm:budgetType": "daily", + "xdm:dailyBudget": 0, + "xdm:lifetimeBudget": 0, + "xdm:biddingStrategy": "target_cpm", + "xdm:optimizationGoal": "impressions" + }, + "xdm:adGroupDetails": { + "xdm:adGroupType": "standard", + "xdm:childAdType": "responsive_display", + "xdm:budgetSettings": { + "xdm:budgetType": "campaign", + "xdm:dailyBudget": 0, + "xdm:lifetimeBudget": 0, + "xdm:budgetRemaining": 0, + "xdm:budgetSpent": 18500, + "xdm:budgetUtilization": 0, + "xdm:pacing": "standard", + "xdm:pacingType": "standard", + "xdm:budgetOptimization": false, + "xdm:sharedBudget": false, + "xdm:budgetResetTime": "00:00:00", + "xdm:budgetTimezone": "America/New_York" + }, + "xdm:targetingSettings": { + "xdm:geoTargeting": { + "xdm:countries": ["US"], + "xdm:regions": [ + "New York", + "California", + "Massachusetts", + "Washington" + ], + "xdm:cities": ["New York", "San Francisco", "Boston", "Seattle"], + "xdm:postalCodes": [], + "xdm:dmas": [], + "xdm:radius": 0, + "xdm:radiusUnit": "mile", + "xdm:locationType": "presence" + }, + "xdm:demographicTargeting": { + "xdm:ageMin": 25, + "xdm:ageMax": 65, + "xdm:genders": ["male", "female"], + "xdm:languages": ["en"], + "xdm:education": [], + "xdm:relationshipStatus": [], + "xdm:workEmployers": [], + "xdm:workPositions": [] + }, + "xdm:interestTargeting": { + "xdm:interests": [ + "Technology & Computing", + "Business & Industrial", + "Software" + ], + "xdm:behaviors": [], + "xdm:lifeEvents": [] + }, + "xdm:audienceTargeting": { + "xdm:customAudiences": [ + "remarketing_website_visitors", + "customer_match_list" + ], + "xdm:lookalikeSources": [], + "xdm:lookalikeSimilarity": 0, + "xdm:excludedAudiences": ["converters_last_30d"], + "xdm:audienceExpansion": true, + "xdm:detailedTargeting": "" + }, + "xdm:deviceTargeting": { + "xdm:devices": ["mobile", "desktop", "tablet"], + "xdm:platforms": [], + "xdm:osVersions": [], + "xdm:deviceModels": [], + "xdm:connectionTypes": [] + } + }, + "xdm:optimizationSettings": { + "xdm:optimizationGoal": "impressions", + "xdm:billingEvent": "impressions", + "xdm:bidStrategy": "target_cpm", + "xdm:bidAmount": 5.0, + "xdm:bidCap": 0, + "xdm:costCap": 0, + "xdm:roas": 0, + "xdm:optimizationEvent": "", + "xdm:conversionWindow": "", + "xdm:attributionSetting": "", + "xdm:deliveryType": "standard", + "xdm:campaignBudgetOptimization": false + }, + "xdm:placementSettings": { + "xdm:placementType": "automatic", + "xdm:placements": [ + "google_display_network", + "youtube", + "gmail", + "discover" + ], + "xdm:excludedPlacements": [], + "xdm:publisherPlatforms": [], + "xdm:devicePlatforms": ["mobile", "desktop", "tablet"], + "xdm:facebookPositions": [], + "xdm:instagramPositions": [], + "xdm:messengerPositions": [], + "xdm:audienceNetworkPositions": [] + }, + "xdm:deliverySettings": { + "xdm:startTime": "2025-10-01T00:00:00Z", + "xdm:scheduleType": "continuous", + "xdm:dayParting": true, + "xdm:dayPartingSchedule": [ + { + "xdm:dayOfWeek": "monday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "tuesday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "wednesday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "thursday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "friday", + "xdm:startHour": 9, + "xdm:endHour": 21 + } + ], + "xdm:frequencyCap": { + "xdm:enabled": true, + "xdm:impressions": 3, + "xdm:period": "day" + }, + "xdm:deliveryEstimate": "good", + "xdm:learningPhase": "completed", + "xdm:minimumRoas": 0 + }, + "xdm:trackingSettings": { + "xdm:pixelID": "", + "xdm:conversionTracking": true, + "xdm:offlineConversionTracking": false, + "xdm:appEventTracking": false, + "xdm:urlParameters": "utm_source=google&utm_medium=display&utm_campaign=brand_awareness&utm_content=tech_professionals", + "xdm:trackingSpecs": [] + }, + "xdm:brandSafetySettings": { + "xdm:blockLists": [], + "xdm:inventoryFilter": "expanded", + "xdm:contentCategories": [], + "xdm:excludedCategories": ["mature_content"], + "xdm:publisherBlockLists": [], + "xdm:appBlockLists": [] + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_ad_group_id", + "xdm:stringValue": "5555666677" + }, + { + "xdm:fieldName": "google_campaign_id", + "xdm:stringValue": "9876543210" + }, + { + "xdm:fieldName": "google_ad_group_name", + "xdm:stringValue": "Tech Professionals - Responsive Display" + }, + { + "xdm:fieldName": "google_ad_group_type", + "xdm:stringValue": "DISPLAY_STANDARD" + }, + { + "xdm:fieldName": "google_ad_group_status", + "xdm:stringValue": "ENABLED" + }, + { + "xdm:fieldName": "google_target_cpm_micros", + "xdm:stringValue": "5000000" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-adgroup-lookup.schema.json b/schemas/paid-media/paid-media-adgroup-lookup.schema.json new file mode 100644 index 000000000..f869ab43b --- /dev/null +++ b/schemas/paid-media/paid-media-adgroup-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-adgroup-lookup", + "title": "Paid Media Ad Group Lookup", + "type": "object", + "description": "Schema for paid media ad group/ad set/ad squad lookup dataset containing ad group metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/adgroup-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/adgroup-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-asset-lookup.example.1.json b/schemas/paid-media/paid-media-asset-lookup.example.1.json new file mode 100644 index 000000000..f5b901efb --- /dev/null +++ b/schemas/paid-media/paid-media-asset-lookup.example.1.json @@ -0,0 +1,190 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "asset", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:assetID": "987654321012345", + "xdm:assetGUID": "meta_act_123456789012345_asset_987654321012345", + "xdm:metadata": { + "xdm:name": "Fall Product Launch - 30 Second Video", + "xdm:status": "active", + "xdm:createdTime": "2025-10-25T14:00:00Z", + "xdm:updatedTime": "2025-11-05T10:00:00Z" + }, + "xdm:assetDetails": { + "xdm:assetType": "video", + "xdm:assetFormat": "mp4", + "xdm:assetSubType": "feed_video", + "xdm:assetCategory": "product_demo", + "xdm:assetSource": "uploaded", + "xdm:assetLibrary": "meta_creative_hub", + "xdm:assetOwner": "acme_corp", + "xdm:assetPermissions": "private", + "xdm:isStockAsset": false, + "xdm:stockProvider": "", + "xdm:stockAssetID": "", + "xdm:licenseType": "owned", + "xdm:rightsManagement": { + "xdm:copyrightOwner": "Acme Corporation", + "xdm:licenseExpiration": "", + "xdm:usageRights": "unlimited", + "xdm:geographicRestrictions": [], + "xdm:platformRestrictions": [], + "xdm:exclusivityPeriod": "" + }, + "xdm:fileProperties": { + "xdm:fileName": "fall_product_launch_30s_v2.mp4", + "xdm:fileSize": 45678912, + "xdm:fileSizeUnit": "bytes", + "xdm:fileHash": "sha256:abc123def456ghi789jkl012mno345pqr678stu901vwx234yz", + "xdm:mimeType": "video/mp4", + "xdm:encoding": "h264", + "xdm:bitrate": 5000, + "xdm:bitrateUnit": "kbps", + "xdm:colorSpace": "sRGB", + "xdm:colorDepth": 24, + "xdm:compressionType": "lossy" + }, + "xdm:urlProperties": { + "xdm:assetURL": "https://video.xx.fbcdn.net/v/t42.1790-2/987654321012345_video.mp4", + "xdm:thumbnailURL": "https://scontent.xx.fbcdn.net/v/t45.1600-4/987654321012345_thumb.jpg", + "xdm:previewURL": "https://business.facebook.com/creatives/preview/987654321012345", + "xdm:downloadURL": "https://business.facebook.com/creatives/download/987654321012345", + "xdm:cdnURL": "https://cdn.acmecorp.com/assets/fall_product_launch_30s_v2.mp4", + "xdm:streamingURL": "https://stream.acmecorp.com/assets/987654321012345/manifest.m3u8", + "xdm:embedCode": "" + }, + "xdm:videoProperties": { + "xdm:duration": 30.5, + "xdm:durationUnit": "seconds", + "xdm:width": 1920, + "xdm:height": 1080, + "xdm:aspectRatio": "16:9", + "xdm:orientation": "landscape", + "xdm:frameRate": 30, + "xdm:frameRateUnit": "fps", + "xdm:videoCodec": "h264", + "xdm:audioCodec": "aac", + "xdm:audioChannels": 2, + "xdm:audioSampleRate": 48000, + "xdm:audioBitrate": 192, + "xdm:hasAudio": true, + "xdm:hasSubtitles": true, + "xdm:subtitleLanguages": ["en", "es", "fr"], + "xdm:closedCaptions": true, + "xdm:captionFormat": "srt", + "xdm:videoQuality": "1080p", + "xdm:hdrEnabled": false, + "xdm:is360": false, + "xdm:isVertical": false, + "xdm:isSquare": false, + "xdm:autoplay": true, + "xdm:looping": false, + "xdm:soundOn": true + }, + "xdm:contentProperties": { + "xdm:title": "Introducing Our Revolutionary New Product", + "xdm:description": "Experience the future of technology with our latest innovation. Available now for a limited time.", + "xdm:headline": "Revolutionary Innovation", + "xdm:bodyText": "Transform your workflow with cutting-edge features designed for modern professionals.", + "xdm:callToAction": "Learn More", + "xdm:brandName": "Acme Corp", + "xdm:productName": "Acme Pro X", + "xdm:tagline": "Innovation Meets Excellence", + "xdm:keywords": [ + "technology", + "innovation", + "productivity", + "professional", + "software" + ], + "xdm:hashtags": [ + "#AcmeCorp", + "#Innovation", + "#TechSolutions", + "#ProductLaunch" + ], + "xdm:mentions": ["@AcmeCorp"], + "xdm:language": "en", + "xdm:locale": "en_US" + }, + "xdm:creativeElements": { + "xdm:primaryColor": "#0066CC", + "xdm:secondaryColor": "#FFFFFF", + "xdm:accentColor": "#FF6600", + "xdm:backgroundColor": "#F5F5F5", + "xdm:textColor": "#333333", + "xdm:fontFamily": "Helvetica Neue", + "xdm:logoIncluded": true, + "xdm:logoPosition": "top_left", + "xdm:brandingLevel": "prominent", + "xdm:visualStyle": "modern", + "xdm:mood": "professional", + "xdm:tone": "confident" + }, + "xdm:performanceMetadata": { + "xdm:assetScore": 8.5, + "xdm:qualityScore": 9.2, + "xdm:relevanceScore": 8.8, + "xdm:engagementScore": 8.3, + "xdm:creativeFatigue": 0.15, + "xdm:freshnessScore": 0.95, + "xdm:adStrength": "excellent", + "xdm:predictedPerformance": "high", + "xdm:benchmarkComparison": "above_average" + }, + "xdm:usageTracking": { + "xdm:timesUsed": 12, + "xdm:activeCampaigns": 3, + "xdm:activeAdGroups": 5, + "xdm:activeAds": 8, + "xdm:firstUsedDate": "2025-11-01T00:00:00Z", + "xdm:lastUsedDate": "2025-11-09T15:00:00Z", + "xdm:totalImpressions": 1250000, + "xdm:totalClicks": 45000, + "xdm:totalSpend": 12500 + }, + "xdm:reviewStatus": { + "xdm:status": "approved", + "xdm:reviewDate": "2025-10-26T10:00:00Z", + "xdm:reviewerID": "meta_reviewer_456", + "xdm:reviewNotes": "Approved - high quality video content", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:autoApproved": false, + "xdm:requiresManualReview": true + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_video_id", + "xdm:stringValue": "987654321012345" + }, + { + "xdm:fieldName": "meta_video_title", + "xdm:stringValue": "Fall Product Launch - 30 Second Video" + }, + { + "xdm:fieldName": "meta_upload_date", + "xdm:stringValue": "2025-10-25T14:00:00Z" + }, + { + "xdm:fieldName": "meta_video_status", + "xdm:stringValue": "ready" + }, + { + "xdm:fieldName": "meta_video_type", + "xdm:stringValue": "uploaded" + }, + { + "xdm:fieldName": "meta_thumbnail_source", + "xdm:stringValue": "auto_generated" + }, + { + "xdm:fieldName": "meta_video_insights_enabled", + "xdm:stringValue": "true" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-asset-lookup.example.2.json b/schemas/paid-media/paid-media-asset-lookup.example.2.json new file mode 100644 index 000000000..2c88d328b --- /dev/null +++ b/schemas/paid-media/paid-media-asset-lookup.example.2.json @@ -0,0 +1,169 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "asset", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:assetID": "456789123456789", + "xdm:assetGUID": "meta_act_123456789012345_asset_456789123456789", + "xdm:metadata": { + "xdm:name": "Holiday Sale - Hero Banner Image", + "xdm:status": "active", + "xdm:createdTime": "2025-10-28T09:00:00Z", + "xdm:updatedTime": "2025-11-01T08:00:00Z" + }, + "xdm:assetDetails": { + "xdm:assetType": "image", + "xdm:assetFormat": "jpg", + "xdm:assetSubType": "feed_image", + "xdm:assetCategory": "promotional", + "xdm:assetSource": "uploaded", + "xdm:assetLibrary": "meta_creative_hub", + "xdm:assetOwner": "acme_corp", + "xdm:assetPermissions": "private", + "xdm:isStockAsset": false, + "xdm:stockProvider": "", + "xdm:stockAssetID": "", + "xdm:licenseType": "owned", + "xdm:rightsManagement": { + "xdm:copyrightOwner": "Acme Corporation", + "xdm:licenseExpiration": "", + "xdm:usageRights": "unlimited", + "xdm:geographicRestrictions": [], + "xdm:platformRestrictions": [], + "xdm:exclusivityPeriod": "" + }, + "xdm:fileProperties": { + "xdm:fileName": "holiday_sale_hero_banner_1200x628.jpg", + "xdm:fileSize": 2456789, + "xdm:fileSizeUnit": "bytes", + "xdm:fileHash": "sha256:xyz789abc123def456ghi789jkl012mno345pqr678stu901vwx234", + "xdm:mimeType": "image/jpeg", + "xdm:encoding": "", + "xdm:bitrate": 0, + "xdm:bitrateUnit": "", + "xdm:colorSpace": "sRGB", + "xdm:colorDepth": 24, + "xdm:compressionType": "lossy" + }, + "xdm:urlProperties": { + "xdm:assetURL": "https://scontent.xx.fbcdn.net/v/t45.1600-4/456789123456789_image.jpg", + "xdm:thumbnailURL": "https://scontent.xx.fbcdn.net/v/t45.1600-4/456789123456789_thumb.jpg", + "xdm:previewURL": "https://business.facebook.com/creatives/preview/456789123456789", + "xdm:downloadURL": "https://business.facebook.com/creatives/download/456789123456789", + "xdm:cdnURL": "https://cdn.acmecorp.com/assets/holiday_sale_hero_banner.jpg", + "xdm:streamingURL": "", + "xdm:embedCode": "" + }, + "xdm:imageProperties": { + "xdm:width": 1200, + "xdm:height": 628, + "xdm:aspectRatio": "1.91:1", + "xdm:orientation": "landscape", + "xdm:resolution": 72, + "xdm:resolutionUnit": "dpi", + "xdm:format": "jpeg", + "xdm:transparency": false, + "xdm:animated": false, + "xdm:frameCount": 1, + "xdm:colorProfile": "sRGB IEC61966-2.1", + "xdm:hasAlphaChannel": false, + "xdm:imageQuality": "high", + "xdm:optimizedForWeb": true, + "xdm:progressive": true + }, + "xdm:contentProperties": { + "xdm:title": "Holiday Sale - Up to 50% Off", + "xdm:description": "Don't miss our biggest sale of the year! Save up to 50% on select products.", + "xdm:headline": "Holiday Sale", + "xdm:bodyText": "Up to 50% Off Select Items", + "xdm:callToAction": "Shop Now", + "xdm:brandName": "Acme Corp", + "xdm:productName": "", + "xdm:tagline": "Limited Time Offer", + "xdm:keywords": ["sale", "holiday", "discount", "shopping", "deals"], + "xdm:hashtags": [ + "#HolidaySale", + "#AcmeCorp", + "#ShopNow", + "#LimitedTime" + ], + "xdm:mentions": ["@AcmeCorp"], + "xdm:language": "en", + "xdm:locale": "en_US" + }, + "xdm:creativeElements": { + "xdm:primaryColor": "#CC0000", + "xdm:secondaryColor": "#FFFFFF", + "xdm:accentColor": "#FFD700", + "xdm:backgroundColor": "#F8F8F8", + "xdm:textColor": "#FFFFFF", + "xdm:fontFamily": "Arial", + "xdm:logoIncluded": true, + "xdm:logoPosition": "top_center", + "xdm:brandingLevel": "prominent", + "xdm:visualStyle": "bold", + "xdm:mood": "exciting", + "xdm:tone": "urgent" + }, + "xdm:performanceMetadata": { + "xdm:assetScore": 7.8, + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.2, + "xdm:engagementScore": 7.5, + "xdm:creativeFatigue": 0.25, + "xdm:freshnessScore": 0.9, + "xdm:adStrength": "good", + "xdm:predictedPerformance": "medium_high", + "xdm:benchmarkComparison": "average" + }, + "xdm:usageTracking": { + "xdm:timesUsed": 8, + "xdm:activeCampaigns": 2, + "xdm:activeAdGroups": 3, + "xdm:activeAds": 5, + "xdm:firstUsedDate": "2025-11-01T00:00:00Z", + "xdm:lastUsedDate": "2025-11-09T12:00:00Z", + "xdm:totalImpressions": 850000, + "xdm:totalClicks": 28000, + "xdm:totalSpend": 7500 + }, + "xdm:reviewStatus": { + "xdm:status": "approved", + "xdm:reviewDate": "2025-10-29T09:00:00Z", + "xdm:reviewerID": "meta_reviewer_789", + "xdm:reviewNotes": "Approved - meets all policy requirements", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:autoApproved": true, + "xdm:requiresManualReview": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_image_hash", + "xdm:stringValue": "abc123def456ghi789jkl012" + }, + { + "xdm:fieldName": "meta_image_name", + "xdm:stringValue": "Holiday Sale - Hero Banner Image" + }, + { + "xdm:fieldName": "meta_upload_date", + "xdm:stringValue": "2025-10-28T09:00:00Z" + }, + { + "xdm:fieldName": "meta_image_status", + "xdm:stringValue": "active" + }, + { + "xdm:fieldName": "meta_image_type", + "xdm:stringValue": "uploaded" + }, + { + "xdm:fieldName": "meta_image_category", + "xdm:stringValue": "promotional" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-asset-lookup.example.3.json b/schemas/paid-media/paid-media-asset-lookup.example.3.json new file mode 100644 index 000000000..943bfcefc --- /dev/null +++ b/schemas/paid-media/paid-media-asset-lookup.example.3.json @@ -0,0 +1,170 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "asset", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:assetID": "222333444555", + "xdm:assetGUID": "google_ads_1234567890_asset_222333444555", + "xdm:metadata": { + "xdm:name": "Tech Solutions - Product Image 1", + "xdm:status": "active", + "xdm:createdTime": "2025-09-18T11:00:00Z", + "xdm:updatedTime": "2025-10-05T14:00:00Z" + }, + "xdm:assetDetails": { + "xdm:assetType": "image", + "xdm:assetFormat": "png", + "xdm:assetSubType": "marketing_image", + "xdm:assetCategory": "product", + "xdm:assetSource": "uploaded", + "xdm:assetLibrary": "google_ads_asset_library", + "xdm:assetOwner": "acme_corp", + "xdm:assetPermissions": "private", + "xdm:isStockAsset": false, + "xdm:stockProvider": "", + "xdm:stockAssetID": "", + "xdm:licenseType": "owned", + "xdm:rightsManagement": { + "xdm:copyrightOwner": "Acme Corporation", + "xdm:licenseExpiration": "", + "xdm:usageRights": "unlimited", + "xdm:geographicRestrictions": [], + "xdm:platformRestrictions": [], + "xdm:exclusivityPeriod": "" + }, + "xdm:fileProperties": { + "xdm:fileName": "tech_solutions_product_1_1200x1200.png", + "xdm:fileSize": 3456789, + "xdm:fileSizeUnit": "bytes", + "xdm:fileHash": "sha256:pqr678stu901vwx234yz567abc123def456ghi789jkl012mno345", + "xdm:mimeType": "image/png", + "xdm:encoding": "", + "xdm:bitrate": 0, + "xdm:bitrateUnit": "", + "xdm:colorSpace": "sRGB", + "xdm:colorDepth": 32, + "xdm:compressionType": "lossless" + }, + "xdm:urlProperties": { + "xdm:assetURL": "https://googleads.g.doubleclick.net/pagead/imgad?id=222333444555", + "xdm:thumbnailURL": "https://googleads.g.doubleclick.net/pagead/imgad?id=222333444555&sz=150x150", + "xdm:previewURL": "https://ads.google.com/aw/assets/preview/222333444555", + "xdm:downloadURL": "https://ads.google.com/aw/assets/download/222333444555", + "xdm:cdnURL": "https://cdn.acmecorp.com/assets/tech_solutions_product_1.png", + "xdm:streamingURL": "", + "xdm:embedCode": "" + }, + "xdm:imageProperties": { + "xdm:width": 1200, + "xdm:height": 1200, + "xdm:aspectRatio": "1:1", + "xdm:orientation": "square", + "xdm:resolution": 300, + "xdm:resolutionUnit": "dpi", + "xdm:format": "png", + "xdm:transparency": true, + "xdm:animated": false, + "xdm:frameCount": 1, + "xdm:colorProfile": "sRGB IEC61966-2.1", + "xdm:hasAlphaChannel": true, + "xdm:imageQuality": "high", + "xdm:optimizedForWeb": true, + "xdm:progressive": false + }, + "xdm:contentProperties": { + "xdm:title": "Acme Pro X - Professional Software Solution", + "xdm:description": "Transform your business with our cutting-edge software platform designed for modern enterprises.", + "xdm:headline": "Professional Software Solution", + "xdm:bodyText": "Streamline operations and boost productivity", + "xdm:callToAction": "Learn More", + "xdm:brandName": "Acme Corp", + "xdm:productName": "Acme Pro X", + "xdm:tagline": "Built for Excellence", + "xdm:keywords": [ + "software", + "enterprise", + "productivity", + "business", + "technology" + ], + "xdm:hashtags": [], + "xdm:mentions": [], + "xdm:language": "en", + "xdm:locale": "en_US" + }, + "xdm:creativeElements": { + "xdm:primaryColor": "#0066CC", + "xdm:secondaryColor": "#FFFFFF", + "xdm:accentColor": "#00CC66", + "xdm:backgroundColor": "transparent", + "xdm:textColor": "#333333", + "xdm:fontFamily": "Roboto", + "xdm:logoIncluded": true, + "xdm:logoPosition": "center", + "xdm:brandingLevel": "moderate", + "xdm:visualStyle": "clean", + "xdm:mood": "professional", + "xdm:tone": "informative" + }, + "xdm:performanceMetadata": { + "xdm:assetScore": 8.2, + "xdm:qualityScore": 9.0, + "xdm:relevanceScore": 8.5, + "xdm:engagementScore": 7.8, + "xdm:creativeFatigue": 0.35, + "xdm:freshnessScore": 0.75, + "xdm:adStrength": "good", + "xdm:predictedPerformance": "medium_high", + "xdm:benchmarkComparison": "above_average" + }, + "xdm:usageTracking": { + "xdm:timesUsed": 15, + "xdm:activeCampaigns": 3, + "xdm:activeAdGroups": 4, + "xdm:activeAds": 6, + "xdm:firstUsedDate": "2025-10-01T00:00:00Z", + "xdm:lastUsedDate": "2025-11-09T10:00:00Z", + "xdm:totalImpressions": 1850000, + "xdm:totalClicks": 52000, + "xdm:totalSpend": 18500 + }, + "xdm:reviewStatus": { + "xdm:status": "approved", + "xdm:reviewDate": "2025-09-19T08:00:00Z", + "xdm:reviewerID": "google_reviewer_456", + "xdm:reviewNotes": "Approved - complies with Google Ads policies", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:autoApproved": false, + "xdm:requiresManualReview": true + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_asset_id", + "xdm:stringValue": "222333444555" + }, + { + "xdm:fieldName": "google_asset_name", + "xdm:stringValue": "Tech Solutions - Product Image 1" + }, + { + "xdm:fieldName": "google_asset_type", + "xdm:stringValue": "IMAGE" + }, + { + "xdm:fieldName": "google_upload_date", + "xdm:stringValue": "2025-09-18T11:00:00Z" + }, + { + "xdm:fieldName": "google_asset_status", + "xdm:stringValue": "ENABLED" + }, + { + "xdm:fieldName": "google_asset_performance_label", + "xdm:stringValue": "GOOD" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-asset-lookup.schema.json b/schemas/paid-media/paid-media-asset-lookup.schema.json new file mode 100644 index 000000000..a82362583 --- /dev/null +++ b/schemas/paid-media/paid-media-asset-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-asset-lookup", + "title": "Paid Media Asset Lookup", + "type": "object", + "description": "Schema for paid media asset lookup dataset containing creative asset metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/asset-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/asset-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-campaign-lookup.example.1.json b/schemas/paid-media/paid-media-campaign-lookup.example.1.json new file mode 100644 index 000000000..def899cf4 --- /dev/null +++ b/schemas/paid-media/paid-media-campaign-lookup.example.1.json @@ -0,0 +1,207 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "campaign", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:hierarchyPath": "act_123456789012345/23851234567890789", + "xdm:metadata": { + "xdm:name": "Fall 2025 Product Launch - Traffic Campaign", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/Los_Angeles", + "xdm:createdTime": "2025-10-15T10:00:00Z", + "xdm:updatedTime": "2025-11-09T15:30:00Z", + "xdm:startTime": "2025-11-01T00:00:00Z", + "xdm:endTime": "2025-11-30T23:59:59Z", + "xdm:objective": "traffic", + "xdm:budgetType": "daily", + "xdm:dailyBudget": 2000, + "xdm:lifetimeBudget": 0, + "xdm:biddingStrategy": "lowest_cost_without_cap", + "xdm:optimizationGoal": "link_clicks" + }, + "xdm:campaignDetails": { + "xdm:campaignType": "traffic", + "xdm:subType": "link_clicks", + "xdm:isAutomatedCampaign": false, + "xdm:promotedObject": { + "xdm:objectType": "page", + "xdm:objectID": "page_acmecorp_official", + "xdm:pageID": "123456789012345", + "xdm:pixelID": "pixel_123456789", + "xdm:customEventType": "LINK_CLICK", + "xdm:applicationID": "app_456789123", + "xdm:productCatalogID": "catalog_987654321", + "xdm:productSetID": "product_set_123456", + "xdm:offlineConversionDataSetID": "", + "xdm:destinationURL": "https://www.acmecorp.com/fall-launch" + }, + "xdm:budgetSettings": { + "xdm:budgetType": "daily", + "xdm:dailyBudget": 2000, + "xdm:lifetimeBudget": 0, + "xdm:totalBudget": 60000, + "xdm:budgetRemaining": 42500, + "xdm:budgetSpent": 17500, + "xdm:budgetUtilization": 0.292, + "xdm:pacing": "standard", + "xdm:pacingType": "standard", + "xdm:campaignBudgetOptimization": true, + "xdm:cboEnabled": true, + "xdm:budgetRebalancing": true, + "xdm:spendCap": 2500, + "xdm:bidCap": 0, + "xdm:costCap": 0 + }, + "xdm:targetingStrategy": { + "xdm:targetingExpansion": true, + "xdm:detailedTargetingExpansion": "expansion_all", + "xdm:advantagePlusAudience": false, + "xdm:advantagePlusCreative": false, + "xdm:advantagePlusCatalog": false, + "xdm:lookalikExpansion": true, + "xdm:automaticPlacements": true, + "xdm:dynamicCreative": false + }, + "xdm:schedulingSettings": { + "xdm:startDate": "2025-11-01T00:00:00Z", + "xdm:endDate": "2025-11-30T23:59:59Z", + "xdm:scheduleType": "continuous", + "xdm:runContinuously": false, + "xdm:dayParting": false, + "xdm:dayPartingSchedule": [], + "xdm:timezone": "America/Los_Angeles", + "xdm:flightDates": [ + { + "xdm:startDate": "2025-11-01T00:00:00Z", + "xdm:endDate": "2025-11-30T23:59:59Z" + } + ] + }, + "xdm:frequencyCapping": { + "xdm:enabled": true, + "xdm:impressionCap": 5, + "xdm:timePeriod": "week", + "xdm:timePeriodDays": 7, + "xdm:applyToAllAdSets": true, + "xdm:resetFrequency": "weekly" + }, + "xdm:conversionTracking": { + "xdm:pixelID": "pixel_123456789", + "xdm:conversionEvents": [ + "PageView", + "ViewContent", + "AddToCart", + "InitiateCheckout", + "Purchase" + ], + "xdm:customConversions": [ + { + "xdm:eventName": "ProductPageView", + "xdm:eventID": "custom_event_001", + "xdm:eventValue": 0 + }, + { + "xdm:eventName": "DemoRequest", + "xdm:eventID": "custom_event_002", + "xdm:eventValue": 50 + } + ], + "xdm:offlineConversions": false, + "xdm:serverSideTracking": true, + "xdm:conversionAPI": true, + "xdm:deduplication": true, + "xdm:attributionWindow": "7d_click_1d_view" + }, + "xdm:optimizationSettings": { + "xdm:objective": "OUTCOME_TRAFFIC", + "xdm:optimizationGoal": "LINK_CLICKS", + "xdm:billingEvent": "IMPRESSIONS", + "xdm:bidStrategy": "LOWEST_COST_WITHOUT_CAP", + "xdm:pacing": "standard", + "xdm:deliveryType": "standard", + "xdm:learningPhase": "learning", + "xdm:autoOptimization": true + }, + "xdm:ios14Settings": { + "xdm:campaignOptedIn": true, + "xdm:attOptimization": true, + "xdm:aggregatedEventMeasurement": true, + "xdm:prioritizedEvents": ["Purchase", "AddToCart", "ViewContent"], + "xdm:domainVerification": true, + "xdm:verifiedDomain": "acmecorp.com", + "xdm:skadnetworkEnabled": true, + "xdm:conversionValueSchema": "default" + }, + "xdm:brandSafety": { + "xdm:inventoryFilter": "standard", + "xdm:blockLists": ["block_list_sensitive_content"], + "xdm:contentCategories": [ + "news", + "entertainment", + "technology", + "business" + ], + "xdm:excludedCategories": ["mature_content", "political", "gambling"], + "xdm:publisherBlockLists": [], + "xdm:appBlockLists": [], + "xdm:brandSuitability": "standard" + }, + "xdm:creativeSettings": { + "xdm:dynamicCreative": false, + "xdm:multiAdvertiserAds": false, + "xdm:catalogAds": false, + "xdm:collectionAds": false, + "xdm:instantExperience": false, + "xdm:videoPolling": false, + "xdm:playableAds": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_campaign_id", + "xdm:stringValue": "23851234567890789" + }, + { + "xdm:fieldName": "meta_campaign_name", + "xdm:stringValue": "Fall 2025 Product Launch - Traffic Campaign" + }, + { + "xdm:fieldName": "meta_objective", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_buying_type", + "xdm:stringValue": "AUCTION" + }, + { + "xdm:fieldName": "meta_special_ad_categories", + "xdm:stringValue": "NONE" + }, + { + "xdm:fieldName": "meta_campaign_budget_optimization", + "xdm:stringValue": "true" + }, + { + "xdm:fieldName": "meta_bid_strategy", + "xdm:stringValue": "LOWEST_COST_WITHOUT_CAP" + }, + { + "xdm:fieldName": "meta_campaign_spending_limit", + "xdm:stringValue": "2500" + }, + { + "xdm:fieldName": "meta_campaign_status", + "xdm:stringValue": "ACTIVE" + }, + { + "xdm:fieldName": "meta_effective_status", + "xdm:stringValue": "ACTIVE" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-campaign-lookup.example.2.json b/schemas/paid-media/paid-media-campaign-lookup.example.2.json new file mode 100644 index 000000000..1334440cd --- /dev/null +++ b/schemas/paid-media/paid-media-campaign-lookup.example.2.json @@ -0,0 +1,200 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "campaign", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:campaignID": "9876543210", + "xdm:campaignGUID": "google_ads_1234567890_9876543210", + "xdm:hierarchyPath": "1234567890/9876543210", + "xdm:metadata": { + "xdm:name": "Brand Awareness - Display Network", + "xdm:status": "active", + "xdm:servingStatus": "CAMPAIGN_STATUS_ENABLED", + "xdm:currency": "USD", + "xdm:timezone": "America/New_York", + "xdm:createdTime": "2025-09-10T08:00:00Z", + "xdm:updatedTime": "2025-11-09T10:00:00Z", + "xdm:startTime": "2025-10-01T00:00:00Z", + "xdm:objective": "awareness", + "xdm:budgetType": "daily", + "xdm:dailyBudget": 1500, + "xdm:lifetimeBudget": 0, + "xdm:biddingStrategy": "target_cpm", + "xdm:optimizationGoal": "impressions" + }, + "xdm:campaignDetails": { + "xdm:campaignType": "display", + "xdm:subType": "display", + "xdm:isAutomatedCampaign": false, + "xdm:promotedObject": { + "xdm:objectType": "website", + "xdm:objectID": "", + "xdm:pageID": "", + "xdm:pixelID": "", + "xdm:customEventType": "", + "xdm:applicationID": "", + "xdm:productCatalogID": "", + "xdm:productSetID": "", + "xdm:offlineConversionDataSetID": "", + "xdm:destinationURL": "https://www.acmecorp.com" + }, + "xdm:budgetSettings": { + "xdm:budgetType": "daily", + "xdm:dailyBudget": 1500, + "xdm:lifetimeBudget": 0, + "xdm:totalBudget": 0, + "xdm:budgetRemaining": 0, + "xdm:budgetSpent": 52500, + "xdm:budgetUtilization": 0, + "xdm:pacing": "standard", + "xdm:pacingType": "standard", + "xdm:campaignBudgetOptimization": false, + "xdm:cboEnabled": false, + "xdm:budgetRebalancing": false, + "xdm:spendCap": 0, + "xdm:bidCap": 0, + "xdm:costCap": 0 + }, + "xdm:targetingStrategy": { + "xdm:targetingExpansion": true, + "xdm:detailedTargetingExpansion": "", + "xdm:advantagePlusAudience": false, + "xdm:advantagePlusCreative": false, + "xdm:advantagePlusCatalog": false, + "xdm:lookalikExpansion": false, + "xdm:automaticPlacements": true, + "xdm:dynamicCreative": false + }, + "xdm:schedulingSettings": { + "xdm:startDate": "2025-10-01T00:00:00Z", + "xdm:endDate": "", + "xdm:scheduleType": "continuous", + "xdm:runContinuously": true, + "xdm:dayParting": true, + "xdm:dayPartingSchedule": [ + { + "xdm:dayOfWeek": "monday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "tuesday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "wednesday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "thursday", + "xdm:startHour": 9, + "xdm:endHour": 21 + }, + { + "xdm:dayOfWeek": "friday", + "xdm:startHour": 9, + "xdm:endHour": 21 + } + ], + "xdm:timezone": "America/New_York", + "xdm:flightDates": [] + }, + "xdm:frequencyCapping": { + "xdm:enabled": true, + "xdm:impressionCap": 3, + "xdm:timePeriod": "day", + "xdm:timePeriodDays": 1, + "xdm:applyToAllAdSets": true, + "xdm:resetFrequency": "daily" + }, + "xdm:conversionTracking": { + "xdm:pixelID": "", + "xdm:conversionEvents": [], + "xdm:customConversions": [], + "xdm:offlineConversions": false, + "xdm:serverSideTracking": false, + "xdm:conversionAPI": false, + "xdm:deduplication": false, + "xdm:attributionWindow": "30d_click" + }, + "xdm:optimizationSettings": { + "xdm:objective": "BRAND_AWARENESS", + "xdm:optimizationGoal": "IMPRESSIONS", + "xdm:billingEvent": "IMPRESSIONS", + "xdm:bidStrategy": "TARGET_CPM", + "xdm:pacing": "standard", + "xdm:deliveryType": "standard", + "xdm:learningPhase": "completed", + "xdm:autoOptimization": true + }, + "xdm:ios14Settings": { + "xdm:campaignOptedIn": false, + "xdm:attOptimization": false, + "xdm:aggregatedEventMeasurement": false, + "xdm:prioritizedEvents": [], + "xdm:domainVerification": false, + "xdm:verifiedDomain": "", + "xdm:skadnetworkEnabled": false, + "xdm:conversionValueSchema": "" + }, + "xdm:brandSafety": { + "xdm:inventoryFilter": "expanded", + "xdm:blockLists": [], + "xdm:contentCategories": [ + "news", + "entertainment", + "technology", + "business", + "sports", + "lifestyle" + ], + "xdm:excludedCategories": ["mature_content", "gambling"], + "xdm:publisherBlockLists": [], + "xdm:appBlockLists": [], + "xdm:brandSuitability": "expanded" + }, + "xdm:creativeSettings": { + "xdm:dynamicCreative": false, + "xdm:multiAdvertiserAds": false, + "xdm:catalogAds": false, + "xdm:collectionAds": false, + "xdm:instantExperience": false, + "xdm:videoPolling": false, + "xdm:playableAds": false + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_campaign_id", + "xdm:stringValue": "9876543210" + }, + { + "xdm:fieldName": "google_campaign_name", + "xdm:stringValue": "Brand Awareness - Display Network" + }, + { + "xdm:fieldName": "google_campaign_type", + "xdm:stringValue": "DISPLAY" + }, + { + "xdm:fieldName": "google_advertising_channel_type", + "xdm:stringValue": "DISPLAY" + }, + { + "xdm:fieldName": "google_bidding_strategy_type", + "xdm:stringValue": "TARGET_CPM" + }, + { + "xdm:fieldName": "google_campaign_status", + "xdm:stringValue": "ENABLED" + }, + { + "xdm:fieldName": "google_serving_status", + "xdm:stringValue": "SERVING" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-campaign-lookup.schema.json b/schemas/paid-media/paid-media-campaign-lookup.schema.json new file mode 100644 index 000000000..c7c5599d0 --- /dev/null +++ b/schemas/paid-media/paid-media-campaign-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-campaign-lookup", + "title": "Paid Media Campaign Lookup", + "type": "object", + "description": "Schema for paid media campaign lookup dataset containing campaign metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/campaign-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/campaign-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-experience-lookup.example.1.json b/schemas/paid-media/paid-media-experience-lookup.example.1.json new file mode 100644 index 000000000..072dc5228 --- /dev/null +++ b/schemas/paid-media/paid-media-experience-lookup.example.1.json @@ -0,0 +1,177 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "experience", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:experienceID": "creative_vid_987654321", + "xdm:experienceGUID": "meta_act_123456789012345_creative_vid_987654321", + "xdm:metadata": { + "xdm:name": "Fall Product Launch - 30s Video Creative", + "xdm:status": "active", + "xdm:createdTime": "2025-10-28T15:00:00Z", + "xdm:updatedTime": "2025-11-05T11:00:00Z" + }, + "xdm:experienceDetails": { + "xdm:experienceType": "single_video", + "xdm:experienceFormat": "single_video", + "xdm:experienceTemplate": "video_standard", + "xdm:experienceVersion": "v2.1", + "xdm:isDynamic": false, + "xdm:isPersonalized": true, + "xdm:isLocalized": true, + "xdm:locale": "en_US", + "xdm:primaryAssetID": "987654321012345", + "xdm:primaryAssetGUID": "meta_act_123456789012345_asset_987654321012345", + "xdm:primaryAssetType": "video", + "xdm:assetIDs": ["987654321012345"], + "xdm:assetGUIDs": ["meta_act_123456789012345_asset_987654321012345"], + "xdm:assetCount": 1, + "xdm:assetTypes": ["video"], + "xdm:contentDetails": { + "xdm:primaryText": "Introducing our revolutionary new product that will transform the way you work. Experience innovation like never before.", + "xdm:headline": "Revolutionary Innovation", + "xdm:description": "Transform your workflow with cutting-edge features designed for modern professionals. Available now for a limited time.", + "xdm:callToActionType": "learn_more", + "xdm:callToActionText": "Learn More", + "xdm:destinationURL": "https://www.acmecorp.com/fall-launch?utm_source=facebook&utm_medium=video&utm_campaign=fall2025", + "xdm:displayURL": "acmecorp.com/fall-launch", + "xdm:linkDescription": "Discover the future of productivity", + "xdm:brandName": "Acme Corp", + "xdm:productName": "Acme Pro X", + "xdm:tagline": "Innovation Meets Excellence", + "xdm:additionalText": "Limited time offer - Learn more today" + }, + "xdm:visualElements": { + "xdm:primaryColor": "#0066CC", + "xdm:secondaryColor": "#FFFFFF", + "xdm:accentColor": "#FF6600", + "xdm:backgroundColor": "#F5F5F5", + "xdm:textColor": "#333333", + "xdm:fontFamily": "Helvetica Neue", + "xdm:logoIncluded": true, + "xdm:logoPosition": "top_left", + "xdm:brandingLevel": "prominent", + "xdm:visualStyle": "modern", + "xdm:mood": "professional", + "xdm:tone": "confident", + "xdm:overlayText": true, + "xdm:overlayPosition": "bottom_third", + "xdm:animationStyle": "smooth", + "xdm:transitionType": "fade" + }, + "xdm:targetingContext": { + "xdm:campaignTheme": "fall_2025_launch", + "xdm:audienceSegment": "tech_enthusiasts", + "xdm:ageRange": "25-54", + "xdm:genderTarget": "all", + "xdm:geographicFocus": "US_major_metros", + "xdm:deviceOptimization": "mobile_first", + "xdm:placementOptimization": "feed_optimized", + "xdm:seasonality": "fall", + "xdm:productCategory": "technology", + "xdm:customerJourneyStage": "awareness" + }, + "xdm:performanceAttributes": { + "xdm:creativeConcept": "product_demo", + "xdm:messageStrategy": "problem_solution", + "xdm:emotionalAppeal": "aspiration", + "xdm:valueProposition": "innovation", + "xdm:urgency": "limited_time", + "xdm:socialProof": false, + "xdm:testimonials": false, + "xdm:demonstration": true, + "xdm:comparison": false, + "xdm:educationalContent": true + }, + "xdm:technicalSpecs": { + "xdm:aspectRatios": ["16:9"], + "xdm:dimensions": ["1920x1080"], + "xdm:fileSizes": [45678912], + "xdm:durations": [30.5], + "xdm:formats": ["mp4"], + "xdm:codecs": ["h264"], + "xdm:bitrates": [5000], + "xdm:frameRates": [30], + "xdm:hasAudio": true, + "xdm:hasSubtitles": true, + "xdm:subtitleLanguages": ["en", "es", "fr"], + "xdm:closedCaptions": true, + "xdm:hdrEnabled": false, + "xdm:is360": false + }, + "xdm:usageMetrics": { + "xdm:timesUsed": 12, + "xdm:activeCampaigns": 3, + "xdm:activeAdGroups": 5, + "xdm:activeAds": 8, + "xdm:firstUsedDate": "2025-11-01T00:00:00Z", + "xdm:lastUsedDate": "2025-11-09T15:00:00Z", + "xdm:totalImpressions": 1250000, + "xdm:totalClicks": 45000, + "xdm:totalConversions": 2250, + "xdm:totalSpend": 12500, + "xdm:averageCTR": 0.036, + "xdm:averageCPC": 0.278, + "xdm:averageCPA": 5.56, + "xdm:averageROAS": 4.5 + }, + "xdm:qualityMetrics": { + "xdm:creativeScore": 8.5, + "xdm:qualityScore": 9.2, + "xdm:relevanceScore": 8.8, + "xdm:engagementScore": 8.3, + "xdm:adStrength": "excellent", + "xdm:creativeFatigue": 0.15, + "xdm:freshnessScore": 0.95, + "xdm:predictedPerformance": "high", + "xdm:benchmarkComparison": "above_average", + "xdm:policyCompliance": "compliant" + }, + "xdm:reviewStatus": { + "xdm:status": "approved", + "xdm:reviewDate": "2025-10-29T10:00:00Z", + "xdm:reviewerID": "meta_reviewer_456", + "xdm:reviewNotes": "Approved - high quality video creative", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:autoApproved": false, + "xdm:requiresManualReview": true + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "meta_creative_id", + "xdm:stringValue": "creative_vid_987654321" + }, + { + "xdm:fieldName": "meta_creative_name", + "xdm:stringValue": "Fall Product Launch - 30s Video Creative" + }, + { + "xdm:fieldName": "meta_creative_type", + "xdm:stringValue": "video" + }, + { + "xdm:fieldName": "meta_video_id", + "xdm:stringValue": "987654321012345" + }, + { + "xdm:fieldName": "meta_creative_status", + "xdm:stringValue": "active" + }, + { + "xdm:fieldName": "meta_objective_type", + "xdm:stringValue": "OUTCOME_TRAFFIC" + }, + { + "xdm:fieldName": "meta_placement_optimization", + "xdm:stringValue": "automatic" + }, + { + "xdm:fieldName": "meta_dynamic_creative", + "xdm:stringValue": "false" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-experience-lookup.example.2.json b/schemas/paid-media/paid-media-experience-lookup.example.2.json new file mode 100644 index 000000000..7985df676 --- /dev/null +++ b/schemas/paid-media/paid-media-experience-lookup.example.2.json @@ -0,0 +1,181 @@ +{ + "xdm:paidMedia": { + "xdm:adNetwork": "google_ads", + "xdm:entityType": "experience", + "xdm:accountID": "1234567890", + "xdm:accountGUID": "google_ads_1234567890", + "xdm:experienceID": "creative_rda_111222333", + "xdm:experienceGUID": "google_ads_1234567890_creative_rda_111222333", + "xdm:metadata": { + "xdm:name": "Responsive Display Ad - Tech Solutions Multi-Asset", + "xdm:status": "active", + "xdm:createdTime": "2025-09-20T13:00:00Z", + "xdm:updatedTime": "2025-11-05T09:00:00Z" + }, + "xdm:experienceDetails": { + "xdm:experienceType": "single_image", + "xdm:experienceFormat": "responsive_display_ad", + "xdm:experienceTemplate": "responsive_display_standard", + "xdm:experienceVersion": "v3.2", + "xdm:isDynamic": true, + "xdm:isPersonalized": true, + "xdm:isLocalized": true, + "xdm:locale": "en_US", + "xdm:primaryAssetID": "222333444555", + "xdm:primaryAssetGUID": "google_ads_1234567890_asset_222333444555", + "xdm:primaryAssetType": "image", + "xdm:assetIDs": ["222333444555", "333444555666", "444555666777"], + "xdm:assetGUIDs": [ + "google_ads_1234567890_asset_222333444555", + "google_ads_1234567890_asset_333444555666", + "google_ads_1234567890_asset_444555666777" + ], + "xdm:assetCount": 3, + "xdm:assetTypes": ["image", "image", "image"], + "xdm:contentDetails": { + "xdm:primaryText": "Transform your business with our cutting-edge software platform designed for modern enterprises. Streamline operations and boost productivity.", + "xdm:headline": "Professional Software Solution", + "xdm:description": "Discover how Acme Pro X can revolutionize your workflow with powerful features, seamless integration, and enterprise-grade security.", + "xdm:callToActionType": "learn_more", + "xdm:callToActionText": "Learn More", + "xdm:destinationURL": "https://www.acmecorp.com/solutions?utm_source=google&utm_medium=display&utm_campaign=tech_solutions", + "xdm:displayURL": "acmecorp.com/solutions", + "xdm:linkDescription": "Explore our enterprise solutions", + "xdm:brandName": "Acme Corp", + "xdm:productName": "Acme Pro X", + "xdm:tagline": "Built for Excellence", + "xdm:additionalText": "Trusted by leading enterprises worldwide" + }, + "xdm:visualElements": { + "xdm:primaryColor": "#0066CC", + "xdm:secondaryColor": "#FFFFFF", + "xdm:accentColor": "#00CC66", + "xdm:backgroundColor": "#F8F8F8", + "xdm:textColor": "#333333", + "xdm:fontFamily": "Roboto", + "xdm:logoIncluded": true, + "xdm:logoPosition": "top_left", + "xdm:brandingLevel": "moderate", + "xdm:visualStyle": "clean", + "xdm:mood": "professional", + "xdm:tone": "informative", + "xdm:overlayText": false, + "xdm:overlayPosition": "", + "xdm:animationStyle": "none", + "xdm:transitionType": "none" + }, + "xdm:targetingContext": { + "xdm:campaignTheme": "tech_solutions_2025", + "xdm:audienceSegment": "tech_professionals", + "xdm:ageRange": "25-65", + "xdm:genderTarget": "all", + "xdm:geographicFocus": "US_tech_hubs", + "xdm:deviceOptimization": "multi_device", + "xdm:placementOptimization": "display_network", + "xdm:seasonality": "evergreen", + "xdm:productCategory": "enterprise_software", + "xdm:customerJourneyStage": "consideration" + }, + "xdm:performanceAttributes": { + "xdm:creativeConcept": "product_showcase", + "xdm:messageStrategy": "value_proposition", + "xdm:emotionalAppeal": "trust", + "xdm:valueProposition": "efficiency", + "xdm:urgency": "none", + "xdm:socialProof": true, + "xdm:testimonials": false, + "xdm:demonstration": false, + "xdm:comparison": false, + "xdm:educationalContent": true + }, + "xdm:technicalSpecs": { + "xdm:aspectRatios": ["1:1", "1.91:1", "4:5"], + "xdm:dimensions": ["1200x1200", "1200x628", "1080x1350"], + "xdm:fileSizes": [3456789, 2987654, 3123456], + "xdm:durations": [], + "xdm:formats": ["png", "png", "png"], + "xdm:codecs": [], + "xdm:bitrates": [], + "xdm:frameRates": [], + "xdm:hasAudio": false, + "xdm:hasSubtitles": false, + "xdm:subtitleLanguages": [], + "xdm:closedCaptions": false, + "xdm:hdrEnabled": false, + "xdm:is360": false + }, + "xdm:usageMetrics": { + "xdm:timesUsed": 15, + "xdm:activeCampaigns": 3, + "xdm:activeAdGroups": 4, + "xdm:activeAds": 6, + "xdm:firstUsedDate": "2025-10-01T00:00:00Z", + "xdm:lastUsedDate": "2025-11-09T10:00:00Z", + "xdm:totalImpressions": 1850000, + "xdm:totalClicks": 52000, + "xdm:totalConversions": 1850, + "xdm:totalSpend": 18500, + "xdm:averageCTR": 0.028, + "xdm:averageCPC": 0.356, + "xdm:averageCPA": 10.0, + "xdm:averageROAS": 3.8 + }, + "xdm:qualityMetrics": { + "xdm:creativeScore": 8.2, + "xdm:qualityScore": 9.0, + "xdm:relevanceScore": 8.5, + "xdm:engagementScore": 7.8, + "xdm:adStrength": "excellent", + "xdm:creativeFatigue": 0.35, + "xdm:freshnessScore": 0.75, + "xdm:predictedPerformance": "medium_high", + "xdm:benchmarkComparison": "above_average", + "xdm:policyCompliance": "compliant" + }, + "xdm:reviewStatus": { + "xdm:status": "approved", + "xdm:reviewDate": "2025-09-21T09:00:00Z", + "xdm:reviewerID": "google_reviewer_123", + "xdm:reviewNotes": "Approved - complies with Google Ads policies", + "xdm:policyViolations": [], + "xdm:appealStatus": "not_applicable", + "xdm:autoApproved": false, + "xdm:requiresManualReview": true + }, + "xdm:additionalDetails": [ + { + "xdm:fieldName": "google_creative_id", + "xdm:stringValue": "creative_rda_111222333" + }, + { + "xdm:fieldName": "google_creative_name", + "xdm:stringValue": "Responsive Display Ad - Tech Solutions Multi-Asset" + }, + { + "xdm:fieldName": "google_creative_type", + "xdm:stringValue": "RESPONSIVE_DISPLAY_AD" + }, + { + "xdm:fieldName": "google_creative_status", + "xdm:stringValue": "ENABLED" + }, + { + "xdm:fieldName": "google_ad_strength", + "xdm:stringValue": "EXCELLENT" + }, + { + "xdm:fieldName": "google_policy_summary_approval_status", + "xdm:stringValue": "APPROVED" + }, + { + "xdm:fieldName": "google_asset_count", + "xdm:stringValue": "3" + }, + { + "xdm:fieldName": "google_dynamic_creative", + "xdm:stringValue": "true" + } + ] + } + } +} diff --git a/schemas/paid-media/paid-media-experience-lookup.schema.json b/schemas/paid-media/paid-media-experience-lookup.schema.json new file mode 100644 index 000000000..dcddad341 --- /dev/null +++ b/schemas/paid-media/paid-media-experience-lookup.schema.json @@ -0,0 +1,37 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-experience-lookup", + "title": "Paid Media Experience Lookup", + "type": "object", + "description": "Schema for paid media experience lookup dataset containing creative experience metadata across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/data/record", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/data/record", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata", + "https://ns.adobe.com/xdm/mixins/paid-media/experience-details" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/data/record" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metadata" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/experience-details" + } + ], + "meta:status": "experimental" +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.1.json b/schemas/paid-media/paid-media-summary-metrics.example.1.json new file mode 100644 index 000000000..4584d5999 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.1.json @@ -0,0 +1,200 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "account", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 125000, + "xdm:clicks": 4500, + "xdm:reach": 95000, + "xdm:frequency": 1.32, + "xdm:spend": 3250.0, + "xdm:conversions": 225, + "xdm:conversionValue": 11250.0, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.44, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 87500, + "xdm:clicks": 3375, + "xdm:spend": 2275.0, + "xdm:conversions": 169 + }, + "xdm:desktop": { + "xdm:impressions": 31250, + "xdm:clicks": 938, + "xdm:spend": 812.5, + "xdm:conversions": 47 + }, + "xdm:tablet": { + "xdm:impressions": 6250, + "xdm:clicks": 187, + "xdm:spend": 162.5, + "xdm:conversions": 9 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 75000, + "xdm:clicks": 2700, + "xdm:spend": 1950.0, + "xdm:conversions": 135 + }, + "xdm:instagram": { + "xdm:impressions": 37500, + "xdm:clicks": 1350, + "xdm:spend": 975.0, + "xdm:conversions": 68 + }, + "xdm:messenger": { + "xdm:impressions": 7500, + "xdm:clicks": 270, + "xdm:spend": 195.0, + "xdm:conversions": 14 + }, + "xdm:audience_network": { + "xdm:impressions": 5000, + "xdm:clicks": 180, + "xdm:spend": 130.0, + "xdm:conversions": 8 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 62500, + "xdm:clicks": 2250, + "xdm:spend": 1625.0, + "xdm:conversions": 113 + }, + "xdm:stories": { + "xdm:impressions": 31250, + "xdm:clicks": 1125, + "xdm:spend": 812.5, + "xdm:conversions": 56 + }, + "xdm:reels": { + "xdm:impressions": 18750, + "xdm:clicks": 675, + "xdm:spend": 487.5, + "xdm:conversions": 34 + }, + "xdm:other": { + "xdm:impressions": 12500, + "xdm:clicks": 450, + "xdm:spend": 325.0, + "xdm:conversions": 22 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 18750, + "xdm:clicks": 675, + "xdm:spend": 487.5, + "xdm:conversions": 34 + }, + "xdm:age_25_34": { + "xdm:impressions": 43750, + "xdm:clicks": 1575, + "xdm:spend": 1137.5, + "xdm:conversions": 79 + }, + "xdm:age_35_44": { + "xdm:impressions": 37500, + "xdm:clicks": 1350, + "xdm:spend": 975.0, + "xdm:conversions": 68 + }, + "xdm:age_45_54": { + "xdm:impressions": 18750, + "xdm:clicks": 675, + "xdm:spend": 487.5, + "xdm:conversions": 34 + }, + "xdm:age_55_64": { + "xdm:impressions": 6250, + "xdm:clicks": 225, + "xdm:spend": 162.5, + "xdm:conversions": 10 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 68750, + "xdm:clicks": 2475, + "xdm:spend": 1787.5, + "xdm:conversions": 124 + }, + "xdm:female": { + "xdm:impressions": 56250, + "xdm:clicks": 2025, + "xdm:spend": 1462.5, + "xdm:conversions": 101 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 3375, + "xdm:comments": 675, + "xdm:shares": 1125, + "xdm:saves": 1575, + "xdm:linkClicks": 4500, + "xdm:outboundClicks": 4275, + "xdm:uniqueClicks": 4050 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 45, + "xdm:postClickConversions": 180, + "xdm:conversionRate": 0.05, + "xdm:costPerAction": 14.44, + "xdm:actionValue": 11250.0, + "xdm:conversionsByType": { + "xdm:purchases": 180, + "xdm:addToCart": 450, + "xdm:initiateCheckout": 270, + "xdm:leads": 45, + "xdm:downloads": 135 + }, + "xdm:leads": 45, + "xdm:costPerLead": 72.22 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.44, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 5000.0, + "xdm:budgetSpent": 3250.0, + "xdm:budgetRemaining": 1750.0, + "xdm:budgetUtilization": 0.65, + "xdm:dailyBudget": 5000.0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.8, + "xdm:engagementRateRanking": "above_average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "above_average", + "xdm:adRelevanceDiagnostics": "above_average", + "xdm:engagementRateDiagnostics": "above_average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.2.json b/schemas/paid-media/paid-media-summary-metrics.example.2.json new file mode 100644 index 000000000..d58457c16 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.2.json @@ -0,0 +1,202 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "campaign", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 85000, + "xdm:clicks": 3060, + "xdm:reach": 64500, + "xdm:frequency": 1.32, + "xdm:spend": 2210.0, + "xdm:conversions": 153, + "xdm:conversionValue": 7650.0, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.44, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 59500, + "xdm:clicks": 2295, + "xdm:spend": 1547.0, + "xdm:conversions": 115 + }, + "xdm:desktop": { + "xdm:impressions": 21250, + "xdm:clicks": 638, + "xdm:spend": 552.5, + "xdm:conversions": 32 + }, + "xdm:tablet": { + "xdm:impressions": 4250, + "xdm:clicks": 127, + "xdm:spend": 110.5, + "xdm:conversions": 6 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 51000, + "xdm:clicks": 1836, + "xdm:spend": 1326.0, + "xdm:conversions": 92 + }, + "xdm:instagram": { + "xdm:impressions": 25500, + "xdm:clicks": 918, + "xdm:spend": 663.0, + "xdm:conversions": 46 + }, + "xdm:messenger": { + "xdm:impressions": 5100, + "xdm:clicks": 184, + "xdm:spend": 132.6, + "xdm:conversions": 9 + }, + "xdm:audience_network": { + "xdm:impressions": 3400, + "xdm:clicks": 122, + "xdm:spend": 88.4, + "xdm:conversions": 6 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 42500, + "xdm:clicks": 1530, + "xdm:spend": 1105.0, + "xdm:conversions": 77 + }, + "xdm:stories": { + "xdm:impressions": 21250, + "xdm:clicks": 765, + "xdm:spend": 552.5, + "xdm:conversions": 38 + }, + "xdm:reels": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:other": { + "xdm:impressions": 8500, + "xdm:clicks": 306, + "xdm:spend": 221.0, + "xdm:conversions": 15 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:age_25_34": { + "xdm:impressions": 29750, + "xdm:clicks": 1071, + "xdm:spend": 773.5, + "xdm:conversions": 54 + }, + "xdm:age_35_44": { + "xdm:impressions": 25500, + "xdm:clicks": 918, + "xdm:spend": 663.0, + "xdm:conversions": 46 + }, + "xdm:age_45_54": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:age_55_64": { + "xdm:impressions": 4250, + "xdm:clicks": 153, + "xdm:spend": 110.5, + "xdm:conversions": 7 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 46750, + "xdm:clicks": 1683, + "xdm:spend": 1215.5, + "xdm:conversions": 84 + }, + "xdm:female": { + "xdm:impressions": 38250, + "xdm:clicks": 1377, + "xdm:spend": 994.5, + "xdm:conversions": 69 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 2295, + "xdm:comments": 459, + "xdm:shares": 765, + "xdm:saves": 1071, + "xdm:linkClicks": 3060, + "xdm:outboundClicks": 2907, + "xdm:uniqueClicks": 2754 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 31, + "xdm:postClickConversions": 122, + "xdm:conversionRate": 0.05, + "xdm:costPerAction": 14.44, + "xdm:actionValue": 7650.0, + "xdm:conversionsByType": { + "xdm:purchases": 122, + "xdm:addToCart": 306, + "xdm:initiateCheckout": 184, + "xdm:leads": 31, + "xdm:downloads": 92 + }, + "xdm:leads": 31, + "xdm:costPerLead": 71.29 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.44, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 5000.0, + "xdm:budgetSpent": 2210.0, + "xdm:budgetRemaining": 2790.0, + "xdm:budgetUtilization": 0.442, + "xdm:dailyBudget": 5000.0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.8, + "xdm:engagementRateRanking": "above_average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "above_average", + "xdm:adRelevanceDiagnostics": "above_average", + "xdm:engagementRateDiagnostics": "above_average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.3.json b/schemas/paid-media/paid-media-summary-metrics.example.3.json new file mode 100644 index 000000000..e2aacb058 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.3.json @@ -0,0 +1,204 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "adGroup", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 42500, + "xdm:clicks": 1530, + "xdm:reach": 32250, + "xdm:frequency": 1.32, + "xdm:spend": 1105.0, + "xdm:conversions": 77, + "xdm:conversionValue": 3825.0, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.35, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 29750, + "xdm:clicks": 1148, + "xdm:spend": 773.5, + "xdm:conversions": 58 + }, + "xdm:desktop": { + "xdm:impressions": 10625, + "xdm:clicks": 319, + "xdm:spend": 276.25, + "xdm:conversions": 16 + }, + "xdm:tablet": { + "xdm:impressions": 2125, + "xdm:clicks": 63, + "xdm:spend": 55.25, + "xdm:conversions": 3 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 25500, + "xdm:clicks": 918, + "xdm:spend": 663.0, + "xdm:conversions": 46 + }, + "xdm:instagram": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:messenger": { + "xdm:impressions": 2550, + "xdm:clicks": 92, + "xdm:spend": 66.3, + "xdm:conversions": 5 + }, + "xdm:audience_network": { + "xdm:impressions": 1700, + "xdm:clicks": 61, + "xdm:spend": 44.2, + "xdm:conversions": 3 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 21250, + "xdm:clicks": 765, + "xdm:spend": 552.5, + "xdm:conversions": 38 + }, + "xdm:stories": { + "xdm:impressions": 10625, + "xdm:clicks": 383, + "xdm:spend": 276.25, + "xdm:conversions": 19 + }, + "xdm:reels": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:other": { + "xdm:impressions": 4250, + "xdm:clicks": 152, + "xdm:spend": 110.5, + "xdm:conversions": 8 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:age_25_34": { + "xdm:impressions": 14875, + "xdm:clicks": 536, + "xdm:spend": 386.75, + "xdm:conversions": 27 + }, + "xdm:age_35_44": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:age_45_54": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:age_55_64": { + "xdm:impressions": 2125, + "xdm:clicks": 75, + "xdm:spend": 55.25, + "xdm:conversions": 3 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 23375, + "xdm:clicks": 842, + "xdm:spend": 607.75, + "xdm:conversions": 42 + }, + "xdm:female": { + "xdm:impressions": 19125, + "xdm:clicks": 688, + "xdm:spend": 497.25, + "xdm:conversions": 35 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 1148, + "xdm:comments": 230, + "xdm:shares": 383, + "xdm:saves": 534, + "xdm:linkClicks": 1530, + "xdm:outboundClicks": 1454, + "xdm:uniqueClicks": 1377 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 15, + "xdm:postClickConversions": 62, + "xdm:conversionRate": 0.056, + "xdm:costPerAction": 14.35, + "xdm:actionValue": 3825.0, + "xdm:conversionsByType": { + "xdm:purchases": 62, + "xdm:addToCart": 153, + "xdm:initiateCheckout": 92, + "xdm:leads": 15, + "xdm:downloads": 46 + }, + "xdm:leads": 15, + "xdm:costPerLead": 73.67 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.35, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 5000.0, + "xdm:budgetSpent": 1105.0, + "xdm:budgetRemaining": 3895.0, + "xdm:budgetUtilization": 0.221, + "xdm:dailyBudget": 5000.0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.8, + "xdm:engagementRateRanking": "above_average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "above_average", + "xdm:adRelevanceDiagnostics": "above_average", + "xdm:engagementRateDiagnostics": "above_average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.4.json b/schemas/paid-media/paid-media-summary-metrics.example.4.json new file mode 100644 index 000000000..6c3dc0626 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.4.json @@ -0,0 +1,216 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "ad", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:campaignID": "23851234567890789", + "xdm:campaignGUID": "meta_act_123456789012345_23851234567890789", + "xdm:adGroupID": "23851234567890456", + "xdm:adGroupGUID": "meta_act_123456789012345_23851234567890456", + "xdm:adID": "23851234567890123", + "xdm:adGUID": "meta_act_123456789012345_23851234567890123", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 21250, + "xdm:clicks": 765, + "xdm:reach": 16125, + "xdm:frequency": 1.32, + "xdm:spend": 552.5, + "xdm:conversions": 38, + "xdm:conversionValue": 1912.5, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.54, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 14875, + "xdm:clicks": 574, + "xdm:spend": 386.75, + "xdm:conversions": 29 + }, + "xdm:desktop": { + "xdm:impressions": 5313, + "xdm:clicks": 160, + "xdm:spend": 138.13, + "xdm:conversions": 8 + }, + "xdm:tablet": { + "xdm:impressions": 1062, + "xdm:clicks": 31, + "xdm:spend": 27.62, + "xdm:conversions": 1 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:instagram": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:messenger": { + "xdm:impressions": 1275, + "xdm:clicks": 46, + "xdm:spend": 33.15, + "xdm:conversions": 2 + }, + "xdm:audience_network": { + "xdm:impressions": 850, + "xdm:clicks": 30, + "xdm:spend": 22.1, + "xdm:conversions": 1 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 10625, + "xdm:clicks": 383, + "xdm:spend": 276.25, + "xdm:conversions": 19 + }, + "xdm:stories": { + "xdm:impressions": 5313, + "xdm:clicks": 191, + "xdm:spend": 138.13, + "xdm:conversions": 10 + }, + "xdm:reels": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:other": { + "xdm:impressions": 2124, + "xdm:clicks": 76, + "xdm:spend": 55.24, + "xdm:conversions": 3 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:age_25_34": { + "xdm:impressions": 7438, + "xdm:clicks": 268, + "xdm:spend": 193.38, + "xdm:conversions": 13 + }, + "xdm:age_35_44": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:age_45_54": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:age_55_64": { + "xdm:impressions": 1061, + "xdm:clicks": 37, + "xdm:spend": 27.61, + "xdm:conversions": 1 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 11688, + "xdm:clicks": 421, + "xdm:spend": 303.88, + "xdm:conversions": 21 + }, + "xdm:female": { + "xdm:impressions": 9562, + "xdm:clicks": 344, + "xdm:spend": 248.62, + "xdm:conversions": 17 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 574, + "xdm:comments": 115, + "xdm:shares": 191, + "xdm:saves": 268, + "xdm:linkClicks": 765, + "xdm:outboundClicks": 727, + "xdm:uniqueClicks": 689 + }, + "xdm:videoMetrics": { + "xdm:videoPlays": 21250, + "xdm:videoCompletionRate": 0.375, + "xdm:videoReplays": 850, + "xdm:videoPauses": 2125, + "xdm:videoResumes": 1700, + "xdm:videoSkips": 4250, + "xdm:videoMutes": 1063, + "xdm:videoUnmutes": 425 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 8, + "xdm:postClickConversions": 30, + "xdm:conversionRate": 0.055, + "xdm:costPerAction": 14.54, + "xdm:actionValue": 1912.5, + "xdm:conversionsByType": { + "xdm:purchases": 30, + "xdm:addToCart": 77, + "xdm:initiateCheckout": 46, + "xdm:leads": 8, + "xdm:downloads": 23 + }, + "xdm:leads": 8, + "xdm:costPerLead": 69.06 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.54, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 5000.0, + "xdm:budgetSpent": 552.5, + "xdm:budgetRemaining": 4447.5, + "xdm:budgetUtilization": 0.111, + "xdm:dailyBudget": 5000.0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.8, + "xdm:engagementRateRanking": "above_average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "above_average", + "xdm:adRelevanceDiagnostics": "above_average", + "xdm:engagementRateDiagnostics": "above_average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.5.json b/schemas/paid-media/paid-media-summary-metrics.example.5.json new file mode 100644 index 000000000..026cfaaa6 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.5.json @@ -0,0 +1,212 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "asset", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:assetID": "987654321012345", + "xdm:assetGUID": "meta_act_123456789012345_asset_987654321012345", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 21250, + "xdm:clicks": 765, + "xdm:reach": 16125, + "xdm:frequency": 1.32, + "xdm:spend": 552.5, + "xdm:conversions": 38, + "xdm:conversionValue": 1912.5, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.54, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 14875, + "xdm:clicks": 574, + "xdm:spend": 386.75, + "xdm:conversions": 29 + }, + "xdm:desktop": { + "xdm:impressions": 5313, + "xdm:clicks": 160, + "xdm:spend": 138.13, + "xdm:conversions": 8 + }, + "xdm:tablet": { + "xdm:impressions": 1062, + "xdm:clicks": 31, + "xdm:spend": 27.62, + "xdm:conversions": 1 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 12750, + "xdm:clicks": 459, + "xdm:spend": 331.5, + "xdm:conversions": 23 + }, + "xdm:instagram": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:messenger": { + "xdm:impressions": 1275, + "xdm:clicks": 46, + "xdm:spend": 33.15, + "xdm:conversions": 2 + }, + "xdm:audience_network": { + "xdm:impressions": 850, + "xdm:clicks": 30, + "xdm:spend": 22.1, + "xdm:conversions": 1 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 10625, + "xdm:clicks": 383, + "xdm:spend": 276.25, + "xdm:conversions": 19 + }, + "xdm:stories": { + "xdm:impressions": 5313, + "xdm:clicks": 191, + "xdm:spend": 138.13, + "xdm:conversions": 10 + }, + "xdm:reels": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:other": { + "xdm:impressions": 2124, + "xdm:clicks": 76, + "xdm:spend": 55.24, + "xdm:conversions": 3 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:age_25_34": { + "xdm:impressions": 7438, + "xdm:clicks": 268, + "xdm:spend": 193.38, + "xdm:conversions": 13 + }, + "xdm:age_35_44": { + "xdm:impressions": 6375, + "xdm:clicks": 230, + "xdm:spend": 165.75, + "xdm:conversions": 12 + }, + "xdm:age_45_54": { + "xdm:impressions": 3188, + "xdm:clicks": 115, + "xdm:spend": 82.88, + "xdm:conversions": 6 + }, + "xdm:age_55_64": { + "xdm:impressions": 1061, + "xdm:clicks": 37, + "xdm:spend": 27.61, + "xdm:conversions": 1 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 11688, + "xdm:clicks": 421, + "xdm:spend": 303.88, + "xdm:conversions": 21 + }, + "xdm:female": { + "xdm:impressions": 9562, + "xdm:clicks": 344, + "xdm:spend": 248.62, + "xdm:conversions": 17 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 574, + "xdm:comments": 115, + "xdm:shares": 191, + "xdm:saves": 268, + "xdm:linkClicks": 765, + "xdm:outboundClicks": 727, + "xdm:uniqueClicks": 689 + }, + "xdm:videoMetrics": { + "xdm:videoPlays": 21250, + "xdm:videoCompletionRate": 0.375, + "xdm:videoReplays": 850, + "xdm:videoPauses": 2125, + "xdm:videoResumes": 1700, + "xdm:videoSkips": 4250, + "xdm:videoMutes": 1063, + "xdm:videoUnmutes": 425 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 8, + "xdm:postClickConversions": 30, + "xdm:conversionRate": 0.055, + "xdm:costPerAction": 14.54, + "xdm:actionValue": 1912.5, + "xdm:conversionsByType": { + "xdm:purchases": 30, + "xdm:addToCart": 77, + "xdm:initiateCheckout": 46, + "xdm:leads": 8, + "xdm:downloads": 23 + }, + "xdm:leads": 8, + "xdm:costPerLead": 69.06 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.54, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 0, + "xdm:budgetSpent": 552.5, + "xdm:budgetRemaining": 0, + "xdm:budgetUtilization": 0, + "xdm:dailyBudget": 0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 8.5, + "xdm:relevanceScore": 8.8, + "xdm:engagementRateRanking": "above_average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "above_average", + "xdm:adRelevanceDiagnostics": "above_average", + "xdm:engagementRateDiagnostics": "above_average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.example.6.json b/schemas/paid-media/paid-media-summary-metrics.example.6.json new file mode 100644 index 000000000..c9860d930 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.example.6.json @@ -0,0 +1,202 @@ +{ + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:paidMedia": { + "xdm:adNetwork": "meta", + "xdm:entityType": "asset", + "xdm:accountID": "act_123456789012345", + "xdm:accountGUID": "meta_act_123456789012345", + "xdm:assetID": "456789123456789", + "xdm:assetGUID": "meta_act_123456789012345_asset_456789123456789", + "xdm:timestamp": "2025-11-09T00:00:00Z", + "xdm:date": "2025-11-09", + "xdm:granularity": "daily", + "xdm:coreMetrics": { + "xdm:impressions": 14875, + "xdm:clicks": 535, + "xdm:reach": 11288, + "xdm:frequency": 1.32, + "xdm:spend": 386.25, + "xdm:conversions": 27, + "xdm:conversionValue": 1337.5, + "xdm:ctr": 0.036, + "xdm:cpc": 0.722, + "xdm:cpm": 26.0, + "xdm:cpa": 14.31, + "xdm:roas": 3.46, + "xdm:roi": 2.46 + }, + "xdm:dimensionalBreakdowns": { + "xdm:deviceBreakdown": { + "xdm:mobile": { + "xdm:impressions": 10413, + "xdm:clicks": 401, + "xdm:spend": 270.38, + "xdm:conversions": 20 + }, + "xdm:desktop": { + "xdm:impressions": 3719, + "xdm:clicks": 112, + "xdm:spend": 96.69, + "xdm:conversions": 6 + }, + "xdm:tablet": { + "xdm:impressions": 743, + "xdm:clicks": 22, + "xdm:spend": 19.18, + "xdm:conversions": 1 + } + }, + "xdm:platformBreakdown": { + "xdm:facebook": { + "xdm:impressions": 8925, + "xdm:clicks": 321, + "xdm:spend": 231.75, + "xdm:conversions": 16 + }, + "xdm:instagram": { + "xdm:impressions": 4463, + "xdm:clicks": 161, + "xdm:spend": 115.88, + "xdm:conversions": 8 + }, + "xdm:messenger": { + "xdm:impressions": 893, + "xdm:clicks": 32, + "xdm:spend": 23.18, + "xdm:conversions": 2 + }, + "xdm:audience_network": { + "xdm:impressions": 594, + "xdm:clicks": 21, + "xdm:spend": 15.44, + "xdm:conversions": 1 + } + }, + "xdm:placementBreakdown": { + "xdm:feed": { + "xdm:impressions": 7438, + "xdm:clicks": 268, + "xdm:spend": 193.13, + "xdm:conversions": 13 + }, + "xdm:stories": { + "xdm:impressions": 3719, + "xdm:clicks": 134, + "xdm:spend": 96.56, + "xdm:conversions": 7 + }, + "xdm:reels": { + "xdm:impressions": 2231, + "xdm:clicks": 80, + "xdm:spend": 57.94, + "xdm:conversions": 4 + }, + "xdm:other": { + "xdm:impressions": 1487, + "xdm:clicks": 53, + "xdm:spend": 38.62, + "xdm:conversions": 3 + } + }, + "xdm:ageBreakdown": { + "xdm:age_18_24": { + "xdm:impressions": 2231, + "xdm:clicks": 80, + "xdm:spend": 57.94, + "xdm:conversions": 4 + }, + "xdm:age_25_34": { + "xdm:impressions": 5206, + "xdm:clicks": 187, + "xdm:spend": 135.19, + "xdm:conversions": 9 + }, + "xdm:age_35_44": { + "xdm:impressions": 4463, + "xdm:clicks": 161, + "xdm:spend": 115.88, + "xdm:conversions": 8 + }, + "xdm:age_45_54": { + "xdm:impressions": 2231, + "xdm:clicks": 80, + "xdm:spend": 57.94, + "xdm:conversions": 4 + }, + "xdm:age_55_64": { + "xdm:impressions": 744, + "xdm:clicks": 27, + "xdm:spend": 19.3, + "xdm:conversions": 2 + } + }, + "xdm:genderBreakdown": { + "xdm:male": { + "xdm:impressions": 8181, + "xdm:clicks": 294, + "xdm:spend": 212.44, + "xdm:conversions": 15 + }, + "xdm:female": { + "xdm:impressions": 6694, + "xdm:clicks": 241, + "xdm:spend": 173.81, + "xdm:conversions": 12 + } + } + }, + "xdm:extendedMetrics": { + "xdm:likes": 401, + "xdm:comments": 80, + "xdm:shares": 134, + "xdm:saves": 188, + "xdm:linkClicks": 535, + "xdm:outboundClicks": 509, + "xdm:uniqueClicks": 482 + }, + "xdm:conversionMetrics": { + "xdm:postViewConversions": 5, + "xdm:postClickConversions": 22, + "xdm:conversionRate": 0.056, + "xdm:costPerAction": 14.31, + "xdm:actionValue": 1337.5, + "xdm:conversionsByType": { + "xdm:purchases": 22, + "xdm:addToCart": 54, + "xdm:initiateCheckout": 32, + "xdm:leads": 5, + "xdm:downloads": 16 + }, + "xdm:leads": 5, + "xdm:costPerLead": 77.25 + }, + "xdm:costMetrics": { + "xdm:averageCpc": 0.722, + "xdm:averageCpm": 26.0, + "xdm:averageCpa": 14.31, + "xdm:averageCpe": 0.481, + "xdm:budgetUtilization": { + "xdm:budgetAllocated": 0, + "xdm:budgetSpent": 386.25, + "xdm:budgetRemaining": 0, + "xdm:budgetUtilization": 0, + "xdm:dailyBudget": 0 + } + }, + "xdm:attributionMetrics": { + "xdm:attributionModel": "LAST_CLICK", + "xdm:clickAttributionWindow": "7_DAY", + "xdm:viewAttributionWindow": "1_DAY" + }, + "xdm:qualityMetrics": { + "xdm:qualityScore": 7.8, + "xdm:relevanceScore": 8.2, + "xdm:engagementRateRanking": "average", + "xdm:conversionRateRanking": "above_average", + "xdm:qualityRanking": "average", + "xdm:adRelevanceDiagnostics": "average", + "xdm:engagementRateDiagnostics": "average", + "xdm:conversionRateDiagnostics": "above_average" + } + } +} diff --git a/schemas/paid-media/paid-media-summary-metrics.schema.json b/schemas/paid-media/paid-media-summary-metrics.schema.json new file mode 100644 index 000000000..083078000 --- /dev/null +++ b/schemas/paid-media/paid-media-summary-metrics.schema.json @@ -0,0 +1,61 @@ +{ + "meta:license": [ + "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", + "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", + "you may not use this file except in compliance with the License. You may obtain a copy", + "of the License at https://creativecommons.org/licenses/by/4.0/" + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "https://ns.adobe.com/xdm/schemas/paid-media-summary-metrics", + "title": "Paid Media Summary Metrics", + "type": "object", + "description": "Schema for paid media summary metrics dataset containing time-series performance data across all ad networks", + "meta:class": "https://ns.adobe.com/xdm/classes/summarymetrics", + "meta:extensible": false, + "meta:abstract": false, + "meta:extends": [ + "https://ns.adobe.com/xdm/classes/summarymetrics", + "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers", + "https://ns.adobe.com/xdm/mixins/paid-media/core-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/dimensional-breakdowns", + "https://ns.adobe.com/xdm/mixins/paid-media/extended-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/video-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/conversion-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/cost-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/attribution-metrics", + "https://ns.adobe.com/xdm/mixins/paid-media/quality-metrics" + ], + "allOf": [ + { + "$ref": "https://ns.adobe.com/xdm/classes/summarymetrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-identifiers" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/core-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/dimensional-breakdowns" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/extended-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/video-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/conversion-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/cost-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/attribution-metrics" + }, + { + "$ref": "https://ns.adobe.com/xdm/mixins/paid-media/quality-metrics" + } + ], + "meta:status": "experimental" +}