diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 13ef5c53d1..c35eb9430f 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2025-06-12 +# destination categories last updated 2025-06-20 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index a218cd389d..49a555327e 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2025-06-12 +# destination data last updated 2025-06-20 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -24664,7 +24664,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" or event = "Audience Exited" fields: - - id: MYWx7cbqiDEtU3oMu4uZp + - id: mrKbuMgfWN8UEpJ2qcde2H sortOrder: 0 fieldKey: external_id label: External User ID @@ -24683,7 +24683,7 @@ items: dynamic: false allowNull: false hidden: false - - id: dmoSCo2UqPKRx6eqY7J4mn + - id: gfvJ2HNHnRiAJhXYp6Jzdi sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24700,7 +24700,7 @@ items: dynamic: false allowNull: false hidden: false - - id: rzBuJ21aYq1uQdKZCoizBH + - id: m6feT5HWsrNtuELUTP3GRM sortOrder: 2 fieldKey: device_id label: Device ID @@ -24716,7 +24716,7 @@ items: dynamic: false allowNull: false hidden: false - - id: vnSpRMiHSMieY4V19FQ3dP + - id: 9kfD74Zpu2MdUBWmdp3K7q sortOrder: 5 fieldKey: enable_batching label: Enable Batching @@ -24730,7 +24730,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 37hRwjbqcqtLa8ZiUAvPhE + - id: tYsBaXcfg6WnEBmKpP2ksC sortOrder: 6 fieldKey: personas_audience_key label: Segment Engage Audience Key @@ -42953,321 +42953,6 @@ items: actions: [] presets: [] partnerOwned: false -- id: 6683e1d5e37fd84efcf3bbef - display_name: First Party Dv360 - name: First Party Dv360 - slug: first-party-dv360 - hidden: false - endpoints: - - US - regions: - - us-west-2 - - eu-west-1 - url: connections/destinations/catalog/first-party-dv360 - previous_names: - - First Party Dv360 - website: http://www.segment.com - status: PUBLIC_BETA - categories: [] - logo: - url: https://cdn-devcenter.segment.com/da053d87-a568-4bae-827f-857f7f4b2aba.svg - mark: - url: https://cdn-devcenter.segment.com/31811060-3f10-46b0-94de-bf299beb94a4.svg - methods: - track: true - identify: false - group: false - alias: false - screen: false - page: false - platforms: - browser: true - mobile: false - server: true - warehouse: false - cloudAppObject: false - linkedAudiences: false - components: [] - browserUnbundlingSupported: false - browserUnbundlingPublic: false - replay: false - connection_modes: - device: - web: false - mobile: false - server: false - cloud: - web: true - mobile: false - server: true - settings: [] - actions: - - id: pMRu4ozQwh3SzjYycCzDfn - name: Add to List - slug: addToList - description: Adds to list - platform: CLOUD - hidden: true - defaultTrigger: null - fields: [] - - id: kjEdc2dNCshXomx9VDnp9 - name: Remove Customer Match Members - Mobile Device Id List - slug: removeFromAudMobileDeviceId - description: >- - Remove customer match members in Google Display & Video 360 Mobile Device - Id List Audience. - platform: CLOUD - hidden: false - defaultTrigger: event = "Audience Entered" - fields: - - id: uT3Uxyik2BSKqGb1QuTPoj - sortOrder: 0 - fieldKey: mobileDeviceIds - label: Mobile Device IDs - type: STRING - description: >- - A list of mobile device IDs defining Customer Match audience members. - The size of mobileDeviceIds mustn't be greater than 500,000. - placeholder: '' - defaultValue: - '@path': $.context.traits.mobileDeviceIds - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: texVBBbJ5ZvG5eBR49wLoL - name: Edit Customer Match Members - Mobile Device Id List - slug: addToAudMobileDeviceId - description: >- - Add or update customer match members in Google Display & Video 360 Mobile - Device Id List Audience. - platform: CLOUD - hidden: false - defaultTrigger: event = "Audience Entered" - fields: - - id: dzEWPLsY9RCMeZXPs84FcJ - sortOrder: 0 - fieldKey: mobileDeviceIds - label: Mobile Device IDs - type: STRING - description: >- - A list of mobile device IDs defining Customer Match audience members. - The size of mobileDeviceIds mustn't be greater than 500,000. - placeholder: '' - defaultValue: - '@path': $.context.traits.mobileDeviceIds - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: u4XdrL4XCgThQLiwKZKC7e - name: Edit Customer Match Members - Contact Info List - slug: addToAudContactInfo - description: >- - Add or update customer match members in Google Display & Video 360 Contact - Info List Audience. - platform: CLOUD - hidden: false - defaultTrigger: event = "Audience Entered" - fields: - - id: 9v6BVoLkJsYA7WBp7CFv1 - sortOrder: 0 - fieldKey: emails - label: Emails - type: STRING - description: >- - A list of the user's emails. If not already hashed, the system will hash - them before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.emails - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: nRkBkcGCPh3CkMhXRfpUo9 - sortOrder: 1 - fieldKey: phoneNumbers - label: Phone Numbers - type: STRING - description: >- - A list of the user's phone numbers. If not already hashed, the system - will hash them before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.phoneNumbers - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: iKhX1uinTtH1h3U4Dm4gaq - sortOrder: 2 - fieldKey: zipCodes - label: ZIP Codes - type: STRING - description: A list of the user's zip codes. - placeholder: '' - defaultValue: - '@path': $.context.traits.zipCodes - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: mUVtit9CqM9CjbQBnEUuze - sortOrder: 3 - fieldKey: firstName - label: First Name - type: STRING - description: >- - The user's first name. If not already hashed, the system will hash it - before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.firstName - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: m6UJjUoLKDQK9CgLw8boAR - sortOrder: 4 - fieldKey: lastName - label: Last Name - type: STRING - description: >- - The user's last name. If not already hashed, the system will hash it - before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.lastName - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: hDb93iDZswBJELhLyvyd4W - sortOrder: 5 - fieldKey: countryCode - label: Country Code - type: STRING - description: The country code of the user. - placeholder: '' - defaultValue: - '@path': $.context.traits..countryCode - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: vykfWPGTjXpdHZiaaSUYRC - name: Remove Customer Match Members - Contact Info List - slug: removeFromAudContactInfo - description: >- - Remove customer match members in Google Display & Video 360 Contact Info - List Audience. - platform: CLOUD - hidden: false - defaultTrigger: event = "Audience Exited" - fields: - - id: 8a2YMuRfDVjc7pM2PtNk6B - sortOrder: 0 - fieldKey: emails - label: Emails - type: STRING - description: >- - A list of the user's emails. If not already hashed, the system will hash - them before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.emails - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: bwznBSaBAELeAituYtxp18 - sortOrder: 1 - fieldKey: phoneNumbers - label: Phone Numbers - type: STRING - description: >- - A list of the user's phone numbers. If not already hashed, the system - will hash them before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.phoneNumbers - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: xk7JHGRNKm8MWqg5L3TFF1 - sortOrder: 2 - fieldKey: zipCodes - label: ZIP Codes - type: STRING - description: A list of the user's zip codes. - placeholder: '' - defaultValue: - '@path': $.context.traits.zipCodes - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: htaHz7759wvmzUeg4L7KjZ - sortOrder: 3 - fieldKey: firstName - label: First Name - type: STRING - description: >- - The user's first name. If not already hashed, the system will hash it - before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.firstName - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 9y9rrfjVMxHdPAkQbmGCd9 - sortOrder: 4 - fieldKey: lastName - label: Last Name - type: STRING - description: >- - The user's last name. If not already hashed, the system will hash it - before use. If not hashed, Segment will hash this value. - placeholder: '' - defaultValue: - '@path': $.context.traits.lastName - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: s9oBRJpFD1EC1LpoZSC7NS - sortOrder: 5 - fieldKey: countryCode - label: Country Code - type: STRING - description: The country code of the user. - placeholder: '' - defaultValue: - '@path': $.context.traits..countryCode - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - presets: [] - partnerOwned: false - id: 66048cbafa5a03fc49b153d3 display_name: FL0 name: FL0 @@ -49696,7 +49381,7 @@ items: hidden: true defaultTrigger: null fields: - - id: boXEDaqxqjojtojdJJCzj2 + - id: 3bZAgPB471jgRy2CjKKEQj sortOrder: 0 fieldKey: conversion_label label: Conversion Label @@ -49713,7 +49398,7 @@ items: dynamic: false allowNull: false hidden: false - - id: qdTy6rP4SwaUC1mc5eVZgZ + - id: qHu13sQLr2yjQ5wTKs87Gp sortOrder: 1 fieldKey: email label: Email @@ -49734,7 +49419,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 9Dtxqt121c55ms1t6AB6Ux + - id: tVz2QxtywA1k4dhVDABsv3 sortOrder: 2 fieldKey: transaction_id label: Order ID @@ -49753,7 +49438,7 @@ items: dynamic: false allowNull: false hidden: false - - id: fzro6dcZuWNzViG1xes3La + - id: stCwgnB523rRpfSZ7uaScB sortOrder: 3 fieldKey: user_agent label: User Agent @@ -49773,7 +49458,7 @@ items: dynamic: false allowNull: false hidden: false - - id: fWSUgTRqEZNmQVTmKUe28P + - id: gHjpBPZGpqc6Gdr5wGgJrs sortOrder: 4 fieldKey: conversion_time label: Conversion Time @@ -49788,7 +49473,7 @@ items: dynamic: false allowNull: false hidden: false - - id: fHoxutQfUmKbkaLmwvPCWD + - id: aWM1cqV5782QVpYZm757mb sortOrder: 5 fieldKey: value label: Value @@ -49803,7 +49488,7 @@ items: dynamic: false allowNull: false hidden: false - - id: dPQfpSnSEkEQU9z8Z865fe + - id: sHrkE9W82Z2C2NMzA3bTbe sortOrder: 6 fieldKey: currency_code label: Currency Code @@ -49820,7 +49505,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 7U71QsER4R6ncftR6sGhEH + - id: tSKsWmndr5Nn7PnoJYKDTk sortOrder: 7 fieldKey: is_app_incrementality label: App Conversion for Incrementality Study @@ -49834,7 +49519,7 @@ items: dynamic: false allowNull: false hidden: false - - id: rD3weAtcKwAP4pn1m4BBSg + - id: gXWozm7sxo36ELAp5hLgLj sortOrder: 8 fieldKey: pcc_game label: PCC Game Flag @@ -49850,7 +49535,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 9D1WvDyzAuMnj39dWBfK1L + - id: jz2BkejtpS5Wm7mCNwZpCb sortOrder: 9 fieldKey: phone_number label: Phone Number @@ -49873,7 +49558,7 @@ items: dynamic: false allowNull: false hidden: false - - id: fRFiGCSxKEPFMasXSgkRkx + - id: 6cpjBydwrxwhbq4NsSZqHr sortOrder: 10 fieldKey: first_name label: First Name @@ -49894,7 +49579,7 @@ items: dynamic: false allowNull: false hidden: false - - id: vkfwC94GMG2y5xBwhDCurx + - id: 64FnctTsfkPwZJoNefGaw1 sortOrder: 11 fieldKey: last_name label: Last Name @@ -49915,7 +49600,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 94SrWo2Vih1TLGLSG5PCDK + - id: uqD9XgEJTjueH6HnKyYRR4 sortOrder: 12 fieldKey: street_address label: Street Address @@ -49938,7 +49623,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 4WiTiXkX4GzMJ1PDEo6HhX + - id: s3UzJjX83aHP8fiX67SY7V sortOrder: 13 fieldKey: city label: City @@ -49959,7 +49644,7 @@ items: dynamic: false allowNull: false hidden: false - - id: jpMpuzhrJv3HKxRoDTpnJD + - id: 9HVZkUGBL4pV7X4QSr5vfQ sortOrder: 14 fieldKey: region label: Region @@ -49980,7 +49665,7 @@ items: dynamic: false allowNull: false hidden: false - - id: sjGT6ZWWwuuv45LKJHXRso + - id: 7nGFGJ6nUFEjxdXNepB8X1 sortOrder: 15 fieldKey: post_code label: Postal Code @@ -50001,7 +49686,7 @@ items: dynamic: false allowNull: false hidden: false - - id: pVM3nbQPz8gjKmzXS9Paci + - id: oWpZTGZewx6NLRFo79qCsu sortOrder: 16 fieldKey: country label: Country @@ -50030,7 +49715,7 @@ items: hidden: false defaultTrigger: null fields: - - id: f2ryoS5YYSEEBDc7GTBeo8 + - id: w5vt6DYqCB8GnrD3H8P8VS sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -50043,7 +49728,7 @@ items: dynamic: true allowNull: false hidden: false - - id: 88izZNZcmRx5r4sgqXzB5 + - id: gZ2xN9YQ1vz9cFjYGDewgq sortOrder: 1 fieldKey: adjustment_type label: Adjustment Type @@ -50069,7 +49754,7 @@ items: dynamic: false allowNull: false hidden: false - - id: wnkLQ8X7vMp6YXyMENaPTS + - id: bRFV8JFnGPtC4Q6SYjQknL sortOrder: 2 fieldKey: adjustment_timestamp label: Adjustment Timestamp @@ -50088,7 +49773,7 @@ items: dynamic: false allowNull: false hidden: false - - id: kVcSMJurP8bRqqozyJe7e8 + - id: kc4BYRoPz4zzv3FkSXSpYH sortOrder: 3 fieldKey: order_id label: Order ID @@ -50112,7 +49797,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 7KtcnRJSGstnrPDYT4zGAu + - id: uvPc3dup4QfAzwwooyxQ8T sortOrder: 4 fieldKey: gclid label: GCLID @@ -50127,7 +49812,7 @@ items: dynamic: false allowNull: false hidden: false - - id: js2JXmxmTkMMcG6nGjQbPz + - id: viXMPh2EjVAhhiNMjS7E6q sortOrder: 5 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -50144,7 +49829,7 @@ items: dynamic: false allowNull: false hidden: false - - id: t7F8G3rNRaTv1uXYaZtqKe + - id: iJJ2sKkC1YEARLz1uHdary sortOrder: 6 fieldKey: restatement_value label: Restatement Value @@ -50161,7 +49846,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oHQ3jCvW93WrQJ3Ah6CmdN + - id: 46DroEDMTsunb4fDWzbAK9 sortOrder: 7 fieldKey: restatement_currency_code label: Restatement Currency Code @@ -50178,7 +49863,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 82Np3b9TVy5ZSoNgoYziJn + - id: csJWct1Umny4cLJgnqEe6Q sortOrder: 8 fieldKey: email_address label: Email Address @@ -50201,7 +49886,7 @@ items: dynamic: false allowNull: false hidden: false - - id: vbLeXguVFwPHnp6MPUssFN + - id: 4TvmHwYUTV1cDMbyNbfZqT sortOrder: 9 fieldKey: phone_country_code label: Phone Number Country Code @@ -50216,7 +49901,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2hezCqn6DT6d4RZ4p1LRRm + - id: qXXnyw4ieGQPmZ9fbfbyX sortOrder: 10 fieldKey: phone_number label: Phone Number @@ -50240,7 +49925,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oYnQgBTvXxaxbtnYWiBPT9 + - id: b3b1cNi1bXuS33jGeDnR3Z sortOrder: 11 fieldKey: first_name label: First Name @@ -50261,7 +49946,7 @@ items: dynamic: false allowNull: false hidden: false - - id: pfU89aUJYAWghjoregn4aZ + - id: 59cW4EKAnrCKcVqbkHzqvw sortOrder: 12 fieldKey: last_name label: Last Name @@ -50284,7 +49969,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 58f8A7E3qzFJbkwZf3XXzy + - id: 8hCsgdBbiJ6Fr1ufheiNkn sortOrder: 13 fieldKey: city label: City @@ -50305,7 +49990,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 8sFaVbjBKvfNNnmEgpDVKw + - id: a8og8H8ZmmDjYrn542Cxko sortOrder: 14 fieldKey: state label: State @@ -50326,7 +50011,7 @@ items: dynamic: false allowNull: false hidden: false - - id: mNKmRuGv21LjRBfsQrw6Do + - id: qkV6Y32azth8B8rL1mp16X sortOrder: 15 fieldKey: country label: Country @@ -50349,7 +50034,7 @@ items: dynamic: false allowNull: false hidden: false - - id: vrukbQHt7n2cxogRWBiG2g + - id: s6MZRnWonvfXEFUoYMLb61 sortOrder: 16 fieldKey: postal_code label: Postal Code @@ -50370,7 +50055,7 @@ items: dynamic: false allowNull: false hidden: false - - id: xyfNM31U29YxUk7pwge7cg + - id: iMXfbyDFffEoHfJbK3GRbK sortOrder: 17 fieldKey: street_address label: Street Address @@ -50391,7 +50076,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oTF74DdG17avZtv4wJsHoA + - id: jxxHJMbSr5Uh2sKsgq5v6s sortOrder: 18 fieldKey: user_agent label: User Agent @@ -50419,7 +50104,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 54R26Bjb9taaLBXeWh47ym + - id: 8sBZcoMgnPakXn1B6ypGBm sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -50432,7 +50117,7 @@ items: dynamic: true allowNull: false hidden: false - - id: fPxmoVFkV2mF3UbwJSxqoA + - id: typy4rfLPuitTcN226Ck8g sortOrder: 1 fieldKey: gclid label: GCLID @@ -50445,7 +50130,7 @@ items: dynamic: false allowNull: false hidden: false - - id: d6XadNVK9dqo6cFPz1u6mS + - id: uHz9QwcZfrMiXhVQKi9JWk sortOrder: 2 fieldKey: gbraid label: GBRAID @@ -50460,7 +50145,7 @@ items: dynamic: false allowNull: false hidden: false - - id: bU7xNjMUVRDgzzhwtQX6EC + - id: qGRp9DEvZPLiLXFuFKbxcb sortOrder: 3 fieldKey: wbraid label: WBRAID @@ -50475,7 +50160,7 @@ items: dynamic: false allowNull: false hidden: false - - id: pZuhkPYjFApv9ysMEnrgYz + - id: bqoBby7dkZ5trthTc82LhP sortOrder: 4 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -50493,7 +50178,7 @@ items: dynamic: false allowNull: false hidden: false - - id: qWKAzq9yTrjMaMfuy2q5e1 + - id: i4cxmcUMK7FBjV5fN7FreD sortOrder: 5 fieldKey: email_address label: Email Address @@ -50516,7 +50201,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 3bfKAgiWBc9fck6m7qfd9b + - id: tC7pWiLueoCpjX6pn3KY5c sortOrder: 6 fieldKey: phone_country_code label: Phone Number Country Code @@ -50531,7 +50216,7 @@ items: choices: null dynamic: false allowNull: false - - id: fy3pg1ThpnY7TxxzTnuTxb + - id: gMq8C9jLVK9h8rt7hy8uHg sortOrder: 7 fieldKey: phone_number label: Phone Number @@ -50555,7 +50240,7 @@ items: dynamic: false allowNull: false hidden: false - - id: o2MwNWGj9TJxEcDjvHG6ma + - id: joW6XtDCvE7UDXuRwAjhn sortOrder: 8 fieldKey: order_id label: Order ID @@ -50578,7 +50263,7 @@ items: dynamic: false allowNull: false hidden: false - - id: vfEtSm2SQc81ogoo2GbRKF + - id: uMwbjijhPgafofg66MGpba sortOrder: 9 fieldKey: value label: Value @@ -50593,7 +50278,7 @@ items: dynamic: false allowNull: false hidden: false - - id: pMsPhopbWKwwoZaK9qWLf + - id: tCKRsqUr9UL82ZFGuqkaYf sortOrder: 10 fieldKey: currency label: Currency @@ -50610,7 +50295,7 @@ items: dynamic: false allowNull: false hidden: false - - id: nshxm8Ra3ZZEvyrmf1Pfcs + - id: xfHL7Kj2X9JzLE78ytAmDw sortOrder: 11 fieldKey: conversion_environment label: Conversion Environment @@ -50633,7 +50318,7 @@ items: dynamic: false allowNull: false hidden: false - - id: sBKYooftmjq3ZE8gPkWsxF + - id: sxhzN3Y82Z7Fa6aJj7G8wD sortOrder: 12 fieldKey: merchant_id label: Merchant Center ID @@ -50646,7 +50331,7 @@ items: dynamic: false allowNull: false hidden: false - - id: hjmFTpNNHJntdwEX2DdEAV + - id: uu5V68zRRXPDHnkPaVF9ap sortOrder: 13 fieldKey: merchant_country_code label: Merchant Center Feed Country Code @@ -50661,7 +50346,7 @@ items: dynamic: false allowNull: false hidden: false - - id: w4xhtNj7tajdeeaDCi9dw6 + - id: fxDNXLgrx9UiWmKioyW2YV sortOrder: 14 fieldKey: merchant_language_code label: Merchant Center Feed Language Code @@ -50676,7 +50361,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 6WCsmuusJFEMCKwCUz5vf5 + - id: ibZSjipUTYXa43qKiD5E2X sortOrder: 15 fieldKey: local_cost label: Local Transaction Cost @@ -50691,7 +50376,7 @@ items: dynamic: false allowNull: false hidden: false - - id: wtFHgRkhM6HTWMmbEZbyG8 + - id: BWibksrDxaLPXefnLdUrw sortOrder: 16 fieldKey: items label: Items @@ -50713,7 +50398,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 6Ry2aLewWsLL1rNfWjmHoC + - id: kU8zL8S5vqnvzusYf3k9KU sortOrder: 17 fieldKey: custom_variables label: Custom Variables @@ -50732,7 +50417,7 @@ items: dynamic: false allowNull: false hidden: false - - id: ZkkgrLNxuxUdoB7PmfXKi + - id: a1p6x8yhhwA14569v89CHp sortOrder: 18 fieldKey: ad_user_data_consent_state label: Ad User Data Consent State @@ -50753,7 +50438,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: s8Tn3GfT6xeFWRQXZrAnyz + - id: srqiCoM4xaS4Kt18C7M58R sortOrder: 19 fieldKey: ad_personalization_consent_state label: Ad Personalization Consent State @@ -50783,7 +50468,7 @@ items: hidden: false defaultTrigger: null fields: - - id: byubo3hnVwkVAQ5W1SfntG + - id: 9iCRfwQ3Hu9ng9jJ95XKSq sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -50796,7 +50481,7 @@ items: dynamic: true allowNull: false hidden: false - - id: crAR3L4fo7dZt2fvnvLnWQ + - id: 7nxhLWuYGFpMsAUNnbWwew sortOrder: 1 fieldKey: caller_id label: Caller ID @@ -50811,7 +50496,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 8ZituQ3xD4ytqxT4uE1iyh + - id: uhhwxyNVy7FmaLj5nH3R9u sortOrder: 2 fieldKey: call_timestamp label: Call Timestamp @@ -50827,7 +50512,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 63cP3spqBSwxP5SzE4EvNj + - id: vzePAgDkRk3omSnEExzDhd sortOrder: 3 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -50845,7 +50530,7 @@ items: dynamic: false allowNull: false hidden: false - - id: xzZAxm7WGjH9aWUxDzqZo1 + - id: jYDen4HJugeccdD5NHWNvD sortOrder: 4 fieldKey: value label: Value @@ -50860,7 +50545,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 2BuzkieLv3TaaUooCH4Too + - id: 89bzqWrBvnDKDxjht5hTan sortOrder: 5 fieldKey: currency label: Currency @@ -50877,7 +50562,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oTky2USG8kjdcUft7gfKuL + - id: hESW8JuJRBgW5NAYMhTzyn sortOrder: 6 fieldKey: custom_variables label: Custom Variables @@ -50896,7 +50581,7 @@ items: dynamic: false allowNull: false hidden: false - - id: wecqvNU3TFNBuMKB8BvYxz + - id: 5Xu3WkCfDZGeLEE8hDihDw sortOrder: 7 fieldKey: ad_user_data_consent_state label: Ad User Data Consent State @@ -50917,7 +50602,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: oGetRXaFKdzy2FtY34M5vC + - id: b6osR2gJJrupN5SEsbPCFL sortOrder: 8 fieldKey: ad_personalization_consent_state label: Ad Personalization Consent State @@ -50947,7 +50632,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" or event = "Audience Exited" fields: - - id: djZdFLmPGsregcV9THiuLz + - id: sYKvTs3XHTuaQJ3JMpPtAU sortOrder: 0 fieldKey: first_name label: First Name @@ -50967,7 +50652,7 @@ items: choices: null dynamic: false allowNull: false - - id: CB12vxKCstvCyXXPZFD9n + - id: jnP6smP7dxigHzd7XnwDpf sortOrder: 1 fieldKey: last_name label: Last Name @@ -50987,7 +50672,7 @@ items: choices: null dynamic: false allowNull: false - - id: vbqdcFtmiCDyH3Dqg2qu1b + - id: gyXSjqydeMdJC9hUKQkJfq sortOrder: 2 fieldKey: email label: Email @@ -51007,7 +50692,7 @@ items: choices: null dynamic: false allowNull: false - - id: hByWR51HdGg5EoaiafuE9x + - id: 23r2a7eAT3Ye5rVuXJQUmG sortOrder: 3 fieldKey: phone label: Phone @@ -51027,7 +50712,7 @@ items: choices: null dynamic: false allowNull: false - - id: a8GeWToPM2Wcfe4boo7gS8 + - id: pGBisyjtPDzStweEnru8LR sortOrder: 4 fieldKey: phone_country_code label: Phone Number Country Code @@ -51042,7 +50727,7 @@ items: choices: null dynamic: false allowNull: false - - id: e8AUKu2tR6jbPbqW2JFLZJ + - id: mzgN3hriVm24nmTL2odRyM sortOrder: 5 fieldKey: country_code label: Address Country Code @@ -51054,7 +50739,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9w9z3QrCoruCfaG8B23mZe + - id: di9YZ7KJ1Lb6uDSeQx57G4 sortOrder: 6 fieldKey: postal_code label: Postal Code @@ -51066,7 +50751,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7ALv8EKDkC1qtmbfbwqGD6 + - id: rv5YLC6QHznLb1DurZcyXv sortOrder: 7 fieldKey: crm_id label: CRM ID @@ -51080,7 +50765,7 @@ items: choices: null dynamic: false allowNull: false - - id: rP65xW26tmUboXZ5Lq43B1 + - id: 9B3urwjPfX26wULjrxunhu sortOrder: 8 fieldKey: mobile_advertising_id label: Mobile Advertising ID @@ -51096,7 +50781,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7uNM8TbSTxz5xzP9m9yZnF + - id: 214pE7AhFePMYx1NreyqHF sortOrder: 9 fieldKey: ad_user_data_consent_state label: Ad User Data Consent State @@ -51117,7 +50802,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: jwjPCzKkEwtGHchBknPF3v + - id: ubo1V42sdSB2rhWDdE6mT9 sortOrder: 10 fieldKey: ad_personalization_consent_state label: Ad Personalization Consent State @@ -51139,7 +50824,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: wGtAzhtj9PPyEXSJLwDnrk + - id: nDiBRzCeUzGUktQrFpJQcK sortOrder: 15 fieldKey: list_id label: Existing List ID @@ -51153,7 +50838,7 @@ items: choices: null dynamic: true allowNull: false - - id: 9NN9uMapupc9qVb9AsSqHZ + - id: 6CYZRDJGE5kYC3DzN89QXK sortOrder: 16 fieldKey: list_name label: List Name @@ -51165,7 +50850,7 @@ items: choices: null dynamic: false allowNull: false - - id: bA1FwbQ546KStcuexWGhvk + - id: rP6G7A4u18pJ4M8CJjbuNf sortOrder: 17 fieldKey: external_id_type label: External ID Type @@ -51173,7 +50858,7 @@ items: description: Customer match upload key types. placeholder: '' defaultValue: CONTACT_INFO - required: true + required: false multiple: false choices: - label: CONTACT INFO @@ -51184,7 +50869,7 @@ items: value: MOBILE_ADVERTISING_ID dynamic: false allowNull: false - - id: YzCzXrDbKcMRkXhYqGo8J + - id: uPyYkqtQZMBf2ddRV2sXCh sortOrder: 18 fieldKey: app_id label: App ID @@ -51199,7 +50884,7 @@ items: choices: null dynamic: false allowNull: false - - id: 55uwhX6zd6nMr1hRCjAXmV + - id: dhVK4wu3a9BKWPLTNoHH1k sortOrder: 19 fieldKey: retlOnMappingSave label: Connect to a Google Customer Match User List @@ -51222,7 +50907,7 @@ items: hidden: false defaultTrigger: null fields: - - id: gfdQh1buEe1EgtD22WeAVb + - id: hW86nggLFqwHaQcMqust66 sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -51234,7 +50919,7 @@ items: choices: null dynamic: true allowNull: false - - id: 9FAV4g1wFrw55YwKH36yk + - id: 5cGQ7TAfpuEMt5xRvuvEeG sortOrder: 1 fieldKey: caller_id label: Caller ID @@ -51248,7 +50933,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2Xn9E8YALY2bPbHHSuBFuE + - id: eYfLLFCbi3o2kwY6Njh135 sortOrder: 2 fieldKey: call_timestamp label: Call Timestamp @@ -51263,7 +50948,7 @@ items: choices: null dynamic: false allowNull: false - - id: iiaCnmzCrR8DWxA9AqdSBu + - id: ctVGoQ33jepVz2eM7L9y6m sortOrder: 3 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -51280,7 +50965,7 @@ items: choices: null dynamic: false allowNull: false - - id: mqueNJD8hTviyqE8HL8giE + - id: i1KPvWvqCoK7vA7APdDRuo sortOrder: 4 fieldKey: value label: Value @@ -51294,7 +50979,7 @@ items: choices: null dynamic: false allowNull: false - - id: q3bBaJXUeuqzYBh2KzgRyK + - id: p6rvSY8LuqEWYEVeHi6few sortOrder: 5 fieldKey: currency label: Currency @@ -51310,7 +50995,7 @@ items: choices: null dynamic: false allowNull: false - - id: mRPM7mP8EWjm6jCB544ypJ + - id: h3oZFQtZtuXvkZjohSwMKu sortOrder: 6 fieldKey: custom_variables label: Custom Variables @@ -51328,7 +51013,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8tcdWNX6GJj16wVkJ4TFoM + - id: qYs9ADuC4cUvPTf2UbAPhg sortOrder: 7 fieldKey: ad_user_data_consent_state label: Ad User Data Consent State @@ -51349,7 +51034,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: bwaMAHA1ZitNtdYwRsrKHC + - id: eWX8AxeQQWDGsFyjrE1U2q sortOrder: 8 fieldKey: ad_personalization_consent_state label: Ad Personalization Consent State @@ -51379,7 +51064,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 5QkfhqL59JZE2NWFBu5NL1 + - id: nTskMs95WwFE6yxszgQ7dU sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -51391,7 +51076,7 @@ items: choices: null dynamic: true allowNull: false - - id: 3STDBtj7RFSMRKdwUG3TVb + - id: s7P4KTn85A9VhM4ymkZk1 sortOrder: 1 fieldKey: adjustment_type label: Adjustment Type @@ -51416,7 +51101,7 @@ items: value: ENHANCEMENT dynamic: false allowNull: false - - id: bKabvzUrKcWAJ8pFwKXVEE + - id: uQ5WRVERqqkvmZNbHuADDH sortOrder: 2 fieldKey: adjustment_timestamp label: Adjustment Timestamp @@ -51434,7 +51119,7 @@ items: choices: null dynamic: false allowNull: false - - id: wg11XLpA6UpsgQZo11frhR + - id: beGFavgpnXuBF6hSwQe5nN sortOrder: 3 fieldKey: order_id label: Order ID @@ -51457,7 +51142,7 @@ items: choices: null dynamic: false allowNull: false - - id: q76yP7H76jKVP99eo1aYKu + - id: pkoAjQSCMHrMNecDmpEYvP sortOrder: 4 fieldKey: gclid label: GCLID @@ -51471,7 +51156,7 @@ items: choices: null dynamic: false allowNull: false - - id: oCKHK84nigMrttuKSidFNN + - id: mgf5Bg2AmB7JgeesA35xZ4 sortOrder: 5 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -51487,7 +51172,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3VCzScYtsT9NpfpNMNXVRr + - id: aYK22gsSFMStD6PY3LoJq5 sortOrder: 6 fieldKey: restatement_value label: Restatement Value @@ -51503,7 +51188,7 @@ items: choices: null dynamic: false allowNull: false - - id: oUvSWyGp9EefnRR7Ui9UFf + - id: x27b5CZt6p8GYkrc2qTCAx sortOrder: 7 fieldKey: restatement_currency_code label: Restatement Currency Code @@ -51519,7 +51204,7 @@ items: choices: null dynamic: false allowNull: false - - id: 78LQC8BB8yu3EStefqVSWe + - id: saVEr9jsHAnApLZXddgmNZ sortOrder: 8 fieldKey: phone_country_code label: Phone Number Country Code @@ -51534,7 +51219,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8UssvMerW2qBtaPjHSup5G + - id: xqfvrCw1bv3rctcYneAXSp sortOrder: 9 fieldKey: email_address label: Email Address @@ -51556,7 +51241,7 @@ items: choices: null dynamic: false allowNull: false - - id: t5yrbSLMd1oFyjJbFrMwgT + - id: sBbKHzKaHMFFKo566WLZvP sortOrder: 10 fieldKey: phone_number label: Phone Number @@ -51579,7 +51264,7 @@ items: choices: null dynamic: false allowNull: false - - id: UueYH8NVyAc1fNPkoAMwF + - id: jFGN1v9E1aag7LTevrf2jn sortOrder: 11 fieldKey: first_name label: First Name @@ -51599,7 +51284,7 @@ items: choices: null dynamic: false allowNull: false - - id: bQBWjnf3KRF9DQo3VXXXPK + - id: iN93zPhJCTtpjs6JLJJQn4 sortOrder: 12 fieldKey: last_name label: Last Name @@ -51621,7 +51306,7 @@ items: choices: null dynamic: false allowNull: false - - id: xfz8AhKbCR1hXC83EpVqtR + - id: pazQfBWyrbFbLihtowzTQG sortOrder: 13 fieldKey: city label: City @@ -51641,7 +51326,7 @@ items: choices: null dynamic: false allowNull: false - - id: cs2EUJqEdk7EtLdxAppGao + - id: rv1N7MbKNfRDk2DcjwEMxn sortOrder: 14 fieldKey: state label: State @@ -51661,7 +51346,7 @@ items: choices: null dynamic: false allowNull: false - - id: h14hMMNBDWho3pqs333Cag + - id: nzEgwgivyvDxhekAorbQBh sortOrder: 15 fieldKey: country label: Country @@ -51683,7 +51368,7 @@ items: choices: null dynamic: false allowNull: false - - id: uKsLB97ZC5qVJkcyrjaHFh + - id: p8S5ZiUpvZCM6LRSPLp4GY sortOrder: 16 fieldKey: postal_code label: Postal Code @@ -51703,7 +51388,7 @@ items: choices: null dynamic: false allowNull: false - - id: mjQpkopTHYsY1mLc8aBuW9 + - id: kzyLTupYyvMqRpR81otWDE sortOrder: 17 fieldKey: street_address label: Street Address @@ -51725,7 +51410,7 @@ items: choices: null dynamic: false allowNull: false - - id: jxBPVf26Tfmp9LDy4NmD1M + - id: w4cQE6sD2XNueUe8BcKZcX sortOrder: 18 fieldKey: user_agent label: User Agent @@ -51752,7 +51437,7 @@ items: hidden: false defaultTrigger: null fields: - - id: bqsYTMLwxJh1r4Jt8TR9We + - id: 9D9iShrZrbJi2Q7c7WQYyP sortOrder: 0 fieldKey: conversion_action label: Conversion Action ID @@ -51764,7 +51449,7 @@ items: choices: null dynamic: true allowNull: false - - id: uefDfvnNEZyxEy53VBdoqC + - id: uiXcGHWNTuxq24MUm9UDkS sortOrder: 1 fieldKey: gclid label: GCLID @@ -51776,7 +51461,7 @@ items: choices: null dynamic: false allowNull: false - - id: dsvqjpuSAF9pr5xL7MknaU + - id: 7fdSWkw11RojegYuSvUikM sortOrder: 2 fieldKey: gbraid label: GBRAID @@ -51790,7 +51475,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7hGov8gL76uZ18rHv3NDyx + - id: kAqmEjaME2gsmvdGPs687y sortOrder: 3 fieldKey: wbraid label: WBRAID @@ -51804,7 +51489,7 @@ items: choices: null dynamic: false allowNull: false - - id: k1aYfogJif71QUqSJ8jPj9 + - id: v5QqqjRQQo3Dh2mVU9ioWL sortOrder: 4 fieldKey: conversion_timestamp label: Conversion Timestamp @@ -51821,7 +51506,7 @@ items: choices: null dynamic: false allowNull: false - - id: h6qvN5kiNr1cP2W2mzHvYW + - id: 9QfTjMSq3LCjJ3kpGEWW3h sortOrder: 5 fieldKey: email_address label: Email Address @@ -51843,7 +51528,7 @@ items: choices: null dynamic: false allowNull: false - - id: bKwhxw4yWtaCsvnyMH5UHq + - id: fZzjyZ9JKv18vZtjFGXNzy sortOrder: 6 fieldKey: phone_country_code label: Phone Number Country Code @@ -51858,7 +51543,7 @@ items: choices: null dynamic: false allowNull: false - - id: 445oBDCcPA1MQTGZA6ud2G + - id: 5i1BTrJH8Sk9kUHFTwGr82 sortOrder: 7 fieldKey: phone_number label: Phone Number @@ -51881,7 +51566,7 @@ items: choices: null dynamic: false allowNull: false - - id: eCyZAVo6VR5MkUgDx1odCc + - id: jmCwYSYxJGgJyBJqFTrf7w sortOrder: 8 fieldKey: order_id label: Order ID @@ -51903,7 +51588,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7PEEAuwvjmokdqRfuKvGdn + - id: xgNBCxDBakwGF6bHC59ki4 sortOrder: 9 fieldKey: value label: Value @@ -51917,7 +51602,7 @@ items: choices: null dynamic: false allowNull: false - - id: ex9N6DxAezKqTxUAsnHVC3 + - id: 6qhNWVHkzNEH7JNkS21D9i sortOrder: 10 fieldKey: currency label: Currency @@ -51933,7 +51618,7 @@ items: choices: null dynamic: false allowNull: false - - id: wqAMNXvfsmRzqPmryjk77i + - id: etwYWBYjfb2JWTCWom2NVw sortOrder: 11 fieldKey: conversion_environment label: Conversion Environment @@ -51955,7 +51640,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: qk1PajJSicMRVa4ew8Cs2Z + - id: 75eznopfeVhgsyc9gv4D7j sortOrder: 12 fieldKey: merchant_id label: Merchant Center ID @@ -51967,7 +51652,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4gWBaErvmggHPqJKBjK44G + - id: 6iKnz83h6YA4ZrBkMTeuTT sortOrder: 13 fieldKey: merchant_country_code label: Merchant Center Feed Country Code @@ -51981,7 +51666,7 @@ items: choices: null dynamic: false allowNull: false - - id: btt4yAKsAfFViu8HyDdqRj + - id: mvnoe2qetDLS6XrPzF5Psa sortOrder: 14 fieldKey: merchant_language_code label: Merchant Center Feed Language Code @@ -51995,7 +51680,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8ZB9HzHERoD6o7rZXFBw65 + - id: uTHtFyWdJ28F6xUVDGXe7S sortOrder: 15 fieldKey: local_cost label: Local Transaction Cost @@ -52009,7 +51694,7 @@ items: choices: null dynamic: false allowNull: false - - id: mtkVmdghJb7fzoXuQtWBm7 + - id: bbniFMrGTpxx9XiWYh1HUd sortOrder: 16 fieldKey: items label: Items @@ -52030,7 +51715,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8EgRM8FqpqxM4Df38xWiWS + - id: wsEP2fkY8Z3RSSy6oxxTvg sortOrder: 17 fieldKey: custom_variables label: Custom Variables @@ -52048,7 +51733,7 @@ items: choices: null dynamic: false allowNull: false - - id: hziAxiW4j2jZWwV1BDuPE4 + - id: i191aQ6RpqXVmQEXXQXcph sortOrder: 18 fieldKey: ad_user_data_consent_state label: Ad User Data Consent State @@ -52069,7 +51754,7 @@ items: value: UNSPECIFIED dynamic: false allowNull: false - - id: sgHMU6o2iDMpFiv5H7pTJ1 + - id: ajZ5chPcQL4NaxqJCusTv4 sortOrder: 19 fieldKey: ad_personalization_consent_state label: Ad Personalization Consent State @@ -80751,7 +80436,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" fields: - - id: usqJEAgk51ReirFFURVLmJ + - id: kMgyerASLivvGmMF5YLRK1 sortOrder: 0 fieldKey: sftp_username label: Username @@ -80764,7 +80449,7 @@ items: dynamic: false allowNull: false hidden: false - - id: uhDMwkvXwTSCjtWBgqHEWg + - id: 3hnbAU6ztRqHAHtXdtsSS5 sortOrder: 1 fieldKey: sftp_password label: Password @@ -80777,7 +80462,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 6cVpBc42HMD7SUWoLwt8Qs + - id: dK2ei4KkRg13BtKKzfwUF9 sortOrder: 2 fieldKey: sftp_folder_path label: Folder Path @@ -80794,7 +80479,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 3pmmVzcFWmHzSL2yYNQriy + - id: x96cA8SB9oxXzywrLP7wXk sortOrder: 3 fieldKey: audience_key label: LiveRamp Audience Key @@ -80813,7 +80498,7 @@ items: dynamic: false allowNull: false hidden: false - - id: esrVbhGstvSY944NsR34mn + - id: twGu7B9VUEoGPoMKHUfD7G sortOrder: 4 fieldKey: identifier_data label: Identifier Data @@ -80826,7 +80511,7 @@ items: dynamic: false allowNull: false hidden: false - - id: dCqHg42bUEWdYtdUkWUBFG + - id: h1ASLUgE6GjxCMXyBBWG6y sortOrder: 5 fieldKey: unhashed_identifier_data label: Hashable Identifier Data @@ -80842,7 +80527,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 2oJMEgLR8HnZ1RKUhqgMam + - id: qS42Y8bSvzQYFTmcY55cT8 sortOrder: 6 fieldKey: delimiter label: Delimeter @@ -80856,7 +80541,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 9ZwpEMLLkB4rC76hohFMPy + - id: sJqPmPaKrfnUGCkrLDgddT sortOrder: 7 fieldKey: filename label: Filename @@ -80881,7 +80566,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" fields: - - id: mxfANQd9Cnza5iXWnZmF1k + - id: daCKHSi8JhZwut8Cxg6HR5 sortOrder: 0 fieldKey: s3_aws_access_key label: AWS Access Key ID @@ -80894,7 +80579,7 @@ items: dynamic: false allowNull: false hidden: false - - id: ay1kmzFSMsGJH6BvFtf5rU + - id: 89U7s6TP78WYwsCjPvE93u sortOrder: 1 fieldKey: s3_aws_secret_key label: AWS Secret Access Key @@ -80907,7 +80592,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 6vgzFX9P6x7BDQQgpDTv9e + - id: c66uem7Z16uXsNSbrwB8Bj sortOrder: 2 fieldKey: s3_aws_bucket_name label: AWS Bucket Name @@ -80920,7 +80605,7 @@ items: dynamic: false allowNull: false hidden: false - - id: abTZeZmSYAgmFv8Kn34STA + - id: iv4ZA4WQRK1tFGsE2nzcyE sortOrder: 3 fieldKey: s3_aws_region label: AWS Region (S3 only) @@ -80933,7 +80618,7 @@ items: dynamic: false allowNull: false hidden: false - - id: v3Py1oFSUxsgFRNFtr18Hk + - id: 2vea8KdovH8VMqtbXhx8pV sortOrder: 4 fieldKey: audience_key label: LiveRamp Audience Key @@ -80952,7 +80637,7 @@ items: dynamic: false allowNull: false hidden: false - - id: pLC9UR3MZP6y3AwUndbBQ8 + - id: vwYppuEgPFQwEPmvEnoDUt sortOrder: 5 fieldKey: identifier_data label: Identifier Data @@ -80965,7 +80650,7 @@ items: dynamic: false allowNull: false hidden: false - - id: 5aksemwJx5duYQAPGq2spY + - id: nFg9kJWTyvuq9M5WDdkTdE sortOrder: 6 fieldKey: unhashed_identifier_data label: Hashable Identifier Data @@ -80981,7 +80666,7 @@ items: dynamic: false allowNull: false hidden: false - - id: tB2EPnyewnESAHcppyX3i8 + - id: 9xUCLtDdUuCUBzMjtRWr3W sortOrder: 7 fieldKey: delimiter label: Delimeter @@ -80995,7 +80680,7 @@ items: dynamic: false allowNull: false hidden: false - - id: wqTtbxeb946gRQ2a4rdS7E + - id: 8xZ1w2rx3r1M5qWjsihLWf sortOrder: 8 fieldKey: filename label: Filename @@ -81012,6 +80697,21 @@ items: dynamic: false allowNull: false hidden: false + - id: 9gzRouweQC4noqggvXoywB + sortOrder: 11 + fieldKey: s3_aws_bucket_path + label: AWS Bucket Path [optional] + type: STRING + description: >- + Optional path within the S3 bucket where the files will be uploaded to. + If not provided, files will be uploaded to the root of the bucket. + Example: "folder1/folder2" + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false presets: [] partnerOwned: false - id: 54521fd925e721e32a72eed0 diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index f6c3af5c5e..5c270665c6 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2025-06-12 +# destination data last updated 2025-06-20 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index 2bcad5b20d..aee7fe1347 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2025-06-12 +# source categories last updated 2025-06-20 items: - display_name: A/B testing slug: a-b-testing diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml index 6e58829437..c5fe7d2bea 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2025-06-12 +# sources last updated 2025-06-20 items: - id: 8HWbgPTt3k display_name: .NET diff --git a/src/connections/destinations/catalog/actions-amazon-conversions-api/index.md b/src/connections/destinations/catalog/actions-amazon-conversions-api/index.md new file mode 100644 index 0000000000..89d415803d --- /dev/null +++ b/src/connections/destinations/catalog/actions-amazon-conversions-api/index.md @@ -0,0 +1,165 @@ +--- +title: Amazon Conversions API (Actions) Destination +id: 683ef14a3f9aac157e3a3446 +hide-personas-partial: true +hide-boilerplate: false +hide-dossier: true +private: true +hidden: true +beta: true + +--- +The Amazon Conversions API (Actions) destination is a server-to-server integration with the Amazon Events API. This destination allows advertisers to send real-time or offline conversion events data from Segment directly to Amazon without needing Amazon Ad Tag (AAT) setup. + +This enables advertisers to evaluate the effectiveness of their Amazon marketing campaigns regardless of the location of the conversion and utilize this information to drive campaign optimization. The Events API can help strengthen performance and decrease cost per action with more complete attribution, improved data reliability, and better optimized delivery. + +## Benefits of Amazon Conversions API (Actions) + +The Amazon Conversions API destination provides the following benefits: + +- **Simplified setup**. Data mapping for actions-based destinations happens during configuration, which eliminates the need for most settings. +- **Clearer data mapping**. Actions-based destinations enable you to define the mapping between the data Segment receives from your source and the data Segment sends to the Amazon Conversions API. +- **Prebuilt event mappings**. Standard events like `Add to Shopping Cart` and `Checkout` come preconfigured with recommended parameters. +- **Multiple event types**. Support for various conversion event types including purchases, sign-ups, leads, and more. +- **Multi-platform support**. Send events from websites, Android apps, iOS apps, Fire TV, or offline sources. +- **Comprehensive user matching**. Multiple matching keys are available including email, phone, name, address, and mobile advertising IDs. +- **Data normalization**. Data is normalized before it's hashed to send to Amazon Conversions. +- **Custom attributes**. Includes additional context with event-specific attributes. +- **Consent management**. Built-in support for various privacy frameworks including Amazon consent options, TCF, and GPP. + +## Getting started + +Before connecting to the Amazon Conversions API destination, you must have an [Amazon Advertising account](https://advertising.amazon.com/API/docs/en-us/guides/onboarding/overview){:target="_blank"} and an Advertiser ID. + +To connect the Amazon Conversions API Destination: + +1. From the Segment web app, go to **Connections > Catalog**. +2. Search for **Amazon Conversions Api** in the top right corner. +3. From the search results under **Destinations**, select the **Amazon Conversions Api** destination and then click **Add destination** +4. Select the source that will send data to the Amazon Conversions API destination and follow the prompts to name your destination. +5. On the **Basic Settings** page, enter: + - Destination name + - **Region:** - Select North America (NA), Europe (EU), or Far East (FE) based on your Amazon Advertising account + - **Amazon Advertiser ID:** - Your Amazon Advertising Account ID +6. Authenticate using OAuth when prompted. +7. Go to the **Mappings** tab. Prebuilt mappings, like `Checkout`, `Search`, and `Add to Shopping Cart`, include predefined parameters. +8. To create a new mapping: + - Click **New Mapping** and select **Track Conversion**. + - Configure and enable the mapping. +9. Follow the steps in [Customizing mappings](/docs/connections/destinations/actions/#customize-mappings). +10. Toggle **Enable Destination** on, then click **Save Changes**. + +{% include components/actions-fields.html settings="true"%} + +> info "Event Action Source" +> By default, Segment sends all mappings as `website` conversions. To send events from mobile apps, Fire TV, or offline sources, set the Event Action Source in each mapping to the appropriate value: `android`, `ios`, `fire_tv`, or `offline`. + +## Supported event types + +Amazon Conversions API supports the following standard event types: + +| Event Type | Description | +| ---------- | ----------- | +| ADD_TO_SHOPPING_CART | When a user adds an item to their shopping cart | +| APPLICATION | When a user submits an application | +| CHECKOUT | When a user initiates a checkout process | +| CONTACT | When a user submits contact information | +| LEAD | When a user perform an action that initiates a sales lead | +| OFF_AMAZON_PURCHASES | When a user completes a purchase | +| MOBILE_APP_FIRST_START | When a user opens a mobile app for the first time | +| PAGE_VIEW | When a user views a page | +| SEARCH | When a user performs a search | +| SIGN_UP | When a user creates an account | +| SUBSCRIBE | When a user subscribes to a service | +| OTHER | For custom events that don't fit into the standard types | + +## Match keys for user identification + +Amazon requires at least one match key to identify the user associated with each conversion event. Amazon Conversions API supports the following match keys: + +| Match Key | Description | +| --------- | ----------- | +| email | User's email address (is hashed) | +| phone | User's phone number (is hashed) | +| firstName | User's first name (is hashed) | +| lastName | User's last name (is hashed) | +| address | User's street address (is hashed) | +| city | User's city (is hashed) | +| state | User's state (is hashed) | +| postalCode | User's postal code (is hashed) | +| maid | Mobile advertising ID (ADID, IDFA, or FIREADID) | +| rampId | RAMP ID for attribution to traffic events | +| matchId | Custom match ID for the user | + +Segment automatically maps these fields from standard identity traits when available. + +## Consent management + +For EU advertisers and users, Amazon requires consent information to be included with conversion events. The Amazon Conversions API supports several consent mechanisms. + +### Geographic consent (IP Address) + +For basic consent management, include the user's IP address. Segment automatically maps this from the context.ip field when available. + +### Amazon consent format + +Amazon-specific consent format with two primary fields: + +| Consent Field | Description | Values | +| ------------- | ----------- | ------ | +| amznAdStorage | Whether the user has consented to cookie-based tracking | GRANTED, DENIED | +| amznUserData | Whether the user has consented to use personal data for advertising | GRANTED, DENIED | + +### Industry standard consent + +For more comprehensive consent management: + +| Consent Field | Description | +| ------------- | ----------- | +| tcf | Transparency and Consent Framework (TCF) encoded string | +| gpp | Global Privacy Platform (GPP) encoded string | + +## Data processing options + +The Amazon Conversions API supports data processing options to control how events are processed: + +| Option | Description | +| ------ | ----------- | +| LIMITED_DATA_USE | Signals that an event should be processed with limited data use restrictions. Events marked with this option won't be used for advertising purposes. | + +## Custom attributes + +You can include custom attributes with your events to provide additional context. Each custom attribute has: + +- **Name**: Identifier for the attribute (only letters, numbers, and underscores allowed) +- **Data Type**: STRING, NUMBER, or BOOLEAN +- **Value**: The attribute value (maximum 256 characters) + +## FAQ + +#### How does deduplication work? + +Amazon Conversions API uses the `clientDedupeId` field to prevent duplicate events. By default, Segment maps the messageId to this field. For events with the same clientDedupeId, only the latest event will be processed. + +#### What regions are supported? + +Amazon Conversions API supports three regions: +- North America (NA) +- Europe (EU) +- Far East (FE) + +Select the region that corresponds to your Amazon Advertising account. + +#### What are the requirements for OFF_AMAZON_PURCHASES events? + +OFF_AMAZON_PURCHASES events have additional optional fields: +- `currencyCode`: The currency of the purchase in ISO-4217 format (e.g., USD, EUR) +- `unitsSold`: The number of items purchased (defaults to 1 if not provided) + +#### How are PII fields handled? + +Personally identifiable information (PII) fields like email, phone, name, and address are automatically hashed before sending to Amazon. + +#### How can I verify events in Amazon? + +After you start sending events, you should see them in your Amazon Advertising dashboard under conversion tracking reports. Allow some time for the events to be processed and attributed. diff --git a/src/connections/destinations/catalog/actions-intercom-cloud/index.md b/src/connections/destinations/catalog/actions-intercom-cloud/index.md index b62ec0b0d3..6b69f194d0 100644 --- a/src/connections/destinations/catalog/actions-intercom-cloud/index.md +++ b/src/connections/destinations/catalog/actions-intercom-cloud/index.md @@ -47,3 +47,8 @@ If a company is created without an attached user, the company does not appear on ### Why isn’t a user getting attached to a company? When you use the Identify Company action, Segment creates or updates a company's information. In the same action, Segment also attaches the user in your group call to that company. If the user doesn't exist in Intercom when the action runs, Segment creates or updates the company but can't attach the user. Ensure the user is created in Intercom first. + +### Why do I get a 404 Not Found error when sending Track events to Intercom? +A `404 Not Found` error typically occurs when attempting to update a user in Intercom who does not yet exist in the system. This can happen if an Identify event, which includes the corresponding `userId`, was not sent before the Track event that resulted in the `404` error. + +To resolve this, ensure that Identify events are sent **before** Track events to ensure proper processing and avoid errors. diff --git a/src/connections/destinations/catalog/actions-reddit-audiences/index.md b/src/connections/destinations/catalog/actions-reddit-audiences/index.md index 3ba2f1f0d2..a12eac4470 100644 --- a/src/connections/destinations/catalog/actions-reddit-audiences/index.md +++ b/src/connections/destinations/catalog/actions-reddit-audiences/index.md @@ -1,6 +1,7 @@ --- title: Reddit Audiences id: 66f2b0f961bb2128729079bb +redirect_from: '/connections/destinations/catalog/reddit-audiences/' --- {% include content/plan-grid.md name="actions" %} diff --git a/src/connections/destinations/catalog/actions-reddit-conversions-api/index.md b/src/connections/destinations/catalog/actions-reddit-conversions-api/index.md index 0d3af5d7b1..b645afe69d 100644 --- a/src/connections/destinations/catalog/actions-reddit-conversions-api/index.md +++ b/src/connections/destinations/catalog/actions-reddit-conversions-api/index.md @@ -1,6 +1,7 @@ --- title: Reddit Conversions API id: 66cc766ef4b1c152177239a0 +redirect_from: '/connections/destinations/catalog/reddit-conversions-api/' --- {% include content/plan-grid.md name="actions" %} diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index f40678d9df..00e32f89b0 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -239,8 +239,8 @@ You can manually test your code from the functions editor: - Error messages display errors surfaced from your function. - Logs display any messages to console.log() from the function. -> warning "" -> The Event Tester and Mapping Tester don't support Insert Functions. They won't apply an Insert Function, show its impact on your data, or send data through the Insert Function pipeline. Use the Function Tester instead to evaluate how your Insert Function affects your data. +> success "" +> Segment supports Insert Functions in both the Event Tester and Mapping Tester. ## Save and deploy the destination insert function diff --git a/src/connections/sources/catalog/libraries/website/javascript/faq.md b/src/connections/sources/catalog/libraries/website/javascript/faq.md index 412e13a699..7b98e57b3d 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/faq.md +++ b/src/connections/sources/catalog/libraries/website/javascript/faq.md @@ -9,16 +9,16 @@ Analytics.js doesn't automatically collect IPv6 addresses. If IPv6 is available ## Is there a size limit on requests? -Yes, the limit is 32KB per event message. Events with a payload larger than 32KB are not accepted by Analytics.js. Segment servers return a 400 response with the error message: `Exceed payload limit`. +Yes, the limit is 32 KB per event message. Events with a payload larger than 32 KB are not accepted by Analytics.js. Segment servers return a 400 response with the error message: `Exceed payload limit`. ## If Analytics.js fails to load, are callbacks not fired? -In the event that Analytics.js does not load, callbacks passed into your API calls do not fire. This is as designed, because the purpose of callbacks are to provide an estimate that the event was delivered and if the library never loads, the events won't be delivered. +In the event that Analytics.js does not load, callbacks passed into your API calls do not fire. This is by design, because the purpose of a callback is to provide an indication that the event was delivered. If the library never loads, the events won't be delivered. ## Is there an updated version of the Segment snippet? Segment released an updated version of the Analytics.js snippet, which introduces several enhancements and fixes that might improve your setup. For a full list of version updates, see the Analytics.js snippet's [Releases](https://github.com/segmentio/snippet/releases){:target="_blank”}. -You can find the latest version of the Segment snippet in your JavaScript source's Overview tab or in the [Quickstart: Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2a-add-the-segment-snippet) documentation. +You can find the latest version of the Segment snippet in your JavaScript source's **Overview** tab or in the [Quickstart: Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2a-add-the-segment-snippet) documentation. While there is no deadline to upgrade your snippet to the latest version, upgrading lets you use the latest improvements in the Segment library. @@ -27,16 +27,16 @@ While there is no deadline to upgrade your snippet to the latest version, upgrad In May 2018, Segment began collecting client-side performance metrics in Analytics.js. This includes metrics like: -- When client side integrations are initialized and when they fail -- When messages are sent to client side integrations and when they fail +- When client-side integrations are initialized and when they fail +- When messages are sent to client-side integrations and when they fail -Segment added these metrics to proactively identify and resolve issues with individual client-side integrations. These metrics are connected to alerts that notify Segment's on-call engineers to take action on these quickly. +Segment added these metrics to proactively identify and resolve issues with individual client-side integrations. These metrics trigger alerts that notify Segment's on-call engineers to take action promptly. There should be no noticeable impact to your data flow. You may notice Analytics.js make an extra network request in the network tab to carry the metrics data to Segment's servers. This extra network request is not made frequently, since the data is sampled and batched every 30 seconds. ## How are properties with `null` and `undefined` values treated? -Segment treats property values set to `null` as null values and drops events set to`undefined`. +Segment treats property values set to `null` as null values and drops events set to `undefined`. For example: @@ -48,6 +48,7 @@ console.log(JSON.stringify({ x: undefined, y: 6 })); // expected output: "{"y":6}" ``` Segment uses the [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify){:target="blank"} method under the hood. + ## Can I overwrite the context fields? Yes. This can be useful if some of these fields contain information you don't want to collect. @@ -65,7 +66,7 @@ analytics.track("Receipt Viewed", {}, { ``` This works for any [context field](/docs/connections/spec/common/#context) that Segment automatically collects. -When working with Page calls, you can overwrite context fields by following the above instructions. However, because the `context.page` fields are also available in the `properties` parameter for page calls, you must also prevent the same fields in the `properties` parameter from being included in your Page call. Use the code in the following example to overwrite `url` available in context field `page.url` and properties parameter: +When working with Page calls, you can overwrite context fields by following the above instructions. However, because the `context.page` fields are also available in the `properties` parameter for Page calls, you must also prevent the same fields in the `properties` parameter from being included in your Page call. Use the code in the following example to overwrite `url` available in context field `page.url` and properties parameter: ```js analytics.page("Receipt Page", { @@ -79,7 +80,7 @@ analytics.page("Receipt Page", { ## Can I add context fields that do not already exist? -Yes. You can add context fields by passing them into the options object as the third argument of the event call. For example, the analytics.js library does not automatically collect location information, but you can add it to the context object. To add location information into the context object, pass it into the third argument as in the following example: +Yes. You can add context fields by passing them into the options object as the third argument of the event call. For example, the Analytics.js library does not automatically collect location information, but you can add it to the context object. To add location information into the context object, pass it into the third argument as in the following example: ```js analytics.track("Order Completed", {}, { @@ -97,7 +98,7 @@ Some destinations accept properties only. As a result, custom context fields you ## What is the impact of exposing the source's write keys? -Segment's library architecture requires you to expose the write key for client-side tracking to work. Other major tools, like Google Analytics, Mixpanel, Kissmetrics, Hubspot, and Marketo, also require you to expose your write key. +Segment's library architecture requires you to expose the write key for client-side tracking to work. Other major tools, like Google Analytics, Mixpanel, Kissmetrics, HubSpot, and Marketo, also require you to expose your write key. If you see any unusual behavior associated with your write key, generate a new key immediately. To generate a new key, navigate to **Connections > Sources** and select your source. On the **Settings** tab, go to the **API Keys** section and click **Generate New Key**. @@ -126,7 +127,7 @@ You'll also need to modify the Segment script with your `nonce` tag, which shoul ## How is the referrer value set? -The Analytics.js library sets the `context.page.referrer` value from the [`window.document.referrer` property](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer){:target="_blank"} set in the browser. If you notice unexpected referrer values reaching Segment, check how this value is being set on your website. +The Analytics.js library sets the `context.page.referrer` value from the [`window.document.referrer` property](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer){:target="_blank"} set in the browser. If you notice unexpected referrer values reaching Segment, check how this value is set on your website. ## Are there any rate limits in place for the CDN settings endpoint? @@ -142,4 +143,4 @@ If you need this functionality, you have a couple of options: **Use a third-party API**: Alternatively, you can use third-party services like Geolocation API to convert IP addresses to geolocation data. Afterward, you can pass this information as a trait in Identify calls or as a property in Track calls to Segment. This allows you to manage geolocation data according to your specific needs, though it will likely require engineering resources. ## Why is my payload populating incorrectly? -Payload parameters aren't populated in a guaranteed order. Your payload should still be ingested as long as all necessary parameters are included. +Payload parameters aren't populated in a guaranteed order. Your payload will still be ingested as long as all necessary parameters are included. diff --git a/src/connections/sources/catalog/libraries/website/javascript/identity.md b/src/connections/sources/catalog/libraries/website/javascript/identity.md index 7f57aa9c60..884cb96b3e 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/identity.md +++ b/src/connections/sources/catalog/libraries/website/javascript/identity.md @@ -3,11 +3,11 @@ title: Managing identity in Analytics.js strat: ajs --- -This page explains how Analytics.js identifies users, and passes userID and anonymousID data, and how to override and change this information. +This page explains how Analytics.js identifies users, passes `userID` and `anonymousID` data, and how to override and change this information. -## Segment ID Persistence +## Segment ID persistence -To ensure high fidelity, first-party customer data, Segment writes the user's IDs to the user's local storage, and uses that as the Segment ID on the cookie whenever possible. Local Storage is meant for storing this type of first-party customer information. +To ensure high fidelity, first-party customer data, Segment writes the user's IDs to the user's local storage, and uses that as the Segment ID on the cookie whenever possible. Local storage is meant for storing this type of first-party customer information. If a user returns to your site after the cookie expires, Analytics.js looks for an old ID in the user's `localStorage`, and if one is found, sets it as the user's ID again in the new cookie. If a user clears their cookies _and_ `localstorage`, all of the IDs are removed, and the user gets a completely new `anonymousID` when they next visit the page. @@ -30,8 +30,8 @@ Example: ajs_anonymous_id=%2239ee7ea5-b6d8-4174-b612-04e1ef3fa952 ``` -You can override the default-generated anonymousID in code using the methods described below: -- [Set anonymousId from the Segment snippet](#override-the-anonymous-id-from-the-segment-snippet) (before the `ready` method returns) +You can override the default-generated `anonymousID` in code using the methods described below: +- [Set anonymousId from the Segment snippet](#override-the-anonymous-id-from-the-segment-snippet) (before the Ready method returns) - [Use a call to override the anonymousID](#override-the-default-anonymous-id-with-a-call) - [Set `anonymousId` in the `options` object of a call](#override-the-anonymous-id-using-the-options-object) @@ -43,9 +43,9 @@ You can get the user's current `anonymousId` using the following call: analytics.user().anonymousId(); ``` -If the user's `anonymousId` is `null` (meaning not set) when you call this function, Analytics.js automatically generated and sets a new `anonymousId` for the user. +If the user's `anonymousId` is `null` (meaning not set) when you call this function, Analytics.js automatically generates and sets a new `anonymousId` for the user. -If you are using the npm library, the previous call returns a promise for `user()`. As a workaround, you'll need to grab the user's current `anonymousId` in the following way: +If you're using the npm library, the previous call returns a promise for `user()`. As a workaround, you'll need to grab the user's current `anonymousId` in the following way: ```js analytics.instance?.user().anonymousId() @@ -57,13 +57,13 @@ A user's `anonymousId` changes when any of the following conditions are met. - The user clears their cookies _and_ `localstorage`. - Your site or app calls [`analytics.reset()`](/docs/connections/sources/catalog/libraries/website/javascript/#reset-or-logout) during in the user's browser session. -- Your site or app calls `analytics.identify()` with a userId that is different from the current userId. -- Your site or app is setting `ajs_user_id` to an empty string or calling `analytics.user().id('')` before calling `analytics.identify()`. This sequence of events will result in a new anonymousId being set when `analytics.identify()` is called. +- Your site or app calls `analytics.identify()` with a `userId` that is different from the current `userId`. +- Your site or app is setting `ajs_user_id` to an empty string or calling `analytics.user().id('')` before calling `analytics.identify()`. This sequence of events will result in a new `anonymousId` being set when `analytics.identify()` is called. ### Override the Anonymous ID from the Segment snippet -You can also set the `anonymousId` immediately inside your Segment snippet, even before the `ready` method returns. +You can also set the `anonymousId` immediately inside your Segment snippet, even before the Ready method returns. ```js analytics.load('writekey'); @@ -71,14 +71,14 @@ You can also set the `anonymousId` immediately inside your Segment snippet, even analytics.setAnonymousId('ABC-123-XYZ'); ``` -Use this method if you are queueing calls before `ready` returns and they require a custom `anonymousId`. Keep in mind that setting the `anonymousId` in Analytics.js does not overwrite the anonymous tracking IDs for any destinations you're using. +Use this method if you are queueing calls before Ready returns and they require a custom `anonymousId`. Keep in mind that setting the `anonymousId` in Analytics.js does not overwrite the anonymous tracking IDs for any destinations you're using. > info "" -> Device-mode destinations that load their code on your site _might_ also set their own anonymous ID for the user that is separate and different from the Segment generated one. Some destinations use the Segment `anonymousId`. Read the documentation for each Destination to find out if a Destination sets its own ID. +> Device-mode destinations that load their code on your site _might_ also set their own anonymous ID for the user that is separate and different from the Segment generated one. Some destinations use the Segment `anonymousId`. Read the documentation for each destination to find out if a destination sets its own ID. ### Override the default Anonymous ID with a call -If the default generated UUID does not meet your needs, you can override it `anonymousId` for the current user using either of the following methods. +If the default generated UUID does not meet your needs, you can override the `anonymousId` for the current user with either of the following methods: ```js analytics.user().anonymousId('ABC-123-XYZ'); @@ -92,17 +92,19 @@ These methods behave exactly the same. ### Override the Anonymous ID using the options object -Or in the `options` object of [`identify`](/docs/connections/spec/identify/), [`page`](/docs/connections/spec/page/), or [`track`](/docs/connections/spec/track/) calls, like this: +You can override the `anonymousID` in the `options` object of [Identify](/docs/connections/spec/identify/), [Page](/docs/connections/spec/page/), or [Track](/docs/connections/spec/track/) calls, like this: -Set the anonymousId in the Options object using the format in the following examples. +Set the `anonymousId` in the `options` object using the format in the following examples. -The custom anonymousId persists when you use these methods, even if you do not explicitly specify the anonymousId in the calls. +The custom `anonymousId` persists when you use these methods, even if you do not explicitly specify the `anonymousId` in the calls. -For example, after the Track call below sets the anonId, any later track calls from this user will have the anonymousId of `ABC-123-XYZ`, even if it is not explicitly specified in the track call. +For example, after a Track call sets the `anonymousID` to `ABC-123-XYZ`, any additional Track calls from this user will have the same `anonymousId`, even if it's not explicitly specified in the Track call. #### Override anonymousId in an Identify call +You can override `anonymousID` with an Identify call. For example: + ```js analytics.identify('user_123', { name: 'Jane Kim' @@ -113,12 +115,16 @@ analytics.identify('user_123', { #### Override anonymousId on a Page call +You can override `anonymousID` with a Page call. For example: + ```js analytics.page({}, { anonymousId: 'ABC-123-XYZ' }); ``` #### Override anonymousId on a Track call +You can override `anonymousID` with a Track call. For example: + ```js analytics.track('Email Clicked', { callToAction: 'Signup' @@ -146,7 +152,7 @@ Consider this Identify event: ```js analytics.identify('12091906-01011992', { plan_id: 'Paid, Tier 2', - email: 'grace@usnavy.gov' + email: 'grace@example.com' }); ``` @@ -166,7 +172,7 @@ analytics.track('Clicked Email', { ); ``` -This appends the `plan_id` trait to this Track event. This does _not_ add the name or email, since those traits were not added to the `context` object. You must do this for every following event you want these traits to appear on, as the `traits` object does not persist between calls. +This appends the `plan_id` trait to the Track event. This does _not_ add the name or email, since those traits were not added to the `context` object. You must do this for every following event you want these traits to appear on, as the `traits` object does not persist between calls. By default, non-Identify events (like Track or Page) **don't automatically collect user traits** from previous Identify calls. To include traits from an `identify()` event in later events, you'll need to add them manually to the `context.traits` object within the `options` parameter. @@ -180,9 +186,9 @@ Each Analytics.js method has an `options` parameter where you can pass the `cont Adding traits to events is especially useful if you're using [Actions destinations](/docs/connections/destinations/actions/), since it makes those traits available for mapping in the destination’s configuration. -## Clearing Traits +## Clearing traits -You can pass an empty object to the `traits` object to clear _all_ cached traits for a User or Group. +You can pass an empty object to the `traits` object to clear _all_ cached traits for a user or group. Traits are cached by default when you call the Identify and Group methods. You can clear the `traits` object for the user or group by passing `traits` an empty object: @@ -195,13 +201,13 @@ analytics.group().traits({}); ## Using analytics.user() and analytics.group() -You can use the `user` or `group` method as soon as the Analytics.js library loads, to return information about the currently identified user or group. This information is retrieved from the user's cookie. +You can use the User or Group method as soon as the Analytics.js library loads, to return information about the currently identified user or group. This information is retrieved from the user's cookie. > success "" -> **Tip:** You can wrap any reference to `user()` or `group()` in a [ready function block](/docs/connections/sources/catalog/libraries/website/javascript#ready) to ensure that Analytics.js has fully loaded so these methods are available. +> You can wrap any reference to `user()` or `group()` in a [ready function block](/docs/connections/sources/catalog/libraries/website/javascript#ready) to ensure that Analytics.js has fully loaded so these methods are available. Examples: @@ -228,7 +234,7 @@ analytics.ready(function() { ## Anonymizing IP -Segment automatically collects the user's IP address for device-based (iOS, Android, Analytics.js and Xamarin) events. +Segment automatically collects the user's IP address for device-based (iOS, Android, Analytics.js, and Xamarin) events. > info "IPv6" > At the moment, Segment doesn't support automatically collecting IPv6 addresses. diff --git a/src/connections/sources/catalog/libraries/website/javascript/middleware.md b/src/connections/sources/catalog/libraries/website/javascript/middleware.md index 340ada5a66..9be9c62b4c 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/middleware.md +++ b/src/connections/sources/catalog/libraries/website/javascript/middleware.md @@ -4,21 +4,21 @@ strat: ajs --- -Middlewares allow developers to extend Analytics.js with custom code which runs on every event. This code has full access to the DOM and Browser API, and helps customers enrich and transform event payloads. Source Middlewares and Destination Middlewares are available on the Analytics.js snippet version `4.12.0` and later. +Middlewares allow developers to extend Analytics.js with custom code that runs on every event. This code has full access to the DOM and Browser API, and helps customers enrich and transform event payloads. Source and destination middlewares are available on the Analytics.js snippet version `4.12.0` and later. -Analytics.js can be extended using two functions: +Analytics.js can be extended using 2 functions: ```js addSourceMiddleware(middleware) addDestinationMiddleware(targetIntegration, middleware1, middleware2, ...) ``` -The first function (Source Middleware) allows you to manipulate the payload and filter events on a per-source basis, while the second function (Destination Middleware) allows this on a per destination basis. Middlewares run in the browser. +The first function (source middleware) allows you to manipulate the payload and filter events on a per-source basis, while the second function (destination middleware) allows this on a per destination basis. Middlewares run in the browser. > info "" -> **Note**: Destination-middleware only act on [data sent to destinations in device-mode](/docs/connections/destinations#connection-modes). Since the destination middleware code exists in your app or project, it cannot transform the data sent from the Segment servers to the destination endpoint. +> Destination-middleware only act on [data sent to destinations in device-mode](/docs/connections/destinations#connection-modes). Since the destination middleware code exists in your app or project, it cannot transform the data sent from the Segment servers to the destination endpoint. -## Using Source Middlewares +## Using source middlewares To add source middleware, use the following API: @@ -26,12 +26,11 @@ To add source middleware, use the following API: analytics.addSourceMiddleware(({ payload, next, integrations }) => .... ) ``` -- `payload` represents the event payload sent by Analytics.js. To change the value of the `payload`, mutate the `payload.obj` object. (See the example below.) +- `payload` represents the event payload sent by Analytics.js. To change the value of the `payload`, mutate the `payload.obj` object, as in the example below. - `next` represents the next function to be called in the source middleware chain. If the middleware provided does not call this function, the event is dropped on the client and is not delivered to Segment or any destinations. -- `integrations` is an array of objects representing all the integrations that the payload is sent to. If an integration in this array is set to a ‘falsey' value then the event is not be sent to the Integration. +- `integrations` is an array of objects representing all the integrations that the payload is sent to. If an integration in this array is set to a falsy value, then the event is not sent to the integration. -### Examples -#### Modifying an event +#### Example: Modifying an event ```js analytics.addSourceMiddleware(({ payload, next }) => { const { event } = payload.obj.context @@ -42,7 +41,7 @@ analytics.addSourceMiddleware(({ payload, next }) => { }); ``` -#### Dropping an event +#### Example: Dropping an event ```js analytics.addSourceMiddleware(({ payload, next }) => { const { event } = payload.obj.context @@ -53,7 +52,7 @@ analytics.addSourceMiddleware(({ payload, next }) => { }); ``` -## Using Destination Middlewares +## Using destination middlewares To add destination middleware, use the following API: @@ -62,7 +61,7 @@ To add destination middleware, use the following API: analytics.addDestinationMiddleware('integrationA', ({ payload, next, integration }) => .... ) ``` -- `payload` represents the event payload sent by Analytics.js. To change the value of the `payload`, mutate the `payload.obj` object. (See the example below.) +- `payload` represents the event payload sent by Analytics.js. To change the value of the `payload`, mutate the `payload.obj` object, as in the example below. - `next` represents the next function to be called in the destination middleware chain. If the middleware provided does not call this function, then the event is dropped completely for the given destination. - `integration` is a string value representing the integration that this middleware is applied to. To apply middleware to all destinations (excluding Segment.io), you can use the `*` value. @@ -87,11 +86,11 @@ analytics.addDestinationMiddleware('integrationA', ({ payload, next, integration > info "" -> **Note**: Destination-middleware only act on [data sent to destinations in device-mode](/docs/connections/destinations#connection-modes). Since the destination middleware code exists in your app or project, it cannot transform the data sent from the Segment servers to the destination endpoint. +> Destination middleware only act on [data sent to destinations in device-mode](/docs/connections/destinations#connection-modes). Since the destination middleware code exists in your app or project, it cannot transform the data sent from the Segment servers to the destination endpoint. ## Adding middlewares to Analytics.js -The above defined Source & Destination Middleware can be added to the Analytics.js execution chain as: +The above defined source and destination middleware can be added to the Analytics.js execution chain as: ```js analytics.addSourceMiddleware(() => ...); @@ -99,17 +98,17 @@ analytics.addDestinationMiddleware('integrationA', () => ...); ``` -You can call the `.addSourceMiddleware(fn)` multiple times, and the order of operations reflects the order in which you register your Source Middleware. +You can call the `.addSourceMiddleware(fn)` multiple times, and the order of operations reflects the order in which you register your source middleware. Both `.addSourceMiddleware(fn)` and `.addDestinationMiddleware('integration', fn, ...)` can be called before [`.load()`](/docs/connections/sources/catalog/libraries/website/javascript/#load-options). -## Braze Middleware +## Braze middleware -If you use the Braze (Appboy) destination in either [cloud or device mode](/docs/connections/destinations/#connection-modes) you can save Braze costs by "debouncing" duplicate `identify()` calls from Segment by adding our [open-source Middleware tool](https://github.com/segmentio/segment-braze-mobile-middleware) to your implementation. +If you use the Braze (Appboy) destination in either [cloud or device mode](/docs/connections/destinations/#connection-modes) you can reduce Braze costs by debouncing duplicate Identify calls from Segment. You can achieve this by adding Segment's [open-source middleware tool](https://github.com/segmentio/segment-braze-mobile-middleware){:target="_blank"} to your implementation. This optional middleware is disabled by default. When enabled, it ensures that only events where at least one changed trait value are sent to Braze, and events with duplicate traits are not sent. -To enable this Middleware for a JavaScript or Project source, go to `Analytics.js` in your source settings. +To enable this middleware for a JavaScript or Project source, go to **Analytics.js** in your source settings. ![BrazeMiddleware](images/sources_ajs_brazemiddleware.png) -More information about this tool and how it works [is available in the project's README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work). +More information about this tool and how it works is available in the project's [README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work){:target="_blank"}. diff --git a/src/connections/sources/catalog/libraries/website/javascript/querystring.md b/src/connections/sources/catalog/libraries/website/javascript/querystring.md index f105be3f82..445a787eff 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/querystring.md +++ b/src/connections/sources/catalog/libraries/website/javascript/querystring.md @@ -15,13 +15,12 @@ Here are the *optional* query parameters to use: | `ajs_prop_` | A property to pass to the Track call. | This won't implicitly trigger an event and is dependent on you also passing `ajs_event`. This property is included in the resulting Track call. | | `ajs_trait_` | A trait to pass to the Identify call. | This won't implicitly trigger any call and is dependent on you also passing `ajs_uid`. This trait is included in the resulting Identify call. | -For example, this URL: +For example, this URL creates the following events on the page: ```text http://segment.com/?ajs_uid=123456789abcd&ajs_event=Clicked%20Email&ajs_aid=abc123&ajs_prop_emailCampaign=First+Touch&ajs_trait_name=Karl+Jr. ``` - -would create the following events on the page. +Each trigger parameter is optional. You can pass up to **1 of each trigger parameter**, as shown in the following example: ```js analytics.identify('123456789abcd', { name: 'Karl Jr.' }); @@ -29,7 +28,7 @@ analytics.track('Clicked Email', { 'emailCampaign': 'First Touch' }); analytics.user().anonymousId('abc123'); ``` -Each trigger parameter is optional. You can pass up to **one of each trigger parameter** as shown in the example above. + ## How can I control query string processing? @@ -47,13 +46,13 @@ You can also keep query string processing on, but enforce validation rules. For ```js analytics.load('', { useQueryString: { - // set a pattern for anonymous id + // set a pattern for anonymousId aid: /([A-Z]{10})/, - // set a pattern for user id + // set a pattern for userId uid: /([A-Z]{6})/ } }) ``` > info "" -> The `useQueryString` option is **only** available when you load analytics.js through the [NPM package](https://www.npmjs.com/package/@segment/analytics-next){:target="_blank"}. +> The `useQueryString` option is **only** available when you load Analytics.js through the [npm package](https://www.npmjs.com/package/@segment/analytics-next){:target="_blank"}. diff --git a/src/connections/sources/catalog/libraries/website/javascript/single-page-apps.md b/src/connections/sources/catalog/libraries/website/javascript/single-page-apps.md index 42a8fbd546..5339bba4c2 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/single-page-apps.md +++ b/src/connections/sources/catalog/libraries/website/javascript/single-page-apps.md @@ -3,13 +3,13 @@ title: Single Page Applications strat: ajs --- -While Single Page Apps (SPAs) are great for many reasons, they do require some extra consideration in order to set up client-side tracking than with a traditional webpage. +While Single Page Apps (SPAs) offer many benefits, setting up client-side tracking requires extra consideration compared to traditional web pages. -By default, the Segment analytics.js library doesn’t generate or store the referrer value. Instead, the referrer value you see in the payload is the value returned by `document.referrer` directly from the browser, and the URL value is the canonical URL on the page. +By default, the Segment Analytics.js library doesn’t generate or store the referrer value. Instead, the `referrer` value you see in the payload is the value returned by `document.referrer` directly from the browser, and the `url` value is the canonical URL on the page. -When a user navigates between pages on an SPA website, there won’t be a referrer because there is no concept of a new page since it’s all a single page load. This means that the referrer will always be the same as it was on the first page call where someone was first directed to your site. However, in order to circumvent this, you can manually set the referrer and URL in your Segment calls by updating the context object. +When a user navigates between pages on an SPA website, there won’t be a referrer because there is no concept of a new page since it’s all a single page load. This means that the referrer will always be the same as it was on the first page call where someone was first directed to your site. However, in order to circumvent this, you can manually set the `referrer` and `url` values in your Segment calls by updating the context object. -For example, a Page call with the referrer and URL manually set looks like this: +For example, a Page call with the `referrer` and `url` manually set looks like this: ```js analytics.page({ @@ -29,20 +29,20 @@ analytics.track('Example Event', {}, {page: { ## Tracking emulated page views -Your application should update the URL in the address bar to emulate traditional webpage navigation. Full page requests aren't made in most of these instances since the resources are loaded on initial page load. This means that the Page call in the traditional analytics.js snippet won't fire again as a user navigates around your site. +Your application should update the URL in the address bar to emulate traditional webpage navigation. Full page requests aren't made in most of these instances since the resources are loaded on initial page load. This means that the Page call in the traditional Analytics.js snippet won't fire again as a user navigates around your site. -You should still place the snippet in the head of your site, but you should remove the Page call and fire it whenever you're emulating a page load. Segment recommends that you call [Page](/docs/connections/sources/catalog/libraries/website/javascript/#page) from the same block of logic that updates the view and URL path like below: +You should still place the snippet in the `` of your site, but you should remove the Page call and fire it whenever you're emulating a page load. Segment recommends that you call [Page](/docs/connections/sources/catalog/libraries/website/javascript/#page) from the same block of logic that updates the view and URL path, as shown below: ```js // The new view has been called to render analytics.page("Home") ``` -To track more than the page field, pass those fields in as additional properties. Segment recommends that you use variables to set information about page properties, rather than hard-coding. In most SPA frameworks, you can automate this by attaching the Page call to the routing service. +To track more than the page field, pass those fields in as additional properties. Segment recommends that you use variables to set information about page properties, rather than hardcoding them. In most SPA frameworks, you can automate this by attaching the Page call to the routing service. ## What to do with code that lives in the analytics.ready() function? -Analytics.js ships with a function called analytics.ready() which lets you make calls to the native integrations that Segment loads for you before they actually initialize. For instance, this is where you could choose to load a live chat widget only for users that you haven't yet identified with a userId. +Analytics.js ships with a function called `analytics.ready()` which lets you make calls to the native integrations that Segment loads for you before they actually initialize. For instance, this is where you could choose to load a live chat widget only for users that you haven't yet identified with a `userId`. Since the code in the head of your website is executed only on initial page load or a refresh, you can still make calls to those native tools, but they won't run on each emulated page view. diff --git a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md index d78145e23f..7cdf4f4312 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md +++ b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md @@ -3,26 +3,28 @@ title: Troubleshooting Analytics.js strat: ajs --- -The console reveals all. [Learn how to access the JavaScript console in each browser](#how-do-i-open-the-javascript-console-in-your-debugger). -Any Analytics.js methods may be executed manually. Use the Network tab to inspect requests. +To help you troubleshoot common issues when implementing Analytics.js, this page covers steps to verify your implementation, resolve errors, and ensure that data correctly flows to your destinations. + +> info "" +> You can manually execute any Analytics.js methods. Use the **Network** tab to inspect requests. [Learn how to access the JavaScript console in each browser](#how-do-i-open-the-javascript-console-in-your-debugger). ## Are you loading Analytics.js? -Open the JavaScript console and enter `analytics`. Does it return an object, as seen below? +Open the JavaScript console and enter `analytics`. If it returns an object, as shown below, then you're successfully loading Analytics.js onto your website. ![Returning analytics object](images/VOsmoAB.gif) -The object means that you are successfully loading Analytics.js onto your website. If you get an `undefined` error, Analytics.js is not loading successfully: +If you get an `undefined` error, Analytics.js is not loading successfully: ![Returning analytics object error](images/CFsktto.gif) Segment also provides a Chrome web extension, [Segment Inspector](/docs/connections/sources/catalog/libraries/website/javascript/index.html#segment-inspector), which you can use to validate that you're successfully loading Analytics.js. -Solution: [Follow the Analytics.js Quickstart Guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/) +To learn more, follow the [Analytics.js Quickstart Guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/). ## Are you loading two instances of Analytics.js? -Note that you *cannot* load Analytics.js twice on the same page, even if you're using different write keys. You might encounter `Uncaught RangeError: Maximum call stack size exceeded`. You can conditionally set the write key based on an environment variable. +Note that you *cannot* load Analytics.js twice on the same page, even if you're using different write keys. If you do, you might encounter `Uncaught RangeError: Maximum call stack size exceeded`. Instead, you can conditionally set the write key based on an environment variable. Example: ```js @@ -34,27 +36,27 @@ ENV === 'production' ? writeKey = 'A' : writeKey = 'B'; The error can occur for different reasons: -* Snippet syntax: Ensure you correctly added the Segment snippet to the page. Check for any missing or extra characters. Follow [this guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-install-segment-to-your-site). +- Snippet syntax: Ensure you correctly added the Segment snippet to the page. Check for any missing or extra characters. Follow [this guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-install-segment-to-your-site). -* NPM package: If you're using Segment through NPM, refer to [this guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2b-install-segment-as-a-npm-package). +- npm package: If you're using Segment through npm, refer to [this guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2b-install-segment-as-a-npm-package). -* Browser cache: Clear the browser cache, as this is a common cause for `ChunkLoadError`. +- Browser cache: Clear the browser cache, as this is a common cause for `ChunkLoadError`. -* Cloudflare caching: If you use Cloudflare to proxy Segment, disable caching for the Segment JS file. +- Cloudflare caching: If you use Cloudflare to proxy Segment, disable caching for the Segment JS file. ## Do you see events appear in your debugger? -When you reload the page, does your debugger show a new [`page`](/docs/connections/spec/page)? You can also check the JavaScript console in the browser and manually fire an event, like an Identify call, which would show up in the debugger. +When you reload the page, does your debugger show a new [Page call](/docs/connections/spec/page)? You can also check the JavaScript console in the browser and manually fire an event, like an Identify call, which would show up in the debugger. -- You can also use [Segment's Chrome extension](/docs/connections/sources/catalog/libraries/website/javascript/index.html#segment-inspector)to inspect events. +- You can use [Segment's Chrome extension](/docs/connections/sources/catalog/libraries/website/javascript/index.html#segment-inspector) to inspect events. -![Making an identify call](images/7Ymnh2S.gif) +![Making an Identify call](images/7Ymnh2S.gif) -If the call doesn't appear in the debugger, open up the JavaScript console and check the Network tab to see if the outbound web services requests are being initiated: +If the call doesn't appear in the debugger, open the JavaScript console and check the **Network** tab to see if the outbound web services requests are being initiated: ![Checking for calls in the network tab](images/d8CmIY2.png) -In the above, the `p` is a [`page`](/docs/connections/spec/page) call and the `i` is an [`identify`](/docs/connections/spec/identify) call. If you don't at least see the `p`, then check if you are loading Analytics.js correctly. +In the above, the `p` is a [Page](/docs/connections/spec/page) call and the `i` is an [Identify](/docs/connections/spec/identify) call. If you don't at least see the `p`, verify that you are loading Analytics.js correctly. ## Using the Segment Chrome extension to validate your implementation @@ -65,18 +67,18 @@ The [Segment Inspector](/docs/connections/sources/catalog/libraries/website/java Some destinations send data directly from the website to their servers. You can check the Network tab in your JavaScript console to see the outbound web services requests being initiated. -In the image below, with Google Analytics as an example, the `page` call forms an outbound request that looks like this: +Using Google Analytics as an example, the Page call forms an outbound request that looks like this: ![Google Analytics outbound request](images/CBdS5dO.png) -If this outbound request is not showing up in the network when you fire an `identify` call, then check the following: +If this outbound request is not showing up in the network when you fire an Identify call, then view the following sections for more troubleshooting steps. -## Is your web site deployed under a domain on the Public Suffix List? +## Is your website deployed under a domain on the Public Suffix List? The [Public Suffix List](https://publicsuffix.org/list/){:target="blank"} is a catalog of certain Internet effective top-level domains, enumerating all domain suffixes controlled by registrars. -The implications of these domain suffixes is that first party cookies cannot be set on them. Meaning, `foo.example.co.uk` can share cookie access with `bar.example.co.uk`, but `example.co.uk` should be walled off from cookies at `example2.co.uk`. The latter two domains could be registered by different owners. +The implications of these domain suffixes are that first party cookies cannot be set on them. Meaning, `foo.example.co.uk` can share cookie access with `bar.example.co.uk`, but `example.co.uk` should be walled off from cookies at `example2.co.uk`. The latter two domains could be registered by different owners. Examples of domains on the Public Suffix List that are common in troubleshooting include: @@ -97,13 +99,13 @@ The JavaScript console reveals all requests, outbound and inbound, to your brows Alternatively, Segment provides the [Segment Inspector](/docs/connections/sources/catalog/libraries/website/javascript/index.html#segment-inspector), a Chrome web extension designed to enable debugging of your Segment integration in web applications that are instrumented with Analytics.js. -## Analytics.js failing to load due to Ad Blockers or Browser Privacy Settings +## Analytics.js failing to load due to ad blockers or browser privacy settings Segment advises against circumventing tracking blockers or browser privacy settings for client-side tracking. The user has ultimate control as to what gets loaded on the page. Segment acknowledges that this can result in some data loss in client-side tracking and suggests [workarounds](/docs/connections/sources/catalog/libraries/website/javascript/index.html#tracking-blockers-and-browser-privacy-settings) to address this issue. -## Analytics.js and Destinations not tracking query string parameters on certain Safari iOS and MacOS Versions +## Analytics.js and destinations not tracking query string parameters on certain Safari iOS and macOS versions -Due to updates in certain Safari iOS and MacOS versions, Segment's Analytics.js and Destinations tools might experience limitations in capturing query string parameters. As a result, you may notice some events missing campaign information. +Due to updates in certain Safari iOS and macOS versions, Segment's Analytics.js and destinations tools might experience limitations in capturing query string parameters. As a result, you may notice some events missing campaign information. ## Why am I seeing a "SameSite" warning? @@ -111,18 +113,18 @@ Due to updates in certain Safari iOS and MacOS versions, Segment's Analytics.js If you see a warning like the following, it could have one of several causes: "A cookie associated with a cross-site resource at http://segment.com/ was set without the `SameSite` attribute [...]" -Segment correctly sets cookies with the 'SameSite' attribute with Analytics.js. +Segment correctly sets cookies with the `SameSite` attribute with Analytics.js. -If you see this warning, it is because you previously visited http://segment.com, and are getting the warning due to unrelated cookies. To verify that this is the issue, visit your page in Incognito Mode and confirm that the warning no longer occurs. Your users won't see this warning unless they _also_ visited http://segment.com. +If you see this warning, it's because you previously visited http://segment.com, and are getting the warning due to unrelated cookies. To verify that this is the issue, visit your page in Incognito Mode and confirm that the warning no longer occurs. Your users won't see this warning unless they _also_ visited http://segment.com. ## Why am I seeing additional cookies on my website? -The AJS cookies being set under segment.com are first-party cookies. They are part of Segment's own implementation as well as the destination Segment uses. These cookies are not related to your implementation of Segment, and you only see them because you've visited Segment's domain using the same browser. They are sent to the writekey connected to Segment's own workspace, and are associated with the events Segment tracks when you visit segment.com. +The Analytics.js cookies being set under segment.com are first-party cookies. They are part of Segment's own implementation as well as the destination Segment uses. These cookies are not related to your implementation of Segment, and you only see them because you've visited Segment's domain using the same browser. They are sent to the writekey connected to Segment's own workspace, and are associated with the events Segment tracks when you visit segment.com. -### Known Incompatibilities with Prototype.js +### Known incompatibilities with Prototype.js -If you're having issues with your destinations loading with Prototype.js, there is a [known issue that was reported](https://github.com/prototypejs/prototype/issues/338){:target="_blank"} regarding this. In order to prevent the issues, you can preserve the original `Array.from` method without letting the prototype override it. +If you're having issues with your destinations loading with Prototype.js, there is a [known issue that was reported](https://github.com/prototypejs/prototype/issues/338){:target="_blank"} regarding this. In order to prevent the issue, you can preserve the original `Array.from` method without letting the prototype override it. ## Why am I getting an empty campaign object in my event payload? @@ -133,6 +135,8 @@ Analytics.js generates a campaign object inside the context object whenever the You may see events with timestamp discrepancies due to manual overriding of the timestamp value, mobile apps closed or set in the background, traffic from bots, or inaccurate device or browser time. For more information, see Segment's [Common Fields Spec](/docs/connections/spec/common/#why-are-events-received-with-timestamps-set-in-the-past-or-future). -## Known issues: +## View additional known issues + +You can review other known Analytics.js issues on [GitHub](https://github.com/segmentio/analytics.js/issues). + -[Review and contribute to these on GitHub](https://github.com/segmentio/analytics.js/issues). diff --git a/src/connections/spec/track.md b/src/connections/spec/track.md index 644d062c6a..5594b26bff 100644 --- a/src/connections/spec/track.md +++ b/src/connections/spec/track.md @@ -121,6 +121,9 @@ _For instructions on how to pass fields to the context object for a specific lib Segment's Actions destinations allows your team to build individual actions that are triggered based on a set of configured conditions. By adding the user's latest traits to the Track event's `context.traits` object, its possible to build two separate Actions to be triggered by this single event. For example, if your team would like to send an Identify event anytime the specific Track event "Button Clicked" is triggered, simply add the available traits into the Track event's payload, then build a destination Actions for the Track event : `Event Name is Button Clicked`, and a destination Action for the Identify event : `All of the following conditions are true: Event Name is Button Clicked, Event Context traits exists`, and then both Actions will have access to reference the `context.traits` fields within its mappings. +> info "Unify profiles require Identify calls" +> Adding user traits to a Track or Page call using `context.traits` lets you send that data to Actions destinations, but it won’t update the user's profile in Unify. To update traits in Unify, use an Identify call instead. + For more information on the context object, please see the [Spec: Common Fields](https://segment.com/docs/connections/spec/common/#context) documentation. diff --git a/src/engage/journeys/event-triggered-journeys-steps.md b/src/engage/journeys/event-triggered-journeys-steps.md index d517d36128..853a262440 100644 --- a/src/engage/journeys/event-triggered-journeys-steps.md +++ b/src/engage/journeys/event-triggered-journeys-steps.md @@ -7,9 +7,6 @@ plan: engage-foundations Steps are the building blocks of a journey. This page explains the **Hold Until**, **Send to Destination**, and **Data split** steps, which enable precise control over journey progression and data delivery. -> info "Public Beta" -> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. - ## Hold Until: smart pauses in journeys The **Hold Until** step adds a deliberate pause in a journey, waiting for specific user actions or a predefined time limit before progressing. This lets you create highly personalized experiences by responding to user behavior (or the lack thereof) at the right moment. @@ -176,6 +173,59 @@ You can use a Data split to branch profiles based on traits or audience membersh This setup helps tailor journey experiences using reliable, preexisting data. Because the Data split step evaluates conditions instantly, it works best with traits or audience membership that Segment has already computed before the profile enters the step. +## Randomized Split (V2) + +The **Randomized Split** step lets you experiment with and test the performance of different journey paths. You can add up to five branches, assign each one a percentage, and Segment will randomly send users down one of the branches based on the configured distribution. + +This step is useful for A/B testing, holdout groups, and comparing different channels or messaging strategies within a single journey. + +For example, you might create a randomized split that sends 40% of users to an email campaign, 40% to an SMS campaign, and 20% to a control group. Once users move through the split, you can evaluate which approach performed best. + +### How Randomized Split works + +When a profile reaches the Randomized Split step: + +1. Segment randomly assigns the profile to one of the branches based on the defined percentages. +2. The profile immediately moves down the assigned path. +3. By default, if a user re-enters the journey later, they’re assigned a new random branch. You can optionally choose to keep them in the same branch each time they re-enter. + +Segment evaluates each journey instance independently. This means a user could be assigned to different branches across multiple entries, unless you enable consistent assignment. + +### Configuration options + +You can configure a Randomized Split step with the following options: + +| Setting | Description | +| ---------------------------- | ---------------------------------------------------------------------------- | +| Branches | Add up to five branches. Each branch must be assigned a percentage. | +| Distribution percentages | Define what portion of users should go down each branch. Total must be 100%. | +| Branch naming | Branches are labeled alphabetically (for example, Branch A, Branch B). | +| Consistent branch assignment | Optionally ensure a user always enters the same branch on re-entry. | + +Segment won't publish your journey if the percentages don’t add up to 100%, or if any percentage is left blank. + +> info "Branch assignment is random" +> The Randomized Split step uses probabilistic logic to assign users to branches. At lower volumes, actual distribution may not exactly match your configured percentages, but it tends to even out at scale. + +To add a Randomized Split to your journey: + +1. From the journey canvas, click **+** to add a new step. +2. Select **Randomized Split**. +3. Give the step a unique name. +4. Add up to five branches and assign a percentage to each one. +5. (Optional) Enable **Keep branch assignment consistent** if you want users to always go down the same branch on re-entry. +6. Click **Save**. + +Once configured, Segment routes profiles through this step based on your distribution settings. + +### Analyze performance + +After users pass through the Randomized Split step, you can view historical and in-progress counts for each branch in the Journey Overview. + +You can measure results by total journey instances, unique profiles, funnel view, and in-progress view. + +This helps you evaluate which branch is performing best and informs how you might structure future journeys. + ## Send to Destination The **Send to Destination** step lets you send journey data to one of your [configured Engage destinations](/docs/connections/destinations/), enabling real-time integration with tools like marketing platforms, analytics systems, or custom endpoints. diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 94d1e5f579..9435e17f4e 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -9,9 +9,6 @@ Unlike traditional audience-based journeys that rely on pre-defined user segment On this page, you'll learn how to create an event-triggered journey, configure entry conditions, and work with published event-triggered journeys. -> info "Public Beta" -> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. - ## Overview Event-triggered journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. @@ -123,7 +120,44 @@ Segment built Event-Triggered Journeys to respond instantly to events, offering - **Editing and versioning**: After you publish an event-triggered journey, you won't be able to edit it. To modify a journey, create a new journey. - **Real-time delivery**: Event-Triggered Journeys aim for an expected delivery time of under 5 minutes from the moment an event is performed to when the payload reaches the destination, assuming there is no delay step in the journey. However, external factors outside of Segment's control may occasionally introduce latency. -## Use Cases +## Observability + +Segment provides built-in tools to help you understand how users move through your journeys. These features let you debug issues, verify behavior, and review step-by-step activity for individual users. + +### Profile explorer: Journeys tab + +From Profile explorer, you can view the journeys a user entered. For Event-Triggered Journeys (V2), you’ll see the total number of times the user has entered each journey; V1 journeys display only the current step. + +To access Profile explorer: + +1. From your Segment workspace, go to **Unify > Profile explorer** and open a user profile. +2. Click the **Journeys** tab. + +### Journey instance timeline + +When you need to understand how a specific user moved through a journey, the Journey Instance Timeline shows a detailed, step-by-step view of the user’s path. + +This view is useful for troubleshooting, testing, or verifying behavior after launch. You’ll see the exact sequence of events and timing for a single journey instance. Follow these steps to access the instance timeline: + +- **Option 1**: + 1. Open a user profile from the Profile explorer. + 2. Click the **Journeys** tab, then click the name of the journey. +- **Option 2**: + 1. From your Segment workspace, go to **Engage > Journeys**, then open the **Overview** tab. + 2. Use the **Search for a profile** field to look up the user by email or ID. + 3. Select a journey instance to view its full timeline. + +### Profile activity + +Use the **Profile activity** tab on the journey overview page to see a high-level log of entries, exits, and transitions across all users. This is helpful for filtering activity by time, user, or step, especially when you want to confirm how different users have moved through a journey. + +Follow these steps to access Profile activity: + +1. Go to **Engage > Journeys**. +2. Select a journey and click the **Profile activity** tab. +3. Use the filters to narrow down the results by user, time range, event type, or step name. + +## Use cases Event-Triggered Journeys can power a variety of real-time, personalized experiences. This section details some common scenarios to help you see how they might work in practice. diff --git a/src/engage/journeys/exit-rules.md b/src/engage/journeys/exit-rules.md index 5b2d21158c..0a12787ddf 100644 --- a/src/engage/journeys/exit-rules.md +++ b/src/engage/journeys/exit-rules.md @@ -7,9 +7,6 @@ Journey exit rules automatically remove users from a journey when they meet spec This page explains how exit rules work, how to configure them, when to use them, and how to track exits in your journey analytics. You'll also find example use cases, best practices, and key behavior notes to help you get started. -> info "Public Beta" -> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. - ## How exit rules work Segment continuously evaluates exit rules as users move through a journey. If a user performs an event that matches one of the configured rules, they exit immediately from their current step. diff --git a/src/engage/journeys/journey-context.md b/src/engage/journeys/journey-context.md index e0443833db..2cb17457a0 100644 --- a/src/engage/journeys/journey-context.md +++ b/src/engage/journeys/journey-context.md @@ -7,9 +7,6 @@ plan: engage-foundations This page explains Journey context, which can help you dynamically adapt each journey to individual user interactions, creating highly relevant, real-time workflows. -> info "Public Beta" -> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. - ## Overview Unlike traditional audience-based journeys, which rely solely on user progress through predefined steps, event-triggered journeys capture and store the details of user-triggered events. This shift allows you to access the data that caused users to reach a specific step and use it to make more precise decisions throughout the journey. diff --git a/src/engage/journeys/v2/limits.md b/src/engage/journeys/v2/limits.md new file mode 100644 index 0000000000..ac298de5c5 --- /dev/null +++ b/src/engage/journeys/v2/limits.md @@ -0,0 +1,75 @@ +--- +title: Journeys (V2) Product Limits +plan: engage-foundations +--- + +This page outlines product limitations for Event-Triggered (V2) Journeys. + +## General limits + +| Name | Limit | Description | +| ------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| Steps | 25 | Maximum number of steps per journey. | +| Journey name | 73 characters | Maximum length for Journey names. Names must be unique. | +| Step name | 73 characters | Maximum length for step names. | +| Branch name | 73 characters | Maximum length for branch names within a split step. Branch names must be unique across the journey. | +| Additional branches | 5 | Maximum number of branches supported in a split or Hold Until step. | +| Delay duration | Minimum: 5 minutes
Maximum: 6 months | Allowed time range for Delay and Hold Until steps. | +| Unique identifier | 500 characters | For “Re-enter every time event occurs” rules, you must define a unique identifier. The value is limited to 500 characters. | + + +## Throughput + +| Name | Limit | Description | +| ------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Requests per second (RPS) | 25 events/sec/profile | Maximum events per second per Segment ID. Timer events are excluded. Excess events get dropped. | +| Instances per profile | 25 concurrent instances | Maximum concurrent Journey instances per profile. | +| Loop back branch | 100 instances | Maximum instances that can pass through a Wait Until loop-back. | + +## Journey context + +| Name | Limit | Description | +| ------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Journey context object | No limit (subject to payload size) | No object limit in Journey context, but must remain within the 32 KB payload limit. | +| Event name conflicts | Must be unique unless aliased | Duplicate event names in the Journey context will overwrite each other unless aliased using `[event_name] + [branch_name]`. | + +## Send to destination + +| Name | Limit | Description | +| ---------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Supported destinations | [Action destinations only](/docs/connections/destinations/actions/) | Segment only supports Action Destinations, Action List destinations, and Destination Functions in Journeys 2.0. | +| Activations | 5 per destination step | Maximum number of Activations supported per destination step. | +| Destination key | 31 characters | Segment auto-generates destination keys; they're not editable. | +| Destination event name | 73 characters | Can be customized. Defaults to the destination step name. Event names do not need to be unique. Use the Sync Key (Computation Key) for disambiguation. | +| Payload size | 32 KB (~700 lines) | Maximum allowed size of the payload sent to destinations. | +| Parameter mappings | 100 mappings | Maximum number of field mappings per destination step. | + + +## Data retention + +| Name | Limit | Description | +| ----------------------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| Journey instance data (while in progress) | 365 days | Maximum duration an instance can remain active before expiring. | +| Journey instance data (after completed or exit) | 90 days | Data retention period after a profile completes or exits the journey. | +| Analytics data | 3 years | Retention period for metrics data. | +| Observability data | 3 years | Retention period for step activity and timeline data. | + +## Analytics + +| Name | Limit | Description | +| -------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Date range | 180 days | Maximum date range allowed for analytics queries. | +| Timeout limit | 10 seconds | Maximum time an analytics query will run. | +| Metric latency | 10 seconds | Expected delay before metrics update. Can increase with large volumes; 95% of events are targeted to appear in your workspace within 30 minutes. | +| Update metrics | Manual browser refresh required | Analytics don't update dynamically. You'll need to refresh to see updates. | + + +## Privacy and compliance + +| Topic | Details | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| PII access | See [PII access](docs/segment-app/iam/roles/#pii-access) for more information. | +| HIPAA eligibility | [HIPAA-Eligible Services](https://www.twilio.com/content/dam/twilio-com/global/en/other/hipaa/pdf/HIPAA-Eligible-Services.pdf){:target="_blank"} | +| GDPR & BCR | See [Complying with the GDPR](/docs/privacy/complying-with-the-gdpr/) for more information. | + +Segment complies with GDPR through Binding Corporate Rules (BCR). When a customer churns, BCR-initiated deletion removes the customer’s workspace and data. To request access to, correction of, or deletion of personal data, reach out to [Segment support](mailto:friends@segment.com). \ No newline at end of file diff --git a/src/unify/profiles-sync/tables.md b/src/unify/profiles-sync/tables.md index 3e495600b7..4329c9dcd6 100644 --- a/src/unify/profiles-sync/tables.md +++ b/src/unify/profiles-sync/tables.md @@ -105,7 +105,9 @@ Profile raw tables contain records of changes to your Segment profiles and Ident With raw tables, you have full control over the materialization of Profiles in your warehouse, as well as increased observibility. -Raw tables contain complete historical data when using historical backfill. +Raw tables contain complete historical data when using historical backfill. + +The `Timestamp` column will be empty for backfilled data because, during backfill, historical profile changes are inferred from the current state of the profile and do not reflect the actual change history. ### The id_graph_updates table