diff --git a/CODEOWNERS b/CODEOWNERS index 78e3ce8044..19baa24204 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -47,7 +47,7 @@ CODEOWNERS @segmentio/segment-doc-team /src/unify @pwseg # Protocols owners -/src/protocols @forstisabella +/src/protocols @forstisabella @pwseg # Storage owners -/src/connections/storage @forstisabella +/src/connections/storage @forstisabella @pwseg diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index d6fd5f95ee..cabafc2f57 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 2024-10-22 +# destination categories last updated 2024-10-31 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 d7d42e3ccc..7f3f116e5e 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 2024-10-22 +# destination data last updated 2024-10-31 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -80555,7 +80555,7 @@ items: hidden: false defaultTrigger: event = "Audience Exited" fields: - - id: 75x66yG81uLaYxiPtTV7qG + - id: 7nm8V3yYHhVPNDPC8UzN3Z sortOrder: 1 fieldKey: lookup_field label: Lookup Field @@ -80590,7 +80590,7 @@ items: value: sfdcOpptyId dynamic: false allowNull: false - - id: vt3u2J8A2EdDqpuXta4bQH + - id: 5kLrgBKkAjBy7XHkQXHHc6 sortOrder: 2 fieldKey: field_value label: Field Value @@ -80610,7 +80610,23 @@ items: choices: null dynamic: false allowNull: false - - id: dvBeP8WZtYJrKRdRNnZxPV + - id: knZwfEixC2V1Wxir9PM1bm + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch sizes + may be lower. + placeholder: '' + defaultValue: 300 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: false + - id: drScuVuQVfjiSdA3gPF5vr sortOrder: 5 fieldKey: event_name label: Event Name @@ -80632,7 +80648,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" fields: - - id: 7h7i6r8CpTRHtoAS7F28B1 + - id: 6Lvo2Sjc35CZpmwUSHMyP sortOrder: 1 fieldKey: lookup_field label: Lookup Field @@ -80667,7 +80683,7 @@ items: value: sfdcOpptyId dynamic: false allowNull: false - - id: 4rt2BXxjpJbdDuQJdQUY9u + - id: quWxW7f7gpmmNVUCj1dsgZ sortOrder: 2 fieldKey: data label: Lead Info Fields @@ -80692,7 +80708,23 @@ items: choices: null dynamic: false allowNull: false - - id: agnnPPYiG8WhHhirQqohsD + - id: 3rUzAJBDujmKiH8bpqhcAL + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch sizes + may be lower. + placeholder: '' + defaultValue: 300000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: false + - id: spqFVkTYtjJn7Hpsv8rQ56 sortOrder: 5 fieldKey: event_name label: Event Name @@ -80706,7 +80738,7 @@ items: choices: null dynamic: false allowNull: false - - id: i4D4j8GMWQFHAFohgKZr6W + - id: 6JD7uPfCeHZmyQw2ggefJg sortOrder: 6 fieldKey: list_id label: Existing List ID @@ -80720,7 +80752,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3dtF7aUvExMgjxM55YoukP + - id: 57pxKnw8Wvp6JKLG1vTnFD sortOrder: 7 fieldKey: list_name label: List Name @@ -80732,7 +80764,7 @@ items: choices: null dynamic: false allowNull: false - - id: tq1z2vnLt3dEmu7DXzG6bg + - id: 4mfrp14uPr5npZ89R6xXDN sortOrder: 8 fieldKey: retlOnMappingSave label: Connect to a static list in Marketo @@ -92787,7 +92819,7 @@ items: hidden: false defaultTrigger: type = "page" fields: - - id: pHvTXyLTgyASc6X5uqWcgv + - id: cYZYdxvQzBev6fZR5xdzwf sortOrder: 0 fieldKey: anonymousId label: Anonymous ID @@ -92802,7 +92834,7 @@ items: dynamic: false allowNull: true hidden: false - - id: FZVumySzDhkePXoUZhahx + - id: hsGJRRqsjoFqZKZ82zpxZB sortOrder: 1 fieldKey: timestamp label: Timestamp @@ -92817,7 +92849,7 @@ items: dynamic: false allowNull: false hidden: false - - id: d5JQVdD8RYd3KMXPnWaN4w + - id: v1VGGytx1NYqUgYHDSn5MT sortOrder: 2 fieldKey: referrer label: Page Referrer @@ -92838,7 +92870,7 @@ items: dynamic: false allowNull: true hidden: false - - id: nXE7WKs55KxBJAALSFJre8 + - id: dnSccvhcXFtXq7FYb6ap9v sortOrder: 3 fieldKey: url label: Page URL @@ -92859,7 +92891,7 @@ items: dynamic: false allowNull: true hidden: false - - id: cSvU5YXuWH3qiTrsUSbkn6 + - id: 6oR6Ba2jbPHFvpK3QRXbrG sortOrder: 4 fieldKey: ip label: User IP address @@ -92874,7 +92906,7 @@ items: dynamic: false allowNull: false hidden: false - - id: qMk6F1Vpq6wBcURZbwr3oh + - id: sN55PJZPUndAZcHmGz7nMr sortOrder: 5 fieldKey: library label: Segment Library @@ -92889,7 +92921,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oCUXryqFkU1KBBYxJrvcbP + - id: iMhGsP389b4qc7JsMJ8Zt1 sortOrder: 6 fieldKey: userAgent label: User Agent @@ -92912,7 +92944,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: g8q44Qo39z3EZmKbZEebqk + - id: c5Cyryb66879sYfKuvi379 sortOrder: 0 fieldKey: anonymousId label: Anonymous ID @@ -92927,7 +92959,7 @@ items: dynamic: false allowNull: true hidden: false - - id: hEfmKxURw1pmPK9FbjqYVo + - id: f9Bz4NCkmubwGLLcP1yWYs sortOrder: 1 fieldKey: timestamp label: Timestamp @@ -92942,7 +92974,7 @@ items: dynamic: false allowNull: false hidden: false - - id: tBVgnUMJPPXRxftER9bb8C + - id: 92McJykQw7qH8Xi5gjTGuA sortOrder: 2 fieldKey: referrer label: Page Referrer @@ -92963,7 +92995,7 @@ items: dynamic: false allowNull: true hidden: false - - id: aW8DZA3wtcV1cF1BNpYeJr + - id: 31apiakvDM1jTp7dKFVBzs sortOrder: 3 fieldKey: url label: Page URL @@ -92984,7 +93016,7 @@ items: dynamic: false allowNull: true hidden: false - - id: qyms9647TSz6nDiscs4pNp + - id: 7ExWVm19PLZVYzfbXMFaUC sortOrder: 4 fieldKey: ip label: User IP address @@ -92999,7 +93031,7 @@ items: dynamic: false allowNull: false hidden: false - - id: t3aDAvPAxnmjLafXrq84uW + - id: npX2zKEB16yMmz7VYeaGhn sortOrder: 5 fieldKey: library label: Segment Library @@ -93014,7 +93046,7 @@ items: dynamic: false allowNull: false hidden: false - - id: ckRv1mQxUR2MrFgcMohat5 + - id: iGvB5w2qXuASKesXnRrQTy sortOrder: 6 fieldKey: userAgent label: User Agent @@ -93029,7 +93061,7 @@ items: dynamic: false allowNull: false hidden: false - - id: oFqipsX6gK9ZUTC4pBCCMr + - id: bQSecVUCXwSGEszBLvYeXX sortOrder: 7 fieldKey: email label: Email address @@ -93050,7 +93082,7 @@ items: dynamic: false allowNull: true hidden: false - - id: 3bZZVHnB5k6RWFDX6XWHsm + - id: 56kZ2bxgbeXT5JRHTefFfD sortOrder: 8 fieldKey: properties label: Event properties @@ -93078,7 +93110,7 @@ items: dynamic: false allowNull: false hidden: false - - id: edjPFAtJDdsE8YAre62pn7 + - id: tSQ1Q4pFQpoKoWy8YGbe2u sortOrder: 9 fieldKey: podscribeEvent label: Podscribe event type @@ -93095,7 +93127,7 @@ items: hidden: false presets: - actionId: wXFTRjNRXRVqqSPeFL66YJ - name: Signed Up Calls + name: Order Completed Calls fields: anonymousId: '@path': $.anonymousId @@ -93146,10 +93178,10 @@ items: '@path': $.properties.is_new_customer is_subscription: '@path': $.properties.is_subscription - podscribeEvent: signup - trigger: type = "track" and event = "Signed Up" - - actionId: otTeGZNHmduwXWxaTMe4ux - name: Page Calls + podscribeEvent: purchase + trigger: type = "track" and event = "Order Completed" + - actionId: wXFTRjNRXRVqqSPeFL66YJ + name: Signed Up Calls fields: anonymousId: '@path': $.anonymousId @@ -93177,9 +93209,33 @@ items: '@path': $.context.library userAgent: '@path': $.context.userAgent - trigger: type = "page" - - actionId: wXFTRjNRXRVqqSPeFL66YJ - name: Order Completed Calls + email: + '@if': + exists: + '@path': $.context.traits.email + then: + '@path': $.context.traits.email + else: + '@path': $.properties.email + properties: + total: + '@path': $.properties.total + order_id: + '@path': $.properties.order_id + currency: + '@path': $.properties.currency + coupon: + '@path': $.properties.coupon + num_items_purchased: + '@path': $.properties.num_items_purchased + is_new_customer: + '@path': $.properties.is_new_customer + is_subscription: + '@path': $.properties.is_subscription + podscribeEvent: signup + trigger: type = "track" and event = "Signed Up" + - actionId: otTeGZNHmduwXWxaTMe4ux + name: Page Calls fields: anonymousId: '@path': $.anonymousId @@ -93207,31 +93263,7 @@ items: '@path': $.context.library userAgent: '@path': $.context.userAgent - email: - '@if': - exists: - '@path': $.context.traits.email - then: - '@path': $.context.traits.email - else: - '@path': $.properties.email - properties: - total: - '@path': $.properties.total - order_id: - '@path': $.properties.order_id - currency: - '@path': $.properties.currency - coupon: - '@path': $.properties.coupon - num_items_purchased: - '@path': $.properties.num_items_purchased - is_new_customer: - '@path': $.properties.is_new_customer - is_subscription: - '@path': $.properties.is_subscription - podscribeEvent: purchase - trigger: type = "track" and event = "Order Completed" + trigger: type = "page" partnerOwned: true - id: 5d25eddde3ff660001b3adda display_name: Podsights @@ -93364,14 +93396,12 @@ items: website: https://posthog.com status: PUBLIC categories: - - A/B Testing - Analytics - - Heatmaps & Recordings - - Raw Data + - A/B Testing logo: - url: https://cdn-devcenter.segment.com/5d042cef-4694-4866-98c6-a922cfa1f715.svg + url: https://cdn-devcenter.segment.com/45976284-89f2-4a4a-9930-0cb4966d3c1a.svg mark: - url: https://cdn-devcenter.segment.com/d7a2a57f-4ae9-4018-a560-a0ce3a4dfc2e.svg + url: https://cdn-devcenter.segment.com/2b447431-1237-4ea1-85a9-726382ea4f66.svg methods: track: true identify: true @@ -105286,7 +105316,7 @@ items: mark: url: https://cdn.filepicker.io/api/file/ID6Qu6cBSmivatPUnoMY methods: - track: false + track: true identify: true group: true alias: false @@ -106073,7 +106103,7 @@ items: hidden: false defaultTrigger: null fields: - - id: hqGau9H2YPp9vvFqQ7HCpD + - id: mf4v2hHVu18RCa47a8vzeB sortOrder: 0 fieldKey: enable_batching label: Batch Data to SendGrid Contacts PUT API @@ -106090,7 +106120,7 @@ items: dynamic: false allowNull: false hidden: false - - id: mksF7PZS3ehWcHUxpmFkrn + - id: jrLmfx9wm8c8mFpzApTur2 sortOrder: 1 fieldKey: first_name label: First Name @@ -106111,7 +106141,7 @@ items: dynamic: false allowNull: true hidden: false - - id: wB5pKNPMMuU9AVUHBvZsAo + - id: kgfHpkxzfPYY1ZRnaMyrVS sortOrder: 2 fieldKey: last_name label: Last Name @@ -106132,7 +106162,7 @@ items: dynamic: false allowNull: true hidden: false - - id: b7KfmtKozzd5GeBwr1sBwW + - id: qhqK55BgTQKZCqF37Ai87T sortOrder: 3 fieldKey: country label: Country @@ -106153,7 +106183,7 @@ items: dynamic: false allowNull: true hidden: false - - id: vPBFLYEDxf8bQVPiPqpwUY + - id: 7AYUyjGSJsor9oZB8gRTMU sortOrder: 4 fieldKey: postal_code label: Postal Code @@ -106174,7 +106204,7 @@ items: dynamic: false allowNull: true hidden: false - - id: fimhFZbSERbbNVPKbTb19e + - id: uVPiNMfXy5RYfacvhYjLUS sortOrder: 5 fieldKey: city label: City @@ -106195,7 +106225,7 @@ items: dynamic: false allowNull: true hidden: false - - id: oxBceQLdUu1ntMFuMskmKv + - id: qB5uFVAxtUXfKCub8KHjfQ sortOrder: 6 fieldKey: state label: State @@ -106216,7 +106246,7 @@ items: dynamic: false allowNull: true hidden: false - - id: 3Vhj8ZUHNV1GEfmQ4CtQNm + - id: soXcNfsq5fifUDuH1f323a sortOrder: 7 fieldKey: address_line_1 label: Address Line 1 @@ -106237,7 +106267,7 @@ items: dynamic: false allowNull: true hidden: false - - id: qRvWqLW4gH4ouBwYze3uvj + - id: 7cR7DJmmc14JitjCsfZDJ7 sortOrder: 8 fieldKey: address_line_2 label: Address Line 2 @@ -106258,7 +106288,7 @@ items: dynamic: false allowNull: true hidden: false - - id: jJrGRkhMxDx2s6NCdivPkq + - id: x7QfiK4HzV6Q8QCU82yjRB sortOrder: 9 fieldKey: phone_number label: Phone Number @@ -106281,7 +106311,7 @@ items: dynamic: false allowNull: true hidden: false - - id: muiSspbJscq3cbLxYH39FM + - id: a3REojCvEgsfjj7ppoDNxJ sortOrder: 10 fieldKey: whatsapp label: WhatsApp @@ -106302,7 +106332,7 @@ items: dynamic: false allowNull: true hidden: false - - id: hnHsEHjP5mSLP16hH34idJ + - id: n1RZxTuwRhDZzMsyWY1KWp sortOrder: 11 fieldKey: line label: Line @@ -106323,7 +106353,7 @@ items: dynamic: false allowNull: true hidden: false - - id: o7drFcH2kczfuEXCgPBFjC + - id: 4fiSwXGerXCahHn4wvCUPE sortOrder: 12 fieldKey: facebook label: Facebook @@ -106344,7 +106374,7 @@ items: dynamic: false allowNull: true hidden: false - - id: cCuxDshNhy4qQiavLpccr2 + - id: 9XyQoDrxmPPsrSQr56rJfM sortOrder: 13 fieldKey: unique_name label: Unique Name @@ -106365,7 +106395,7 @@ items: dynamic: false allowNull: true hidden: false - - id: 6QtJ8QsE8WDMkKtfgLraWQ + - id: gdxRRkenQnoCEPjkHstvDd sortOrder: 14 fieldKey: primary_email label: Email Address @@ -106386,7 +106416,7 @@ items: dynamic: false allowNull: true hidden: false - - id: xwDC9kamULiZ4RQ9BnHDDS + - id: pcpCbXskHEa9s5BN7Uexd sortOrder: 15 fieldKey: phone_number_id label: Phone Number ID @@ -106408,7 +106438,7 @@ items: choices: null dynamic: false allowNull: true - - id: vEV3Vk7kyeSE9KnUeE7hyw + - id: rhUfmcko47PSt1LPiH4Nuy sortOrder: 16 fieldKey: external_id label: External ID @@ -106428,7 +106458,7 @@ items: choices: null dynamic: false allowNull: true - - id: 5eKW34E8tqWpmsry1Ywoga + - id: 9JaivALq3VR1wCkDqwBq1p sortOrder: 17 fieldKey: anonymous_id label: 'Anonymous ID ' @@ -106442,7 +106472,7 @@ items: choices: null dynamic: false allowNull: true - - id: gi69M2JPB7n3bMa5rYaxfj + - id: 31h9b6JAhbQXaAqznPjDDe sortOrder: 18 fieldKey: customFields label: Other Fields @@ -106464,6 +106494,249 @@ items: dynamic: false allowNull: false hidden: false + - id: 2NyqxNN5TGJa1CP5xEYeLu + name: Send email with Dynamic Template + slug: sendEmail + description: Send email to recipient(s) using a Dynamic Template in Sendgrid + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: 3s9SRyfagPXuGCKiVCjnWw + sortOrder: 0 + fieldKey: domain + label: Validated Domain + type: STRING + description: >- + The domain to use for the email. This field is optional but recommended. + If you do not provide a domain, Sendgrid will attempt to send the email + based on the from address, and may fail if the domain in the from + address is not validated. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: wpNHFDg4tetZAF3oZKMqTk + sortOrder: 1 + fieldKey: from + label: From + type: OBJECT + description: From details. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9mz6H6CVoCb7yLMT3DNuuN + sortOrder: 2 + fieldKey: to + label: To + type: OBJECT + description: Recipient details. + placeholder: '' + required: true + multiple: true + choices: null + dynamic: false + allowNull: false + - id: tBber9AUJnBh6XgTxuQ2yG + sortOrder: 3 + fieldKey: cc + label: CC + type: OBJECT + description: CC recipient details + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: 8MdoSqdomnzcFywSurFLvo + sortOrder: 4 + fieldKey: bcc + label: BCC + type: OBJECT + description: BCC recipient details + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: op5Rvfshi24vvLwETYahbD + sortOrder: 5 + fieldKey: headers + label: Headers + type: OBJECT + description: Headers for the email. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sTF8sR1wjU7qgkB7fceLrd + sortOrder: 6 + fieldKey: dynamic_template_data + label: Dynamic Template Data + type: OBJECT + description: >- + A collection of property names that will be substituted by their + corresponding property values in the subject, reply-to and content + portions of a SendGrid Dynamic Template. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9ETWW46krQya8g5Smo4qvo + sortOrder: 7 + fieldKey: template_id + label: Template ID + type: STRING + description: >- + The template ID to use for the email. This must be for a Dynamic + Template and should start with a 'd-' + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: fwtebxozXYefHn4PJaV67u + sortOrder: 8 + fieldKey: custom_args + label: Custom Args + type: OBJECT + description: Custom arguments for the email. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gAcFJ1bFRyotfK7ZiGx8EL + sortOrder: 9 + fieldKey: send_at + label: Send At + type: STRING + description: >- + The time to send the email. ISO 8601 format. E.g. 2024-09-23T12:00:00Z. + A send cannot be scheduled more than 72 hours in advance. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 63ysxWR2FN145SfwwBbGUz + sortOrder: 10 + fieldKey: reply_to + label: Reply To + type: OBJECT + description: Reply to details. + placeholder: '' + defaultValue: + reply_to_equals_from: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tU5WRtT9V7psokYtefXo9p + sortOrder: 11 + fieldKey: subscription_tracking + label: Subscription Tracking + type: OBJECT + description: >- + Allows you to insert a subscription management link at the bottom of the + text and HTML bodies of your email. + placeholder: '' + defaultValue: + enable: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9K2fF49icYNQACryurdDYg + sortOrder: 12 + fieldKey: categories + label: Categories + type: STRING + description: Categories for the email. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: jTcHahvaJoctNj2wb5NSEM + sortOrder: 13 + fieldKey: google_analytics + label: Google Analytics + type: OBJECT + description: Allows you to enable tracking provided by Google Analytics. + placeholder: '' + defaultValue: + enable: true + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + utm_campaign: + '@path': $.context.campaign.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5txhHeEX3A34EJ5vgL16Yt + sortOrder: 14 + fieldKey: ip_pool_name + label: IP Pool + type: STRING + description: Send email with an ip pool. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 4Wg3giJULyshexbmhw7UQj + sortOrder: 15 + fieldKey: group_id + label: Group ID + type: STRING + description: Specify a Group ID + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: rLfteC3hko15cQqio6YbDA + sortOrder: 16 + fieldKey: sandbox_mode + label: Sandbox Mode + type: BOOLEAN + description: >- + Sandbox Mode allows you to send a test email to ensure that your request + body is valid and formatted correctly. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false presets: [] partnerOwned: true - id: 54521fda25e721e32a72eef0 diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 6b02b50f8d..c4dadc6229 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 2024-10-22 +# destination data last updated 2024-10-31 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot @@ -799,3 +799,544 @@ items: '@path': $.traits enable_batching: true trigger: type = "track" or type = "identify" + - id: 6683e1d5e37fd84efcf3bbef + display_name: First Party Dv360 + name: First Party Dv360 + slug: first-party-dv360 + previous_names: + - First Party Dv360 + url: connections/destinations/catalog/first-party-dv360 + website: http://www.segment.com + status: PRIVATE_BUILDING + 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 + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + settings: [] + actions: + - id: pMRu4ozQwh3SzjYycCzDfn + name: Add to List + slug: addToList + description: Adds to list + platform: CLOUD + hidden: false + 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: dRiii61cWqivpbMNjxGUKL + 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: ppDfvVSHs3wpC3Ycoh2gUu + sortOrder: 1 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 6w8gbwpX2zANVtazbjtfMc + sortOrder: 2 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 81favwMqHXmAecMuLmXGo6 + sortOrder: 3 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: tuBG56koj3PdEWoMt7j8Xv + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - 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: 8hSAZXT5u7knkEUGKLpe8A + 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: 2KfCTSk2bzm1Br7DZ5d9jM + sortOrder: 1 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 9ecWScNV2vuWrFNgfoHf1 + sortOrder: 2 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: gpaqTHscj6acVK5x12WsMV + sortOrder: 3 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 4p4wD9VF3j7GSp3TvBMLHB + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - 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: 8Ry596bd6tBhdH2ErcXZUS + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.emails + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: zCC3pVDww1k3bwsYeU3ak + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.phoneNumbers + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9JQTx74mEBTAMwcUjfKo93 + 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: qPeGF7HX6EhNJpQoRwNmnN + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2NGtbSMELmDoTmdQGWb8jH + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: w8BbkKZShNdnyc2uASpB4Z + 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: wA4Syt8pYqUASr9cAQEWvA + sortOrder: 6 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: hqpDxsMA2C4r8TdNiyaGtM + sortOrder: 7 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: v3qUWULxzJDrdjTUgSpigZ + sortOrder: 8 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: ndYdVUnqzCJfyzoVPKay9F + sortOrder: 9 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - 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: eEkzo7KFjZZ5SY6MYsGNsa + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.emails + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: umefzMMP12tpbD2oopGbPv + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.phoneNumbers + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3sx6yoo2rwgRPCB5WYDZCb + 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: jeiJHUQawC7xqWmAnxJp3Z + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9KEVS8t6JhY8474QVZcKiF + 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. + placeholder: '' + defaultValue: + '@path': $.context.traits.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kUE2RG2AqX2LGqcykzFbUU + 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: xfEU7m8dxHehcuUBoLj7SS + sortOrder: 6 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: o4hCVmsRy2dkqCxAvYk2ZX + sortOrder: 7 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: mYacAw9gXNbCxHdS5JioJF + sortOrder: 8 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 4yLRfKRg9qcv6JR87whu9H + sortOrder: 9 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + presets: [] diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index c8bf3c67c1..abd13ad89e 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 2024-10-22 +# source categories last updated 2024-10-31 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 5b1a50727f..ddba4c0e6d 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 2024-10-22 +# sources last updated 2024-10-31 items: - id: 8HWbgPTt3k display_name: .NET diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index 8b6fd03183..df0fff781f 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -391,6 +391,8 @@ sections: title: Custom Traits - path: '/unify/traits/sql-traits' title: SQL Traits + - path: '/unify/traits/recommended-items' + title: Recommended Items - path: /unify/profile-api title: Profile API - path: /unify/debugger diff --git a/src/_data/sidenav/strat.yml b/src/_data/sidenav/strat.yml index 9fc64cf428..51d8852447 100644 --- a/src/_data/sidenav/strat.yml +++ b/src/_data/sidenav/strat.yml @@ -77,6 +77,8 @@ sections: title: Google Ads Remarketing Lists destination (Personas) - path: /connections/destinations/catalog/actions-display-video-360 title: Display and Video 360 (Actions) Destination + - path: /connections/destinations/catalog/actions-first-party-dv360 + title: First Party Display and Video 360 (Actions) Destination - slug: salesforce diff --git a/src/assets/pdf/Segment_VAT_GST_FAQ.pdf b/src/assets/pdf/Segment_VAT_GST_FAQ.pdf new file mode 100644 index 0000000000..b792e43095 Binary files /dev/null and b/src/assets/pdf/Segment_VAT_GST_FAQ.pdf differ diff --git a/src/assets/pdf/faq-segment-dissolution-vat.pdf b/src/assets/pdf/faq-segment-dissolution-vat.pdf deleted file mode 100644 index 907707752d..0000000000 Binary files a/src/assets/pdf/faq-segment-dissolution-vat.pdf and /dev/null differ diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 596b0c3db5..7c5f2fcaaf 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -18,6 +18,8 @@ Usage limits for each customer during the AWS PrivateLink Private Beta include t The following Databricks integrations support PrivateLink: - [Databricks storage destination](/docs/connections/storage/catalog/databricks/) - [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) +- [Databricks Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/databricks-profiles-sync/) +- [Databricks Data Graph](/docs/unify/data-graph/) > info "Segment recommends reviewing the Databricks documentation before attempting AWS PrivateLink setup" > The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. @@ -44,6 +46,7 @@ To implement Segment's PrivateLink integration for Databricks: The following RDS Postgres integrations support PrivateLink: - [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) +- [RDS Postgres Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) ### Prerequisites Before you can implement AWS PrivateLink for RDS Postgres, complete the following prerequisites: @@ -66,6 +69,8 @@ To implement Segment's PrivateLink integration for RDS Postgres: The following Redshift integrations support PrivateLink: - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) +- [Redshift Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) +- [Redshift Data Graph](/docs/unify/data-graph/) ### Prerequisites Before you can implement AWS PrivateLink for Redshift, complete the following prerequisites: @@ -86,6 +91,8 @@ To implement Segment's PrivateLink integration for Redshift: The following Snowflake integrations support PrivateLink: - [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) +- [Snowflake Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) +- [Snowflake Data Graph](/docs/unify/data-graph/) ### Prerequisites Before you can implement AWS PrivateLink for Snowflake, complete the following prerequisites: diff --git a/src/connections/destinations/catalog/actions-first-party-dv360/index.md b/src/connections/destinations/catalog/actions-first-party-dv360/index.md new file mode 100644 index 0000000000..446d7efd16 --- /dev/null +++ b/src/connections/destinations/catalog/actions-first-party-dv360/index.md @@ -0,0 +1,78 @@ +--- +title: First Party Display and Video 360 (Actions) Destination +strat: google +hide-settings: true +id: 6683e1d5e37fd84efcf3bbef +engage: true +--- + +Google’s [Display & Video (DV360)](https://marketingplatform.google.com/about/display-video-360/){:target="_blank"} is an end-to-end campaign management tool that enables enterprise customers to plan, measure, and run display and video advertisements. Segment’s integration with DV360 enables Segment customers to sync audiences created in Engage with DV360 for centralized audience management and improved retargeting. + +This destination is different from the existing DV360 Actions as it allows you to upload [contact info](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#ContactInfo){:target="_blank"} and the [mobile device ID](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#mobiledeviceidlist){:target="_blank"}. + +This destination can only be used with Engage. + +## Setup +Configuring this integration requires action by both you in your Segment workspace, and Google in your Google Marketing Platform account. As a result, the time required to finish configuration and setup can vary. + +### Enable the destination + +To enable the First Party DV 360 destionation: +1. Navigate to **Engage > Engage Settings > Destinations > Add Destination** in your Segment workspace. +2. Search for *First Party DV360* and click **Add destination**. +3. Navigate to **Connections > Destinations** and search for the **First Party DV 360** destination you created. +4. Select the **Mappings** tab and click **+ New Mapping**. +5. Select the action you'd like to use. You can choose from: + + Option | Details + ------ | -------- + Edit Customer Match Members - Contact Info List | Add or update customer match members in Contact Info List Audience. + Edit Customer Match Members - Mobile Device Id List | Add or update customer match members in Mobile Device Id List Audience. + Remove Customer Match Members - Contact Info List | Remove customer match members from the Contact Info List Audience. + Remove Customer Match Members - Mobile Device Id List | Remove customer match members from the Mobile Device Id List Audience. + + * Select either **Customer Info List** or **Mobile Device Id List** depending on what audience type you use. + * Select **Edit Customer Match Members** to add or update users to an audience. + * Select **Remove Customer Match Members** to remove users from an audience. + * If you want to create actions for both Customer Info List and Mobile Device Id List, you can create all 4 mappings. +6. Switch the toggle to enable the destination. + + +### Create an audience + +To create an audience in your destination: +1. Navigate to **Engage > Audiences** and click **+New audience**. +2. Fill out the audience seetings. + * If you want to use Mobile Device ID Lists, ensure to fill out your app ID. + * Make sure you enabled track calls. +3. Click **Save**. +4. You should see an audience populate in your DV360 account. If you don't immediately see this, it can take up to a couple of hours for your audience to populate. +5. Switch the toggle to **Connect to destination**. +6. Navigate to **Connections > Destinations** and select the First Party DV360 destination. +7. Select the **Mappings** tab. +8. Click **+ New Mapping** and select **Remove from Audience**. +9. Click **Save**. +10. Enable the mapping. + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. + +{% include components/actions-fields.html %} + +## Data requirements +Based on Google’s documentation, make sure you send the correct required identifiers: +* [Contact info list requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#contactinfo){:target="_blank"} + * For example, you must send first name, last name, ZIP code, and country code all together and not just one. Make sure all phone numbers are in [E.164 format](https://en.wikipedia.org/wiki/E.164){:target="_blank"}. +* [Mobile ID Requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#mobiledeviceidlist){:target="_blank"} + + +## FAQs + +#### When will my data appear in DV360? +When you complete the connection between Segment and DV360, it can take from 24 to 48 hours for Google to create the user list. This must complete before Segment can begin to sync users into that list. diff --git a/src/connections/destinations/catalog/actions-google-analytics-4/index.md b/src/connections/destinations/catalog/actions-google-analytics-4/index.md index 56fc932513..85b49d2e64 100644 --- a/src/connections/destinations/catalog/actions-google-analytics-4/index.md +++ b/src/connections/destinations/catalog/actions-google-analytics-4/index.md @@ -232,5 +232,9 @@ Because [Google's Measurement Protocol API](https://developers.google.com/analyt The Google Analytics 4 Cloud destination does not support Google Optimize. This destination operates in cloud-mode (sending events from Segment servers to Google Analytics using the Measurement Protocol API), which prevents the required [Optimize SDK](https://support.google.com/optimize/answer/11287798?visit_id=637903946258690719-978290187&rd=1){:target="_blank"} snippet from loading on the page. ### Client/server-side event deduplication + Google doesn't offer guidance around how to deduplicate the same event coming in server and client side. As a result, Segment recommends that you don't send the same event into Google Analytics 4 from two different locations such that you would expect Google to deduplicate one of the events out of their pipeline. You can [deduplicate user counts](https://support.google.com/analytics/answer/9355949?hl=en){:target="_blank"} using the `User ID` field, but you cannot deduplicate whole events in the Google platform as far as Segment is aware. +### User-provided data collection + +Google offers a beta feature called [User-provided data collection](https://support.google.com/analytics/answer/14077171?hl=en&utm_id=ad){:target="_blank"} that collects data directly from users. Segment doesn't support this feature. Acknowledging the feature policy in your Google Analytics 4 account is permanent, even though you can later disable the data collection itself. diff --git a/src/connections/destinations/catalog/adwords-remarketing-lists/index.md b/src/connections/destinations/catalog/adwords-remarketing-lists/index.md index fd36c6098e..1820448dc7 100644 --- a/src/connections/destinations/catalog/adwords-remarketing-lists/index.md +++ b/src/connections/destinations/catalog/adwords-remarketing-lists/index.md @@ -151,6 +151,9 @@ You can set an email on the user profile by including `email` as a trait, as a p If a user has more than one email address or IDFA on their account as `external_ids`, Engage sends the most recent id on the user profile to Adwords for matching. The match rate will be low if Google can't identify users based on the data that you provide. +> info "ID Sync" +> [Segment's ID Sync](/docs/engage/trait-activation/id-sync/), you can send additional identifiers to Actions destinations. However, due to Google’s restrictions on identifier limits per request, the Google Ads Remarketing Lists destination can only include one additional identifier in audience payloads. If the Google Ads Remarketing Lists destination is already receiving data from an audience and you enable ID Sync afterward, the new identifiers won’t be applied retroactively to existing users. To update identifiers for the entire user base, a full resync is required. [Contact Segment support](https://segment.com/requests/integrations/){:target="_blank"} to request a resync with your new ID Sync configuration. + ### Invalid Settings error in Event Delivery Make sure that this destination was created in [Engage](/docs/engage/) as it requires additional event data not available in standard destinations. diff --git a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md index 38f324d7e6..35ec10ed08 100644 --- a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md +++ b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md @@ -323,3 +323,13 @@ minutes. You can confirm that Facebook received them: > **Note**: It might take a few minutes before events appear in the Events Manager. ![Verify events in the Overview tab of the Events Manager](images/image2.png) + +## Troubleshooting + +### Why do I see a "Mismatched IP Address" warning in Facebook after enabling the Facebook Conversions API alongside Facebook Pixel? + +When you enable both Facebook Pixel and the Facebook Conversions API, you may see a "Mismatched IP Address" warning in Facebook reports. This happens because: +* Facebook Pixel collects the user’s IP address directly from the browser, [including IPv6 addresses when available](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#){:target="_blank"}, independently of Segment. Even though Segment’s Analytics.js defaults to collecting only IPv4 addresses, Facebook Pixel automatically collects IPv6 if available, and sends it to Facebook. +* Events sent to Facebook through the Conversions API may include an IPv4 address collected by Segment Analytics.js, which results in both IPv4 and IPv6 addresses being sent for the same event. + +Since these two addresses don’t match, Facebook flags it as a "Mismatched IP Address." To resolve this, you can manually collect and send the IPv6 address (when available) in the event payload to Segment, and map it to the Facebook Conversions API destination. This ensures consistency between the IP addresses received by Facebook. diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index 597f97b9d5..c43b130209 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -500,6 +500,10 @@ However, if your function aims to enrich event data by fetching additional infor No, Destination Insert Functions are currently available for use with Cloud Mode (server-side) destinations only. Segment is in the early phases of exploration and discovery for supporting customer web plugins for custom Device Mode destinations and other use cases, but this is unsupported today. +##### Can I use Insert Functions with Storage destinations? + +Insert Functions are only supported by Cloud Mode (server-side) destinations and aren't compatible with Storage destinations. + ##### Can I connect an insert function to multiple destinations? Yes, an insert function can be connected to multiple destinations. diff --git a/src/connections/spec/common.md b/src/connections/spec/common.md index d957ee49c5..5075b5a86e 100644 --- a/src/connections/spec/common.md +++ b/src/connections/spec/common.md @@ -203,8 +203,8 @@ Other libraries only collect `context.library`, any other context variables must | timezone | ✅ | ✅ | ✅ | - IP Address isn't collected by Segment's libraries, but is instead filled in by Segment's servers when it receives a message for **client side events only**. -> info "IPv6 Addresses are not Supported" -> Segment does not support collection of IP addresses that are in the IPv6 format. +> info "IPv6" +> Segment doesn't support automatically collecting IPv6 addresses. - The Android library collects `screen.density` with [this method](/docs/connections/spec/common/#context-fields-automatically-collected). diff --git a/src/connections/storage/catalog/azuresqldw/index.md b/src/connections/storage/catalog/azuresqldw/index.md index 3872c901ac..1abec59e72 100644 --- a/src/connections/storage/catalog/azuresqldw/index.md +++ b/src/connections/storage/catalog/azuresqldw/index.md @@ -4,14 +4,12 @@ rewrite: true redirect_from: - '/connections/warehouses/catalog/azuresqldw/' --- -{% include content/warehouse-ip.html %} - Azure's [Azure Synapse Analytics](https://azure.microsoft.com/en-us/services/synapse-analytics/){:target="_blank"}, previously known as Azure SQL Data Warehouse, is a limitless analytics service that brings together enterprise data warehousing and Big Data analytics. {% include content/storage-do-include.md %} -## Getting Started +## Getting started Complete the following prerequisites in Microsoft Azure before connecting your Azure Synapse Analytics databases to Segment: @@ -87,6 +85,14 @@ The default [resource allocation class](https://docs.microsoft.com/en-us/azure/s Users with a Business Tier plan can enable Selective Sync for their Azure Synapse Analytics destination. With Selective Sync, you can customize which collections and properties from a source are sent to each warehouse, which leads to faster, more relevant syncs. To learn more about Selective Sync, review the [Warehouse Syncs](/docs/connections/storage/warehouses/warehouse-syncs/#warehouse-selective-sync) documentation. +### Allowlisting IPs + +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. + ## Troubleshooting ### Segment is not able to connect to Azure Synapse Analytics diff --git a/src/connections/storage/catalog/bigquery/index.md b/src/connections/storage/catalog/bigquery/index.md index a17a1c1d40..899bb27aef 100644 --- a/src/connections/storage/catalog/bigquery/index.md +++ b/src/connections/storage/catalog/bigquery/index.md @@ -4,7 +4,6 @@ rewrite: true redirect_from: - '/connections/warehouses/catalog/bigquery/' --- -{% include content/warehouse-ip.html %} Segment's [BigQuery](https://cloud.google.com/bigquery/){:target="_blank"} connector makes it easy to load web, mobile, and third-party source data like Salesforce, Zendesk, and @@ -138,6 +137,13 @@ To remove access to the shared Service Account: For more information about managing IAM access, refer to Google's documentation, [Manage access to projects, folders, and organization](https://cloud.google.com/iam/docs/granting-changing-revoking-access){:target="_blank"}. +### Allowlisting IPs + +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. ## Best Practices diff --git a/src/connections/storage/catalog/databricks/index.md b/src/connections/storage/catalog/databricks/index.md index 95e845e87e..df3a0c64b4 100644 --- a/src/connections/storage/catalog/databricks/index.md +++ b/src/connections/storage/catalog/databricks/index.md @@ -3,7 +3,6 @@ title: Databricks Destination public: true --- -{% include content/warehouse-ip.html %} With the Databricks Destination, you can ingest event data directly from Segment into your Databricks Lakehouse. @@ -87,7 +86,14 @@ Segment uses the service principal to access your Databricks workspace and assoc 1. Follow the [Databricks guide for adding a service principal to your account](https://docs.databricks.com/en/administration-guide/users-groups/service-principals.html#manage-service-principals-in-your-account){:target="_blank"}. This name can be anything, but Segment recommends something that identifies the purpose (for example, "Segment Storage Destinations"). Note the principal application ID that Databricks generates to use in this step. Segment doesn't require Account admin or Marketplace admin roles. 2. Follow the [Databricks instructions to generate an OAuth secret](https://docs.databricks.com/en/dev-tools/authentication-oauth.html#step-2-create-an-oauth-secret-for-a-service-principal){:target="_blank"}. Note the secret generated by Databricks to use in this step. Once you navigate away from this page, the secret is no longer visible. If you lose or forget the secret, delete the existing secret and create a new one. - Once connected, you'll see a confirmation screen with next steps and more info on using your warehouse. -{% include content/storage-do-include.md %} \ No newline at end of file +{% include content/storage-do-include.md %} + +## Security + +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. diff --git a/src/connections/storage/catalog/db2/index.md b/src/connections/storage/catalog/db2/index.md index e22c3a5198..b4486ef7f6 100644 --- a/src/connections/storage/catalog/db2/index.md +++ b/src/connections/storage/catalog/db2/index.md @@ -4,7 +4,6 @@ rewrite: true redirect_from: - '/connections/warehouses/catalog/db2/' --- -{% include content/warehouse-ip.html %} Use [IBM Db2](https://www.ibm.com/analytics/us/en/db2/){:target="_blank"} with Segment to get all of your event and Cloud Source data in a warehouse built by IBM. This @@ -64,7 +63,11 @@ To set up an IBM Db2 destination in the Segment app: ### Allowlisting IPs -If your Db2 Warehouse is in a private network, be sure to [allowlist Segment's IP address](/docs/connections/storage/warehouses/faq/#which-ips-should-i-allowlist) when creating the Db2 user Segment assumes. Otherwise, Segment won't be able to load your data. +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. ### Unique User diff --git a/src/connections/storage/catalog/postgres/index.md b/src/connections/storage/catalog/postgres/index.md index d1844ae0d4..a63457d8cf 100644 --- a/src/connections/storage/catalog/postgres/index.md +++ b/src/connections/storage/catalog/postgres/index.md @@ -4,8 +4,6 @@ rewite: true redirect_from: - '/connections/warehouses/catalog/postgres/' --- -{% include content/warehouse-ip.html %} - PostgreSQL, or Postgres, is an object-relational database management system (ORDBMS) with an emphasis on extensibility and standards compliance. As a database server, its primary functions are to store data securely and return that data in response to requests from other software applications. @@ -104,6 +102,14 @@ To make sure your Postgres database is secure: - Create a service user that has `read/write` permissions. - Always require SSL/TLS and make sure your data warehouse can only accept secure connections. Segment only connects to your data warehouse using SSL/TLS. +### Allowlisting IPs + +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. + ## Best Practices Once you've got your data in Postgres, you can do even more with it. You might develop an app that performs various functions based on different events being loaded to the database, potentially using [RabbitMQ](https://www.compose.io/articles/going-from-postgresql-rows-to-rabbitmq-messages/){:target="_blank"} as your asynchronous message broker. For example, you might want a banner to appear once your 1000th customer has signed up. The data is at your fingertips; you just need to decide how to use it. diff --git a/src/connections/storage/catalog/redshift/index.md b/src/connections/storage/catalog/redshift/index.md index f0c81b1268..335ed090bc 100644 --- a/src/connections/storage/catalog/redshift/index.md +++ b/src/connections/storage/catalog/redshift/index.md @@ -4,7 +4,6 @@ rewrite: true redirect_from: - '/connections/warehouses/catalog/redshift/' --- -{% include content/warehouse-ip.html %} This guide explains the process to provision a Redshift cluster and allow the Segment warehouse connector to write to it. @@ -75,6 +74,14 @@ VPCs keep servers inaccessible to traffic from the internet. With VPC, you're ab ### SSL/TLS Always require SSL/TLS and make sure your data warehouse accepts only secure connections. Segment only connects to your data warehouse using SSL/TLS. +### Allowlisting IPs + +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` + +Users with workspaces in the EU must allowlist `3.251.148.96/29`. + ## Best practices ### Networking diff --git a/src/connections/storage/catalog/snowflake/index.md b/src/connections/storage/catalog/snowflake/index.md index f9b341fcc8..aa76e90e8b 100644 --- a/src/connections/storage/catalog/snowflake/index.md +++ b/src/connections/storage/catalog/snowflake/index.md @@ -5,8 +5,6 @@ redirect_from: - '/connections/warehouses/catalog/snowflake/' --- -{% include content/warehouse-ip.html %} - [Snowflake](https://docs.snowflake.net/manuals/index.html){:target="_blank"} is a data warehouse, built for the cloud, that delivers performance, simplicity, concurrency and affordability. > info "" diff --git a/src/connections/storage/warehouses/faq.md b/src/connections/storage/warehouses/faq.md index e7c7249d60..79861a35f0 100644 --- a/src/connections/storage/warehouses/faq.md +++ b/src/connections/storage/warehouses/faq.md @@ -114,12 +114,11 @@ Segment recommends scripting any sort of additions of data you might have to war ## Which IPs should I allowlist? -{% include content/warehouse-ip.html %} +Segment recommends enabling IP allowlists for added security. All Segment users with workspaces hosted in the US who use allowlists in their warehouses must update those allowlists to include the following ranges: +* `52.25.130.38/32` +* `34.223.203.0/28` -You must allowlist Segment's custom IPs `52.25.130.38/32` and `34.223.203.0/28` while authorizing Segment to write in to your warehouse port. Currently, Redshift and Postgres are the only connectors that require you to configure an IP upon setup. Segment recommends enabling IP allowlists for added security. - - -If you're in the EU region, use CIDR `3.251.148.96/29`. To learn more about EU workspace locations, contact your account manager. +Users with workspaces in the EU must allowlist `3.251.148.96/29`. ## Will Segment sync my historical data? diff --git a/src/engage/faqs.md b/src/engage/faqs.md index d8d2e8b842..5f0af3d244 100644 --- a/src/engage/faqs.md +++ b/src/engage/faqs.md @@ -151,3 +151,7 @@ Based on Engage behavior, standard source events such as Page, Track and Identif ## Why can't I connect the audience/computed trait to an existing destination in my workspace? Engage will not allow you to connect an audience/computed trait to a destination that is already linked to a [Connections-based source](/docs/connections/sources/). Instead, create a new instance of the destination with the correct Engage space selected as the data source. + +## How are the "5 most common values" for traits calculated? + +The "5 most common values" are the most frequently observed values for a given trait across all users, not tied to any individual user. diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md new file mode 100644 index 0000000000..59716f8d2c --- /dev/null +++ b/src/engage/journeys/event-triggered-journeys.md @@ -0,0 +1,113 @@ +--- +title: Event-Triggered Journeys +plan: engage-foundations +hidden: true +--- + +With Event-Triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. + +Unlike traditional audience-based journeys that rely on pre-defined user segments, event-triggered journeys start automatically when users perform specific actions on your website or app. + +On this page, you'll learn how to create an event-triggered journey, configure entry conditions, and work with published event-triggered journeys. + +> info "Private Beta" +> Event-Triggered Journeys is in private 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. + +Where [audience-based journeys](/docs/engage/journeys/build-journey/) activate based on aggregated conditions, event-triggered journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. + +Opt for an event-triggered journey in situations like these: + +- When campaigns require real-time action in response to user behavior. +- For transactional messages (like receipts and confirmations) that require specific event-based triggers. +- In abandonment campaigns where a follow-up is needed if a corresponding completion event doesn’t occur. + +## Build an event-triggered journey + +> info "Before you begin" +> Before you start building an event-triggered journey, make sure that you've enabled all [destinations](/docs/connections/destinations/) you plan to send data to and that the events you want to use as triggers are already available in your Segment workspace. + +To set up an event-triggered journey: + +1. In your Segment workspace, navigate to **Engage > Journeys**, then click **+ Create journey**. +2. On the **Create journey** page, select **User performs an event**, then click **Next**. +3. Give your new journey a name and, optionally, a description. +4. Select entry event: + - Choose the event that will trigger user entry into the journey. + - (*Optional*) Use an audience filter to restrict entry to users who are already part of a specific audience. + - (*Optional*) Apply filters based on event property values to refine entry conditions. For example, enter only if `{property} = value A, value B, or value C`. +5. Configure entry rules: + - **Re-enter every time event occurs** (*default*): Users enter the journey each time they trigger the specified event. + - **Enter one time**: Users enter the journey once only, regardless of repeated event triggers. +6. **If you chose Re-enter every time event occurs in Step 5**, select a [unique identifier](#unique-identifiers). +7. Configure event delivery to destinations by selecting a destination or setting up a custom destination function. +8. Preview the contextual payload that Segment will send to your destination(s). +9. After you've finished setting up your journey, click **Publish**, then click **Publish** again in the popup. + +### Journey setup configuration options + +Event-Triggered Journeys includes advanced options to help you tailor journey behavior and customize data delivery to downstream destinations. + +#### Unique identifiers + +Unique identifiers in event-triggered journeys help you manage multiple journey instances when a user triggers the same event more than once. + +When you select **Re-enter every time event occurs** when you create an event-triggered journey, you can choose an event property as a unique identifier. Selecting this option does two things: + +- It creates a separate journey instance for each unique identifier value, allowing multiple instances to run in parallel for the same user. +- It ensures that any follow-up events link back to the right journey instance, preserving context for tracking and personalization. + +For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. As a result, each journey instance only receives the completion event for its specific application. + +#### Send data to downstream destinations + +Event-Triggered Journeys lets you send journey data to supported destinations, facilitating real-time, personalized messaging. Event-Triggered Journeys supports the [Braze (Actions)](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io (Actions)](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable (Actions)](/docs/connections/destinations/catalog/actions-iterable/) destinations. + +For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with [Profile API traits](/docs/unify/profile-api/) or filtering the payload. + +## Best practices + +Follow the best practices in this table to optimize your event-triggered journeys: + +| Recommendation | Details | +| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Use specific event filters | When you configure entry events, apply precise filters based on event property values to refine which users enter the journey. This helps target specific user actions and improves the journey's relevance. | +| Use unique identifiers | If a journey allows users to enter multiple times, set a unique identifier to track each instance accurately. Using an identifier like `application_id` ensures that follow-up events stay associated with the right journey instance. | +| Preview payloads before publishing | Review the journey payload to verify that it includes all necessary context from the triggering event. This helps confirm that the data reaching destinations matches your campaign needs. | +| Test journey after publishing | Consider setting up a live test right after publishing to confirm that the journey behaves as expected and that data flows correctly to destinations. | + + +## Working with Event-Triggered Journeys + +Segment built Event-Triggered Journeys to respond instantly to events, offering real-time capabilities with a few considerations in mind. + +- **Entry event requirements**: The entry event you use must already exist in your Segment workspace for it to appear as a selection in journey setup. Make sure that you've already created the event before setting up your journey. +- **Event property filters**: You can filter event properties using the `equals` or `equals any of` operators. When you apply multiple conditions, filters operate with `AND` logic, meaning all conditions must be true for the event to trigger entry into the journey. +- **Audience filtering**: You can only use active, pre-existing audience records as filters. For more complex filtering, like specific profile traits or multiple audiences, first [create the audience](/docs/engage/audiences/#building-an-audience) in **Engage > Audiences**, then apply it as a filter once it’s live. +- **Destination options**: While Event-Triggered Journeys support several [actions-based destinations](/docs/connections/destinations/actions/) (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. +- **Event payload structure**: Each payload sent to a destination includes a unique key to identify the specific send step within the journey, rather than the journey instance itself. You can also set a custom event name to make it easier to identify the specific event instance you want to track in your destination. +- **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 + +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. + +### Real-time event forwarding + +Suppose you want to instantly send a personalized message whenever a user completes a specific action on your site, like filling out a form or subscribing to a service. With Event-Triggered Journeys, you can configure the journey to trigger each time this entry event occurs. Segment will forward the event data, including all relevant details, to your connected destination in real-time. + +### Real-time abandonment Campaigns + +Imagine you’re running an e-commerce site and want to follow up with users who start the checkout process but don’t complete it within a certain timeframe. You can create an event-triggered Journey to watch for abandonment cases like these. + +Start by setting the `checkout_started` event as the trigger and specify a unique identifier like `session_id` to track each user’s journey instance. Then, configure the journey to check for the `purchase_completed` event within a defined window (for example, 1 hour). If the user doesn’t complete the purchase, the journey can automatically send a nudge to encourage them to finish their order. + +### Personalized follow-up Messages + +Say you want to follow up with users after they engage with specific content, like downloading an e-book or watching a demo video. Event-Triggered Journeys can help you send timely, personalized messages based on these interactions. + +To do this, set the entry event to `content_downloaded` or `video_watched` and configure the journey to send a follow-up email. You could even personalize the email with details from the triggering event, like the content title or timestamp, by configuring your destination payload to enrich the message with event-specific context. diff --git a/src/engage/product-limits.md b/src/engage/product-limits.md index e7736f960b..ee999c65b6 100644 --- a/src/engage/product-limits.md +++ b/src/engage/product-limits.md @@ -30,7 +30,7 @@ To learn more about custom limits and upgrades, contact your dedicated Customer | Batch Compute Concurrency Limit | 10 (default) per space | The number of batch computations that can run concurrently per space. When this limit is reached, Segment delays subsequent computations until current computations finish. | | Compute Throughput | 10000 computations per second | Computations include any Track or Identify call that triggers an audience or computed trait re-computation. Once the limit is reached, Segment may slow audience processing. | | Events Lookback History | 3 years | The period of time for which Segment stores audience and computed traits computation events. | -| Real-time to batch destination sync frequency | 2-3 hours | The frequency with which Segment syncs real-time audiences to batch destinations. | +| Real-time to batch destination sync frequency | 12-15 hours | The frequency with which Segment syncs real-time audiences to batch destinations. | | Event History | `1970-01-01` | Events with a timestamp less than `1970-01-01` aren't always ingested, which could impact audience backfills with event timestamps prior to this date. | | Engage Data Ingest | 1x the data ingested into Connections | The amount of data transferred into the Compute Engine. | | Audience Frequency Update | 1 per 8 hours | Audiences that require time windows (batch audiences), [funnels](/docs/engage/audiences/#funnel-audiences), [dynamic properties](/docs/engage/audiences/#dynamic-property-references), or [account-level membership](/docs/engage/audiences/#account-level-audiences) are processed on chronological schedules. The default schedule is once every eight hours; however, this can be delayed if the "Batch Compute Concurrency Limit" is reached. Unless otherwise agreed upon, the audiences will compute at the limit set forth. | diff --git a/src/guides/usage-and-billing/billing.md b/src/guides/usage-and-billing/billing.md index ff6b17f008..d55799a400 100644 --- a/src/guides/usage-and-billing/billing.md +++ b/src/guides/usage-and-billing/billing.md @@ -34,7 +34,7 @@ All Segment customers with a US business address may be subject to state and loc Segment collects Value Added Tax (VAT) and Goods and Services Tax (GST) on the services sold to its international customers located in certain foreign jurisdictions. -For more information about sales tax, VAT, and GST, see the [Segment VAT/GST FAQs](/docs/assets/pdf/faq-segment-dissolution-vat.pdf). +For more information about sales tax, VAT, and GST, see the [Segment VAT/GST FAQs](/docs/assets/pdf/Segment_VAT_GST_FAQ.pdf). ## Do I qualify for a tax exemption? diff --git a/src/unify/Traits/computed-traits.md b/src/unify/Traits/computed-traits.md index db926bc73c..4ccfab1308 100644 --- a/src/unify/Traits/computed-traits.md +++ b/src/unify/Traits/computed-traits.md @@ -25,6 +25,8 @@ Segment currently supports the following types of computed traits: - [Last](#last) - [Unique List](#unique-list) - [Unique List Count](#unique-list-count) + - [Predictions](/docs/unify/traits/predictions/) + - [Recommended Items](/docs/unify/traits/recommended-items/) - [Conditions](#conditions) - [Connecting your Computed Trait to a Destination](#connecting-your-computed-trait-to-a-destination) - [Editing Realtime Traits](#editing-realtime-traits) diff --git a/src/unify/Traits/predictions/using-predictions.md b/src/unify/Traits/predictions/using-predictions.md index 004ae32e4d..1614e31c76 100644 --- a/src/unify/Traits/predictions/using-predictions.md +++ b/src/unify/Traits/predictions/using-predictions.md @@ -126,3 +126,7 @@ Yes. Keep the following in mind when you work with Predictions: - **Predictions will not work as intended if you track more than 5,000 unique events in your workspace.** - **Prediction is failing with error "We weren't able to create this prediction because your requested prediction event is not being tracked anymore. Please choose a different prediction event and try again."** Predictions are computed based on the available data and the conditions specified for the trait. A gap in tracking events for seven continuous days could potentially affect the computation of the prediction. Nevertheless, once data tracking resumes and there is enough data, the prediction should be recomputed. + +#### How is the average calculated? + +The probabilities for all users are added together and then divided by the total number of users. If a user's score in "Likelier to convert than average" is below 1, it means they are less likely than the average user to convert. diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md new file mode 100644 index 0000000000..6574b1dd98 --- /dev/null +++ b/src/unify/Traits/recommended-items.md @@ -0,0 +1,76 @@ +--- +title: Recommended Items +plan: unify-plus +--- + +With Recommended Items, you can add personalized item recommendations as a [computed trait](/docs/unify/traits/computed-traits/) to each user profile. + +Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. + +Segment designed Recommended Items for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. + +On this page, you’ll learn how Recommended Items works, how to create a Recommended Item trait, and best practices to get the most out of your recommendations. + +![The Select Computed Trait screen in the Segment UI, showing options like Predictions, Recommendation (selected), Event counter, Aggregation, and Most frequent. The Recommendation option description reads "Recommend personalized products" and includes additional details about Cross Sell, Personalization, and Next Best Action use cases.](../images/recommendation_items.png). + +## How Recommended Items works + +Recommended Items uses your interaction events (like `order_completed`, `product_added`, and `product_searched`) along with event metadata to generate personalized recommendations for each user. Here’s an overview of the process: + +1. **Data collection**: Segment captures user interactions from your chosen events. +2. **Pattern analysis**: Machine learning models analyze these interactions to recognize patterns and user preferences. +3. **Item ranking**: Based on this analysis, Segment generates an ordered list of recommended items for each user, ranked from most to least likely to engage. +4. **Profile storage**: Segment then saves these recommendations as an array on each eligible user profile. + +Once Segment attaches the recommendation array to a profile, you can use it to: + +- Personalize experiences with the [Profile API](/docs/unify/profile-api/) +- Send Recommended Items traits to downstream destinations +- Build further segments based on Recommended Items +- Trigger customized campaigns and experiences tailored to individual users + +## Create a Recommended Items trait + +> info "Before you begin" +> Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events and providing product metadata to support recommendations. If you haven't yet set up your Recommendation Catalog, follow the steps in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). + +To create a Recommended Item trait: + +1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. +2. In the **New Computed Trait** builder, click **Recommendation**, then click **Next**. +3. In **Select users**, click **+ Add condition** to choose the users who should receive recommendations. + - You can create recommendations for up to 2 million *non-anonymous* customers. +4. In **Define recommended items**, choose the item type you want to recommend. + - This is based on your product catalog. +5. Choose how many item types you want to return onto each profile. + - You can select up to 5 item types. +6. Click **Calculate** to get a preview of the number of users who will receive your recommendations, then click **Next**. +7. (*Optional*) Select destinations you want to sync the trait to, then click **Next**. +8. Give your trait a name, then click **Create Trait**. + +Segment begins creating your new trait. This process could take up to 48 hours. + +## Example use case: personalized album recommendations + +Suppose you’re managing a music streaming app and want to give each user personalized music recommendations based on their listening habits. + +Here's how you could configure this trait: + +| Step | Configuration | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Select users | Use an audience based on up to 2 million active, non-anonymous listeners who played at least one song in the past month. | +| Item type | Select **Albums** as the item type to recommend. Because you have an extensive catalog of music, this lets each listener receive recommendations tailored to their interests. | +| Number of item types | You decide to return a maximum of 5 albums for each profile, keeping the recommendations relevant and concise. | +| Calculate | Clicking **Calculate** gives you an overview of how many users will receive the album recommendations. Use it to ensure your conditions and catalog mapping meet your criteria. | +| Sync to destinations | This optional step lets you sync the trait to third-party destinations to deliver album recommendations over email, in-app messaging, or push notifications. | +| Trait naming | Name your trait `Personalized Album Recommendations`, making it easy to identify for future campaigns. | + +By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. + +## Best practices + +Keep the following in mind as you work with Recommended Items: + +- **Limit recommendations to key items**: Start with 5-7 items per profile. This keeps recommendations concise and tailored to each user's preferences. +- **Consider audience size**: Larger audiences can dilute engagement rates for each recommended item. Focusing on the top 20% of users keeps recommendations relevant and impactful. +- **Give the system time to build the trait**: Recommended Item traits can take up to 48 hours to build, depending on data volume and complexity. Segment recommends waiting until 48 hours have passed before using the trait in campaigns. \ No newline at end of file diff --git a/src/unify/data-graph/setup-guides/databricks-setup.md b/src/unify/data-graph/setup-guides/databricks-setup.md index 3445abfd35..2303bb3594 100644 --- a/src/unify/data-graph/setup-guides/databricks-setup.md +++ b/src/unify/data-graph/setup-guides/databricks-setup.md @@ -67,9 +67,7 @@ Run the following SQL to grant your Service Principal user read-only access to a GRANT USAGE, SELECT, USE SCHEMA ON CATALOG `${catalog}` TO `${client_id}`; ``` -## (Optional) Step 5: Restrict read-only access - -### Restrict read-only access to schemas +## (Optional) Step 5: Restrict read-only access to schemas Restrict access to specific schemas by running the following SQL: @@ -79,19 +77,6 @@ USE CATALOG `${catalog}`; GRANT USAGE, SELECT ON SCHEMA `${schema_1}` TO `${client_id}`; GRANT USAGE, SELECT ON SCHEMA `${schema_2}` TO `${client_id}`; ... -``` -### Restrict read-only access to tables -Restrict access to specific tables by running the following SQL: - -```sql -GRANT USAGE ON CATALOG `${catalog}` TO `${client_id}`; -USE CATALOG `${catalog}`; -GRANT USAGE ON SCHEMA `${schema_1}` TO `${client_id}`; -USE SCHEMA `${schema_1}`; -GRANT SELECT ON TABLE `${table_1}` TO `${client_id}`; -GRANT SELECT ON TABLE `${table_2}` TO `${client_id}`; -... - ``` ## Step 6: Validate the permissions of your Service Principal user diff --git a/src/unify/images/recommendation_items.png b/src/unify/images/recommendation_items.png new file mode 100644 index 0000000000..5936f7dec2 Binary files /dev/null and b/src/unify/images/recommendation_items.png differ diff --git a/src/unify/product-limits.md b/src/unify/product-limits.md index 542cd7f9ea..cb62fe1e40 100644 --- a/src/unify/product-limits.md +++ b/src/unify/product-limits.md @@ -7,7 +7,7 @@ redirect_from: --- > info "" -> Beginning August 18, 2023, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits in the [Engage Default Limits](/docs/engage/product-limits/) documentation. +> Beginning November 1, 2024, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits in the [Engage Default Limits](/docs/engage/product-limits/) documentation. To provide consistent performance and reliability at scale, Segment enforces default use and rate limits within Unify. Most customers do not exceed these limits. @@ -16,9 +16,15 @@ To learn more about custom limits and upgrades, contact your dedicated Customer ## Unify Plus limits -Beginning August 18, 2023, new Unify Plus users will receive 50 Computed and five AI Traits. In addition, new users will receive the following depending on your Engage plan: -- **Engage Foundations**: 100 Audiences and 75 Journey Steps -- **Engage Premier**: 125 Audiences and 100 Journey Steps +Unify Plus customers receive the following based on their signup date: + +- **New Unify version (as of November 1, 2024)**: 50 Computed Traits, 10 Predictions, 3 Recommendation Traits +- **Existing Unify version (prior to November 1, 2024)**: 50 Computed Traits, 5 Predictions + +Unify Plus limits vary based on your Engage plan: + +- **Engage Plus**: 100 Audiences, 75 Journey Steps, 10 Recommendation Audiences +- **Engage Foundations** (available for renewal only as of November 1, 2024): 100 Audiences, 75 Journey Steps Visit Segment's [pricing page](https://segment.com/pricing/){:target="_blank"} to learn more. diff --git a/src/unify/profile-api.md b/src/unify/profile-api.md index 76a89ac362..48cb61cc79 100644 --- a/src/unify/profile-api.md +++ b/src/unify/profile-api.md @@ -243,7 +243,7 @@ All top-level API resources have support for bulk fetches using "list" API metho Each API request has an associated request identifier. You can find this value in the response headers, under `Request-Id`. ```bash -curl -i https://profiles.segment.com/v1/spaces//collections/users/profiles +curl -i https://profiles.segment.com/v1/spaces//collections/users/profiles//metadata HTTP/1.1 200 OK Date: Mon, 01 Jul 2013 17:27:06 GMT Status: 200 OK